diff --git a/.gitignore b/.gitignore
index cbe9764952d4896dd7bcad15d0e48fb06f6d1b21..4744ec764cdff4da4eac99b34708c2f1bd9ec28e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -75,12 +75,7 @@ Thumbs.db
 
 **/dist/
 
-!src/plugin/*.qm
+!src/class/plugin/*.qm
 
 # SINCPM
-sincpm-lock.json
-
-# qdoc
-qdoc/html/
-*.qch
-doc.tags
\ No newline at end of file
+sincpm-lock.json
\ No newline at end of file
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index df68470733a22a7f5760b7212ed151998bfc4ded..71473d8faeb3f87fef6132a88d78edaaf5cdffed 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -20,7 +20,7 @@ windows_develop:
     QT_BIN: C:/DevTools/Qt5.6.3/5.6.3/msvc2015/bin
     QTCREATOR_BIN: C:/DevTools/Qt5.6.3/Tools/QtCreator/bin
   script:
-    - python ci/build.py -p %CI_PROJECT_DIR%/src/toptemplateclass.pro -b %CI_PROJECT_DIR%/build/%CI_COMMIT_REF_NAME%/%CI_JOB_NAME% -m release
+    - python ci/build.py -p %CI_PROJECT_DIR%/src/class/%CI_PROJECT_NAME%.pro -b %CI_PROJECT_DIR%/build/%CI_COMMIT_REF_NAME%/%CI_JOB_NAME% -m release
 
 linux_develop:
   stage: build
@@ -31,11 +31,8 @@ linux_develop:
   variables:
     QT_BIN: /opt/Qt5.6.3/5.6.3/gcc_64/bin
   script:
-    - python ci/build.py -p $CI_PROJECT_DIR/src/toptemplateclass.pro -b $CI_PROJECT_DIR/build/$CI_COMMIT_REF_NAME/$CI_JOB_NAME -m release
-    - python ci/build.py -p $CI_PROJECT_DIR/qdoc/$CI_PROJECT_NAME-qdoc.pro -b $CI_PROJECT_DIR/build/$CI_COMMIT_REF_NAME/$CI_JOB_NAME -m release
-    - export SSHPASS=$TOPIKM6_DOC_SERVER_SSHPASS
-    - sshpass -e scp -o stricthostkeychecking=no -prq qdoc/html/. $TOPIKM6_DOC_SERVER:/data/docker_data/topikm6doc/html/$CI_PROJECT_NAME/
-    - cp -TR qdoc/html/. $TOPIKM6_DOCS/$CI_PROJECT_NAME/
+    - python ci/build.py -p $CI_PROJECT_DIR/src/class/$CI_PROJECT_NAME.pro -b $CI_PROJECT_DIR/build/$CI_COMMIT_REF_NAME/$CI_JOB_NAME -m release
+
 windows_master:
   stage: build
   only:
@@ -46,10 +43,12 @@ windows_master:
     QT_BIN: C:/DevTools/Qt5.6.3/5.6.3/msvc2015/bin
     QTCREATOR_BIN: C:/DevTools/Qt5.6.3/Tools/QtCreator/bin
   script:
-    - python ci/build.py -p %CI_PROJECT_DIR%/src/toptemplateclass.pro -b %CI_PROJECT_DIR%/build/%CI_COMMIT_REF_NAME%/%CI_JOB_NAME% -m release
-    - python ci/build.py -p %CI_PROJECT_DIR%/src/toptemplateclass.pro -b %CI_PROJECT_DIR%/build/%CI_COMMIT_REF_NAME%/%CI_JOB_NAME% -m debug
-    - python ci/publish.py -p topikm6-templateclass
-    - python ci/publish.py -p topikm6-templateclass-debug
+    - python ci/build.py -p %CI_PROJECT_DIR%/src/class/%CI_PROJECT_NAME%.pro -b %CI_PROJECT_DIR%/build/%CI_COMMIT_REF_NAME%/%CI_JOB_NAME% -m release
+    - python ci/build.py -p %CI_PROJECT_DIR%/src/class/%CI_PROJECT_NAME%.pro -b %CI_PROJECT_DIR%/build/%CI_COMMIT_REF_NAME%/%CI_JOB_NAME% -m debug
+    - python ci/publish.py -p topikm6-topsys
+    - python ci/publish.py -p topikm6-topsys-debug
+    - python ci/publish_module.py
+    - python ci/update_yuque_releasenotes.py
 
 linux_master:
   stage: build
@@ -60,5 +59,5 @@ linux_master:
   variables:
     QT_BIN: /opt/Qt5.6.3/5.6.3/gcc_64/bin
   script:
-    - python ci/build.py -p $CI_PROJECT_DIR/src/toptemplateclass.pro -b $CI_PROJECT_DIR/build/$CI_COMMIT_REF_NAME/$CI_JOB_NAME -m release
-    - python ci/publish.py -p topikm6-templateclass
\ No newline at end of file
+    - python ci/build.py -p $CI_PROJECT_DIR/src/class/$CI_PROJECT_NAME.pro -b $CI_PROJECT_DIR/build/$CI_COMMIT_REF_NAME/$CI_JOB_NAME -m release
+    - python ci/publish.py -p topikm6-topsys
diff --git a/ci/mail.json b/ci/mail.json
new file mode 100644
index 0000000000000000000000000000000000000000..28b1165abff84c62e6ac160dacc07f43ad75e74f
--- /dev/null
+++ b/ci/mail.json
@@ -0,0 +1,3 @@
+{
+  "hook": "http://139.196.104.13:9181/api/_/ci/getMailConfig"
+}
\ No newline at end of file
diff --git a/ci/publish.py b/ci/publish.py
index 5a6ece5bf84512d73015bde56f7ed977c70cf1b4..f37337ede9c952a0c505784f272609301619ce91 100644
--- a/ci/publish.py
+++ b/ci/publish.py
@@ -59,8 +59,8 @@ def sincpm_publish(pkg_name):
   os.chdir(local_dir)
   pinfo = subprocess.run([sincpm_bin('sincpm'), 'upload', pkg_dir],
     stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
-  if pinfo.returncode != 0:
-    raise qtciutil.QtCiUtilError("sincpm upload failed.")
+  # if pinfo.returncode != 0:
+  #   raise qtciutil.QtCiUtilError("sincpm upload failed.")
   m = re.search(r'error: ', pinfo.stdout.decode('utf-8'), re.IGNORECASE)
   if m:
     raise qtciutil.QtCiUtilError("The upload result contains an error message.")
diff --git a/ci/publish_module.py b/ci/publish_module.py
new file mode 100644
index 0000000000000000000000000000000000000000..0c18df380ca20c2c959ec5aeaa70f45e19e7d480
--- /dev/null
+++ b/ci/publish_module.py
@@ -0,0 +1,215 @@
+'''
+@File: publish_module.py
+@Description: Moudle Publish Script
+@Author: leon.li(l2m2lq@gmail.com)
+@Date: 2020-02-11 15:08:46
+'''
+
+import platform
+import os
+import time
+import argparse
+import sys
+import subprocess
+import glob
+import re
+import shutil
+import json
+import requests
+import urllib
+import qtciutil
+from dingdinghelper import DingDingHelper
+
+dingding_cfg = {
+  "username": "13709088421",
+  "password": "Leon19860407",
+  "msgurl": "https://oapi.dingtalk.com/robot/send?access_token=e02a2c7de529ca83ba5d4e6f6c37b31f53152b3dc54d30653ed2235723027651",
+  "corpid": "ding428c9b6bb8962a4d35c2f4657eb6378f",
+  "corpsecret": "L8v6TYuSnjq8VsErPiCoJdWU19T5Embn1P8KW7IyO3_FkJw_ZLPqdKt6blQwwd34",
+  "spaceid": 483476421
+}
+
+def _parser_readme(readme_filepath):
+  if not os.path.isfile(readme_filepath):
+    raise qtciutil.QtCiUtilError("No %s found." % readme_filepath)
+  with open(readme_filepath, 'r', encoding='utf-8') as f:
+    content = f.read()
+  m = re.search(r'^#(.*)\n', content)
+  if not m:
+    raise qtciutil.QtCiUtilError('The README file is not in the right format.')
+  return m[1]
+
+def _parser_changelog(changelog_filepath):
+  if not os.path.isfile(changelog_filepath):
+    raise qtciutil.QtCiUtilError("No %s found." % changelog_filepath)
+  with open(changelog_filepath, 'r', encoding='utf-8') as f:
+    content = f.read()
+  m = re.search(r'^##\s*(\d+\.\d+.\d+)\s.*\n((.+\n)+)', content)
+  if not m:
+    raise qtciutil.QtCiUtilError('The CHANGELOG file is not in the right format.')
+  return (m[1], m[2])
+
+def _parser_module_config(module_json_filepath):
+  if not os.path.isfile(module_json_filepath):
+    raise qtciutil.QtCiUtilError("No %s found." % module_json_filepath)
+  with open(module_json_filepath, 'r', encoding='utf-8') as f:
+    content = f.read()
+  moduleconf_json = json.loads(content)
+  url_map = moduleconf_json.get('http_url', {})
+  tmp_name = moduleconf_json.get('module_name', '')
+  hook = moduleconf_json.get('hook', '')
+  database_names = []
+  for key in url_map:
+    urls = key.split('/')
+    urls.reverse()
+    database_names.append(urls[1])
+  if (hook != ''):
+    param = urllib.parse.urlencode({'module_name': tmp_name}, quote_via=urllib.parse.quote)
+    r = requests.get(hook, params=param)
+    if (r.status_code != 200):
+      exit(1)
+    database_names = []
+    hook_ret = r.json()
+    hook_data = hook_ret.get('data', {})
+    for key in hook_data:
+      urls = key.split('/')
+      urls.reverse()
+      database_names.append(urls[1])
+  return ', '.join(database_names)
+
+def package():
+  """
+  TopMES-6.1.1-rc.2-upgrade-202002052311.zip
+  |--TopMES-6.1.1-rc.2-upgrade-202002052311.pkg
+  |--CHANGELOG.md
+  |--README.md
+  """
+  dist_dir = os.path.join(ci_script_dir, '../dist/')
+  os.environ["PATH"] = os.environ['QT_BIN'] + os.pathsep + os.environ["PATH"]
+  package_name = '{name}-{version}-upgrade-{dt}'.format(
+    name=module_name, 
+    version=version, 
+    dt = time.strftime("%Y%m%d%H%M")
+  )
+
+  archive_dir = os.path.join(ci_script_dir, '../archive/')
+  packaging_dist = os.path.join(ci_script_dir, '../archive/%s/' % package_name)
+  if os.path.isdir(archive_dir):
+    shutil.rmtree(archive_dir, ignore_errors=True)
+  os.makedirs(packaging_dist)
+
+  package_program_filepath = ''
+  package_config_filepath = os.path.join(ci_script_dir, 'upgrade-package-{}.json'.format(platform.system().lower()))
+  # modify release_note
+  module_json_filepath = os.path.join(ci_script_dir, '../module.json')
+  with open(module_json_filepath, 'r', encoding= 'utf-8') as f:
+    moduleconf_content = f.read()
+    moduleconf_json = json.loads(moduleconf_content)
+    moduleconf_json['version'] = version
+    moduleconf_json['change_log'] = changelog
+    moduleconf_json['is_module'] = 1
+    moduleconf_json['remark'] = 'Update package is automatically published by CI.'
+  with open(package_config_filepath, 'r', encoding= 'utf-8') as f:
+    package_config_content = f.read()
+    content_json = json.loads(package_config_content)
+    content_str = json.dumps(moduleconf_json, ensure_ascii=False)
+    content_json['release_note'] = content_str
+  with open(package_config_filepath, 'w', encoding='utf-8') as f:
+    json.dump(content_json, f, ensure_ascii=False, indent=4)
+  package_output_filepath = "%s/%s.pkg" % (packaging_dist, package_name)
+  if platform.system() == 'Windows':
+    package_program_filepath = dist_dir + "/topikm/qt5.6.3-win32-msvc2015/bin/TopUpgradePackager.exe"
+  elif platform.system() == 'Linux':
+    package_program_filepath = dist_dir + "/topikm/qt5.6.3-linuxx86_64/bin/TopUpgradePackager"
+  
+  package_args = [
+    package_program_filepath, 
+    '-c', package_config_filepath, 
+    '-d', package_output_filepath,
+    '-H', 'yes'
+  ]
+  pinfo = subprocess.run(package_args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+  if pinfo.returncode != 0:
+    raise qtciutil.QtCiUtilError("package failed. %s" % pinfo.stdout.decode('utf-8'))
+
+  # Copy README.md and CHANGELOG.md
+  shutil.copy(os.path.join(ci_script_dir, '../README.md'), packaging_dist)
+  shutil.copy(os.path.join(ci_script_dir, '../CHANGELOG.md'), packaging_dist)
+
+  # upload to database
+  upload_program_filepath = ''
+  if platform.system() == 'Windows':
+    upload_program_filepath = dist_dir + "/topikm/qt5.6.3-win32-msvc2015/bin/PackageUploaderPlus.exe"
+  elif platform.system() == 'Linux':
+    upload_program_filepath = dist_dir + "/topikm/qt5.6.3-linuxx86_64/bin/PackageUploaderPlus"
+  upload_args = [
+    upload_program_filepath,
+    '-u', package_output_filepath,
+    module_json_filepath
+  ]
+  pinfo = subprocess.run(upload_args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+  if pinfo.returncode != 0:
+    raise qtciutil.QtCiUtilError("upload failed. %s" % pinfo.stdout.decode('utf-8'))
+
+  os.chdir(os.path.join(ci_script_dir, '../archive/'))
+  if platform.system() == 'Linux':
+    shutil.make_archive(package_name, 'gztar', base_dir=package_name)
+    archive_filepath = os.path.join(os.getcwd(), package_name + ".tar.gz")
+  elif platform.system() == 'Windows':
+    shutil.make_archive(package_name, 'zip', base_dir=package_name)
+    archive_filepath = os.path.join(os.getcwd(), package_name + ".zip")
+  else:
+    raise qtciutil.QtCiUtilError('This platform is currently not supported.')
+
+  return archive_filepath
+
+def sendToDingding(archive_filepath):
+  ding = DingDingHelper()
+  ding.username = dingding_cfg["username"]
+  ding.password = dingding_cfg["password"]
+  ding.msgurl = dingding_cfg["msgurl"]
+  ding.corpid = dingding_cfg["corpid"]
+  ding.corpsecret = dingding_cfg["corpsecret"]
+
+  r = requests.get("http://139.196.104.13:9181/api/_/dingding/getCookie")
+  if r.status_code != 200:
+    exit(1)
+  r_data = json.loads(r.content)
+  ding.cookie = r_data["data"].rstrip()
+
+  spacepath = '/module-upgrade-package/{module_name}/{os}/'.format(
+    module_name = module_name,
+    os = platform.system().lower()
+  )
+  ding.upload_file(archive_filepath, dingding_cfg["spaceid"], spacepath)
+  msg = []
+  msg.append("{module_name} {version} {os} 发布".format(
+    module_name =module_name,
+    version = version,
+    os = platform.system()
+  ))
+  msg.append(changelog)
+  msg.append("模组升级包已上传至钉盘目录{dir}下。".format(dir=spacepath))
+  msg.append("已执行更新包上传工具进行上传({dbname}),请检查相关数据库sys_conf表中的模组版本,若失败请手动升级。".format(dbname=database_name))
+  print('\n'.join(msg))
+  ding.send_msg('\n'.join(msg))
+
+if __name__ == "__main__":
+  global ci_script_dir
+  global module_name
+  global version
+  global changelog
+  global database_name
+  ci_script_dir = os.path.dirname(os.path.realpath(__file__))
+  module_name = _parser_readme(os.path.join(ci_script_dir, '../README.md')).strip()
+  print("module_name: %s" % module_name)
+  changelog_info = _parser_changelog(os.path.join(ci_script_dir, '../CHANGELOG.md'))
+  version = changelog_info[0]
+  print("version: %s" % version)
+  changelog = changelog_info[1]
+  print("changelog: %s" % changelog)
+  database_name = _parser_module_config(os.path.join(ci_script_dir, '../module.json'))
+  archive_filepath = package()
+  print("archive_filepath: %s" % archive_filepath)
+  sendToDingding(archive_filepath)
+  
\ No newline at end of file
diff --git a/ci/update_yuque_releasenotes.py b/ci/update_yuque_releasenotes.py
new file mode 100644
index 0000000000000000000000000000000000000000..320fb6359069409c7b4c100698e068ad29b200af
--- /dev/null
+++ b/ci/update_yuque_releasenotes.py
@@ -0,0 +1,107 @@
+'''
+@File: update_yuque_releasenotes.py
+@Description: Auto update releasenotes document on Yuque
+@Author: leon.li(l2m2lq@gmail.com)
+@Date: 2020-04-03 09:08:03
+'''
+
+import requests, os, json, re
+import smtplib
+from email.mime.text import MIMEText
+from email.mime.base import MIMEBase
+from email.mime.multipart import MIMEMultipart
+from email.header import Header
+from email import encoders
+
+def beautify(changelog):
+  """
+  beautify for Yuque markdown content
+  """
+  v1 = re.sub(r'BUG#(\d+)', r'BUG[#\1](http://zentao.topibd.net/zentao/bug-view-\1.html)', changelog, flags=re.IGNORECASE)
+  v2 = re.sub(r'需求#(\d+)', r'需求[#\1](http://zentao.topibd.net/zentao/story-view-\1.html)', v1)
+  return v2
+
+def beautify2(changelog):
+  """
+  beautify for mail content
+  """
+  v0 = '<br />'.join(changelog.split('\n'))
+  v1 = re.sub(r'BUG#(\d+)', r'BUG<a href=http://zentao.topibd.net/zentao/bug-view-\1.html>#\1</a>', v0, flags=re.IGNORECASE)
+  v2 = re.sub(r'需求#(\d+)', r'需求<a href=http://zentao.topibd.net/zentao/story-view-\1.html>#\1</a>', v1)
+  return v2
+
+def update_yuque(repo_id, doc_id, *, body):
+  headers = {
+    'X-Auth-Token': yuque_info['token'],
+    'Content-Type': 'application/x-www-form-urlencoded'
+  }
+  base_url = yuque_info['api_base_url']
+  url = f'{base_url}/repos/{repo_id}/docs/{doc_id}'
+  print(url)
+  data = {
+    'format': 'markdown',
+    'body': body
+  }
+  response = requests.request(method='PUT', url=url, headers=headers, data=data, timeout=yuque_info['timeout'])
+  if response.status_code != 200:
+    print(f'Update yuque doc failed. status_code = {response.status_code}, response = {response.text}')
+
+def _parser_changelog(changelog_filepath):
+  with open(changelog_filepath, 'r', encoding='utf-8') as f:
+    content = f.read()
+  m = re.search(r'^##\s*(\d+\.\d+.\d+)\s.*\n((.+\n)+)', content)
+  return (m[1], m[2])
+
+def send_mail(to, cc):
+  smtp = smtplib.SMTP(mail_info['host'], mail_info['port'])
+  smtp.connect(mail_info['host'], mail_info['port'])
+  smtp.login(mail_info['user'], mail_info['password'])
+  message = MIMEMultipart()
+  message['Subject'] = Header(f'{module_info["module_name_zhcn"]}模组 {changelog_info[0]} 发布', 'utf-8')
+  message['From'] = mail_info['user']
+  message['To'] = ','.join(to)
+  if cc:
+    message['Cc'] = ','.join(cc)
+  contents = []
+  contents.append('Dear All, ')
+  contents.append('')
+  contents.append(f'<b>{module_info["module_name_zhcn"]} {changelog_info[0]} 发布</b>')
+  contents.append(f'{beautify2(changelog_info[1])}')
+  contents.append(f'历史版本信息请移步<a href={yuque_info["releasenotes_url"]}>语雀</a>查看')
+  contents.append('')
+  message.attach(MIMEText('<br />'.join(contents), 'html', 'utf-8'))
+  smtp.sendmail(
+    mail_info['user'], 
+    to + cc,
+    message.as_string()
+  )
+  smtp.quit()
+
+def run():
+  global module_info
+  global yuque_info
+  global mail_info
+  global changelog_info
+  with open(os.path.join(ci_script_dir, '../module.json'), 'r', encoding='utf-8') as f:
+    module_info = json.load(f)
+  with open(os.path.join(ci_script_dir, 'yuque.json'), 'r', encoding='utf-8') as f:
+    yuque_info = json.load(f)
+  with open(os.path.join(ci_script_dir, 'mail.json'), 'r', encoding='utf-8') as f:
+    mail_config_info = json.load(f)
+    r = requests.get(mail_config_info["hook"])
+    if r.status_code != 200:
+      print(f'get mail list failed. status_code: {r.status_code}')
+      return 
+    r_data = json.loads(r.content)
+    mail_info = r_data["data"]
+  changelog_filepath = os.path.join(ci_script_dir, '../CHANGELOG.md')
+  changelog_info = _parser_changelog(changelog_filepath)
+  with open(changelog_filepath, 'r', encoding='utf-8') as f:
+    content = f.read()
+    update_yuque(yuque_info['repo_id'], yuque_info['doc_id'], body=beautify(content))
+  send_mail(mail_info["to"], mail_info["cc"])
+
+if __name__ == "__main__":
+  global ci_script_dir
+  ci_script_dir = os.path.dirname(os.path.realpath(__file__))
+  run()
\ No newline at end of file
diff --git a/ci/upgrade-package-windows.json b/ci/upgrade-package-windows.json
new file mode 100644
index 0000000000000000000000000000000000000000..733936a649823198649fe0ef602803d361f49669
--- /dev/null
+++ b/ci/upgrade-package-windows.json
@@ -0,0 +1,59 @@
+{
+  "dev": {
+    "module": {
+      "delete": [],
+      "normal": [
+        {
+          "path": "${pwd}/../src/module/TOPSYS",
+          "search_keys": [ "*" ]
+        }
+      ]
+    },
+    "enum": {
+      "delete": [],
+      "normal": [
+        {
+          "path": "${pwd}/../src/module/TOPSYS/__sys_enum__/",
+          "search_keys": [ "*.conf" ],
+          "recursively": true
+        }
+      ]
+    },
+    "permission": {
+      "delete": [],
+      "normal": [
+        {
+          "path": "${pwd}/../src/module/TOPSYS/__sys_permission__/",
+          "search_keys": [ "*.conf" ],
+          "recursively": true
+        }
+      ]
+    }
+  },
+  "file": {
+    "normal": [
+      {
+        "path": "${pwd}/../dist/topikm/qt5.6.3-win32-msvc2015/language/",
+        "search_keys": [ 
+          "*topsys*.qm" 
+        ],
+        "recursively": true
+      },
+      {
+        "path": "${pwd}/../dist/topikm/qt5.6.3-win32-msvc2015/resource/",
+        "search_keys": [
+          "*topsys*.rcc"
+        ],
+        "recursively": true
+      },
+      {
+        "path": "${pwd}/../dist/topikm/qt5.6.3-win32-msvc2015/bin/plugins",
+        "search_keys": [
+          "*topsys*.dll"
+        ],
+        "recursively": false
+      }
+    ]
+  },
+  "release_note": "Update package is automatically published by CI."
+}
\ No newline at end of file
diff --git a/ci/yuque.json b/ci/yuque.json
new file mode 100644
index 0000000000000000000000000000000000000000..d9aeb74eefa34dd7bc0f919dac46f916e58ec699
--- /dev/null
+++ b/ci/yuque.json
@@ -0,0 +1,8 @@
+{
+  "token": "86LSHNZHSC4RBuy0G8HCapr3FL36RlHbsix2HG9C",
+  "api_base_url": "https://toplinker.yuque.com/api/v2",
+  "releasenotes_url": "https://toplinker.yuque.com/toplinker/vtgsv9/ug6hnr",
+  "repo_id": 902137,
+  "doc_id": 5827785,
+  "timeout": 10
+}
\ No newline at end of file
diff --git a/demo/examples/examples.pro b/demo/examples/examples.pro
deleted file mode 100644
index 9af321997e44586e021bafb381dfbb61874f22b9..0000000000000000000000000000000000000000
--- a/demo/examples/examples.pro
+++ /dev/null
@@ -1,5 +0,0 @@
-TEMPLATE = subdirs
-
-SUBDIRS += templatemain
-
-CONFIG += ordered
diff --git a/demo/examples/module/TEMPLATEDEMO/__sys_enum__/mes-attrname-datatype.conf b/demo/examples/module/TEMPLATEDEMO/__sys_enum__/mes-attrname-datatype.conf
deleted file mode 100644
index b294f9ca3d158000a5473ddbba43b45c87d4ea95..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/__sys_enum__/mes-attrname-datatype.conf
+++ /dev/null
@@ -1,56 +0,0 @@
-# 枚举类信息
-label: "TopMes/Attr Name Mgt/Data Type"
-label_en: "TopMes/Attr Name Mgt/Data Type"
-label_zhcn: "TopMes/属性名称列表/数据类型"
-label_zhtw: "TopMes/屬性名稱列表/數據類型"
-remark: ""
-
-# 枚举项信息
-
-items :[
-    {"name":"attachment","icon":"","text":"Attachment","text_zhcn":"附件","text_zhtw":"Attachment","remark":"","tags":[],"data":
-    {"fieldType":"VARCHAR","fieldLength":255,"widgetType":"Attachment"}},
-    
-    {"name":"string","icon":"","text":"String","text_zhcn":"字符串","text_zhtw":"String","remark":"","tags":[],"data":
-    {"fieldType":"VARCHAR","fieldLength":255,"widgetType":"LineEdit"}},
-
-    {"name":"integer","icon":"","text":"Integer","text_zhcn":"æ•´æ•°","text_zhtw":"Integer","remark":"","tags":[],"data":
-    {"fieldType":"INTEGER","fieldLength":255,"widgetType":"LineEdit"}},
-    {"name":"number","icon":"","text":"Number","text_zhcn":"æ•°å­—","text_zhtw":"Number","remark":"","tags":[],"data":
-    {"fieldType":"DOUBLE","fieldLength":255,"widgetType":"LineEdit"}},
-	
-	{"name":"enum","icon":"","text":"EnumList","text_zhcn":"选项列表(单选不可编辑)","text_zhtw":"EnumList","remark":"","tags":[],"data":
-    {"fieldType":"VARCHAR","fieldLength":255,"widgetType":"ComboBox"}},		
-    {"name":"multiple_enum","icon":"","text":"MultipleEnum","text_zhcn":"可多选列表","text_zhtw":"MultipleEnum","remark":"","tags":[],"data":
-    {"fieldType":"VARCHAR","fieldLength":255,"widgetType":"MultiComboBox"}},
-    {"name":"editable_enum","icon":"","text":"EditableEnum","text_zhcn":"选项列表(单选可编辑)","text_zhtw":"EditableEnum","remark":"","tags":[],"data":
-    {"fieldType":"VARCHAR","fieldLength":255,"widgetType":"EditableComboBox"}},
-
-    {"name":"radio_box","icon":"","text":"RadioBox","text_zhcn":"单选框","text_zhtw":"RadioBox","remark":"","tags":[],"data":
-    {"fieldType":"VARCHAR","fieldLength":255,"widgetType":"RadioBox"}},
-    {"name":"check_box","icon":"","text":"CheckBox","text_zhcn":"复选框","text_zhtw":"CheckBox","remark":"","tags":[],"data":
-    {"fieldType":"VARCHAR","fieldLength":255,"widgetType":"CheckBox"}},
-	{"name":"multiple_check","icon":"","text":"MultipleCheck","text_zhcn":"可多选复选框","text_zhtw":"MultipleCheck","remark":"","tags":[],"data":
-    {"fieldType":"VARCHAR","fieldLength":255,"widgetType":"MultiCheckBox"}},
-	
-	{"name":"plain_text","icon":"","text":"PlainText","text_zhcn":"文本(不可变字体及颜色)","text_zhtw":"PlainText","remark":"","tags":[],"data":
-    {"fieldType":"TEXT","fieldLength":255,"widgetType":"PlainTextEdit"}},
-    
-    {"name":"text","icon":"","text":"Text","text_zhcn":"富文本(字体及颜色可变)","text_zhtw":"Text","remark":"","tags":[],"data":
-    {"fieldType":"TEXT","fieldLength":255,"widgetType":"TextEdit"}},
-
-		
-	{"name":"date_time","icon":"","text":"DateTime","text_zhcn":"日期时间","text_zhtw":"DateTime","remark":"","tags":[],"data":
-    {"fieldType":"TIMESTAMP","fieldLength":255,"widgetType":"DateTimeEdit"}},
-    {"name":"date","icon":"","text":"Date","text_zhcn":"日期","text_zhtw":"Date","remark":"","tags":[],"data":
-    {"fieldType":"DATE","fieldLength":255,"widgetType":"DateEdit"}},
-    {"name":"time","icon":"","text":"Time","text_zhcn":"æ—¶é—´","text_zhtw":"Time","remark":"","tags":[],"data":
-    {"fieldType":"TIMESTAMP","fieldLength":255,"widgetType":"TimeEdit"}},
-	
-    {"name":"table_view","icon":"","text":"TableView","text_zhcn":"表格","text_zhtw":"TableView","remark":"","tags":[],"data":
-    {"fieldType":"Text","fieldLength":255,"widgetType":"TableView"}},
-	{"name":"code","icon":"","text":"CodeEdit","text_zhcn":"代码片段","text_zhtw":"CodeEdit","remark":"","tags":[],"data":
-    {"fieldType":"TEXT","fieldLength":255,"widgetType":"CodeEdit"}},
-    {"name":"tree_view","icon":"","text":"TreeView","text_zhcn":"æ ‘å½¢","text_zhtw":"TreeView","remark":"","tags":[],"data":
-    {"fieldType":"Text","fieldLength":255,"widgetType":"PcbPdmTreeView"}}
-]
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/__sys_enum__/pdm-attrname-attrcategory.conf b/demo/examples/module/TEMPLATEDEMO/__sys_enum__/pdm-attrname-attrcategory.conf
deleted file mode 100644
index 223d9943c5ae00d33d0fd947bd0dc53cd631f176..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/__sys_enum__/pdm-attrname-attrcategory.conf
+++ /dev/null
@@ -1,24 +0,0 @@
-# 枚举类信息
-label: "TopPDM/Attr Name Mgt/Attr Category"
-label_en: "TopPDM/Attr Name Mgt/Attr Category"
-label_zhcn: "东领产品数据管理/属性名称列表/属性分类"
-label_zhtw: "東領產品數據管理/屬性名稱列表/屬性分類"
-remark: ""
-
-# 枚举项信息
-
-items :[
-    {"name":"info","icon":"","text":"Info","text_zhcn":"Info","text_zhtw":"Info","remark":"","tags":[],"data":null},
-	{"name":"drill","icon":"","text":"Drill","text_zhcn":"钻孔","text_zhtw":"鑽孔","remark":"","tags":[],"data":null},
-	{"name":"inner","icon":"","text":"Inner","text_zhcn":"内层","text_zhtw":"內層","remark":"","tags":[],"data":null},
-    {"name":"outer","icon":"","text":"Outer","text_zhcn":"外层","text_zhtw":"外層","remark":"","tags":[],"data":null},
-    {"name":"relam","icon":"","text":"Relam","text_zhcn":"层压","text_zhtw":"層壓","remark":"","tags":[],"data":null},	
-	{"name":"soldermask","icon":"","text":"SM","text_zhcn":"防焊","text_zhtw":"防焊","remark":"","tags":[],"data":null},
-	{"name":"silkscreen","icon":"","text":"SS","text_zhcn":"字符","text_zhtw":"字符","remark":"","tags":[],"data":null},
-	{"name":"logo","icon":"","text":"Logo","text_zhcn":"Logo","text_zhtw":"Logo","remark":"","tags":[],"data":null},
-	{"name":"surface","icon":"","text":"Surface","text_zhcn":"表面处理","text_zhtw":"表面處理","remark":"","tags":[],"data":null},
-	{"name":"contour","icon":"","text":"Contour","text_zhcn":"外形","text_zhtw":"外形","remark":"","tags":[],"data":null},
-	{"name":"quote","icon":"","text":"Quote","text_zhcn":"报价","text_zhtw":"報價","remark":"","tags":[],"data":null},
-	{"name":"other","icon":"","text":"Other","text_zhcn":"å…¶ä»–","text_zhtw":"å…¶ä»–","remark":"","tags":[],"data":null},
-	{"name":"sys","icon":"","text":"Sys","text_zhcn":"系统","text_zhtw":"系統","remark":"","tags":[],"data":null}		
-]
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/__sys_enum__/pdm-attrname-attrtype.conf b/demo/examples/module/TEMPLATEDEMO/__sys_enum__/pdm-attrname-attrtype.conf
deleted file mode 100644
index b76613efb2565a10479df0d9d42b01db7f3ecc21..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/__sys_enum__/pdm-attrname-attrtype.conf
+++ /dev/null
@@ -1,13 +0,0 @@
-# 枚举类信息
-label: "TopPDM/Attr Name Mgt/Attr Type"
-label_en: "TopPDM/Attr Name Mgt/Attr Type"
-label_zhcn: "东领产品数据管理/属性名称列表/属性类型"
-label_zhtw: "東領產品數據管理/屬性名稱列表/屬性類型"
-remark: ""
-
-# 枚举项信息
-
-items :[
-    {"name":"job","icon":"","text":"Job","text_zhcn":"料号属性","text_zhtw":"料號屬性","remark":"","tags":[],"data":null},
-    {"name":"layer","icon":"","text":"Layer","text_zhcn":"层属性","text_zhtw":"層屬性","remark":"","tags":[],"data":null}
-]
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/__sys_enum__/pdm-attrname-datatype.conf b/demo/examples/module/TEMPLATEDEMO/__sys_enum__/pdm-attrname-datatype.conf
deleted file mode 100644
index 5d46d15c0d37ac8e36e22fc3dfa6dec24d38bfe6..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/__sys_enum__/pdm-attrname-datatype.conf
+++ /dev/null
@@ -1,58 +0,0 @@
-# 枚举类信息
-label: "TopPDM/Attr Name Mgt/Data Type"
-label_en: "TopPDM/Attr Name Mgt/Data Type"
-label_zhcn: "东领产品数据管理/属性名称列表/数据类型"
-label_zhtw: "東領產品數據管理/屬性名稱列表/數據類型"
-remark: ""
-
-# 枚举项信息
-
-items :[
-    {"name":"attachment","icon":"","text":"Attachment","text_zhcn":"附件","text_zhtw":"Attachment","remark":"","tags":[],"data":
-    {"fieldType":"VARCHAR","fieldLength":255,"widgetType":"Attachment"}},
-    
-    {"name":"string","icon":"","text":"String","text_zhcn":"字符串","text_zhtw":"String","remark":"","tags":[],"data":
-    {"fieldType":"VARCHAR","fieldLength":255,"widgetType":"LineEdit"}},
-
-    {"name":"integer","icon":"","text":"Integer","text_zhcn":"æ•´æ•°","text_zhtw":"Integer","remark":"","tags":[],"data":
-    {"fieldType":"INTEGER","fieldLength":255,"widgetType":"LineEdit"}},
-    {"name":"number","icon":"","text":"Number","text_zhcn":"æ•°å­—","text_zhtw":"Number","remark":"","tags":[],"data":
-    {"fieldType":"DOUBLE","fieldLength":255,"widgetType":"LineEdit"}},
-    {"name":"length_entry","icon":"","text":"LengthEntry","text_zhcn":"数字(单位转换)","text_zhtw":"數字(單位轉換)","remark":"","tags":[],"data":
-    {"fieldType":"DOUBLE","fieldLength":255,"widgetType":"LengthValueEntry"}},
-	
-	{"name":"enum","icon":"","text":"EnumList","text_zhcn":"选项列表(单选不可编辑)","text_zhtw":"EnumList","remark":"","tags":[],"data":
-    {"fieldType":"VARCHAR","fieldLength":255,"widgetType":"ComboBox"}},		
-    {"name":"multiple_enum","icon":"","text":"MultipleEnum","text_zhcn":"可多选列表","text_zhtw":"MultipleEnum","remark":"","tags":[],"data":
-    {"fieldType":"VARCHAR","fieldLength":255,"widgetType":"MultiComboBox"}},
-    {"name":"editable_enum","icon":"","text":"EditableEnum","text_zhcn":"选项列表(单选可编辑)","text_zhtw":"EditableEnum","remark":"","tags":[],"data":
-    {"fieldType":"VARCHAR","fieldLength":255,"widgetType":"EditableComboBox"}},
-
-    {"name":"radio_box","icon":"","text":"RadioBox","text_zhcn":"单选框","text_zhtw":"RadioBox","remark":"","tags":[],"data":
-    {"fieldType":"VARCHAR","fieldLength":255,"widgetType":"RadioBox"}},
-    {"name":"check_box","icon":"","text":"CheckBox","text_zhcn":"复选框","text_zhtw":"CheckBox","remark":"","tags":[],"data":
-    {"fieldType":"VARCHAR","fieldLength":255,"widgetType":"CheckBox"}},
-	{"name":"multiple_check","icon":"","text":"MultipleCheck","text_zhcn":"可多选复选框","text_zhtw":"MultipleCheck","remark":"","tags":[],"data":
-    {"fieldType":"VARCHAR","fieldLength":255,"widgetType":"MultiCheckBox"}},
-	
-	{"name":"plain_text","icon":"","text":"PlainText","text_zhcn":"文本(不可变字体及颜色)","text_zhtw":"PlainText","remark":"","tags":[],"data":
-    {"fieldType":"TEXT","fieldLength":255,"widgetType":"PlainTextEdit"}},
-    
-    {"name":"text","icon":"","text":"Text","text_zhcn":"富文本(字体及颜色可变)","text_zhtw":"Text","remark":"","tags":[],"data":
-    {"fieldType":"TEXT","fieldLength":255,"widgetType":"TextEdit"}},
-
-		
-	{"name":"date_time","icon":"","text":"DateTime","text_zhcn":"日期时间","text_zhtw":"DateTime","remark":"","tags":[],"data":
-    {"fieldType":"TIMESTAMP","fieldLength":255,"widgetType":"DateTimeEdit"}},
-    {"name":"date","icon":"","text":"Date","text_zhcn":"日期","text_zhtw":"Date","remark":"","tags":[],"data":
-    {"fieldType":"DATE","fieldLength":255,"widgetType":"DateEdit"}},
-    {"name":"time","icon":"","text":"Time","text_zhcn":"æ—¶é—´","text_zhtw":"Time","remark":"","tags":[],"data":
-    {"fieldType":"TIMESTAMP","fieldLength":255,"widgetType":"TimeEdit"}},
-	
-    {"name":"table_view","icon":"","text":"TableView","text_zhcn":"表格","text_zhtw":"TableView","remark":"","tags":[],"data":
-    {"fieldType":"Text","fieldLength":255,"widgetType":"TableView"}},
-	{"name":"code","icon":"","text":"CodeEdit","text_zhcn":"代码片段","text_zhtw":"CodeEdit","remark":"","tags":[],"data":
-    {"fieldType":"TEXT","fieldLength":255,"widgetType":"CodeEdit"}},
-    {"name":"tree_view","icon":"","text":"TreeView","text_zhcn":"æ ‘å½¢","text_zhtw":"TreeView","remark":"","tags":[],"data":
-    {"fieldType":"Text","fieldLength":255,"widgetType":"PcbPdmTreeView"}}
-]
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/__sys_enum__/pdm-attrname-department.conf b/demo/examples/module/TEMPLATEDEMO/__sys_enum__/pdm-attrname-department.conf
deleted file mode 100644
index a5c1d6eb241d7d5a27d22f138acd6257872bd806..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/__sys_enum__/pdm-attrname-department.conf
+++ /dev/null
@@ -1,14 +0,0 @@
-# 枚举类信息
-label: "TopPDM/Attr Name Mgt/Department"
-label_en: "TopPDM/Attr Name Mgt/Department"
-label_zhcn: "东领产品数据管理/属性名称列表/部门"
-label_zhtw: "東領產品數據管理/屬性名稱列表/部門"
-remark: ""
-
-# 枚举项信息
-
-items :[
-    {"name":"sales","icon":"","text":"Sales","text_zhcn":"销售","text_zhtw":"銷售","remark":"","tags":[],"data":null},
-	{"name":"mi","icon":"","text":"MI","text_zhcn":"预审","text_zhtw":"預審","remark":"","tags":[],"data":null},
-	{"name":"cam","icon":"","text":"CAM","text_zhcn":"CAM","text_zhtw":"CAM","remark":"","tags":[],"data":null}
-]
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/__sys_enum__/pdm-job-status.conf b/demo/examples/module/TEMPLATEDEMO/__sys_enum__/pdm-job-status.conf
deleted file mode 100644
index 911464076d33c081724ba95071ba5e55b00c62dc..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/__sys_enum__/pdm-job-status.conf
+++ /dev/null
@@ -1,15 +0,0 @@
-# 枚举类信息
-label: "TopPDM/Job Management/Job Status"
-label_en: "TopPDM/Job Management/Job Status"
-label_zhcn: "东领产品数据管理/料号管理/料号状态"
-label_zhtw: "東領產品數據管理/料號管理/料號狀態"
-remark: ""
-
-# 枚举项信息
-
-items :[
-    {"name":"active","icon":"play-circle-o.#27ad3a","text":"Active","text_zhcn":"激活","text_zhtw":"激活","remark":"","tags":[]},
-    {"name":"finish","icon":"check-circle-o.#3366ff","text":"Finish","text_zhcn":"结案","text_zhtw":"結案","remark":"","tags":[]},
-    {"name":"pause","icon":"pause-circle-o.#f49138","text":"Pause","text_zhcn":"暂停","text_zhtw":"暫停","remark":"","tags":[]},
-    {"name":"cancel","icon":"times-circle-o.#e82525","text":"Cancel","text_zhcn":"取消","text_zhtw":"取消","remark":"","tags":[]}
-]
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/__sys_enum__/pdm-job-type.conf b/demo/examples/module/TEMPLATEDEMO/__sys_enum__/pdm-job-type.conf
deleted file mode 100644
index 14c7e8675360cdfd9327cae6c09c291ac766e008..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/__sys_enum__/pdm-job-type.conf
+++ /dev/null
@@ -1,14 +0,0 @@
-# 枚举类信息
-label: "TopPDM/Job Management/Job Type"
-label_en: "TopPDM/Job Management/Job Type"
-label_zhcn: "东领产品数据管理/料号管理/料号类型"
-label_zhtw: "東領產品數據管理/料號管理/料號類型"
-remark: ""
-
-# 枚举项信息
-
-items :[
-    {"name":"normal","icon":"","text":"Normal","text_zhcn":"厂内料号","text_zhtw":"廠內料號","remark":"","tags":[]},
-    {"name":"combine","icon":"","text":"Combine","text_zhcn":"合拼料号","text_zhtw":"合拼料號","remark":"","tags":[]},
-    {"name":"sub_job","icon":"","text":"SubJob","text_zhcn":"子料号","text_zhtw":"子料號","remark":"","tags":[]}
-]
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/__sys_enum__/tpm-machine-maintenance-plan-category.conf b/demo/examples/module/TEMPLATEDEMO/__sys_enum__/tpm-machine-maintenance-plan-category.conf
deleted file mode 100644
index b7daf348ae91dfe039cfa39944fba8b9b1529caf..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/__sys_enum__/tpm-machine-maintenance-plan-category.conf
+++ /dev/null
@@ -1,14 +0,0 @@
-# 枚举类信息
-label: "MES/Mes TPM Maintenance Category/Plan Category"
-label_en: "MES/Mes TPM Maintenance PlCategoryan/Plan Category"
-label_zhcn: "MES/维护计划/计划分类"
-label_zhtw: "MES/维护计划/计划分类"
-remark: ""
-
-# 枚举项信息
-items :[
-    {"name":"overhaul","icon":"","text":"大修","text_zhcn":"大修","text_zhtw":"大修","remark":"","tags":[]},
-    {"name":"part_repairing","icon":"","text":"局部维修","text_zhcn":"局部维修","text_zhtw":"局部维修","remark":"","tags":[]},
-    {"name":"lubrication","icon":"","text":"润滑保养","text_zhcn":"润滑保养","text_zhtw":"润滑保养","remark":"","tags":[]},
-    {"name":"sealing","icon":"","text":"密封保养","text_zhcn":"密封保养","text_zhtw":"密封保养","remark":"","tags":[]}
-]
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/__sys_enum__/tpm-machine-maintenance-plan-class.conf b/demo/examples/module/TEMPLATEDEMO/__sys_enum__/tpm-machine-maintenance-plan-class.conf
deleted file mode 100644
index 3ef89bcb8c2a15508143e510a83cec6116070753..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/__sys_enum__/tpm-machine-maintenance-plan-class.conf
+++ /dev/null
@@ -1,13 +0,0 @@
-# 枚举类信息
-label: "MES/Mes TPM Maintenance Class/Maintenance Class"
-label_en: "MES/Mes TPM Maintenance Class/Maintenance Class"
-label_zhcn: "MES/维护计划/维护分类"
-label_zhtw: "MES/维护计划/维护分类"
-remark: ""
-
-# 枚举项信息
-items :[
-    {"name":"repair","icon":"","text":"ç»´ä¿®","text_zhcn":"ç»´ä¿®","text_zhtw":"ç»´ä¿®","remark":"","tags":[]},
-    {"name":"maintenance","icon":"","text":"保养","text_zhcn":"保养","text_zhtw":"保养","remark":"","tags":[]},
-    {"name":"spot_check","icon":"","text":"点检","text_zhcn":"点检","text_zhtw":"点检","remark":"","tags":[]}
-]
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/__sys_enum__/tpm-machine-maintenance-plan-cycle.conf b/demo/examples/module/TEMPLATEDEMO/__sys_enum__/tpm-machine-maintenance-plan-cycle.conf
deleted file mode 100644
index 9224af2e33f9821caf2b52a14037b30464cbb769..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/__sys_enum__/tpm-machine-maintenance-plan-cycle.conf
+++ /dev/null
@@ -1,13 +0,0 @@
-# 枚举类信息
-label: "MES/Mes TPM Maintenance Class/Maintenance Cycle"
-label_en: "MES/Mes TPM Maintenance Class/Maintenance Cycle"
-label_zhcn: "MES/维护计划/维护周期"
-label_zhtw: "MES/维护计划/维护周期"
-remark: ""
-
-# 枚举项信息
-items :[
-    {"name":"day","icon":"","text":"天","text_zhcn":"天","text_zhtw":"天","remark":"","tags":[]},
-    {"name":"week","icon":"","text":"周","text_zhcn":"周","text_zhtw":"周","remark":"","tags":[]},
-    {"name":"month","icon":"","text":"月","text_zhcn":"月","text_zhtw":"月","remark":"","tags":[]}
-]
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/__sys_enum__/tpm-machine-maintenance-plan-execution-cycle.conf b/demo/examples/module/TEMPLATEDEMO/__sys_enum__/tpm-machine-maintenance-plan-execution-cycle.conf
deleted file mode 100644
index b3f69911d1b8110156cbba3ff06e5599a18801bf..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/__sys_enum__/tpm-machine-maintenance-plan-execution-cycle.conf
+++ /dev/null
@@ -1,12 +0,0 @@
-# 枚举类信息
-label: "MES/Mes TPM Maintenance Category/Plan Execution Cycle"
-label_en: "MES/Mes TPM Maintenance PlCategoryan/Plan Execution Cycle"
-label_zhcn: "MES/维护计划/计划执行周期"
-label_zhtw: "MES/维护计划/计划执行周期"
-remark: ""
-
-# 枚举项信息
-items :[
-    {"name":"once","icon":"","text":"单次","text_zhcn":"单次","text_zhtw":"单次","remark":"","tags":[]},
-    {"name":"cycle","icon":"","text":"周期","text_zhcn":"周期","text_zhtw":"周期","remark":"","tags":[]}
-]
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/__sys_enum__/tpm-machine-maintenance-plan-priority.conf b/demo/examples/module/TEMPLATEDEMO/__sys_enum__/tpm-machine-maintenance-plan-priority.conf
deleted file mode 100644
index dcc9bc8d17d9f38104bac57153d33ab235f2e494..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/__sys_enum__/tpm-machine-maintenance-plan-priority.conf
+++ /dev/null
@@ -1,13 +0,0 @@
-# 枚举类信息
-label: "MES/Mes TPM Maintenance Plan/Plan Priority"
-label_en: "MES/Mes TPM Maintenance Plan/Plan Priority"
-label_zhcn: "MES/维护计划/计划优先级"
-label_zhtw: "MES/维护计划/计划优先级"
-remark: ""
-
-# 枚举项信息
-items :[
-    {"name":"1","icon":"","text":"1","text_zhcn":"1","text_zhtw":"1","remark":"","tags":[]},
-    {"name":"2","icon":"","text":"2","text_zhcn":"2","text_zhtw":"2","remark":"","tags":[]},
-    {"name":"3","icon":"","text":"3","text_zhcn":"3","text_zhtw":"3","remark":"","tags":[]}
-]
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/__sys_enum__/tpm-machine-maintenance-plan-status.conf b/demo/examples/module/TEMPLATEDEMO/__sys_enum__/tpm-machine-maintenance-plan-status.conf
deleted file mode 100644
index dbf929a89b659031f49be31ca824aa5e8e21b2a0..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/__sys_enum__/tpm-machine-maintenance-plan-status.conf
+++ /dev/null
@@ -1,13 +0,0 @@
-# 枚举类信息
-label: "MES/Mes TPM Maintenance Plan/Plan Status"
-label_en: "MES/Mes TPM Maintenance Plan/Plan Status"
-label_zhcn: "MES/维护计划/计划状态"
-label_zhtw: "MES/维护计划/计划状态"
-remark: ""
-
-# 枚举项信息
-items :[
-    {"name":"waiting","icon":"","text":"待执行","text_zhcn":"待执行","text_zhtw":"待执行","remark":"","tags":[]},
-    {"name":"doing","icon":"","text":"执行中","text_zhcn":"执行中","text_zhtw":"执行中","remark":"","tags":[]},
-    {"name":"finished","icon":"","text":"已完成","text_zhcn":"已完成","text_zhtw":"已完成","remark":"","tags":[]}
-]
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/demo-summary/actions/about.js b/demo/examples/module/TEMPLATEDEMO/demo-summary/actions/about.js
deleted file mode 100644
index 14d8f67b923383a63e111de5c65e56213075579c..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/demo-summary/actions/about.js
+++ /dev/null
@@ -1,23 +0,0 @@
-try {
-	this.showAboutDialog();
-} catch (e) {
-	print(e);
-}
-
-/*---ACTION---
-ICON: ""
-LABEL: "About"
-LABEL_ZHCN: "关于"
-LABEL_ZHTW: "關於"
-ACCEL: ""
-TOOLTIP: "About"
-TOOLTIP_ZHCN: "关于"
-TOOLTIP_ZHTW: "關於"
-CHECKED: ""
-GROUP: ""
-STYLE: "size=small button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: ""
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/demo-summary/actions/modifypwd.js b/demo/examples/module/TEMPLATEDEMO/demo-summary/actions/modifypwd.js
deleted file mode 100644
index 7b79cc2e89de42516ad48e3ae76cc370cc3b7894..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/demo-summary/actions/modifypwd.js
+++ /dev/null
@@ -1,23 +0,0 @@
-try {
-    this.showPasswordModificationDialog();
-} catch (e) {
-	print(e);
-}
-
-/*---ACTION---
-ICON: ""
-LABEL: "Modify Password"
-LABEL_ZHCN: "修改密码"
-LABEL_ZHCN: "修改密碼"
-ACCEL: ""
-TOOLTIP: "Modify Password"
-TOOLTIP_ZHCN: "修改密码"
-TOOLTIP_ZHTW: "修改密碼"
-CHECKED: ""
-GROUP: ""
-STYLE: "size=small button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: ""
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/demo-summary/actions/open_module_upgrade.js b/demo/examples/module/TEMPLATEDEMO/demo-summary/actions/open_module_upgrade.js
deleted file mode 100644
index c68978ecccfb9c84b3209baf792249cc1bc7e154..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/demo-summary/actions/open_module_upgrade.js
+++ /dev/null
@@ -1,23 +0,0 @@
-try {
-	this.openModuleUpgrade();
-} catch (e) {
-	print(e);
-}
-
-/*---ACTION---
-ICON: ""
-LABEL: "Module Upgrade"
-LABEL_ZHCN: "模块更新"
-LABEL_ZHTW: "模塊更新"
-ACCEL: ""
-TOOLTIP: "Module Upgrade"
-TOOLTIP_ZHCN: "模块更新"
-TOOLTIP_ZHTW: "模塊更新"
-CHECKED: ""
-GROUP: ""
-STYLE: "size=small button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: ""
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/demo-summary/actions/quit.js b/demo/examples/module/TEMPLATEDEMO/demo-summary/actions/quit.js
deleted file mode 100644
index 84cd7fe05033ea940270515340ce32432cf4b9e2..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/demo-summary/actions/quit.js
+++ /dev/null
@@ -1,23 +0,0 @@
-try {
-	this.close();
-} catch (e) {
-	print(e);
-}
-
-/*---ACTION---
-ICON: ""
-LABEL: "Quit"
-LABEL_ZHCN: "关闭"
-LABEL_ZHTW: "關閉"
-ACCEL: ""
-TOOLTIP: "Quit"
-TOOLTIP_ZHCN: "关闭"
-TOOLTIP_ZHTW: "關閉"
-CHECKED: ""
-GROUP: ""
-STYLE: "size=small button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: ""
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/demo-summary/module.conf b/demo/examples/module/TEMPLATEDEMO/demo-summary/module.conf
deleted file mode 100644
index 4e84ed5109946d84f73a05a8adb8410ae73c2456..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/demo-summary/module.conf
+++ /dev/null
@@ -1,352 +0,0 @@
-# 模块标题
-sys_title: "Demo Summary"
-sys_title_en: ""
-sys_title_zhcn: "模板模块汇总"
-sys_title_zhtw: ""
-
-# 模块图标(普通图标在font awesome中找 http://fontawesome.io/icons/)
-sys_icon: "toplinker-cd"
-
-# 模块对应的插件DLL名称
-sys_plugin: "topikm6-topsys-plugin"
-# 模块对应的类名
-sys_class: "SysMainWindow"
-
-# 打开模块的权限
-sys_open_right: ""
-
-# 当关闭窗口时,如果提示是否保存,保存调用的action
-sys_save_action: ""
-
-# 该模块用到的枚举列表
-sys_enum_list: []
-
-# 该模块用到的除了Action之外的权限列表
-sys_permission_list: []
-
-# 产品版本号
-product_version: "V0.0.1"
-
-# 关于对话框配置
-about_us {
-	title:"", title_en:"", title_zhcn:"", title_zhtw:"",
-	copyright:"", copyright_en:"", copyright_zhcn:"", copyright_zhtw:"",
-	lawdesc:"", lawdesc_en:"", lawdesc_zhcn:"", lawdesc_zhtw:"",
-}
-
-# 当左侧导航的moudle或action没有权限时的状态
-# 状态包括 show, hide, disable
-# 默认为show
-navi_status_without_permission: "disable"
-
-# 资源
-resource: {
-	rcc: []
-}
-
-# 主桌面配置
-desktop: {
-    "navi": [
-      {
-        "route_type": "module",
-        "icon": "code",
-        "title": "单表格",
-        "title_en": "",
-        "title_zhcn": "",
-        "title_zhtw": "",
-        "url_address": "template-demo-single-table"
-      },
-      {
-        "route_type": "module",
-        "icon": "code",
-        "title": "单树形表格",
-        "title_en": "",
-        "title_zhcn": "",
-        "title_zhtw": "",
-        "url_address": "template-demo-single-tree"
-      },
-      {
-        "route_type": "module",
-        "icon": "code",
-        "title": "表单",
-        "title_en": "",
-        "title_zhcn": "",
-        "title_zhtw": "",
-        "url_address": "template-demo-uiloader"
-      },
-      {
-        "route_type": "module",
-        "icon": "code",
-        "title": "带详情表单",
-        "title_en": "",
-        "title_zhcn": "",
-        "title_zhtw": "",
-        "url_address": "template-demo-table-with-detail"
-      },
-      {
-        "route_type": "module",
-        "icon": "code",
-        "title": "属性名称列表",
-        "title_en": "",
-        "title_zhcn": "",
-        "title_zhtw": "",
-        "url_address": "pdm-attr-name-mgt"
-      },
-      {
-        "route_type": "module",
-        "icon": "code",
-        "title": "叠构模板库",
-        "title_en": "",
-        "title_zhcn": "",
-        "title_zhtw": "",
-        "url_address": "pdm-stackup-template"
-      },
-      {
-        "route_type": "module",
-        "icon": "code",
-        "title": "主从表",
-        "title_en": "",
-        "title_zhcn": "",
-        "title_zhtw": "",
-        "url_address": "template-demo-master-slave"
-      },
-      {
-        "route_type": "menu",
-        "icon": "home",
-        "title": "System",
-        "title_en": "System",
-        "title_zhcn": "系统",
-        "title_zhtw": "系統",
-        "icon_bgcolor": "#3598DB",
-        "items": [
-          {
-            "route_type": "module",
-            "icon": "gears",
-            "title": "Module Setting",
-            "title_en": "Module Setting",
-            "title_zhcn": "模块配置",
-            "title_zhtw": "模塊配置",
-            "url_address": "module-conf-mgt"
-          },
-          {
-            "route_type": "module",
-            "icon": "gear",
-            "title": "Config Management",
-            "title_en": "Config Management",
-            "title_zhcn": "配置管理",
-            "title_zhtw": "配置管理",
-            "url_address": "sys-config-mgt"
-          },
-          {
-            "route_type": "action",
-            "icon": "cloud-upload",
-            "title": "Module Upgrade",
-            "title_en": "Module Upgrade",
-            "title_zhcn": "模块升级",
-            "title_zhtw": "模塊升级",
-            "url_address": "open_module_upgrade"
-          },
-          {
-            "route_type": "module",
-            "icon": "code",
-            "title": "Macro Console",
-            "title_en": "Macro Console",
-            "title_zhcn": "宏控制台",
-            "title_zhtw": "宏控制臺",
-            "url_address": "sys-macro-console"
-          },
-          {
-            "route_type": "module",
-            "icon": "file-text-o",
-            "title": "Log Console",
-            "title_en": "Log Console",
-            "title_zhcn": "后台日志",
-            "title_zhtw": "後台日誌",
-            "url_address": "sys-log-console"
-          },
-          {
-            "route_type": "action",
-            "icon": "lock",
-            "title": "Change Password",
-            "title_en": "Change Password",
-            "title_zhcn": "修改密码",
-            "title_zhtw": "修改密碼",
-            "url_address": "modifypwd"
-          },
-          {
-            "route_type": "action",
-            "icon": "info",
-            "title": "About",
-            "title_en": "About",
-            "title_zhcn": "关于",
-            "title_zhtw": "關於",
-            "url_address": "about"
-          },
-          {
-            "route_type": "action",
-            "icon": "sign-out",
-            "title": "Logout",
-            "title_en": "Logout",
-            "title_zhcn": "退出",
-            "title_zhtw": "退出",
-            "url_address": "quit"
-          }			
-        ]
-      }
-    ]
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/__hooks__.js b/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/__hooks__.js
deleted file mode 100644
index ed0552843d1fe53651e6ee398382ef0443054c9c..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/__hooks__.js
+++ /dev/null
@@ -1,67 +0,0 @@
-this.afterModuleInit = function () {
-  var self = this;
-  var lang_def = APP.languageDefine();
-  // 根据语言定义确定要查的title_i18n
-  var cfg = self.config();
-  var data_keys = self.config('view.data_keys');
-  _.forEach(lang_def, function (v, k) {
-    data_keys.push('attr_data.title_i18n.' + k);
-    self.setUserData('attr_data.title_i18n.' + k + '.visible', 0);
-  });
-  _.set(cfg, 'view.data_keys', data_keys);
-  self.setConfig(cfg);
-
-  // 根据语言定义动态修改detail.ui.js
-  var detail_ui = self.ui('detail');
-  var title_i18n_actions = [];
-  var title_i18n_widgets = [];
-  var action_template_str = "{ \
-      type: 'Action', \
-      property: { text: '{0}', user_data: '{1}', checkable: true}, \
-      callback: function(obj, checked, self) { \
-        var lang = obj.getData('user_data'); \
-        self.setUserData('{2}'+lang+'.visible', checked); \
-        this.refreshState(); \
-      } \
-    }";
-  var widget_template_str = "{ \
-      name: '{0}', \
-      type: 'LineEdit', \
-      title: self.ttr('Title') + ' ({1})', \
-      pack: { label: self.ttr('Title') + ' ({1})' }, \
-      state: function(obj, self) { \
-        var v = self.userData('{0}.visible'); \
-        if (v) { \
-          return 'show'; \
-        } else { \
-          return 'hide'; \
-        } \
-      }, \
-      getter: function(obj) { \
-        if (_.isEmpty(obj.text)) { \
-          return null; \
-        } \
-        return obj.text; \
-      } \
-    }";
-  _.forEach(lang_def, function (v, k) {
-    title_i18n_actions.push(_.format(action_template_str, v, k, 'attr_data.title_i18n.'));
-    title_i18n_widgets.push(_.format(widget_template_str, 'attr_data.title_i18n.' + k, v));
-  });
-  detail_ui = detail_ui.replace('/*{% TITLE_I18N_ACTIONS %}*/', title_i18n_actions.join(','))
-    .replace('/*{% TITLE_I18N_WIDGETS %},*/', title_i18n_widgets.join(',') + ',');
-  self.setUi('detail', detail_ui);
-
-  // 根据语言定义动态修改option-list.ui.js
-  var option_ui = self.ui('option-list');
-  var option_i18n_actions = [];
-  var option_i18n_widgets = [];
-  _.forEach(lang_def, function (v, k) {
-    option_i18n_actions.push(_.format(action_template_str, v, k, 'text_'));
-    option_i18n_widgets.push(_.format(widget_template_str, 'text_' + k, v));
-  });
-  option_ui = option_ui.replace('/*{% TITLE_I18N_ACTIONS %}*/', option_i18n_actions.join(','))
-    .replace('/*{% TITLE_I18N_WIDGETS %},*/', option_i18n_widgets.join(',') + ',');
-  self.setUi('option-list', option_ui);
-};
-
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/add_option.js b/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/add_option.js
deleted file mode 100644
index 33a4be50e73500da68544f796cd606d98049656d..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/add_option.js
+++ /dev/null
@@ -1,39 +0,0 @@
-try {
-    var self = this;
-    var option_list_table = self.uiLoader().getObject("option_list");
-    if (option_list_table == undefined) return;
-
-    var allDataMap = option_list_table.allDataMap();
-    
-    var ret = GUI.showForm({
-        title: self.ttr('New Option'),
-        self: self,
-        use_core_engine: true,
-        ui: self.ui('option-list'),
-        size: '400x400',
-        buttons: [
-            self.ttr('Ok') + ':Ok:Ok:Primary',
-            self.ttr('Cancel') + ':Cancel:Cancel:Normal'
-        ],
-        include_hidden_items: true,
-    });
-
-    if (_.isEmpty(ret)) return;
-    var isNameExist = false;
-    _.forEach(allDataMap, function(item) {
-        if (ret['name'] == item['name']) {
-            isNameExist = true;
-        }
-    });
-    
-    if (isNameExist) {
-        GUI.msgbox({
-            title: this.ttr("Error"),
-            text: this.ttr("Option name is exist")
-        });
-        return;
-    }
-    option_list_table.appendRow(ret);
-}  catch (e) {
-    print(e);
-}
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/cancel_detail.js b/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/cancel_detail.js
deleted file mode 100644
index 73a671bdae9c3d7904120cd54158e2fa41699dd7..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/cancel_detail.js
+++ /dev/null
@@ -1,27 +0,0 @@
-try {
-    this.reloadItem();
-} catch(e) {
-	print(e);
-}
-
-/*---ACTION---
-ICON: "times.#54698d"
-LABEL: "Cancel"
-LABEL_ZHCN: "取消"
-LABEL_ZHTW: "取消"
-ACCEL: ""
-TOOLTIP: "Cancel Edit"
-TOOLTIP_ZHCN: "取消编辑"
-TOOLTIP_ZHTW: "取消編輯"
-CHECKED: ""
-GROUP: ""
-LABEL_EN: ""
-LABEL_JP: ""
-TOOLTIP_EN: ""
-TOOLTIP_JP: ""
-STYLE: "button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: "return (this.isDetailModified() ) ? 'enable' : 'hide';"
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/copy_detail.js b/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/copy_detail.js
deleted file mode 100644
index d86097bd3e2abda53ce076f67436fd0b5fceab55..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/copy_detail.js
+++ /dev/null
@@ -1,29 +0,0 @@
-try {
-    this.copyItem();
-    this.uiLoader().setValue('name', "");
-} catch (e) {
-	print(e);
-}
-
-/*---ACTION---
-ICON: "copy.#54698d"
-LABEL: "Copy"
-LABEL_ZHCN: "复制"
-LABEL_ZHTW: "複製"
-ACCEL: ""
-TOOLTIP: "Copy Attribute"
-TOOLTIP_ZHCN: "复制属性"
-TOOLTIP_ZHTW: "複製屬性"
-CHECKED: ""
-GROUP: ""
-LABEL_EN: ""
-LABEL_JP: ""
-TOOLTIP_EN: ""
-TOOLTIP_JP: ""
-PERMISSION: "pdm-attr-name-edit"
-STYLE: "button_style=icon"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: "return (this.isDetailModified() || this.detailUid() == 0) ? 'hide' : 'enable';"
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/delete.js b/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/delete.js
deleted file mode 100644
index ea1a30462a1321db0e96a791d2ee1c3d33b6fbb2..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/delete.js
+++ /dev/null
@@ -1,41 +0,0 @@
-var del_flag_key = this.config("view_data_set.db_del_flag_key");
-try {
-    if (_.isEmpty(del_flag_key)) {
-        if ('ok' != TMessageBox.warning(this, this.ttr('Are you sure to delete selected items?'), '', this.ttr('Delete item'), [this.ttr('Sure') + ':ok:ok:warn', this.ttr('Cancel') + ':cancel:cancel:primary'])) {
-            return;
-        } 
-    } else {
-        if ('ok' != TMessageBox.warning(this, this.ttr('Are you sure to move the selected item to the recycling station?'), '', this.ttr('Delete item'), [this.ttr('Sure') + ':ok:ok:warn', this.ttr('Cancel') + ':cancel:cancel:primary'])) {
-            return;
-        }
-    }
-    this.deleteItems(this.selectedItems());
-    this.refresh();
-    this.refreshDetail("");
-}
-catch (e) {
-    print(e);
-}
-
-/*---ACTION---
-ICON: "trash.#54698d"
-LABEL: "Delete"
-LABEL_ZHCN: "删除"
-LABEL_ZHTW: "刪除"
-ACCEL: "Delete"
-TOOLTIP: "Delete Attribute"
-TOOLTIP_ZHCN: "删除属性"
-TOOLTIP_ZHTW: "刪除屬性"
-CHECKED: ""
-GROUP: ""
-LABEL_EN: ""
-LABEL_JP: ""
-TOOLTIP_EN: ""
-TOOLTIP_JP: ""
-PERMISSION: "pdm-attr-name-delete"
-STYLE: "button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: "if(this.selectedItems().length > 0){return 'enable'}else{return 'disable'}"
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/edit_option.js b/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/edit_option.js
deleted file mode 100644
index 2e0738ce5f75c4aa05d8a07a191780622b6f4ca7..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/edit_option.js
+++ /dev/null
@@ -1,54 +0,0 @@
-try {
-    var self = this;
-    var option_list_table = self.uiLoader().getObject("option_list");
-    if (option_list_table == undefined) {
-        return;
-    }
-    if (option_list_table.selectedRowDataMaps().length <= 0) {
-        return;
-    }
-    var allDataMap = option_list_table.allDataMap();
-    var rowMap = option_list_table.selectedRowDataMaps()[0];
-    var currentIndex = -1;
-    _.each(allDataMap, function(item, index) {
-        if (_.isEqual(rowMap, item)) {
-            currentIndex = index;
-        }
-    })
-    var ret = GUI.showForm({
-        title: self.ttr('Edit Option') + ": " + rowMap['name'],
-        self: self,
-        use_core_engine: true,
-        ui: self.ui('option-list'),
-        size: '400x400',
-        buttons: [
-            self.ttr('Ok') + ':Ok:Ok:Primary',
-            self.ttr('Cancel') + ':Cancel:Cancel:Normal'
-        ],
-        include_hidden_items: true,
-        values: rowMap
-    })
-
-    if (_.isEmpty(ret)) {
-        return;
-    }
-
-    var isNameExist = false;
-    var iindex;
-    _.forEach(allDataMap, function(item, index) {    
-        if (currentIndex != index && ret['name'] == item['name']) {
-            isNameExist = true;
-        }  
-    });
-    if (isNameExist) {
-        GUI.msgbox({
-            title: this.ttr("Error"),
-            text: this.ttr("Option Name is existed!")
-        });
-        return;
-    }
-    option_list_table.setRowDataByPrimaryKey(rowMap["name"], ret);
-}  catch (e) {
-    print(e);
-}
- 
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/new.js b/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/new.js
deleted file mode 100644
index 0bbc5a9b6fe67c54f9a0c14ca00a2e94123a0bcd..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/new.js
+++ /dev/null
@@ -1,28 +0,0 @@
-try {
-     this.newItem();
-} catch (e) {
-	print(e);
-}
-
-/*---ACTION---
-ICON: "plus.#54698d"
-LABEL: "New Attribute"
-LABEL_ZHCN: "新建属性"
-LABEL_ZHTW: "新建屬性"
-ACCEL: "Ctrl+N"
-TOOLTIP: "New Attribute"
-TOOLTIP_ZHCN: "新建属性"
-TOOLTIP_ZHTW: "新建屬性"
-CHECKED: ""
-GROUP: ""
-LABEL_EN: ""
-LABEL_JP: ""
-TOOLTIP_EN: ""
-TOOLTIP_JP: ""
-PERMISSION: "pdm-attr-name-create"
-STYLE: "button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: ""
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/refresh.js b/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/refresh.js
deleted file mode 100644
index 242835bed0d3cb3cdbc53ea535a16504afe10ca6..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/refresh.js
+++ /dev/null
@@ -1,27 +0,0 @@
-try { 
-	this.refresh(false);
-} catch(e) {
-	print(e);
-}
-
-/*---ACTION---
-ICON: "refresh.#54698d"
-LABEL: "Refresh"
-LABEL_ZHCN: "刷新"
-LABEL_ZHTW: "刷新"
-ACCEL: "F5"
-TOOLTIP: "Refresh"
-TOOLTIP_ZHCN: "刷新"
-TOOLTIP_ZHTW: "刷新"
-CHECKED: ""
-GROUP: ""
-LABEL_EN: ""
-LABEL_JP: ""
-TOOLTIP_EN: ""
-TOOLTIP_JP: ""
-STYLE: "button_style=icon"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: ""
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/refresh_detail.js b/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/refresh_detail.js
deleted file mode 100644
index 5c6b817c2f0305377981e40a18f76fcc62afa662..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/refresh_detail.js
+++ /dev/null
@@ -1,27 +0,0 @@
-try {
-    this.reloadItem();
-} catch(e) {
-	print(e);
-}
-
-/*---ACTION---
-ICON: "refresh.#54698d"
-LABEL: "Refresh"
-LABEL_ZHCN: "刷新"
-LABEL_ZHTW: "刷新"
-ACCEL: ""
-TOOLTIP: "Reload data from database"
-TOOLTIP_ZHCN: "重载数据"
-TOOLTIP_ZHTW: "重載數據"
-CHECKED: ""
-GROUP: ""
-LABEL_EN: ""
-LABEL_JP: ""
-TOOLTIP_EN: ""
-TOOLTIP_JP: ""
-STYLE: "button_style=icon"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: "return (this.isDetailModified() || this.detailUid() == 0) ? 'hide' : 'enable';"
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/remove_option.js b/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/remove_option.js
deleted file mode 100644
index f6d08b08b7d1c6332592619cf378f4dbe1fc2d8e..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/remove_option.js
+++ /dev/null
@@ -1,15 +0,0 @@
-var self = this;
-var option_list_table = self.uiLoader().getObject("option_list");
-if (option_list_table == undefined) {
-    return;
-}
-if (option_list_table.selectedRowDataMaps().length <= 0) {
-    return;
-}
-
-if ('ok' != TMessageBox.warning(self, self.ttr('Are you sure to remove selected items?'), '', self.ttr('Delete item'), [self.ttr('Sure') + ':ok:ok:warn', self.ttr('Cancel') + ':cancel:cancel:primary'])) {
-    return;
-}
-
-option_list_table.removeSelectedRows();
-
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/restore.js b/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/restore.js
deleted file mode 100644
index fc756971b40764a6f400d61e79cbd184fd1e0f0d..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/restore.js
+++ /dev/null
@@ -1,50 +0,0 @@
-var ans = TMessageBox.question(this, this.ttr("Are you sure to restore selected items?"), '', this.ttr('Ask'));
-if (ans != 'Yes')
-{
-	return;
-}
-
-var query = new TSqlQueryV2(T_SQLCNT_POOL.getSqlDatabase());
-query.begin();
-try {
-    var updater = new TSqlUpdaterV2;
-    updater.setTable("pdm_attrname");
-    updater.setWhere('id', this.selectedItems());
-    updater.setData({del_flag: 0});
-    query.updateRow(updater);
-    var error = query.lastError();
-    if (error.isValid()) {
-        throw error;
-    }
-    query.commit();
-    this.alertOk(this.ttr("Restore data Success!"));
-    this.refresh(false);
-    this.refreshDetail("");	
-} catch (e) {
-    query.rollback();
-    this.alertError(this.ttr("Restore Data Failed"));
-    print(e);
-}
-
-/*---ACTION---
-ICON: "mail-reply"
-LABEL: "Restore"
-LABEL_ZHCN: "还原"
-LABEL_ZHTW: "還原"
-ACCEL: "Ctrl+R"
-TOOLTIP: "Restore Attribute"
-TOOLTIP_ZHCN: "还原属性"
-TOOLTIP_ZHTW: "還原屬性"
-CHECKED: ""
-GROUP: ""
-LABEL_EN: ""
-LABEL_JP: ""
-TOOLTIP_EN: ""
-TOOLTIP_JP: ""
-PERMISSION: "pdm-attr-name-edit"
-STYLE: "button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: "if(_.isEmpty(this.config('view.data_set.db_del_flag_key')) == false){return 'hide'} else if( this.selectedItems().length > 0){return 'enable'}else{return 'disable'}"
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/save_detail.js b/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/save_detail.js
deleted file mode 100644
index 0cf674d28db978408f9a9675baef49efa7def3fa..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/save_detail.js
+++ /dev/null
@@ -1,24 +0,0 @@
-try {
-	 this.saveItem();	
-} catch (e) {
-	print(e);
-}
-
-/*---ACTION---
-ICON: "save.#54698d"
-LABEL: "Save"
-LABEL_ZHCN: "保存"
-LABEL_ZHTW: "保存"
-ACCEL: "Ctrl+S"
-TOOLTIP: "Save Attribute"
-TOOLTIP_ZHCN: "保存属性"
-TOOLTIP_ZHTW: "保存屬性"
-PERMISSION: "pdm-attr-name-edit"
-CHECKED: ""
-GROUP: ""
-STYLE: "button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: "return (this.isDetailModified() ) ? 'enable' : 'disable';"
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/set_key_attr.js b/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/set_key_attr.js
deleted file mode 100644
index 5dccf5e22e6464779079989803e2e0a088a30bb5..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/set_key_attr.js
+++ /dev/null
@@ -1,124 +0,0 @@
-var query = new TSqlQueryV2(T_SQLCNT_POOL.getSqlDatabase());
-var self = this;
-try {
-    var selector = new TSqlSelectorV2;
-    selector.setTable("pdm_attrname");
-    selector.setField(["id", "name", "title", "storage_flag"]);
-    selector.setWhere("del_flag = 0 OR del_flag IS NULL");
-    var error = new TError;
-    var data = this.runSqlQueryOnThreadSync('TOPSQLTHREAD_SELECT_ARRAYMAP', selector, error);
-	if (error.isValid()) {
-		throw error.text();
-    }
-
-    var flagTrueList = [];    //storage_flag = 1
-    var flagFalseList = [];   //storage_flag = 0 or null
-    _.forEach(data, function(item){
-        var storage_flag = item["storage_flag"];
-        if (storage_flag == 1) {
-            flagTrueList.push(item);
-        } else {
-            flagFalseList.push(item);
-        }
-    });
-    var dialog = new TTableChooserDialog(self);
-    dialog.setTitle(self.ttr("Set primary attrname"));
-    dialog.setButtons([self.ttr('Ok') + ':Ok:Ok:Primary', self.ttr('Cancel') + ':Cancel:Cancel:ERROR']);
-    dialog.setIcon("pdm-setting.546998d");
-    dialog.setRepetitionEnabled(false);
-    dialog.setPrimaryKey('id');
-    dialog.setSearchKeys(['name', 'title']);
-    dialog.setHeaderItem(
-        [
-            {
-
-            },
-            {
-                name: 'name',
-                display: self.ttr('Attrname'),
-                displayRole: '$name',
-                resizeMode: 'Stretch',
-                sorting_enabled: 1,
-            },
-            {
-                name: 'title',
-                display: self.ttr('Title'),
-                displayRole: '$title',
-                resizeMode: 'Stretch',
-                sorting_enabled: 0
-            }
-        ]
-    );
-    dialog.setDataKeyList(['id', 'name', 'title', 'storage_flag']);
-    dialog.loadAllData(flagFalseList);
-    dialog.loadSelectedData(flagTrueList);
-
-    var ret = dialog.run();
-    if (_.isEmpty(ret)) {
-        return;
-    }
-
-    var newFlagFalseList = dialog.tableView().allDataMap();
-    var newFlagTrueList = dialog.selectedTableView().allDataMap();
-    var flagTrueIds = [];
-    var flagFalseIds = [];
-    _.forEach(newFlagTrueList, function(item) {
-        flagTrueIds.push(item['id']);
-    });
-
-    _.forEach(newFlagFalseList, function(item) {
-        flagFalseIds.push(item['id']);
-    });
-
-    var updater = new TSqlUpdaterV2;
-    updater.setTable('pdm_attrname');
-    var updateTrueMap = {};
-    updateTrueMap["storage_flag"] = 1;
-    updater.setField(["storage_flag"]);
-    updater.setWhere("id", flagTrueIds);
-    updater.setData(updateTrueMap);
-    query.updateRow(updater);
-    var error = query.lastError();
-    if (error.isValid()) {
-        throw error;
-    }
-
-    var updateFalseMap = {};
-    updateFalseMap["storage_flag"] = 0;
-    updater.setField(["storage_flag"]);
-    updater.setWhere("id", flagFalseIds);
-    updater.setData(updateFalseMap);
-    query.updateRow(updater);
-    var error = query.lastError();
-    if (error.isValid()) {
-        throw error;
-    }
-    query.commit(); 	
-} catch (e) {
-    query.rollback();
-    this.alertError(this.ttr('Error!'), e);
-    print(e);
-}
-
-/*---ACTION---
-ICON: "pdm-setting.#54698d"
-LABEL: "Set Primary Attributes"
-LABEL_ZHCN: "设置关键属性"
-LABEL_ZHTW: "設置關鍵屬性"
-ACCEL: ""
-TOOLTIP: "Set Primary Attributes"
-TOOLTIP_ZHCN: "设置关键属性"
-TOOLTIP_ZHTW: "設置關鍵屬性"
-CHECKED: ""
-GROUP: ""
-LABEL_EN: ""
-LABEL_JP: ""
-TOOLTIP_EN: ""
-TOOLTIP_JP: ""
-PERMISSION: "pdm-attr-name-edit"
-STYLE: "button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: ""
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/trash.js b/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/trash.js
deleted file mode 100644
index 90e699afb30fd4a6cd204a7c6c15098d8a9c2304..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/actions/trash.js
+++ /dev/null
@@ -1,41 +0,0 @@
-try { 
-    var checked = arguments[0];
-    var cfg = this.config();
-    if (checked) {
-        var dbFilter = {};
-        dbFilter['del_flag'] = '1';
-        _.set(cfg, 'view.data_set.db_filter', dbFilter);
-        _.set(cfg, 'view.data_set.db_del_flag_key', "");
-    } else {
-        _.set(cfg, 'view.data_set.db_filter', {});
-        _.set(cfg, 'view.data_set.db_del_flag_key', "del_flag");
-    }
-    this.setConfig(cfg);
-    this.viewConfChanged();
-    this.refresh(false);
-} catch(e) {
-    print(e);
-}
-
-/*---ACTION---
-ICON: "trash-o"
-LABEL: "Recycle Bin"
-LABEL_ZHCN: "回收站"
-LABEL_ZHTW: "回收站"
-ACCEL: ""
-TOOLTIP: "Recycle Bin"
-TOOLTIP_ZHCN: "回收站"
-TOOLTIP_ZHTW: "回收站"
-CHECKED: "false"
-GROUP: ""
-LABEL_EN: ""
-LABEL_JP: ""
-TOOLTIP_EN: ""
-TOOLTIP_JP: ""
-PERMISSION: ""
-STYLE: "button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: ""
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/detail.ui.js b/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/detail.ui.js
deleted file mode 100644
index bdd0bae8fcfed255f0c3b27315af0278a7031ea9..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/detail.ui.js
+++ /dev/null
@@ -1,530 +0,0 @@
-function func(self) {
-    return [
-        {
-            name: 'scrollarea',
-            type: 'ScrollArea',
-            property:
-            {
-                widget_resizable: true, frame_shape: 'NoFrame'
-            },
-            pack: {},
-            child: [
-                {
-                    name: 'vlayout',
-                    type: 'VBoxLayout',
-                    property:
-                    {
-                        margin: 0, spacing: 10
-                    },
-                    pack: {},
-                    child: [
-                        {
-                            name: 'fglayout',
-                            type: 'FormGridLayout',
-                            property:
-                            {
-                                label_alignment: 'AlignRight', margin: 20, vertical_spacing: 10, horizontal_spacing: 20
-                            },
-                            pack: {},
-                            child: [
-                                {
-                                    name: 'id',
-                                    type: 'LineEdit',
-                                    title: self.ttr('ID'),
-                                    property: { enabled: true },
-                                    pack:
-                                    {
-                                        label: self.ttr('ID'),
-                                    },
-                                    state: function () {
-                                        return 'hide';
-                                    }
-                                },
-                                {
-                                    name: 'name',
-                                    type: 'LineEdit',
-                                    title: self.ttr('Name'),
-                                    property: {},
-                                    pack:
-                                    {
-                                        label: self.ttr('Name')
-                                    },
-                                    validate: function (obj, val, title, moment, self) {
-                                        if (val.trim() == '') {
-                                            return [title + self.ttr(" can not be null!"), 'Error'];
-                                        }
-                                        else if (!val.match(new RegExp('^[A-Za-z0-9_]+$'))) {
-                                            return [title + self.ttr(" can only contain [A-Za-z0-9_]!"), 'Error'];
-                                        }
-
-                                        return;
-                                    }
-                                },
-                                {
-                                    name: 'title_layout',
-                                    type: 'HBoxLayout',
-                                    title: self.ttr('Title'),
-                                    property: {
-                                        spacing: 10,
-                                        margin: 0
-                                    },
-                                    pack: { label: self.ttr('Title') },
-                                    child: [
-                                        {
-                                            name: 'title',
-                                            type: 'LineEdit',
-                                            property: {}, 
-                                            validate: function (obj, val, title, moment, self) {
-                                                if (val.trim() == '') {
-                                                    return [title + self.ttr(" can not be null!"), 'Error'];
-                                                }
-                                            }
-                                        },
-                                        {
-                                            type: 'PushButton',
-                                            property: { text: self.ttr('Add Translation') },
-                                            child: [
-                                                {
-                                                    type: 'Menu',
-                                                    child: [
-                                                        /*{% TITLE_I18N_ACTIONS %}*/
-                                                    ]
-                                                }
-                                            ]
-                                        }
-                                    ]
-                                },
-                                /*{% TITLE_I18N_WIDGETS %},*/
-                                {
-                                    name: 'units',
-                                    title: self.ttr('Units'),
-                                    type: 'LineEdit',
-                                    property:
-                                    {
-
-                                    },
-                                    pack:
-                                    {
-                                        label: self.ttr('Units')
-                                    },
-                                },
-                                {
-                                    name: 'department',
-                                    title: self.ttr('Department'),
-                                    type: 'MultiComboBox',
-                                    property:
-                                    {
-                                        item_list: TOPENM.enumList("pdm-attrname-department").toComboList(),
-                                        name_format: 'A,B'
-                                    },
-                                    pack:
-                                    {
-                                        label: self.ttr('Department')
-                                    },
-                                    getter: function (obj, self) {
-                                        return obj.getData("current_names");
-                                    },
-                                    setter: function (obj, value, self) {
-                                        obj.setData('value', value.join(','));
-                                    }
-                                },
-                                {
-                                    name: 'category',
-                                    title: self.ttr('Category'),
-                                    type: 'MultiComboBox',
-                                    property:
-                                    {
-                                        item_list: TOPENM.enumList("pdm-attrname-attrcategory").toComboList(),
-                                        name_format: 'A,B'
-                                    },
-                                    pack:
-                                    {
-                                        label: self.ttr('Category')
-                                    },
-                                    getter: function (obj, self) {
-                                        return obj.getData("current_names");
-                                    },
-                                    setter: function (obj, value, self) {
-                                        obj.setData('value', value.join(','));
-                                    }
-                                },
-                                {
-                                    name: 'type',
-                                    title: self.ttr('Attribute Type'),
-                                    type: 'MultiComboBox',
-                                    property:
-                                    {
-                                        item_list: TOPENM.enumList("pdm-attrname-attrtype").toComboList(),
-                                        size_policy: 'Expanding,fixed',
-                                        name_format: 'A,B'
-                                    },
-                                    pack:
-                                    {
-                                        label: self.ttr('Attribute Type')
-                                    },
-                                    validate: 'NotNull',
-                                    getter: function (obj, self) {
-                                        return obj.getData("current_names");
-                                    },
-                                    setter: function (obj, value, self) {
-                                        obj.setData('value', value.join(','));
-                                    }
-                                },
-                                {
-                                    name: 'data_type',
-                                    title: self.ttr('Data Type'),
-                                    type: 'ComboBox',
-                                    property:
-                                    {
-                                        item_list: TOPENM.enumList("pdm-attrname-datatype").toComboList(),
-                                        size_policy: 'Expanding,fixed',
-                                        name_format: 'A,B'
-                                    },
-                                    pack:
-                                    {
-                                        label: self.ttr('Data Type')
-                                    },
-                                    validate: function (obj, val, title, moment, self) {
-                                        if (val.trim() == '') {
-                                            return [title + self.ttr(" can not be null!"), 'Error'];
-                                        }
-
-                                    },
-                                },
-                                {
-                                    name: 'option_list_box',
-                                    type: 'GroupBox',
-                                    pack: {
-                                        label: self.ttr("Option List")
-                                    },
-                                    property: {
-                                        label: self.ttr("Option List")
-                                    },
-                                    state: function (obj, self) {
-                                        var list = ["enum", "editable_enum", "check_box", "radio_box",
-                                            "multiple_enum", "multiple_check", "drill_cu_thick"];
-                                        var dataType = this.getValue("data_type");
-                                        if (list.indexOf(dataType) == -1) {
-                                            return 'hide';
-                                        } else {
-                                            // 当为单选可编辑时,由于编辑的是选项的namne,所以不显示text
-                                            var optionLstView = this.getObject("option_list");
-                                            if (optionLstView !== null) {
-                                                optionLstView.setColumnVisible("text", (dataType !== "editable_enum"));
-                                            }
-                                            return "Show";
-                                        }
-                                    },
-                                    child: [ {
-                                            name: 'vlayout',
-                                            type: 'VBoxLayout',
-                                            property: {
-                                                spacing: 0,
-                                                margin: 0
-                                            },
-                                            pack: {},
-                                            child: [
-                                                {
-                                                    name: 'toolbar',
-                                                    type: 'ToolBar',
-                                                    property: {},
-                                                    pack: {},
-                                                    child: [
-                                                        {
-                                                            name: 'yesno',
-                                                            type: 'Action',
-                                                            property:
-                                                            {
-                                                                text: self.ttr('Defalt Yes/No'),
-                                                                icon: 'pdm-default.#54698d',
-                                                                shortcut: '',
-                                                                tooltip: '',
-                                                                style: 'size=small  button_style=icon'
-                                                            },
-                                                            callback: function (obj, checked, self) {
-                                                                var datType = this.getObject('data_type').getData('value');
-                                                                var optionList = [];
-                                                                if ('check_box' === datType) {
-                                                                    optionList = [
-                                                                        {
-                                                                            "data": "",
-                                                                            "icon": "",
-                                                                            "name": "1",
-                                                                            "rmk": "",
-                                                                            "text": "Yes"
-                                                                        },
-                                                                        {
-                                                                            "data": "",
-                                                                            "icon": "",
-                                                                            "name": "0",
-                                                                            "rmk": "",
-                                                                            "text": "No"
-                                                                        }
-                                                                    ];
-                                                                } else {
-                                                                    optionList = [
-                                                                        {
-                                                                            "data": "",
-                                                                            "icon": "",
-                                                                            "name": "Yes",
-                                                                            "rmk": "",
-                                                                            "text": "Yes"
-                                                                        },
-                                                                        {
-                                                                            "data": "",
-                                                                            "icon": "",
-                                                                            "name": "No",
-                                                                            "rmk": "",
-                                                                            "text": "No"
-                                                                        }
-                                                                    ];
-                                                                }
-                                                                this.getObject('option_list').loadData(optionList);
-                                                            },
-                                                        },
-                                                        {
-                                                            name: 'new',
-                                                            type: 'Action',
-                                                            property:
-                                                            {
-                                                                text: self.ttr('New Option'),
-                                                                icon: 'addto-circle-o.#54698d',
-                                                                shortcut: '',
-                                                                tooltip: '',
-                                                                style: 'size=small  button_style=icon'
-                                                            },
-                                                            callback: function (obj, checked, self) {
-                                                                self.callAction("add_option");
-                                                            },
-                                                        },
-                                                        {
-                                                            name: 'edit',
-                                                            type: 'Action',
-                                                            property:
-                                                            {
-                                                                text: self.ttr('Edit Option'),
-                                                                icon: 'edit.#54698d',
-                                                                shortcut: '',
-                                                                tooltip: '',
-                                                                style: 'size=small  button_style=icon'
-                                                            },
-                                                            callback: function (obj, checked, self) {
-                                                                self.callAction("edit_option");
-                                                            },
-                                                        },
-                                                        {
-                                                            name: 'delete',
-                                                            type: 'Action',
-                                                            property:
-                                                            {
-                                                                text: self.ttr('Remove Option'),
-                                                                icon: 'minus-circle-o.#54698d',
-                                                                shortcut: '',
-                                                                tooltip: '',
-                                                                style: 'size=small  button_style=icon'
-                                                            },
-                                                            callback: function (obj, checked, self) {
-                                                                self.callAction("remove_option");
-                                                            },
-                                                        },
-                                                        {
-                                                            name: 'refresh',
-                                                            type: 'Action',
-                                                            property:
-                                                            {
-                                                                text: self.ttr('Refresh'),
-                                                                icon: 'refresh.#54698d',
-                                                                shortcut: '',
-                                                                tooltip: '',
-                                                                style: 'size=small  button_style=icon'
-                                                            },
-                                                            callback: function (obj, checked, self) {
-                                                                self.callAction("refresh_detail");
-                                                            },
-                                                        },
-                                                        {
-                                                            name: 'separator',
-                                                            type: 'Separator',
-                                                        },
-                                                        {
-                                                            name: 'move_top',
-                                                            type: 'Action',
-                                                            property:
-                                                            {
-                                                                text: self.ttr('Arrow top'),
-                                                                icon: 'angle-double-up',
-                                                                shortcut: '',
-                                                                tool_tip: self.ttr('Arrow top'),
-                                                                style: 'size = small'
-                                                            },
-                                                            callback: function (obj, checked, self) {
-                                                                this.getObject('option_list').moveSelectedRowsTop();
-                                                            },
-                                                        },
-                                                        {
-                                                            name: 'move_up',
-                                                            type: 'Action',
-                                                            property:
-                                                            {
-                                                                text: self.ttr('Arrow up'),
-                                                                icon: 'angle-up',
-                                                                shortcut: '',
-                                                                tool_tip: self.ttr('Arrow up'),
-                                                                style: 'size = small'
-                                                            },
-                                                            callback: function (obj, checked, self) {
-                                                                this.getObject('option_list').moveSelectedRowsUp();
-                                                            },
-                                                        },
-                                                        {
-                                                            name: 'move_down',
-                                                            type: 'Action',
-                                                            property:
-                                                            {
-                                                                text: self.ttr('Arrow down'),
-                                                                icon: 'angle-down',
-                                                                shortcut: '',
-                                                                tool_tip: self.ttr('Arrow down'),
-                                                                style: 'size = small'
-                                                            },
-                                                            callback: function (obj, checked, self) {
-                                                                this.getObject('option_list').moveSelectedRowsDown();
-                                                            },
-                                                        },
-                                                        {
-                                                            name: 'move_btm',
-                                                            type: 'Action',
-                                                            property:
-                                                            {
-                                                                text: self.ttr('Arrow bottom'),
-                                                                icon: 'angle-double-down',
-                                                                shortcut: '',
-                                                                tool_tip: self.ttr('Arrow bottom'),
-                                                                style: 'size = small'
-                                                            },
-                                                            callback: function (obj, checked, self) {
-                                                                this.getObject('option_list').moveSelectedRowsBottom();
-                                                            },
-                                                        },
-                                                    ]
-                                                },
-                                                {
-                                                    name: 'option_list',
-                                                    type: 'TableView',
-                                                    property: { minimum_height: 200 },
-                                                    pack: {},
-                                                    getter: function (obj, self) {
-                                                        var data = obj.allDataMap();
-                                                        return TDataParse.variant2JsonStr(data);
-                                                    },
-                                                    setter: function (obj, value) {
-                                                        var data = [];
-                                                        if (value != null) {
-                                                            data = TDataParse.jsonStr2Variant(value);
-                                                        }
-                                                        obj.loadData(data);
-                                                    },
-                                                    initCallback: function (obj) {
-                                                        obj.setHeaderItem(
-                                                            [
-                                                                {
-                                                                },
-                                                                {
-                                                                    "name": "name",
-                                                                    "display": self.ttr("Name"),
-                                                                    "resizeMode": "Interactive",
-                                                                    "size": "100",
-                                                                    "displayRole": "$name"
-                                                                },
-                                                                {
-                                                                    "name": "text",
-                                                                    "display": self.ttr("Text"),
-                                                                    "resizeMode": "Interactive",
-                                                                    "size": "80",
-                                                                    "displayRole": "$text"
-                                                                },
-                                                                {
-                                                                    "name": "icon",
-                                                                    "display": self.ttr("Icon"),
-                                                                    "resizeMode": "Interactive",
-                                                                    "size": "120",
-                                                                    "displayRole": "$icon",
-                                                                    "decorationRole": "$icon"
-                                                                },
-                                                                {
-                                                                    "name": "data",
-                                                                    "display": self.ttr("Data"),
-                                                                    "resizeMode": "Interactive",
-                                                                    "size": "100",
-                                                                    "displayRole": "$data"
-                                                                },
-                                                                {
-                                                                    "name": "rmk",
-                                                                    "display": self.ttr("Remark"),
-                                                                    "resizeMode": "Interactive",
-                                                                    "size": "100",
-                                                                    "displayRole": "$rmk"
-                                                                }
-                                                            ]);
-                                                        obj.setDataKeyList(["name", "text", "icon", "data", "rmk", "text_en", "text_zhcn", "text_zhtw"]);
-                                                        obj.setPrimaryKey("name");
-                                                    },
-                                                }
-                                            ]
-                                        }
-                                    ]
-                                },
-                                {
-                                    name: 'ui_cfg',
-                                    title: self.ttr('UI Cfg'),
-                                    type: 'CodeEdit',
-                                    property:
-                                    {
-                                        min: 1, max: 30,
-                                        acceptRichText: false
-                                    },
-                                    pack:
-                                    {
-                                        label: self.ttr('UI Cfg'),
-                                    },
-                                },
-                                {
-                                    name: 'tags',
-                                    title: self.ttr('Tag'),
-                                    type: 'Chips',
-                                    property:
-                                    {
-
-                                    },
-                                    pack:
-                                    {
-                                        label: self.ttr('Tag'),
-                                    },
-                                },
-                                {
-                                    name: 'remark',
-                                    title: self.ttr('Remark'),
-                                    type: 'PlainTextEdit',
-                                    property:
-                                    {
-                                        acceptRichText: false, min_row_count: 1, max_row_count: 30
-                                    },
-                                    pack:
-                                    {
-                                        label: self.ttr('Remark'),
-                                    },
-                                },
-
-                            ]
-                        },
-                        {
-                            name: 'stretcher',
-                            type: 'Widget',
-                            property: { size_policy: 'Qt::Expanding' }
-                        }
-                    ]
-                }
-            ]
-        }
-    ];
-}
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/lang.conf b/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/lang.conf
deleted file mode 100644
index 27123884109406c6c4cf4d4b155ff869991371e3..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/lang.conf
+++ /dev/null
@@ -1,47 +0,0 @@
-"Delete item": {en: "Delete item", zhcn: "删除条目", zhtw: ""}
-"Sure": {en: "Confirmed", zhcn: "确认", zhtw: ""}
-" already exists in the recycle bin!": {en: " already exists in the recycle bin!",zhcn: " 已在回收站中存在!",zhtw: " 已在回收站中存在!"}
-" already exists!": {en: " already exists!",zhcn: " 已存在!",zhtw: " 已存在!"}
-" can only contain [A-Za-z0-9_]!": {en: " can only contain [A-Za-z0-9_]!",zhcn: " 只能包含数字字母下划线!",zhtw: " 只能包含數字字母下劃線!"}
-"Are you sure to remove selected items?": {en: "Are you sure to remove selected items?",zhcn: "确定要移除所选项吗?",zhtw: "確定要移除所選項嗎?"}
-"Are you sure to move the selected item to the recycling station?": {en:"Are you sure to move the selected item to the recycle bin?", zhcn: "确定要将选中的条目移至回收站吗?", zhtw: "確定要將選中的條目移至回收站嗎?"}
-"Arrow bottom": {en: "Move bottom",zhcn: "置底",zhtw: "置底"}
-"Arrow down": {en: "Move down",zhcn: "下移",zhtw: "下移"}
-"Arrow top": {en: "Move top",zhcn: "置顶",zhtw: "置頂"}
-"Arrow up": {en: "Move up",zhcn: "上移",zhtw: "上移"}
-"Attribute Type": {en: "Attribute Type",zhcn: "属性类型",zhtw: "屬性類型"}
-"Category": {en: "Category",zhcn: "分类",zhtw: "分類"}
-"Common Query Attributes": {en: "Common Query Attributes",zhcn: "常用查询",zhtw: "常用查詢"}
-"Data": {en: "Data",zhcn: "数据",zhtw: "數據"}
-"Data Type": {en: "Data Type",zhcn: "数据类型",zhtw: "數據類型"}
-"Department": {en: "Department",zhcn: "部门",zhtw: "部門"}
-"Used Department": {en: "Used Department",zhcn: "使用部门",zhtw: "使用部門"}
-"Edit Option": {en: "Edit Option",zhcn: "编辑选项",zhtw: "編輯選項"}
-"Job Attr-%1": {en: "Job Attr-%1",zhcn: "料号属性-%1",zhtw: "料號屬性-%1"}
-"Name": {en: "Name",zhcn: "名称",zhtw: "名稱"}
-"Navigation": {en: "Navigation",zhcn: "分类导航",zhtw: "分類導航"}
-"New Attr": {en: "New Attr",zhcn: "新建属性",zhtw: "新建屬性"}
-"New Option": {en: "New Option",zhcn: "新建选项",zhtw: "新建選項"}
-"Option List": {en: "Option List",zhcn: "选项列表",zhtw: "選項列表"}
-"Remove Option": {en: "Remove Option",zhcn: "移除选项",zhtw: "移除選項"}
-"Saving data failed!": {en: "Saving data failed!",zhcn: "保存数据失败!",zhtw: "保存數據失敗!"}
-"Tag": {en: "Tag",zhcn: "标签",zhtw: "標籤"}
-"Text": {en: "Text",zhcn: "标题",zhtw: "標題"}
-"Title": {en: "Title",zhcn: "标题",zhtw: "標題"}
-"Trash": {en: "Trash",zhcn: "回收站",zhtw: "回收站"}
-"UI Cfg": {en: "UI Cfg",zhcn: "界面配置",zhtw: "界面配置"}
-"Units": {en: "Units",zhcn: "单位",zhtw: "單位"}
-"can not be null": {en: "can not be null",zhcn: "不为空",zhtw: "不為空"}
-"Attribute-%1": {en: "Attribute-%1",zhcn: "属性-%1",zhtw: "屬性-%1"}
-"Set data failed!": {en: "Set data failed!",zhcn: "设置数据失败!",zhtw: "設置數據失敗!"}
-"Set data success!": {en: "Set data success!",zhcn: "设置数据成功!",zhtw: "設置數據成功!"}
-"Defalt Yes/No": {en: "Default Yes/No",zhcn: "默认 Yes/No",zhtw: "默認 Yes/No"}
-"Set flag success!": {en: "Set flag success!",zhcn: "设置关键属性成功!",zhtw: "設置關鍵屬性成功!"}
-"Set flag failed!": {en: "Set flag failed!",zhcn: "设置关键属性失败!",zhtw: "設置關鍵屬性失敗!"}
-"Set primary attrname": {en: "Set primary attrname",zhcn: "设置关键属性",zhtw: "設置關鍵屬性"}
-"Attrname": {en: "Attrname",zhcn: "属性",zhtw: "屬性"}
-"Are you sure to restore selected items?": {en: "Are you sure to restore selected items?",zhcn: "确定要还原所选项吗?",zhtw: "確定要還遠所選項嗎?"}
-"Restore data success!": {en: "Restore data success!", zhcn: "还原数据成功!", zhtw: "還原數據成功!"}
-"Restore data failed!": {en: "Restore data failed!", zhcn: "还原数据失败!", zhtw: "還原數據失敗!"}
-"Add Translation": { en: "Add Translation", zhcn: "添加翻译", zhtw: "添加翻譯" }
-"Option Name is existed!": { en: "Option Name is existed!", zhcn: "选项名称已存在!", zhtw: "選項名稱已存在!"}
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/module.conf b/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/module.conf
deleted file mode 100644
index 6d07d9dd49796bdf3286f74afc17271cc4048138..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/module.conf
+++ /dev/null
@@ -1,155 +0,0 @@
-# 模块标题
-sys_title: "Attribute Name List"
-sys_title_en: "Attribute Name List"
-sys_title_zhcn: "属性名称列表"
-sys_title_zhtw: "屬性名稱列表"
-
-# 模块图标
-sys_icon: "pdm-check_item"
-
-# 模块对应的插件DLL名称
-sys_plugin: "toptemplateclassplugin"
-# 模块对应的类名
-sys_class: "TopTemplateClass4"
-
-# 打开模块的权限
-sys_open_right: "pdm-attr-name-read"
-
-# 当关闭窗口时,如果提示是否保存,保存调用的action
-sys_save_action: ""
-
-# 该模块用到的枚举列表
-sys_enum_list: ["pdm-attrname-attrtype", "pdm-attrname-datatype", "pdm-attrname-department", "pdm-attrname-attrcategory"]
-
-# 该模块用到的除了Action之外的权限列表
-sys_permission_list: []
-
-#详情页面的初始大小
-detail.perfect_size.width: 600
-
-#导航栏初宽度
-navi.perfect_size.width:200
-navi.min_size.width:150
-
-# 新建时是否全屏
-detail.create.fullscreen: false
-
-# 导航栏配置
-navi: {
-    min_width: 150,
-    is_expanded: true,
-    is_checkable: true,
-    categories: [
-        {
-            name: "category",
-            text: "Category",
-            icon: "",
-            VISIBLE: 1,
-            EXPAND: 1,
-            checked: 0,
-            data: "category",
-            children: [],
-            enum_children: "pdm-attrname-attrcategory",
-            enum_checked:[]
-        },
-        {
-            name: "type",
-            text: "Attribute Type",
-            icon: "",
-            VISIBLE: 1,
-            EXPAND: 1,
-            checked: 0,
-            data: "type",
-            children: [],
-            enum_children: "pdm-attrname-attrtype",
-            enum_checked:[]
-        },
-        {
-            name: "department",
-            text: "Used Department",
-            icon: "",
-            VISIBLE: 1,
-            EXPAND: 1,
-            checked: 0,
-            data: "department",
-            children: [],
-            enum_children: "pdm-attrname-department",
-            enum_checked:[]
-        }
-    ]
-}
-
-# 显示相关配置
-view {
-    data_keys: ["id", "title", "attr_data.store_table", "ui_cfg", "option_list", "tags", "del_flag"],
-    primary_key: "id",
-    horizontal_header: [
-            {
-                "name": "name",
-                "display": "Name",
-                "displayRole": "$name",
-                "size": 100,
-                "search": "string"
-            },
-            {
-                "name": "title",
-                "display": "Title",
-                "displayRole": "$title",
-                "size": 100,
-                "search": "string"
-            }
-            {
-                "name": "units",
-                "display": "Units",
-                "displayRole": "$units",
-                "size": 100
-            },
-            {
-                "name": "category",
-                "display": "Category",
-                "displayRole": "$category.text",
-                "size": 100,
-                "format": "enum(pdm-attrname-attrcategory)",
-                "field_format": "array"
-            },
-            {
-                "name": "type",
-                "display": "Attribute Type",
-                "displayRole": "$type.text",
-                "size": 100,
-                "format": "enum(pdm-attrname-attrtype)",
-                "field_format": "array"
-            },
-            {
-                "name": "data_type",
-                "display": "Data Type",
-                "displayRole": "$data_type.text",
-                "size": 100,
-                "format": "enum(pdm-attrname-datatype)"
-            },
-            {
-                "name": "department",
-                "display": "Department",
-                "displayRole": "$department.text",
-                "size": 100,
-                "format": "enum(pdm-attrname-department)",
-                "field_format": "array"
-            },
-            {
-                "name": "remark",
-                "display": "Remark",
-                "displayRole": "$remark",
-                "size": 100,
-                "search": "string"
-            }
-    ],
-    data_set {
-    db_table_name: "pdm_attrname",
-    db_sql: "",
-    # 删除标记,若为空表示做物理删除
-    db_del_flag_key: "del_flag"
-    # 过滤项
-    db_filter {
-    }
-  }
-}
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/option-list.ui.js b/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/option-list.ui.js
deleted file mode 100644
index f28b1964903f528105a7ed2cfde2a9b1b2deb13e..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/option-list.ui.js
+++ /dev/null
@@ -1,146 +0,0 @@
-function func(self) {
-    return [
-        {
-            name: 'scrollarea',
-            type: 'ScrollArea',
-            property:
-            {
-                widget_resizable: true,
-                frame_shape: 'QFrame::NoFrame'
-            },
-            pack: {},
-            child:
-            {
-                name: 'vlayout',
-                type: 'VBoxLayout',
-                property:
-                {
-                    margin: 0, spacing: 10
-                },
-                pack: {},
-                child: [
-                    {
-                        name: 'flayout',
-                        type: 'FormGridLayout',
-                        property:
-                        {
-                            label_alignment: 'AlignRight', margin: 20, vertical_spacing: 10, horizontal_spacing: 20
-                        },
-                        pack: {},
-                        child: [
-                            {
-                                name: 'name',
-                                type: 'LineEdit',
-                                property: {},
-                                title: self.ttr("Name"),
-                                pack:
-                                {
-                                    label: self.ttr("Name")
-                                },
-                                validate: function (obj, val, title, moment, self) {
-                                    if (val.trim() == '') {
-                                        return [title + self.ttr('can not be null'), 'Error'];
-                                    }
-                                    return;
-                                },
-                                initCallback: function (obj, self) {
-                                    obj.setFocus();
-                                }
-                            },
-                            {
-                                name: "text_wgt",
-                                type: "Widget",
-                                pack: { label: self.ttr("Text") },
-                                child: {
-                                    name: 'text_layout',
-                                    type: 'HBoxLayout',
-                                    property: {
-                                        margin: 0,
-                                        spacing: 10
-                                    },
-                                    child: [
-                                        {
-                                            name: 'text',
-                                            type: 'LineEdit',
-                                            title: self.ttr('Text'),
-                                            property: {},
-                                            validate: function (obj, val, title, moment, self) {
-                                                return;
-                                            }
-                                        },
-                                        {
-                                            type: 'PushButton',
-                                            property: { text: self.ttr('Add Translation') },
-                                            child: [
-                                                {
-                                                    type: 'Menu',
-                                                    child: [
-                                                        /*{% TITLE_I18N_ACTIONS %}*/
-                                                    ]
-                                                }
-                                            ]
-                                        }
-                                    ]
-                                },
-                                state: function (obj, self) {
-                                    var option_list_table = self.uiLoader().getObject("option_list");
-                                    if (option_list_table == undefined || option_list_table === null) return;
-                                    return option_list_table.isColumnVisible("text") ? "SHOW" : "HIDE";
-                                }
-                            },
-                            /*{% TITLE_I18N_WIDGETS %},*/
-                            {
-                                name: 'icon',
-                                type: 'IconSelector',
-                                title: self.ttr('Icon'),
-                                property: {},
-                                pack:
-                                {
-                                    label: self.ttr('Icon')
-                                },
-                            },
-                            {
-                                name: 'data',
-                                title: self.ttr('Data'),
-                                type: 'TextEdit',
-                                property: { min_row_count: 1, max_row_count: 30 },
-                                pack:
-                                {
-                                    label: self.ttr('Data')
-                                },
-                                setter: function (obj, value, self) {
-                                    obj.setPlainText(value);
-                                },
-                                getter: function (obj, self) {
-                                    return obj.plainText
-                                },
-                            },
-                            {
-                                name: 'rmk',
-                                title: self.ttr('Remark'),
-                                type: 'TextEdit',
-                                property: { min_row_count: 1, max_row_count: 30 },
-                                pack:
-                                {
-                                    label: self.ttr('Remark')
-                                },
-                                setter: function (obj, value, self) {
-                                    obj.setPlainText(value);
-                                },
-                                getter: function (obj, self) {
-                                    return obj.plainText
-                                },
-                            },
-                            {
-                                name: 'stretcher',
-                                type: 'Widget',
-                                property: { size_policy: 'Qt::Expanding' }
-                            }
-                        ]
-                    }
-                ]
-            }
-        }
-    ]
-        ;
-}
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/uim.conf b/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/uim.conf
deleted file mode 100644
index 9c296a4d62f4245a76a604f2507fc4280d02f0ea..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-attr-name-mgt/uim.conf
+++ /dev/null
@@ -1,45 +0,0 @@
-# 表格的右键菜单
-"TABLEVIEW_POPUP": [
-	{"type":"menuitem","action":"new"},
-	{"type":"separator"},
-	{"type":"menuitem","action":"delete"},
-	{"type":"menuitem","action":"restore"},
-	{"type":"separator"},
-	{"type":"menuitem","action":"refresh"}
-]
-
-# 工具栏
-"MAIN_TOOLBAR": [
-	{"type":"spacing", "size":10},
-	{"type":"toolitem","action":"new"},
-	{"type":"separator"},
-	{"type":"toolitem","action":"trash"},
-	{"type":"toolitem","action":"c1"},
-	{"type":"toolitem","action":"c2"},
-	{"type":"toolitem","action":"c3"},
-	{"type":"toolitem","action":"c4"},
-	{"type":"toolitem","action":"c5"},
-	{"type":"stretcher"},
-	{"type":"searchentry","name":"SEARCH_ENTRY"},
-	{"type":"toolitem", action:"refresh"},
-	{type:"menu", text:"", icon:"ellipsis-v",
-	 child: [
-		 {"type":"menuitem","action":"set_key_attr"},
-	 ]},
-]
-
-
-# 底部工具栏
-"BOTTOM_TOOLBAR" : [
-	{"type":"stretcher"},
-	{"type":"pagetool","name":"PAGE_TOOL"}
-]
-
-# 详细信息工具栏
-"DETAIL_TOOLBAR": [
-	{"type":"toolitem","action":"save_detail"},
-	{"type":"stretcher"},
-	{"type":"toolitem","action":"copy_detail"},
-	{"type":"toolitem","action":"cancel_detail"},
-	{"type":"toolitem","action":"refresh_detail"}
-]
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/actions/__hooks__.js b/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/actions/__hooks__.js
deleted file mode 100644
index 7d24e7c2aa89349403e8fd54716bdc09f866f2dc..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/actions/__hooks__.js
+++ /dev/null
@@ -1,23 +0,0 @@
-this.afterViewInit = function () {
-    var self = this;
-    var stackup_viewer = self.uiLoader().getObject('stackup');
-    stackup_viewer.setDrawSetting(self.config("stackup.draw_setting"));
-
-    var selector = new TSqlSelectorV2;
-    selector.setTable("pdm_stkmatlib");
-    selector.setWhere("class = 'Core'");
-    selector.setField("DISTINCT family");
-    selector.setOrder(["family ASC"]);
-    var cores = self.runSqlQueryOnThreadSync("TOPSQLTHREAD_SELECT_ARRAYMAP", selector);
-    cores = _.map(cores, function(item) { return { name: item.family, text: item.family } } );
-    self.naviView().getObject('attr_data.core_family').setData('item_list', cores);
-
-    selector.clear();
-    selector.setTable("pdm_stkmatlib");
-    selector.setWhere("class = 'Prepreg'");
-    selector.setField("DISTINCT family");
-    selector.setOrder(["family ASC"]);
-    var pps = self.runSqlQueryOnThreadSync("TOPSQLTHREAD_SELECT_ARRAYMAP", selector);
-    pps = _.map(pps, function(item) { return { name: item.family, text: item.family } } );
-    self.naviView().getObject('attr_data.pp_family').setData('item_list', pps);
-}
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/actions/cancel_detail.js b/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/actions/cancel_detail.js
deleted file mode 100644
index d779d76536b51c3803ec49b85d0e6f176c6853d6..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/actions/cancel_detail.js
+++ /dev/null
@@ -1,23 +0,0 @@
-try {
-  this.reloadItem();
-} catch(e) {
-  print(e);
-}
-
-/*---ACTION---
-ICON: "cancel"
-LABEL: "Cancel"
-LABEL_ZHCN: "取消"
-LABEL_ZHTW: "取消"
-ACCEL: ""
-TOOLTIP: "Cancel the action"
-TOOLTIP_ZHCN: "取消动作"
-TOOLTIP_ZHTW: "取消動作"
-CHECKED: ""
-GROUP: ""
-STYLE: "button_style=text"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: "return (this.isDetailModified()) ? 'enable' : 'hide';"
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/actions/delete.js b/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/actions/delete.js
deleted file mode 100644
index 3509f4a2418a0905579e2fc536f2ba6d60982326..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/actions/delete.js
+++ /dev/null
@@ -1,30 +0,0 @@
-try {
-  var ans = TMessageBox.question(this, this.ttr("Do you want to delete the selected item?"), '', '',
-      [this.ttr('Delete')+':Yes:Yes:Error', this.ttr('Cancel')+':Cancel:Cancel:Normal']);
-  if (ans != 'Yes') {
-    return;
-  }
-  this.deleteItems(this.selectedItems());
-} catch (e) {
-  print(e);
-}
-
-
-/*---ACTION---
-ICON: "times-circle"
-LABEL: "Delete"
-LABEL_ZHCN: "刪除"
-LABEL_ZHTW: "刪除"
-ACCEL: "Delete"
-TOOLTIP: "Delete"
-TOOLTIP_ZHCN: "删除"
-TOOLTIP_ZHTW: "刪除"
-PERMISSION: ""
-CHECKED: ""
-GROUP: ""
-STYLE: "size=small button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: "if(this.selectedItems().length > 0 && !this.isDetailModified()){return 'enable'}else{return 'disable'}"
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/actions/refresh.js b/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/actions/refresh.js
deleted file mode 100644
index a1e87bfa50f4b3f4c30a579b61b9fc2794bed8bc..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/actions/refresh.js
+++ /dev/null
@@ -1,22 +0,0 @@
-try {
-  this.refresh();
-} catch (e) {
-  print(e);
-}
-/*---ACTION---
-ICON: "refresh"
-LABEL: "Refresh"
-LABEL_ZHCN: "刷新"
-LABEL_ZHTW: "刷新"
-ACCEL: "F5"
-TOOLTIP: "Refresh"
-TOOLTIP_ZHCN: "刷新"
-TOOLTIP_ZHTW: "刷新"
-CHECKED: ""
-GROUP: ""
-STYLE: "size=small button_style=icon"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: ""
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/actions/refresh_detail.js b/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/actions/refresh_detail.js
deleted file mode 100644
index 6d474848a9ce3fd9dc56b30305d3cc0fca6c5692..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/actions/refresh_detail.js
+++ /dev/null
@@ -1,22 +0,0 @@
-try {
-  this.reloadItem();
-} catch(e) {
-  print(e);
-}
-/*---ACTION---
-ICON: "refresh"
-LABEL: "Refresh"
-LABEL_ZHCN: "刷新"
-LABEL_ZHTW: "刷新"
-ACCEL: ""
-TOOLTIP: "Reload data from database"
-TOOLTIP_ZHCN: "重新从数据库加载数据"
-TOOLTIP_ZHTW: "重新從數據庫加載數據"
-CHECKED: ""
-GROUP: ""
-STYLE: "button_style=icon"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: "return this.isDetailModified() ? 'hide' : 'enable';"
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/actions/save_detail.js b/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/actions/save_detail.js
deleted file mode 100644
index 49420e218089e83f861149ba43a0f0584f014afb..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/actions/save_detail.js
+++ /dev/null
@@ -1,23 +0,0 @@
-try {
-  this.saveItem();
-} catch(e) {
-  print(e);
-}
-/*---ACTION---
-ICON: "save"
-LABEL: "Save"
-LABEL_ZHCN: "保存"
-LABEL_ZHTW: "保存"
-ACCEL: "Ctrl+S"
-TOOLTIP: "Save"
-TOOLTIP_ZHCN: "保存"
-TOOLTIP_ZHTW: "保存"
-PERMISSION: ""
-CHECKED: ""
-GROUP: ""
-STYLE: " button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: "return (this.isDetailModified()) ? 'enable' : 'disable';"
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/detail.ui.js b/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/detail.ui.js
deleted file mode 100644
index e41bd435d56365cad9c8b03676a108dde4e0305c..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/detail.ui.js
+++ /dev/null
@@ -1,85 +0,0 @@
-function func(self) {
-  var ui = {
-    type: 'TabWidget',
-    child: [
-      {
-        type: 'VBoxLayout',
-        pack: { label: self.ttr('Basic Info') },
-        child: [
-          {
-            type: 'FormGridLayout',
-            child: [
-              {
-                name: 'attr_data.name',
-                type: 'LineEdit',
-                pack: { label: self.ttr('Name') } 
-              },
-              {
-                name: 'layer_count',
-                type: 'LineEdit',
-                pack: { label: self.ttr('Layer Count') },
-                property: { readonly: true } 
-              },
-              {
-                name: 'min_thk',
-                type: 'LineEdit',
-                pack: { label: self.ttr('Min Thk') },
-                property: { readonly: true } 
-              },
-              {
-                name: 'max_thk',
-                type: 'LineEdit',
-                pack: { label: self.ttr('Max Thk') },
-                property: { readonly: true } 
-              },
-              {
-                name: 'attr_data.core_family',
-                type: 'LineEdit',
-                pack: { label: self.ttr('Core Family') },
-                property: { readonly: true } 
-              },
-              {
-                name: 'attr_data.pp_family',
-                type: 'LineEdit',
-                pack: { label: self.ttr('PP Family') },
-                property: { readonly: true } 
-              },
-              {
-                name: 'stackup_code',
-                type: 'LineEdit',
-                pack: { label: self.ttr('Structure') },
-                property: { readonly: true } 
-              },
-              {
-                name: 'attr_data.remark',
-                type: 'PlainTextEdit',
-                pack: { label: self.ttr('Remark') }
-              }
-            ]
-          },
-          {
-            type: 'Stretch'
-          }
-        ]
-      },
-      {
-        type: 'VBoxLayout',
-        pack: { label: self.ttr('Stackup') },
-        property: { margin: 0, spacing: 0 },
-        child: [
-          {
-            name: 'stackup',
-            type: 'topikm6-stackup-viewer-plugin.STACKUPVIEWER',
-            setter: function(obj, value) {
-              obj.setStackupData(JSON.parse(value));
-            }
-          },
-          {
-            type: 'Stretch'
-          }
-        ]
-      }
-    ]
-  };
-  return ui;
-}
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/lang.conf b/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/lang.conf
deleted file mode 100644
index 0557c560fdaf1a4c3495d848602e2e8c6140deab..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/lang.conf
+++ /dev/null
@@ -1,8 +0,0 @@
-"Layer Count": { zhcn: "层数" }
-"Min Thk": { zhcn: "最小板厚" }
-"Max Thk": { zhcn: "最大板厚" }
-"Core Family": { zhcn: "芯板材料" }
-"PP Family": { zhcn: "PP材料" }
-"Structure": { zhcn: "结构" }
-"Basic Info": { zhcn: "基本信息" }
-"Stackup": { zhcn: "叠构图" }
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/module.conf b/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/module.conf
deleted file mode 100644
index 716cee348491787a0518be96d05f0d22c889ed02..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/module.conf
+++ /dev/null
@@ -1,204 +0,0 @@
-# 模块标题
-sys_title: "Stackup Template Lib"
-sys_title_en: "Stackup Template Lib"
-sys_title_zhcn: "叠层模板库"
-sys_title_zhtw: "疊層模板庫"
-
-# 模块图标(普通图标在font awesome中找 http://fontawesome.io/icons/)
-sys_icon: "pdm-job-stackup"
-
-# 模块对应的插件DLL名称
-sys_plugin: "toptemplateclassplugin"
-
-# 模块对应的类名
-sys_class: "TopTemplateClass4"
-
-# 打开模块的权限
-sys_open_right: ""
-
-# 当关闭窗口时,如果提示是否保存,保存调用的action
-sys_save_action: ""
-
-# 该模块用到的枚举列表
-sys_enum_list: []
-
-# 该模块用到的除了Action之外的权限列表
-sys_permission_list: []
-
-navi {
-    __type__: "UiLoader"
-    is_expanded: true
-}
-
-# 主表格
-view {
-  # 数据项, 默认包含表头中配置的数据项
-  data_keys: [ "id", "stackup", "attr_data.remark" ]
-  # 主键
-  primary_key: "id"
-  # 水平表头
-  horizontal_header: [
-    {
-      "name": "attr_data.name",
-      "display": "Name",
-      "displayRole": "$attr_data.name",
-      "resizeMode": "ResizeToContents",
-      "search": "json"
-    },
-    {
-      "name": "layer_count",
-      "display": "Layer Count",
-      "displayRole": "$layer_count",
-      "resizeMode": "ResizeToContents"
-    },
-    {
-      "name": "min_thk",
-      "display": "Min Thk",
-      "displayRole": "$min_thk",
-      "resizeMode": "ResizeToContents"
-    },
-    {
-      "name": "max_thk",
-      "display": "Max Thk",
-      "displayRole": "$max_thk",
-      "resizeMode": "ResizeToContents"
-    },
-    {
-      "name": "attr_data.core_family",
-      "display": "Core Family",
-      "displayRole": "$attr_data.core_family",
-      "resizeMode": "ResizeToContents",
-      "search": "json"
-    },
-    {
-      "name": "attr_data.pp_family",
-      "display": "PP Family",
-      "displayRole": "$attr_data.pp_family",
-      "resizeMode": "ResizeToContents",
-      "search": "json"
-    },
-    {
-      "name": "stackup_code",
-      "display": "Structure",
-      "displayRole": "$stackup_code",
-      "resizeMode": "ResizeToContents"
-    }
-  ]
-  # 默认排序列
-  sort_by: "id DESC"
-  # 数据集
-  data_set {
-    # 数据库表名
-    db_table_name: "pdm_stackstructlib"
-    # 删除标记
-    # 若为空表示做物理删除
-    db_del_flag_key: ""
-    # 过滤项
-    db_filter {
-    }
-  }
-}
-
-
-# 叠构图配置
-stackup.draw_setting: {
-  # 字体设置
-  "font_family": "Microsoft YaHei"
-  # 软硬结合板中为了表示辅材的形状, 用以表示不同的层形状
-  "layer_shape_x" : ["-50","-10","0","50","150","230","330","380","550"],
-  # 层标题
-  "layer_title" : [" "," ","Layer","Drill","Layer Type","Material","RC", "Thickness"],
-  # 层高
-  "layer_height": "20",
-  # 最小长度
-  # 若是HDI板,钻孔增多时,会自动加长
-  "layer_base_lenth": "550",
-  # 层上的文字定义
-  # text: 文字内容 
-  #        DISP. 精度调整后的值
-  #        MAT.  显示材料相关的属性
-  # start_zone: 文字的起始区域,layer_shape_x中的第N个区域开始(从0开始)
-  # offset: 相对于区域的起始点的偏移值,单位:像素
-  # color: 文字颜色, 若不配置颜色,会自动根据背景色算出合适的颜色
-  # size: 文字大小,单位:像素
-  # exclude_display_type: 哪种图形类型显示, 此参数命名错误,应是include_display_type,
-  # expand_only: 只有在展开时才显示
-  "layer_text" : [
-      {"anchor":"center","text":"layer_name","start_zone":"2","offset":"3","color":"black","exclude_display_type" : ["2","1"]},
-      {"anchor":"center","text":"layer_type","start_zone":"4","offset":"3","color":"black","exclude_display_type" : ["1"]},
-      {"anchor":"center","text":"MAT.description","start_zone":"5","offset":"10","color":"black", "size": 12, "exclude_display_type" : ["1"]},
-      {"anchor":"center","text":"MAT.resin_content","start_zone":"6","offset":"10","color":"black", "size": 12, "exclude_display_type" : ["1"]},
-      {"anchor":"center","text":"DISP.final_thk","start_zone":"7","offset":"5","color":"black","exclude_display_type" : ["1"]}
-    ],
-  # 钻孔形状宽度
-  "drl_shape_width" : "40",
-    # 钻孔的间距
-  "drl_shape_spacing" : "0",
-  # 镭射钻孔形状描述
-  "laser_shape" : ["2","10","13","5"],
-  "laser_color" : "#D8934C",
-  "laser_filler_color" : { 
-    "" : "white",
-    "None" : "white",
-    "SM Plugin" : "#0F8E0D",
-    "Resin Plugin" : "#D8C6AA",
-    "Via Filling" : "#D8934C",
-    "Resin Plugin + Capping" : "#D8987E"
-  },
-
-  "depth_laser_shape" : ["2","10","13","5"],
-  "depth_laser_color" : "#D8934C",
-  "depth_laser_filler_color" : { 
-    "" : "white",
-    "None" : "white",
-    "SM Plugin" : "#0F8E0D",
-    "Resin Plugin" : "#D8C6AA",
-    "Via Filling" : "#D8934C",
-    "Resin Plugin + Capping" : "#D8987E"
-  },
-
-  "uv_laser_shape" : ["2","10","13","5"],
-  "uv_laser_color" : "#D8934C",
-  "uv_laser_filler_color" : { 
-    "" : "white",
-    "None" : "white",
-    "SM Plugin" : "#0F8E0D",
-    "Resin Plugin" : "#D8C6AA",
-    "Via Filling" : "#D8934C",
-    "Resin Plugin + Capping" : "#D8987E"
-  },
-
-  "ivh_shape" : ["8"],
-  "ivh_color"	: "#D8934C",
-  
-  "pth_shape" : ["3","10","7"],
-  "pth_color" : "#D8934C",
-
-  "npth_shape" : ["8"],
-  "npth_color" : "white",
-
-  "mech_blind_shape": ["3","10","7"],
-  "mech_blind_color": "#D8934C",
-
-  "depth_milling_shape": ["16"],
-  "depth_milling_color": "white",
-
-  "zone_bgcolor" : "white",
-  "zone_line_color" : "white",
-  "zone_line_width" : "0",
-  "zone_header_margin" : "10",
-  "zone_header_bgcolor" : "#76AB43",
-  "zone_header_height" : "40",
-  "zone_bottom_margin" : "10",
-  "zone_bottom_bgcolor" : "#C8C8C8",
-  "zone_bottom_height" : "80",
-  "zone_main_top_margin" : "10",
-  "zone_main_about_margin" : "0",
-  "zone_main_bot_margin" : "10",
-  "zone_header_text": [
-    {"anchor":"center","color":"white","offset_y":-30,"text":"zone_name","offset_x":0,"font":"Sans 10 Bold"},
-    {"anchor":"center","color":"white","offset_y":-15,"text":"zone_title","offset_x":0,"font":"Sans Bold 12"},
-    {"anchor":"center","color":"white","offset_y":0,"text":"zone_type","offset_x":0,"font":"Sans 10 Bold"},
-    {"anchor":"center","color":"white","offset_y":15,"text":"remark","dist_y":15,"offset_x":0,"font":"Sans Bold 10"}
-  ]
-}
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/navi.ui.js b/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/navi.ui.js
deleted file mode 100644
index b688286a93c3b966cf4c5f9f009cfc06fd8546db..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/navi.ui.js
+++ /dev/null
@@ -1,38 +0,0 @@
-function func(self) {
-    return {
-        type: 'FormGridLayout',
-        child: [
-            {
-                name: 'layer_count',
-                type: 'IntLineEdit',
-                pack: { label: self.ttr('Layer Count') }
-            },
-            {
-                name: 'attr_data.core_family',
-                type: 'ComboBox',
-                pack: { label: self.ttr('Core Family') },
-                property: {
-                    searchable: true,
-                    user_data: { field_name: "attr_data->>'core_family'", operator: 'LIKE' }
-                }
-            },
-            {
-                name: 'attr_data.pp_family',
-                type: 'ComboBox',
-                pack: { label: self.ttr('PP Family') },
-                property: {
-                    searchable: true,
-                    user_data: { field_name: "attr_data->>'pp_family'", operator: 'LIKE' }
-                }
-            },
-            {
-                name: 'stackup_code',
-                type: 'LineEdit',
-                pack: { label: self.ttr('Structure') },
-                property: {
-                    user_data: { operator: 'LIKE' }
-                }
-            }
-        ]
-    };
-}
diff --git a/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/uim.conf b/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/uim.conf
deleted file mode 100644
index d0203893f257d5069dd120b7755f668d1294846c..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/pdm-stackup-template/uim.conf
+++ /dev/null
@@ -1,27 +0,0 @@
-# 工具栏
-"MAIN_TOOLBAR": [
-	{"type":"stretcher"},
-	{"type":"searchentry","name":"SEARCH_ENTRY"}
-  {"type":"toolitem","action":"refresh"}
-]
-
-# 表格的右键菜单
-"TABLEVIEW_POPUP": [
-	{"type":"menuitem","action":"delete"},
-	{"type":"separator"},
-	{"type":"menuitem","action":"refresh"}
-]
-
-# 底部工具栏
-"BOTTOM_TOOLBAR" : [
-	{"type":"stretcher"},
-	{"type":"pagetool","name":"PAGE_TOOL"}
-]
-
-# 详细信息工具栏
-"DETAIL_TOOLBAR": [
-	{"type":"toolitem","action":"save_detail"},
-	{"type":"stretcher"},
-	{"type":"toolitem","action":"cancel_detail"},
-	{"type":"toolitem","action":"refresh_detail"}
-]
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/sec-table-report-temp1/actions/__hooks__.js b/demo/examples/module/TEMPLATEDEMO/sec-table-report-temp1/actions/__hooks__.js
deleted file mode 100644
index c620b06c2d35553ade4861a4088bad85ebc9de74..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/sec-table-report-temp1/actions/__hooks__.js
+++ /dev/null
@@ -1,68 +0,0 @@
-//获取总表数据
-this.getTotalData = function (conditionMap) {
-    var treeName = "test";
-    var view = {
-        "data_keys": ["zone", "kpi_dept", "past_due", "past_due.color"],
-        "horizontal_header": [
-            {
-                "name": "zone",
-                "display": "Zone",
-                "displayRole": "$zone"
-            },
-            {
-                "name": "kpi_dept",
-                "display": "Kpi dept",
-                "displayRole": "$kpi_dept"
-            },
-            {
-                "name": "past_due",
-                "display": "Past due",
-                "displayRole": "$past_due",
-                "backgroundRole": "$past_due.color"
-            }
-        ]
-    }
-    var treeData = [];
-    for (var i = 0; i < 5; i++) {
-        var data = {
-            "id": 1,
-            "zone": "Z0",
-            "kpi_dept": "Unreleased",
-            "past_due": "14",
-            "past_due.color": "pink",
-            "CHILDREN": [
-                {
-                    "zone": "Z00",
-                    "kpi_dept": "release",
-                    "past_due": "14",
-                    "past_due.color": "#FF99CC"
-                },
-                {
-                    "zone": "Z01",
-                    "kpi_dept": "release",
-                    "past_due": "14",
-                    "past_due.color": "#FF99CC"
-                },
-                {
-                    "zone": "Z02",
-                    "kpi_dept": "release",
-                    "past_due": "14",
-                    "past_due.color": "#FF99CC"
-                }
-            ]
-        };
-        treeData.push(data)
-    }
-    var totalData = {};
-    totalData['name'] = treeName;
-    totalData['view'] = view;
-    totalData['data'] = treeData;
-    return totalData;
-}
-
-//获取分表数据
-this.getSubData = function (cellData) {
-    var detailData = this.getTotalData(cellData);
-    detailData['name'] = APP.getToday() + '_' +_.random(0, 100);
-    return detailData;
-}
diff --git a/demo/examples/module/TEMPLATEDEMO/sec-table-report-temp1/actions/collapseAll.js b/demo/examples/module/TEMPLATEDEMO/sec-table-report-temp1/actions/collapseAll.js
deleted file mode 100644
index 16e11610eb1093629ea8ebef3c51b9a3f6f05800..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/sec-table-report-temp1/actions/collapseAll.js
+++ /dev/null
@@ -1,23 +0,0 @@
-try {
-    this.collapseAll();
-} catch (e) {
-    print(_.toString(e));
-}
-/*---ACTION---
-ICON: "minus-square-o"
-LABEL: "Collapse All"
-LABEL_ZHCN: "折叠全部"
-LABEL_ZHTW: "折疊全部"
-ACCEL: ""
-TOOLTIP: "Collapse All"
-TOOLTIP_ZHCN: "折叠全部"
-TOOLTIP_ZHTW: "折疊全部"
-PERMISSION: ""
-CHECKED: ""
-GROUP: ""
-STYLE: "button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: ""
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/sec-table-report-temp1/actions/expandAll.js b/demo/examples/module/TEMPLATEDEMO/sec-table-report-temp1/actions/expandAll.js
deleted file mode 100644
index 96e86c24f08fcb00d5fbdb748683711404c09404..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/sec-table-report-temp1/actions/expandAll.js
+++ /dev/null
@@ -1,23 +0,0 @@
-try {
-    this.expandAll();
-} catch (e) {
-    print(_.toString(e));
-}
-/*---ACTION---
-ICON: "plus-square-o"
-LABEL: "Expand All"
-LABEL_ZHCN: "展开全部"
-LABEL_ZHTW: "展開全部"
-ACCEL: ""
-TOOLTIP: "Expand All"
-TOOLTIP_ZHCN: "展开全部"
-TOOLTIP_ZHTW: "展開全部"
-PERMISSION: ""
-CHECKED: ""
-GROUP: ""
-STYLE: "button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: ""
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/sec-table-report-temp1/actions/export_excel.js b/demo/examples/module/TEMPLATEDEMO/sec-table-report-temp1/actions/export_excel.js
deleted file mode 100644
index 953e4c00bc4a34d2017dca0e4432423c41406237..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/sec-table-report-temp1/actions/export_excel.js
+++ /dev/null
@@ -1,145 +0,0 @@
-importPackage("moment");
-importPackage('ikm.ole');
-
-function exportToExcel(field_text_list, field_name_list, allData, excel) {
-    //表头字段
-    for (var i = 0; i< field_text_list.length; i++) {
-        var range = String.fromCharCode(65 + i) + "1";
-        excel.setRangeValue(range, field_text_list[i]);
-        excel.setRangeHorizontalAlignment(range, -4108);//-4108 x1center 水平居中
-        var font_map = {
-            Size: 12,
-            Bold: true,
-            Color: -11480942,
-            ThemeColor: 1
-        };
-        excel.setRangeFont(range, font_map);
-        excel.setRangeBackgroundColor(range, '#64CC33'); //背景色设为绿色
-        excel.autoFitColumns(String.fromCharCode(65 + i));
-    }
-
-    //数据
-    var row = 2;
-    _.forEach(allData, function (v) {
-        var j = 0;
-        _.forEach(field_name_list, function (v2) {
-            var cell = excel.getCell(row, j + 1);
-            excel.setCellValue(cell, _.toString(v[v2]));
-            j++;
-        })
-        row++;
-    })
-
-    //边框
-    var row = excel.getUsedRows();
-    var column = excel.getUsedColumns();
-    var rangecolunmn = String.fromCharCode(65 + column - 1);
-    var used_range = _.format("A1:{0}{1}", rangecolunmn, row);
-    var border = {
-        Color: -4165632,
-        LineStyle: 1,
-        TintAndShader: 0,
-        Weight: 2
-    };
-    excel.setRangeBorder(used_range, border);
-}
-function treeData2TableData(iDataLst, iChildrenKey) {
-    var allDataLst = [];
-    _.forEach(iDataLst, function (item) {
-        var childrenLst = item[iChildrenKey];
-        delete item[iChildrenKey];
-        allDataLst.push(item);
-        if (!_.isEmpty(childrenLst)) {
-            allDataLst = allDataLst.concat(treeData2TableData(childrenLst, iChildrenKey));
-        }
-    })
-    return allDataLst;
-}
-
-try {
-    var self = this;
-    var chooseDlg = new TTableChooserDialog();
-    chooseDlg.setTitle(this.ttr("Select Export Tab"));
-    chooseDlg.setHeaderItem([
-        {},
-        {
-            "name": "name",
-            "display": self.ttr("Name"),
-            "displayRole": "$name",
-            "resizeMode": "Stretch"
-        }
-    ]);
-    chooseDlg.setPrimaryKey("index");
-    chooseDlg.setDataKeyList(["index", "name"]);
-    chooseDlg.loadAllData(this.allTabInfo());
-    var selectedTabLst = chooseDlg.run();
-    if (selectedTabLst.length == 0) {
-        return;
-    }
-    var moduleName = String(this.moduleName());
-    moduleName = moduleName.replace(/\-/g, " ");
-    var fileName = _.format("{0} {1}.xlsx", moduleName, moment().format("YYYYMMDDHHmmss"));
-    var fileDlg = new TFileDialog(this.ttr("Please select save file"), fileName);
-    fileDlg.setNameFilters(["EXCEL(*.xlsx)"]);
-    fileDlg.setAcceptMode("AcceptSave");
-    var strLst = fileDlg.run();
-    if (strLst.length == 0 ) {
-        return;
-    }
-    var absoluteFileName = String(strLst[0]);
-
-    var excel = new TExcel();
-    excel.setExcelVisible(true);
-    excel.addBook();
-
-    var i = 1;
-    _.forEach(selectedTabLst, function (v) {
-        var index = _.toNumber(v['index']);
-        var tabName = v['name'];
-        var treeView = self.getTreeView(index);
-        if (treeView) {
-            if (i > excel.getSheetsCount()) {
-                excel.appendSheet(tabName);
-            }
-            excel.selectSheet(i);
-            excel.setSheetName(tabName);
-            var headerItems = treeView.headerItem();
-            var dataLst = treeView.allDataMap();
-            var allData = treeData2TableData(dataLst, "CHILDREN");
-            var field_text_list = [];
-            var field_name_list = [];
-            _.forEach(headerItems, function (v) {
-                field_text_list.push(v['display']);
-                field_name_list.push(v['displayRole'].replace('$', ''));
-            });
-            print("field_text_list" + _.toString(field_text_list));
-            exportToExcel(field_text_list, field_name_list, allData, excel);
-            i++;
-        }
-    })
-    excel.saveAsBook(absoluteFileName.replace(/\//g, "\\"));
-    excel.closeBook();
-    excel.quitExcel();
-    this.alertOk(this.ttr("Export success!"));
-} catch (e) {
-    print(e);
-}
-
-/*---ACTION---
-ICON: "export"
-LABEL: "Export Excel"
-LABEL_ZHCN: "导出Excel"
-LABEL_ZHTW: "導出Excel"
-ACCEL: ""
-TOOLTIP: "Export Excel"
-TOOLTIP_ZHCN: "导出Excel"
-TOOLTIP_ZHTW: "導出Excel"
-PERMISSION: ""
-CHECKED: ""
-GROUP: ""
-STYLE: "button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: ""
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/sec-table-report-temp1/actions/search.js b/demo/examples/module/TEMPLATEDEMO/sec-table-report-temp1/actions/search.js
deleted file mode 100644
index 9f971514b5d2491b4abe79efa58d7318c7b5e3f2..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/sec-table-report-temp1/actions/search.js
+++ /dev/null
@@ -1,35 +0,0 @@
-try {
-    var errLst = this.uiLoader().validateAll("COMMIT", true, "ERROR");
-    if (!_.isEmpty(errLst)) {
-        var errStrLst = [];
-        for (var i in errLst) {
-            errStrLst.push(errLst[i]['text']);
-        }
-        TMessageBox.error(this, this.ttr("Validate Error"), errStrLst.join("\n"));
-        return;
-    }
-    var uiLoaderData = this.uiLoaderValues();
-    var totalData = this.getTotalData(uiLoaderData);
-    this.reopenTotalTab(totalData);
-} catch (e) {
-    TMessageBox.error(this, this.ttr("Search Failed"), _.toString(e))
-    print(e);
-}
-/*---ACTION---
-ICON: "search"
-LABEL: "Search"
-LABEL_ZHCN: "查询"
-LABEL_ZHTW: "查詢"
-ACCEL: ""
-TOOLTIP: "Search"
-TOOLTIP_ZHCN: "查询"
-TOOLTIP_ZHTW: "查詢"
-PERMISSION: ""
-CHECKED: ""
-GROUP: ""
-STYLE: "button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: ""
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/sec-table-report-temp1/actions/set_condition_ui.js b/demo/examples/module/TEMPLATEDEMO/sec-table-report-temp1/actions/set_condition_ui.js
deleted file mode 100644
index 3b8950aa4e72c36ebb23a3f8395d5585fe65fba6..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/sec-table-report-temp1/actions/set_condition_ui.js
+++ /dev/null
@@ -1,24 +0,0 @@
-try {
-    this.onSetUiClicked();
-} catch (e) {
-    print(e);
-}
-
-/*---ACTION---
-ICON: "cog"
-LABEL: "Set Condition Ui"
-LABEL_ZHCN: "编辑界面"
-LABEL_ZHTW: "編輯界面"
-ACCEL: ""
-TOOLTIP: "Set Condition Ui"
-TOOLTIP_ZHCN: "编辑界面"
-TOOLTIP_ZHTW: "編輯界面"
-PERMISSION: ""
-CHECKED: ""
-GROUP: ""
-STYLE: "button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: ""
----ACTION---*/
diff --git a/demo/examples/module/TEMPLATEDEMO/sec-table-report-temp1/lang.conf b/demo/examples/module/TEMPLATEDEMO/sec-table-report-temp1/lang.conf
deleted file mode 100644
index 8b137891791fe96927ad78e64b0aad7bded08bdc..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/sec-table-report-temp1/lang.conf
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/demo/examples/module/TEMPLATEDEMO/sec-table-report-temp1/module.conf b/demo/examples/module/TEMPLATEDEMO/sec-table-report-temp1/module.conf
deleted file mode 100644
index d8b054c06898b9c32bdd4dd72a70f3e4ea9f7c76..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/sec-table-report-temp1/module.conf
+++ /dev/null
@@ -1,41 +0,0 @@
-# 模块标题
-sys_title: "SEC TABLE REPORT TEMP1"
-sys_title_en: "SEC TABLE REPORT TEMP1"
-sys_title_zhcn: "SEC表格类报表模板1"
-sys_title_zhtw: "SEC表格类报表模板1"
-
-# 模块图标
-sys_icon: ""
-
-# 模块对应的插件DLL名称
-sys_plugin: "toptemplateclassplugin"
-
-# 模块对应的类名
-sys_class: "TopTemplateClass6"
-
-# 打开模块的权限
-sys_open_right: ""
-
-# 当关闭窗口时,如果提示是否保存,保存调用的action
-sys_save_action: ""
-
-# 该模块用到的枚举列表
-sys_enum_list: []
-
-# 该模块用到的除了Action之外的权限列表
-sys_permission_list: []
-
-# 左侧占用比例
-width_ratio: 0.15
-
-# 左侧UI
-condition_ui{
-    table_name: "pub_conf",
-    path_name: "path",
-    path_value: "ConditionUi",
-    field: "json_data",
-    field_format: {
-        "json_data": "json"
-    }
-}
-
diff --git a/demo/examples/module/TEMPLATEDEMO/sec-table-report-temp1/uim.conf b/demo/examples/module/TEMPLATEDEMO/sec-table-report-temp1/uim.conf
deleted file mode 100644
index b6387112cadc4e2a1f76ea9443ab3af1495ff214..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/sec-table-report-temp1/uim.conf
+++ /dev/null
@@ -1,20 +0,0 @@
-# 左侧ui工具栏
-"CONDITION_TOOLBAR": [
-    {"type":"toolitem","action":"search"},
-    {"type":"stretcher"},
-    {type:"menu", text:"", icon:"ellipsis-v",
-    child: [
-        {"type":"menuitem","action":"set_condition_ui"}
-    ]}
-]
-# 工具栏
-"MAIN_TOOLBAR": [
-    {"type":"toolitem","action":"export_excel"},
-    {"type":"stretcher"}
-]
-
-#所有树形控件的菜单
-"TREEVIEW_POPUP": [
-    {"type":"menuitem","action":"collapseAll"},
-    {"type":"menuitem","action":"expandAll"}
-]
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/actions/cancel_detail.js b/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/actions/cancel_detail.js
deleted file mode 100644
index 9eb4ceb8f1ed8d7103adaacc679446dacfd8d620..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/actions/cancel_detail.js
+++ /dev/null
@@ -1,23 +0,0 @@
-try {
-  this.reloadItem();
-} catch(e) {
-  print(e);
-}
-
-/*---ACTION---
-ICON: "cancel"
-LABEL: "Cancel"
-LABEL_ZHCN: "取消"
-LABEL_ZHTW: "取消"
-ACCEL: ""
-TOOLTIP: "Cancel Edit"
-TOOLTIP_ZHCN: "取消编辑"
-TOOLTIP_ZHTW: "刷新編輯"
-CHECKED: ""
-GROUP: ""
-STYLE: "button_style=text"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: "return (this.isDetailModified()) ? 'enable' : 'hide';"
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/actions/copy_detail.js b/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/actions/copy_detail.js
deleted file mode 100644
index b6575ff3d9da682bdcbad460ec22be224f71c1c3..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/actions/copy_detail.js
+++ /dev/null
@@ -1,24 +0,0 @@
-try {
-  this.copyItem();
-} catch(e) {
-  print(e);
-}
-
-/*---ACTION---
-ICON: "copy"
-LABEL: "Copy"
-LABEL_ZHCN: "复制"
-LABEL_ZHTW: "複製"
-ACCEL: ""
-TOOLTIP: "Copy"
-TOOLTIP_ZHCN: "复制"
-TOOLTIP_ZHTW: "複製"
-PERMISSION: ""
-CHECKED: ""
-GROUP: ""
-STYLE: "button_style=icon"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: "return this.isDetailModified() ? 'hide' : 'enable';"
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/actions/delete.js b/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/actions/delete.js
deleted file mode 100644
index d840dea86623cce996b33795cd4e213cc8635d3b..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/actions/delete.js
+++ /dev/null
@@ -1,30 +0,0 @@
-try {
-  var ans = TMessageBox.question(this, this.ttr("Are you sure to delete selected items?"), '', '',
-      [this.ttr('Delete')+':Yes:Yes:Primary', this.ttr('Cancel')+':Cancel:Cancel:Normal']);
-  if (ans != 'Yes') {
-    return;
-  }
-  this.deleteItems(this.selectedItems());
-} catch (e) {
-  print(e);
-}
-
-
-/*---ACTION---
-ICON: "times-circle"
-LABEL: "Delete"
-LABEL_ZHCN: "刪除"
-LABEL_ZHTW: "刪除"
-ACCEL: "Delete"
-TOOLTIP: "Delete"
-TOOLTIP_ZHCN: "删除"
-TOOLTIP_ZHTW: "刪除"
-PERMISSION: ""
-CHECKED: ""
-GROUP: ""
-STYLE: "size=small button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: "if(this.selectedItems().length > 0 && !this.isDetailModified()){return 'enable'}else{return 'disable'}"
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/actions/new.js b/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/actions/new.js
deleted file mode 100644
index 590fc7ea676bd1fd2e02117d64f074b32ffe53ee..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/actions/new.js
+++ /dev/null
@@ -1,24 +0,0 @@
-try {
-  this.newItem();
-} catch (e) {
-  print(e);
-}
-
-/*---ACTION---
-ICON: "plus"
-LABEL: "New"
-LABEL_ZHCN: "新建"
-LABEL_ZHTW: "新建"
-ACCEL: "Ctrl+N"
-TOOLTIP: "New"
-TOOLTIP_ZHCN: "新建"
-TOOLTIP_ZHTW: "新建"
-PERMISSION: ""
-CHECKED: ""
-GROUP: ""
-STYLE: "button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: "if (!this.isDetailModified()){return 'enable'} else {return 'disable'}"
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/actions/refresh.js b/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/actions/refresh.js
deleted file mode 100644
index 2e614ee674d6491c2e204d3076c5ac08e43f382c..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/actions/refresh.js
+++ /dev/null
@@ -1,22 +0,0 @@
-try {
-    this.refresh();
-} catch (e) {
-    print(e);
-}
-/*---ACTION---
-ICON: "refresh"
-LABEL: "Refresh"
-LABEL_ZHCN: "刷新"
-LABEL_ZHTW: "刷新"
-ACCEL: "F5"
-TOOLTIP: "Refresh"
-TOOLTIP_ZHCN: "刷新"
-TOOLTIP_ZHTW: "刷新"
-CHECKED: ""
-GROUP: ""
-STYLE: "size=small button_style=icon"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: ""
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/actions/refresh_detail.js b/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/actions/refresh_detail.js
deleted file mode 100644
index 6d474848a9ce3fd9dc56b30305d3cc0fca6c5692..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/actions/refresh_detail.js
+++ /dev/null
@@ -1,22 +0,0 @@
-try {
-  this.reloadItem();
-} catch(e) {
-  print(e);
-}
-/*---ACTION---
-ICON: "refresh"
-LABEL: "Refresh"
-LABEL_ZHCN: "刷新"
-LABEL_ZHTW: "刷新"
-ACCEL: ""
-TOOLTIP: "Reload data from database"
-TOOLTIP_ZHCN: "重新从数据库加载数据"
-TOOLTIP_ZHTW: "重新從數據庫加載數據"
-CHECKED: ""
-GROUP: ""
-STYLE: "button_style=icon"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: "return this.isDetailModified() ? 'hide' : 'enable';"
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/actions/save_detail.js b/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/actions/save_detail.js
deleted file mode 100644
index 49420e218089e83f861149ba43a0f0584f014afb..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/actions/save_detail.js
+++ /dev/null
@@ -1,23 +0,0 @@
-try {
-  this.saveItem();
-} catch(e) {
-  print(e);
-}
-/*---ACTION---
-ICON: "save"
-LABEL: "Save"
-LABEL_ZHCN: "保存"
-LABEL_ZHTW: "保存"
-ACCEL: "Ctrl+S"
-TOOLTIP: "Save"
-TOOLTIP_ZHCN: "保存"
-TOOLTIP_ZHTW: "保存"
-PERMISSION: ""
-CHECKED: ""
-GROUP: ""
-STYLE: " button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: "return (this.isDetailModified()) ? 'enable' : 'disable';"
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/detail.ui.js b/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/detail.ui.js
deleted file mode 100644
index decfed8d68b3cbae1a59a948ee2511806661ed7d..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/detail.ui.js
+++ /dev/null
@@ -1,332 +0,0 @@
-[
-    {
-        name: "basic_info_area",
-        type: "ScrollArea",
-        property: {
-            widget_resizable: true,
-            frame_shape: 'NoFrame'
-        },
-        pack: { label: self.ttr('Basic Info') },
-        child: [
-            {
-                name: 'formlayout',
-                type: 'FormGridLayout',
-                property: {
-                    // label_alignment: 'AlignTop | AlignRight',
-                    // horizontal_spacing: 10,
-                    // vertical_spacing: 10,
-                    // margin: 10,
-                    columns: 2
-                },
-                child: [ 
-                    {
-                        name: "id",
-                        type: "LineEdit",
-                        title: self.ttr(""),
-                        pack: {column_span: 2},
-                        initCallback: function(obj,value,self) {
-                            obj.setVisible(false)
-                        }
-                    },
-                    {
-                        name: "attr_data.machine_code",
-                        type: "LineEdit",
-                        title: self.ttr("Machine Code"),
-                        property: { readonly: true},
-                        validate: 'NOTNULL',
-                        child: [
-                            {
-                                name: "choose_machine",
-                                type: "ToolButton",
-                                property: {
-                                    text: self.ttr("Choose")
-                                },
-                                callback: function(){
-                                    var query = new TSqlQueryV2(T_SQLCNT_POOL.getSqlDatabase());
-                                    var sql = "SELECT id,code,name FROM tpm_machine ORDER BY id DESC";
-                                    try {
-                                        var dialog = new TTableViewDialog(self)
-                                        dialog.width = 400;
-                                        dialog.height = 600;
-                                        dialog.setTitle(self.ttr("Choose Machine"));
-                                        dialog.setButtons([self.ttr('Ok')+':Ok:Ok:Primary',self.ttr('Cancel')+':Cancel:Cancel:ERROR']);
-                                        dialog.setPrimaryKey('id');
-                                        dialog.setSearchKeys(['code','name']);
-                                        dialog.setHeaderItem(
-                                            [
-                                                {
-                                                },
-                                                {
-                                                    name: 'id',
-                                                    display: self.ttr('ID'),
-                                                    displayRole: '$id'
-                                                },
-                                                {
-                                                    name: 'code',
-                                                    display: self.ttr('Machine Code'),
-                                                    displayRole: '$code',
-                                                    size: 100
-                                                },
-                                                {
-                                                    name: 'name',
-                                                    display: self.ttr('Machine Name'),
-                                                    displayRole: '$name',
-                                                    size: 200
-                                                }
-                                            ]
-                                        );
-                                        dialog.setDataKeyList(['id','code','name']);
-                                        dialog.loadData(query.selectArrayMap(sql,{}));
-                                        dialog.refreshData(true);
-                                        var ret = dialog.run();
-                                        if(_.isEmpty(ret)) return;
-                                        this.getObject('attr_data.machine_code').setData('value',ret[0]['code']);
-                                        this.getObject('attr_data.machine_name').setData('value',ret[0]['name']);
-                                        this.getObject('machine_id').setData('value',ret[0]['id']);
-                                    } catch(e) {
-                                        GUI.msgbox({detail: e})
-                                        print(e)
-                                    }
-                                }
-                            }
-                        ]
-                    },
-                    {
-                        name: "attr_data.machine_name",
-                        type: "LineEdit",
-                        title: self.ttr("Machine Name"),
-                        state: function(obj,self){
-                            return 'disable';
-                        }
-                    },
-                    {
-                        name: "class",
-                        type: "ComboBox",
-                        title: self.ttr("Maintenance Type"),
-                        property: {
-                            item_list: TOPENM.enumList("tpm-machine-maintenance-plan-class").toComboList()
-                        },
-                        validate: 'NOTNULL'
-                    },
-                    {
-                        name: "title",
-                        type: "LineEdit",
-                        title: self.ttr("Title"),
-                    },
-                    {
-                        name: "priority",
-                        type: "ComboBox",
-                        title: self.ttr("Priority"),
-                        property: {
-                            item_list: TOPENM.enumList("tpm-machine-maintenance-plan-priority").toComboList()
-                        },
-                    },
-                    {
-                        name: "category",
-                        type: "ComboBox",
-                        title: self.ttr("Maintenance Category"),
-                        property: {
-                            item_list: TOPENM.enumList("tpm-machine-maintenance-plan-category").toComboList()
-                        },
-                    },
-                    {
-                        name: "execution_cycle",
-                        type: "ComboBox",
-                        title: self.ttr("Execution Type"),
-                        property: {
-                            item_list: TOPENM.enumList("tpm-machine-maintenance-plan-execution-cycle").toComboList()
-                        },
-                        validate: 'NOTNULL'
-                    },
-                    {
-                        type: 'HBoxLayout',
-                        title: self.ttr("Execution Cycle"),
-                        state: function(obj,self){
-                            if (this.getValue("execution_cycle") == "cycle"){
-                                return 'show';
-                            }
-                            return 'hide';
-                        },
-                        child: [
-                            {
-                                name: "attr_data.cycle_value",
-                                type: "IntLineEdit",
-                                title: self.ttr("Cycle Value"),
-                                state: function(obj,self){
-                                    if (this.getValue("execution_cycle") == "cycle"){
-                                        return 'show';
-                                    }
-                                    return 'hide';
-                                },
-                            },
-                            {
-                                name: "attr_data.cycle_unit",
-                                type: "ComboBox",
-                                title: self.ttr("Cycle Unit"),
-                                state: function(obj,self){
-                                    if (this.getValue("execution_cycle") == "cycle"){
-                                        return 'show';
-                                    }
-                                    return 'hide';
-                                },
-                                property: {
-                                    item_list: TOPENM.enumList("tpm-machine-maintenance-plan-cycle").toComboList()
-                                },
-                            }
-                        ]
-                    },
-                    {
-                        name: "last_execution_time",
-                        type: "DateTimeEdit",
-                        title: self.ttr("Last Execution Time"),
-                        state: function(obj,self){
-                            return 'disable';
-                        },
-                        getter: function(obj,self){
-                            if(_.isEmpty(obj.getData())){
-                                return null;
-                            }
-                            return obj.getData();
-                        }
-                    },
-                    {
-                        name: "next_execution_time",
-                        type: "DateTimeEdit",
-                        title: self.ttr("Next Execution Time"),
-                        getter: function(obj,self){
-                            if(_.isEmpty(obj.getData())){
-                                return null;
-                            }
-                            return obj.getData();
-                        },
-                        validate: "NOTNULL"
-                    },
-                    {
-                        name: "status",
-                        type: "ComboBox",
-                        title: self.ttr("Status"),
-                        property: {
-                            item_list: TOPENM.enumList("tpm-machine-maintenance-plan-status").toComboList()
-                        }
-                    },
-                    {
-                        type: 'HBoxLayout'
-                    },
-                    {
-                        name: "maintenance_person_name",
-                        type: "LineEdit",
-                        title: self.ttr("Maintenance Person"),
-                        pack: {column_span: 2},
-                        getter: function(obj,self){
-                            if (_.isEmpty(obj.getData())){
-                                return null;
-                            }
-                            return obj.getData().split(',');
-                        },
-                        setter: function(obj,val,self){
-                            if (_.isEmpty(val))return;
-                            val = val.replace('{','[');
-                            val = val.replace('}',']');
-                            obj.setData('value',eval('(' + val + ')').join(','))
-                        },
-                        child: [
-                            {
-                                name: "choose_person",
-                                type: "ToolButton",
-                                property: {
-                                    text: self.ttr("Choose")
-                                },
-                                callback: function(){
-                                    var query = new TSqlQueryV2(T_SQLCNT_POOL.getSqlDatabase());
-                                    var sql = "SELECT id,fullname FROM sys_user ORDER BY id DESC";
-                                    try {
-                                        var dialog = new TTableViewDialog(self)
-                                        dialog.width = 400;
-                                        dialog.height = 600;
-                                        dialog.setTitle(self.ttr("Choose Person"));
-                                        dialog.setButtons([self.ttr('Ok')+':Ok:Ok:Primary',self.ttr('Cancel')+':Cancel:Cancel:ERROR']);
-                                        dialog.setPrimaryKey('id');
-                                        dialog.setSearchKeys(['fullname']);
-                                        dialog.setSelectionMode(3);
-                                        dialog.setHeaderItem(
-                                            [
-                                                {
-                                                },
-                                                {
-                                                    name: 'id',
-                                                    display: self.ttr('ID'),
-                                                    displayRole: '$id'
-                                                },
-                                                {
-                                                    name: 'fullname',
-                                                    display: self.ttr('Name'),
-                                                    displayRole: '$fullname',
-                                                    size: 200
-                                                }
-                                            ]
-                                        );
-                                        dialog.setDataKeyList(['id','fullname']);
-                                        dialog.loadData(query.selectArrayMap(sql,{}));
-                                        dialog.refreshData(true);
-                                        var ret = dialog.run();
-                                        if(_.isEmpty(ret)) return;
-                                        var idList = [];
-                                        var nameList = [];
-                                        _.each(ret,function(people){
-                                            idList.push(people.id);
-                                            nameList.push(people.fullname)
-                                        });
-                                        this.getObject('maintenance_person_name').setData('value',nameList.join(','));
-                                        this.getObject('maintenance_person_ids').setData('value',idList.join(','));
-                                    } catch(e) {
-                                        GUI.msgbox({detail: e})
-                                        print(e)
-                                    }
-                                }
-                            }
-                        ]
-                    },
-                    {
-                        name: "description",
-                        type: "PlainTextEdit",
-                        title: self.ttr("Maintenance Content"),
-                        pack: {column_span: 2},
-                        property: {
-                            min_row_count: 8
-                        }
-                    },
-                    {
-                        name: "maintenance_person_ids",
-                        type: "LineEdit",
-                        pack: {column_span: 2},
-                        initCallback: function(obj,value,self) {
-                            obj.setVisible(false)
-                        },
-                        getter: function(obj,self){
-                            if (_.isEmpty(obj.getData())){
-                                return null;
-                            }
-                            return obj.getData().split(',');
-                        },
-                        setter: function(obj,val,self){
-                            if (_.isEmpty(val))return;
-                            val = val.replace('{','[');
-                            val = val.replace('}',']');
-                            obj.setData('value',eval('(' + val + ')').join(','))
-                        },
-                    },
-                    {
-                        name: "machine_id",
-                        type: "LineEdit",
-                        initCallback: function(obj,value,self) {
-                            obj.setVisible(false)
-                        }
-                    },
-                    {
-                        type: 'Stretch'
-                    }
-                ]
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/lang.conf b/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/lang.conf
deleted file mode 100644
index d86e42928491972fe3ee13200d8f44aff2b79de0..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/lang.conf
+++ /dev/null
@@ -1,37 +0,0 @@
-"Title": {en: "Title", zhcn: "标题", zhtw: "標題"}
-"Navigation": {en: "Navigation", zhcn: "导航栏", zhtw: "導航欄"}
-"Display Navigation": {en: "Display Navigation", zhcn: "显示导航栏", zhtw: "顯示導航欄"}
-"Hide Navigation": {en: "Hide Navigation", zhcn: "隐藏导航栏", zhtw: "隱藏導航欄"}
-"Catergory": {en: "Catergory", zhcn: "分类", zhtw: "分類"}
-"Priority": {en: "Priority", zhcn: "优先级", zhtw: "優先級"}
-"Last execution time": {en: "Last execution time", zhcn: "上次维护时间", zhtw: "上次維護時間"}
-"Next execution time": {en: "Next execution time", zhcn: "下次维护时间", zhtw: "下次維護時間"}
-"Machine Code": {en: "Machine Code", zhcn: "设备编号", zhtw: "設備編號"}
-"Machine Name": {en: "Machine Name", zhcn: "设备名称", zhtw: "設備名稱"}
-"Maintenance Type": {en: "Maintenance Type", zhcn: "维护类型", zhtw: "維護類型"}
-"Maintenance Category": {en: "Maintenance Category", zhcn: "维护分类", zhtw: "維護分類"}
-"Execution Type": {en: "Execution Type", zhcn: "计划类型", zhtw: "計劃類型"}
-"Execution Cycle": {en: "Execution Cycle", zhcn: "计划周期", zhtw: "計劃週期"}
-"Status": {en: "Status", zhcn: "状态", zhtw: "狀態"}
-"Last Execution Time": {en: "Last Execution Time", zhcn: "上次执行时间", zhtw: "上次執行時間"}
-"Next Execution Time": {en: "Next Execution Time", zhcn: "下次执行时间", zhtw: "下次執行時間"}
-"Maintenance Person": {en: "Maintenance Person", zhcn: "维护人员", zhtw: "維護人員"}
-"Maintenance Content": {en: "Maintenance Content", zhcn: "维护内容", zhtw: "維護內容"}
-"Class": {en: "Maintenance Class", zhcn: "维护类型", zhtw: "維護類型"}
-"Load data successful!": {en: "Load data successful!" ,zhcn: "加载数据完成!" ,zhtw: "加載數據完成!"}
-"Exec Plan": {en: "Exec Plan", zhcn: "执行计划", zhtw: "執行計劃"}
-"Class": {en: "Maintenance Class", zhcn: "维护类型", zhtw: ""}
-"Choose": {en: "Choose", zhcn: "选择", zhtw: "選擇"}
-"Choose Machine": {en: "Choose Machine", zhcn: "选择设备", zhtw: "選擇設備"}
-"Choose Person": {en: "Choose Person", zhcn: "选择人员", zhtw: "選擇人員"}
-"Record No": {en: "Record No", zhcn: "记录单号", zhtw: "記錄單號"}
-"Apply Time": {en: "Apply Time", zhcn: "申请时间", zhtw: "申請時間"}
-"Apply Person": {en: "Apply Person", zhcn: "申请人", zhtw: "申請人"}
-"Start Time": {en: "Start Time", zhcn: "开始时间", zhtw: "開始時間"}
-"End Time": {en: "End Time", zhcn: "结束时间", zhtw: "結束時間"}
-"Basic Info": {en: "Basic Info", zhcn: "基本信息", zhtw: "基本信息"}
-"Ok": {en: "OK", zhcn: "确定", zhtw: "確定"}
-"Cancel": {en: "Cancel", zhcn: "取消", zhtw: "取消"}
-"Cycle Value": {en: "Cycle Value", zhcn: "周期", zhtw: "週期"}
-"Cycle Unit": {en: "Cycle Unit", zhcn: "周期单位", zhtw: "週期單位"}
-"Name": {en: "Name", zhcn: "姓名", zhtw: "姓名"}
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/module.conf b/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/module.conf
deleted file mode 100644
index 95d27f3306a67843937aeb4356ba3bc312e11835..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/module.conf
+++ /dev/null
@@ -1,170 +0,0 @@
-# 模块标题
-sys_title: "Template Demo - Table With Category And Detail"
-sys_title_en: "Template Demo - Table With Category And Detail"
-sys_title_zhcn: "带导航栏和详细信息的单表展示"
-sys_title_zhtw: ""
-# 模块图标
-sys_icon: "wpforms"
-# 模块对应的插件DLL名称
-sys_plugin: "toptemplateclassplugin"
-# 模块对应的类名
-sys_class: "TopTemplateClass4"
-# 许可证验证键
-sys_license_key: ""
-# 打开模块的权限
-sys_open_right: ""
-# 语言包,默认包含自己模块的语言包
-sys_lang_list: []
-# 当关闭窗口时,如果提示是否保存,保存调用的action
-sys_save_action: ""
-# 该模块用到的枚举列表
-sys_enum_list: []
-# 该模块用到的除了Action之外的权限列表
-sys_permission_list: []
-# 导航栏
-# is_checkable,=true 或1, 表示支持checkbox形式; =false 或0, 表示非checkbox形式
-navi: {
-    __type__: CategoryTreeViewAndAdvancedQuery,
-    is_checkable: 1,
-    categories: [
-        {
-            name: "class",
-            text: "Maintenance Type",
-            icon: "",
-            visible: 1,
-            expand: 1,
-            checked: 0,
-            data: "",
-            children: [
-                 { name: "repair", text: "repair", data: "class", checked: 1, VISIBLE:1 },
-                 { name: "maintenance", text: "maintenance", data: "class", checked: 1, VISIBLE:1 },
-                 { name: "spot_check", text: "spot_check", data: "class", checked: 1, VISIBLE:1  }
-            ],
-            enum_children: "tpm-machine-maintenance-plan-class",
-            enum_checked:["repair"],
-            enum_invisible:[]
-        },
-        {
-            name: "category",
-            text: "Catergory",
-            icon: "",
-            visible: 1,
-            expand: 1,
-            checked: 0,
-            data: "",
-            children: [],
-            enum_children: "tpm-machine-maintenance-plan-category",
-            enum_checked:["overhaul", "part_repairing", "lubrication", "sealing"],
-            enum_invisible:[]
-        }
-    ]
-}
-
-# 高级查询
-advance: {
-  "advanced_items" : [		
-    {"name" : "attr_data.machine_code", "title" : "Machine Code" , "widgetType" : "LineEdit" , "wgt_prop" : "" , "optionList" : []},
-    {"name" : "attr_data.machine_name", "title" : "Machine Name" , "widgetType" : "LineEdit" , "wgt_prop" : "" , "optionList" : []},
-    {"name" : "title", "title" : "Title" , "widgetType" : "LineEdit" , "wgt_prop" : "" , "optionList" : []},
-    {"name" : "class", "title" : "Class" , "widgetType" : "ComboBox" , "wgt_prop" : "" , "optionList" : "enum(tpm-machine-maintenance-plan-class)"}
-  ],
-  "condition" :{
-    "condition": "1 and 2",
-    "value": [
-        {
-            "ignoreEmpty": false,
-            "name": "attr_data.machine_code",
-            "operator": "LIKE",
-            "title": "Machine Code",
-            "valid": true,
-            "value1": "00"
-        },
-        {
-            "ignoreEmpty": false,
-            "name": "attr_data.machine_name",
-            "operator": "LIKE",
-            "title": "Machine Name",
-            "valid": true,
-            "value1": "4"
-        }
-    ]
-  }
-} 
-
-# 主表格
-view {
-  # 数据项, 默认包含表头中配置的数据项
-  data_keys: ["id","class","status","attr_data.machine_code","attr_data.machine_name","machine_id","execution_cycle","attr_data.cycle_value","attr_data.cycle_unit"
-        "title","category","priority","last_execution_time","next_execution_time","description","maintenance_person_name"]
-  # 主键
-  primary_key: "id"
-  # 水平表头
-  horizontal_header: [
-    {
-        "name": "attr_data.machine_code",
-        "display": "Machine Code",
-        "displayRole": "$attr_data.machine_code",
-        "size": 100
-    },
-    {
-        "name": "attr_data.machine_name",
-        "display": "Machine Name",
-        "displayRole": "$attr_data.machine_name",
-        "size": 100
-    },
-    {
-        "name": "title",
-        "display": "Title",
-        "displayRole": "$title",
-        "size": 100,
-        "search": "string"
-    },
-    {
-        "name": "class",
-        "display": "Class",
-        "displayRole": "$class.text",
-        "size": 100,
-        "format": "enum(tpm-machine-maintenance-plan-class)"
-    },
-    {
-        "name": "category",
-        "display": "Catergory",
-        "displayRole": "$category.text",
-        "size": 100
-        "format": "enum(tpm-machine-maintenance-plan-category)"
-    }, 
-    {
-        "name": "priority",
-        "display": "Priority",
-        "displayRole": "$priority",
-        "size": 100
-    },
-    {
-        "name": "status",
-        "display": "Status",
-        "displayRole": "$status.text",
-        "size": 100,
-        "format": "enum(tpm-machine-maintenance-plan-status)"
-    },
-    {
-        "name": "last_execution_time",
-        "display": "Last execution time",
-        "displayRole": "$last_execution_time",
-        "size": 200
-    },
-    {
-        "name": "next_execution_time",
-        "display": "Next execution time",
-        "displayRole": "$next_execution_time",
-        "size": 200
-    }
-  ]
-  # 默认排序列
-  sort_by: "id DESC"
-  # 数据集
-  data_set {
-    # 数据库表名
-    db_table_name: "tpm_machine_maintenance_plan"
-    db_filter: ""
-  }
-}
diff --git a/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/uim.conf b/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/uim.conf
deleted file mode 100644
index b9c7203f9922f7b0d89481d759a759009dfeb51c..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-4-categorytreeview/uim.conf
+++ /dev/null
@@ -1,31 +0,0 @@
-# 工具栏
-"MAIN_TOOLBAR": [
-	{"type":"toolitem","action":"new"},
-	{"type":"stretcher"},
-	{"type":"searchentry","name":"SEARCH_ENTRY"}
-  {"type":"toolitem","action":"refresh"}
-]
-
-# 表格的右键菜单
-"TABLEVIEW_POPUP": [
-  {"type":"menuitem","action":"new"},
-	{"type":"separator"},
-	{"type":"menuitem","action":"delete"},
-	{"type":"separator"},
-	{"type":"menuitem","action":"refresh"}
-]
-
-# 底部工具栏
-"BOTTOM_TOOLBAR" : [
-	{"type":"stretcher"},
-	{"type":"pagetool","name":"PAGE_TOOL"}
-]
-
-# 详细信息工具栏
-"DETAIL_TOOLBAR": [
-	{"type":"toolitem","action":"save_detail"},
-	{"type":"stretcher"},
-	{"type":"toolitem","action":"copy_detail"},
-	{"type":"toolitem","action":"cancel_detail"},
-	{"type":"toolitem","action":"refresh_detail"}
-]
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-homepage/module.conf b/demo/examples/module/TEMPLATEDEMO/template-demo-homepage/module.conf
deleted file mode 100644
index 8c80c565d631b0be9ed20bdc97db6e34907b5f5f..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-homepage/module.conf
+++ /dev/null
@@ -1,26 +0,0 @@
-# 模块标题
-sys_title: "Template Demo - Homepage"
-sys_title_en: "Template Demo - Homepage"
-sys_title_zhcn: "主页"
-sys_title_zhtw: ""
-# 模块图标
-sys_icon: "wpforms"
-# 模块对应的插件DLL名称
-sys_plugin: "toptemplateclassplugin"
-# 模块对应的类名
-sys_class: "TopTemplateClass0A"
-# 许可证验证键
-sys_license_key: ""
-# 打开模块的权限
-sys_open_right: ""
-# 语言包,默认包含自己模块的语言包
-sys_lang_list: []
-# 当关闭窗口时,如果提示是否保存,保存调用的action
-sys_save_action: ""
-# 该模块用到的枚举列表
-sys_enum_list: []
-# 该模块用到的除了Action之外的权限列表
-sys_permission_list: []
-
-# 背景图相对路径,相对于APP.appPlatformPath()
-background_image_path: "resource/image/homepage.png"
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave-2/actions/refresh_master.js b/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave-2/actions/refresh_master.js
deleted file mode 100644
index 72c4789d0aa49b8ab0491ecf06e2d39cacd86c12..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave-2/actions/refresh_master.js
+++ /dev/null
@@ -1,23 +0,0 @@
-try { 
-	this.refreshMaster(false);
-} catch(e) {
-	print(e);
-}
-
-/*---ACTION---
-ICON: "refresh"
-LABEL: "Refresh"
-LABEL_ZHCN: "刷新"
-LABEL_ZHTW: "刷新"
-ACCEL: "F5"
-TOOLTIP: "Refresh"
-TOOLTIP_ZHCN: "刷新"
-TOOLTIP_ZHTW: "刷新"
-CHECKED: ""
-GROUP: ""
-STYLE: "size=small button_style=icon"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: ""
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave-2/module.conf b/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave-2/module.conf
deleted file mode 100644
index 97bf58eae83e44679be65822ba38418513b369e8..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave-2/module.conf
+++ /dev/null
@@ -1,105 +0,0 @@
-# 模块标题
-sys_title: "Template Demo - Master & Slave"
-sys_title_en: "Template Demo - Master & Slave"
-sys_title_zhcn: "主从表展示"
-sys_title_zhtw: ""
-# 模块图标
-sys_icon: "wpforms"
-# 模块对应的插件DLL名称
-sys_plugin: "toptemplateclassplugin"
-# 模块对应的类名
-sys_class: "TopTemplateClass5"
-# 许可证验证键
-sys_license_key: ""
-# 打开模块的权限
-sys_open_right: ""
-# 语言包,默认包含自己模块的语言包
-sys_lang_list: []
-# 当关闭窗口时,如果提示是否保存,保存调用的action
-sys_save_action: ""
-# 该模块用到的枚举列表
-sys_enum_list: [
-  "pdm-job-status"
-]
-# 该模块用到的除了Action之外的权限列表
-sys_permission_list: []
-
-# 主表格
-master_view {
-  # 数据项, 默认包含表头中配置的数据项
-  data_keys: [ "id" ]
-  # 主键
-  primary_key: "id"
-  # 水平表头
-  horizontal_header: [
-    { 
-      "name": "id",
-      "display": "Role ID",
-      "displayRole": "$id"
-    },
-    {
-      "name": "name",
-      "display": "Role Name",
-      "displayRole": "$name",
-      "width": 150,
-      "search": "string"
-    }
-  ]
-  # 默认排序列
-  sort_by: "id DESC"
-  # 数据集
-  data_set {
-    # 数据库表名
-    db_table_name: "sys_role"
-    # 若有sql, 以sql为最优先
-    # 若无sql, 默认根据表头的配置进行查询
-    db_sql: ""
-  }
-  # 主从表关系配置
-  relation {
-    type: "hasMany"
-    through: "sys_role_map_user"
-    master_foreign_key: "role_id"
-    master_key: "id"
-    slave_foreign_key: "user_id"
-    slave_key: "id"
-  }
-}
-
-# 从表格
-slave_view {
-  # 数据项, 默认包含表头中配置的数据项
-  data_keys: [ "id" ]
-  # 主键
-  primary_key: "id"
-  # 水平表头
-  horizontal_header: [
-    {
-      "name": "id",
-      "display": "User ID",
-      "displayRole": "$id",
-      "width": 150
-    },
-    {
-      "name": "username",
-      "display": "User Name",
-      "displayRole": "$username"
-    },
-    { 
-      "name": "status",
-      "display": "Status",
-      "displayRole": "$status",
-      "sorting_enabled": 0
-    }
-  ]
-  # 默认排序列
-  sort_by: "id DESC"
-  # 数据集
-  data_set {
-    # 数据库表名
-    db_table_name: "sys_user"
-    # 若有sql, 以sql为最优先
-    # 若无sql, 默认根据表头的配置进行查询
-    db_sql: ""
-  }
-}
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave-2/uim.conf b/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave-2/uim.conf
deleted file mode 100644
index 44ebb2d08d0a7d7c5549689e6d48ad727a9ec29e..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave-2/uim.conf
+++ /dev/null
@@ -1,18 +0,0 @@
-# 主表工具栏
-"MASTER_TOOLBAR": [
-	{"type":"stretcher"},
-	{"type":"searchentry","name":"SEARCH_ENTRY"}
-  {"type":"toolitem","action":"refresh_master"}
-]
-
-
-# 表格的右键菜单
-"MASTER_POPUP": [
-	{"type":"menuitem","action":"refresh_master"}
-]
-
-# 主表底部工具栏
-"MASTER_BOTTOM_TOOLBAR" : [
-	{"type":"stretcher"},
-	{"type":"pagetool","name":"PAGE_TOOL"}
-]
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave-3/actions/refresh_master.js b/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave-3/actions/refresh_master.js
deleted file mode 100644
index 9ec967a7817d503a4ad4dfec4a9e5f46c71f5d7e..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave-3/actions/refresh_master.js
+++ /dev/null
@@ -1,67 +0,0 @@
-try {
-	var data = {
-		"1-6.dat": {
-			"title": "1-6层钻孔程序",
-			"data": [
-				{
-					"tool_num": "T01",
-					"tool_type": "P",
-					"finish_size": "0.3",
-					"size_tol_lower": "-∞",
-					"size_tol_upper": "0.05",
-					"drill_size": "0.3"
-				},
-				{
-					"tool_num": "T02",
-					"tool_type": "P",
-					"finish_size": "0.4",
-					"size_tol_lower": "-∞",
-					"size_tol_upper": "0.05",
-					"drill_size": "0.4"
-				}
-			]
-		},
-		"2-5.dat": {
-			"title": "2-5层钻孔程序",
-			"data": [
-				{
-					"tool_num": "T03",
-					"tool_type": "P",
-					"finish_size": "0.3",
-					"size_tol_lower": "-∞",
-					"size_tol_upper": "0.05",
-					"drill_size": "0.3"
-				},
-				{
-					"tool_num": "T04",
-					"tool_type": "P",
-					"finish_size": "0.4",
-					"size_tol_lower": "-∞",
-					"size_tol_upper": "0.05",
-					"drill_size": "0.4"
-				}
-			]
-		}
-	};
-	this.loadTreeData(data);
-} catch (e) {
-	print(e);
-}
-
-/*---ACTION---
-ICON: "refresh"
-LABEL: "Refresh"
-LABEL_ZHCN: "刷新"
-LABEL_ZHTW: "刷新"
-ACCEL: "F5"
-TOOLTIP: "Refresh"
-TOOLTIP_ZHCN: "刷新"
-TOOLTIP_ZHTW: "刷新"
-CHECKED: ""
-GROUP: ""
-STYLE: "size=small button_style=icon"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: ""
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave-3/module.conf b/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave-3/module.conf
deleted file mode 100644
index 79390ff8e7ca1bf80233c4152bc289cefc8da698..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave-3/module.conf
+++ /dev/null
@@ -1,85 +0,0 @@
-# 模块标题
-sys_title: "Template Demo - Master & Slave"
-sys_title_en: "Template Demo - Master & Slave"
-sys_title_zhcn: "主从表展示"
-sys_title_zhtw: ""
-# 模块图标
-sys_icon: "wpforms"
-# 模块对应的插件DLL名称
-sys_plugin: "toptemplateclassplugin"
-# 模块对应的类名
-sys_class: "TopTemplateClass5"
-# 许可证验证键
-sys_license_key: ""
-# 打开模块的权限
-sys_open_right: ""
-# 语言包,默认包含自己模块的语言包
-sys_lang_list: []
-# 当关闭窗口时,如果提示是否保存,保存调用的action
-sys_save_action: ""
-# 该模块用到的枚举列表
-sys_enum_list: []
-# 该模块用到的除了Action之外的权限列表
-sys_permission_list: []
-
-#主从表显示比例
-master_slave_ratio: "1:9"
-
-# 主表格
-master_view {
-  # 数据项, 默认包含表头中配置的数据项
-  data_keys: [ "name" ]
-  # 主键
-  primary_key: "name"
-  # 水平表头
-  horizontal_header: [
-    {
-      "name": "title",
-      "display": "Drill Title",
-      "displayRole": "$title",
-      "width": 150,
-      "search": "string"
-    }
-  ]
-}
-
-# 从表格
-slave_view {
-  # 数据项, 默认包含表头中配置的数据项
-  data_keys: [ ]
-  # 主键
-  primary_key: ""
-  # 水平表头
-  horizontal_header: [
-    {
-      "name": "tool_num",
-      "display": "Tool Num",
-      "displayRole": "$tool_num"
-    },
-    {
-      "name": "tool_type",
-      "display": "Tool Type",
-      "displayRole": "$tool_type"
-    },
-    { 
-      "name": "finish_size",
-      "display": "Finish Size",
-      "displayRole": "$finish_size"
-    },
-    { 
-      "name": "size_tol_lower",
-      "display": "Size Tol Lower",
-      "displayRole": "$size_tol_lower"
-    },
-    { 
-      "name": "size_tol_upper",
-      "display": "Size Tol Upper",
-      "displayRole": "$size_tol_upper"
-    },
-    { 
-      "name": "drill_size",
-      "display": "Drill Size",
-      "displayRole": "$drill_size"
-    }
-  ]
-}
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave-3/uim.conf b/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave-3/uim.conf
deleted file mode 100644
index 44ebb2d08d0a7d7c5549689e6d48ad727a9ec29e..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave-3/uim.conf
+++ /dev/null
@@ -1,18 +0,0 @@
-# 主表工具栏
-"MASTER_TOOLBAR": [
-	{"type":"stretcher"},
-	{"type":"searchentry","name":"SEARCH_ENTRY"}
-  {"type":"toolitem","action":"refresh_master"}
-]
-
-
-# 表格的右键菜单
-"MASTER_POPUP": [
-	{"type":"menuitem","action":"refresh_master"}
-]
-
-# 主表底部工具栏
-"MASTER_BOTTOM_TOOLBAR" : [
-	{"type":"stretcher"},
-	{"type":"pagetool","name":"PAGE_TOOL"}
-]
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave-4/actions/refresh_master.js b/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave-4/actions/refresh_master.js
deleted file mode 100644
index 9ec967a7817d503a4ad4dfec4a9e5f46c71f5d7e..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave-4/actions/refresh_master.js
+++ /dev/null
@@ -1,67 +0,0 @@
-try {
-	var data = {
-		"1-6.dat": {
-			"title": "1-6层钻孔程序",
-			"data": [
-				{
-					"tool_num": "T01",
-					"tool_type": "P",
-					"finish_size": "0.3",
-					"size_tol_lower": "-∞",
-					"size_tol_upper": "0.05",
-					"drill_size": "0.3"
-				},
-				{
-					"tool_num": "T02",
-					"tool_type": "P",
-					"finish_size": "0.4",
-					"size_tol_lower": "-∞",
-					"size_tol_upper": "0.05",
-					"drill_size": "0.4"
-				}
-			]
-		},
-		"2-5.dat": {
-			"title": "2-5层钻孔程序",
-			"data": [
-				{
-					"tool_num": "T03",
-					"tool_type": "P",
-					"finish_size": "0.3",
-					"size_tol_lower": "-∞",
-					"size_tol_upper": "0.05",
-					"drill_size": "0.3"
-				},
-				{
-					"tool_num": "T04",
-					"tool_type": "P",
-					"finish_size": "0.4",
-					"size_tol_lower": "-∞",
-					"size_tol_upper": "0.05",
-					"drill_size": "0.4"
-				}
-			]
-		}
-	};
-	this.loadTreeData(data);
-} catch (e) {
-	print(e);
-}
-
-/*---ACTION---
-ICON: "refresh"
-LABEL: "Refresh"
-LABEL_ZHCN: "刷新"
-LABEL_ZHTW: "刷新"
-ACCEL: "F5"
-TOOLTIP: "Refresh"
-TOOLTIP_ZHCN: "刷新"
-TOOLTIP_ZHTW: "刷新"
-CHECKED: ""
-GROUP: ""
-STYLE: "size=small button_style=icon"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: ""
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave-4/module.conf b/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave-4/module.conf
deleted file mode 100644
index b09ce4342d57be42b5e6ac9b66589d12ca65e02e..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave-4/module.conf
+++ /dev/null
@@ -1,85 +0,0 @@
-# 模块标题
-sys_title: "Template Demo - Master & Slave"
-sys_title_en: "Template Demo - Master & Slave"
-sys_title_zhcn: "主从表展示"
-sys_title_zhtw: ""
-# 模块图标
-sys_icon: "wpforms"
-# 模块对应的插件DLL名称
-sys_plugin: "toptemplateclassplugin"
-# 模块对应的类名
-sys_class: "TopTemplateClass5"
-# 许可证验证键
-sys_license_key: ""
-# 打开模块的权限
-sys_open_right: ""
-# 语言包,默认包含自己模块的语言包
-sys_lang_list: []
-# 当关闭窗口时,如果提示是否保存,保存调用的action
-sys_save_action: ""
-# 该模块用到的枚举列表
-sys_enum_list: []
-# 该模块用到的除了Action之外的权限列表
-sys_permission_list: []
-
-#模块初次运行时,主从详情显示比例master:slave:uiloader
-master_slave_ratio: "1:9:3"
-
-# 主表格
-master_view {
-  # 数据项, 默认包含表头中配置的数据项
-  data_keys: [ "name" ]
-  # 主键
-  primary_key: "name"
-  # 水平表头
-  horizontal_header: [
-    {
-      "name": "title",
-      "display": "Drill Title",
-      "displayRole": "$title",
-      "width": 150,
-      "search": "string"
-    }
-  ]
-}
-
-# 从表格
-slave_view {
-  # 数据项, 默认包含表头中配置的数据项
-  data_keys: [ ]
-  # 主键
-  primary_key: ""
-  # 水平表头
-  horizontal_header: [
-    {
-      "name": "tool_num",
-      "display": "Tool Num",
-      "displayRole": "$tool_num"
-    },
-    {
-      "name": "tool_type",
-      "display": "Tool Type",
-      "displayRole": "$tool_type"
-    },
-    { 
-      "name": "finish_size",
-      "display": "Finish Size",
-      "displayRole": "$finish_size"
-    },
-    { 
-      "name": "size_tol_lower",
-      "display": "Size Tol Lower",
-      "displayRole": "$size_tol_lower"
-    },
-    { 
-      "name": "size_tol_upper",
-      "display": "Size Tol Upper",
-      "displayRole": "$size_tol_upper"
-    },
-    { 
-      "name": "drill_size",
-      "display": "Drill Size",
-      "displayRole": "$drill_size"
-    }
-  ]
-}
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave-4/uim.conf b/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave-4/uim.conf
deleted file mode 100644
index 44ebb2d08d0a7d7c5549689e6d48ad727a9ec29e..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave-4/uim.conf
+++ /dev/null
@@ -1,18 +0,0 @@
-# 主表工具栏
-"MASTER_TOOLBAR": [
-	{"type":"stretcher"},
-	{"type":"searchentry","name":"SEARCH_ENTRY"}
-  {"type":"toolitem","action":"refresh_master"}
-]
-
-
-# 表格的右键菜单
-"MASTER_POPUP": [
-	{"type":"menuitem","action":"refresh_master"}
-]
-
-# 主表底部工具栏
-"MASTER_BOTTOM_TOOLBAR" : [
-	{"type":"stretcher"},
-	{"type":"pagetool","name":"PAGE_TOOL"}
-]
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave/actions/refresh_master.js b/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave/actions/refresh_master.js
deleted file mode 100644
index 72c4789d0aa49b8ab0491ecf06e2d39cacd86c12..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave/actions/refresh_master.js
+++ /dev/null
@@ -1,23 +0,0 @@
-try { 
-	this.refreshMaster(false);
-} catch(e) {
-	print(e);
-}
-
-/*---ACTION---
-ICON: "refresh"
-LABEL: "Refresh"
-LABEL_ZHCN: "刷新"
-LABEL_ZHTW: "刷新"
-ACCEL: "F5"
-TOOLTIP: "Refresh"
-TOOLTIP_ZHCN: "刷新"
-TOOLTIP_ZHTW: "刷新"
-CHECKED: ""
-GROUP: ""
-STYLE: "size=small button_style=icon"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: ""
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave/detail.ui.js b/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave/detail.ui.js
deleted file mode 100644
index cc7d7b4da9fd6218bac43fb3df95859367f29019..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave/detail.ui.js
+++ /dev/null
@@ -1,16 +0,0 @@
-[
-    {
-        name: "nothing",
-        type: "VBoxLayout",
-        child: [
-            {
-                name: "table(master).id",
-                type: "IntLineEdit"
-            },
-            {
-                name: "table(slave).id",
-                type: "IntLineEdit"
-            }
-        ]
-    }
-]
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave/module.conf b/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave/module.conf
deleted file mode 100644
index a0172ba288f1292f1032287c7dfa0e9df467eff5..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave/module.conf
+++ /dev/null
@@ -1,117 +0,0 @@
-# 模块标题
-sys_title: "Template Demo - Master & Slave"
-sys_title_en: "Template Demo - Master & Slave"
-sys_title_zhcn: "主从表展示"
-sys_title_zhtw: ""
-# 模块图标
-sys_icon: "wpforms"
-# 模块对应的插件DLL名称
-sys_plugin: "toptemplateclassplugin"
-# 模块对应的类名
-sys_class: "TopTemplateClass5"
-# 许可证验证键
-sys_license_key: ""
-# 打开模块的权限
-sys_open_right: ""
-# 语言包,默认包含自己模块的语言包
-sys_lang_list: []
-# 当关闭窗口时,如果提示是否保存,保存调用的action
-sys_save_action: ""
-# 该模块用到的枚举列表
-sys_enum_list: [
-  "pdm-job-status"
-]
-# 该模块用到的除了Action之外的权限列表
-sys_permission_list: []
-
-# 主表格
-master_view {
-  # 数据项, 默认包含表头中配置的数据项
-  data_keys: [ "id" ]
-  # 主键
-  primary_key: "id"
-  # 水平表头
-  horizontal_header: [
-    { 
-      "name": "id",
-      "display": "Group ID",
-      "displayRole": "$id"
-    },
-    {
-      "name": "name",
-      "display": "Group Name",
-      "displayRole": "$name",
-      "width": 150,
-      "search": "string"
-    },
-    { 
-      "name": "title",
-      "display": "Group Title",
-      "displayRole": "$title",
-      "sorting_enabled": 0
-    }
-  ]
-  # 默认排序列
-  sort_by: "id DESC"
-  # 数据集
-  data_set {
-    # 数据库表名
-    db_table_name: "pdm_spec_group"
-    # 若有sql, 以sql为最优先
-    # 若无sql, 默认根据表头的配置进行查询
-    db_sql: ""
-  }
-  # 主从表关系配置
-  relation {
-    type: "hasMany"
-    through: "pdm_spec_group_lnk_spec"
-    master_foreign_key: "group_id"
-    master_key: "id"
-    slave_foreign_key: "spec_name"
-    slave_key: "name"
-  }
-}
-
-# 从表格
-slave_view {
-  # 数据项, 默认包含表头中配置的数据项
-  data_keys: [ "id" ]
-  # 主键
-  primary_key: "id"
-  # 水平表头
-  horizontal_header: [
-    {
-      "name": "id",
-      "display": "Spec ID",
-      "displayRole": "$id",
-      "width": 150
-    },
-    {
-      "name": "name",
-      "display": "Spec Name",
-      "displayRole": "$name"
-    },
-    { 
-      "name": "title",
-      "display": "Spec Title",
-      "displayRole": "$title",
-      "sorting_enabled": 0
-    },
-    { 
-      "name": "category",
-      "display": "Spec Category",
-      "displayRole": "$category",
-      "sorting_enabled": 0
-    }
-  ]
-  # 默认排序列
-  sort_by: "id DESC"
-  # 数据集
-  data_set {
-    # 数据库表名
-    db_table_name: "pdm_spec"
-    # 若有sql, 以sql为最优先
-    # 若无sql, 默认根据表头的配置进行查询
-    db_sql: ""
-  }
-}
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave/uim.conf b/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave/uim.conf
deleted file mode 100644
index 44ebb2d08d0a7d7c5549689e6d48ad727a9ec29e..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-master-slave/uim.conf
+++ /dev/null
@@ -1,18 +0,0 @@
-# 主表工具栏
-"MASTER_TOOLBAR": [
-	{"type":"stretcher"},
-	{"type":"searchentry","name":"SEARCH_ENTRY"}
-  {"type":"toolitem","action":"refresh_master"}
-]
-
-
-# 表格的右键菜单
-"MASTER_POPUP": [
-	{"type":"menuitem","action":"refresh_master"}
-]
-
-# 主表底部工具栏
-"MASTER_BOTTOM_TOOLBAR" : [
-	{"type":"stretcher"},
-	{"type":"pagetool","name":"PAGE_TOOL"}
-]
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-single-table/actions/__hooks__.js b/demo/examples/module/TEMPLATEDEMO/template-demo-single-table/actions/__hooks__.js
deleted file mode 100644
index 3da8abeccb76793d41c0e62559dbe1bcd39517f6..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-single-table/actions/__hooks__.js
+++ /dev/null
@@ -1,23 +0,0 @@
-this.afterModuleInit = function() {
-  print("afterModuleInit")
-}
-
-this.afterViewInit = function() {
-  try {
-    print("afterViewInit")
-    this.tableView().activated.connect(function(){
-      print("activated");
-    });
-  } catch(e) {
-    print(e);
-  }
-}
-
-this.onDestroy = function() {
-  print("onDestroy")
-}
-
-this.add = function(v, k, arg1, arg2) {
-  print(v, k, arg1, arg2);
-  return _.toNumber(v) * 20;
-}
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-single-table/actions/refresh.js b/demo/examples/module/TEMPLATEDEMO/template-demo-single-table/actions/refresh.js
deleted file mode 100644
index 53bba0865f1fec52670ea99c170a7b004049b368..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-single-table/actions/refresh.js
+++ /dev/null
@@ -1,23 +0,0 @@
-try { 
-	this.refresh(false);
-} catch(e) {
-	print(e);
-}
-
-/*---ACTION---
-ICON: "refresh"
-LABEL: "Refresh"
-LABEL_ZHCN: "刷新"
-LABEL_ZHTW: "刷新"
-ACCEL: "F5"
-TOOLTIP: "Refresh"
-TOOLTIP_ZHCN: "刷新"
-TOOLTIP_ZHTW: "刷新"
-CHECKED: ""
-GROUP: ""
-STYLE: "size=small button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: ""
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-single-table/lang.conf b/demo/examples/module/TEMPLATEDEMO/template-demo-single-table/lang.conf
deleted file mode 100644
index 0f92e78bc804de4cc2634f376dc38f2c151596c9..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-single-table/lang.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-"Layer Count": {en: "", zhcn: "板层数"}
-"Job Name": {en: "", zhcn: "料号名"}
-"Job Status": {en: "", zhcn: "状态"}
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-single-table/module.conf b/demo/examples/module/TEMPLATEDEMO/template-demo-single-table/module.conf
deleted file mode 100644
index 2f0968f2d97522b840a48c76ec12c11d6b57249e..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-single-table/module.conf
+++ /dev/null
@@ -1,67 +0,0 @@
-# 模块标题
-sys_title: "Template Demo - Single Table Show"
-sys_title_en: "Template Demo - Single Table Show"
-sys_title_zhcn: "单表信息展示"
-sys_title_zhtw: ""
-# 模块图标
-sys_icon: "wpforms"
-# 模块对应的插件DLL名称
-sys_plugin: "toptemplateclassplugin"
-# 模块对应的类名
-sys_class: "TopTemplateClass1"
-# 许可证验证键
-sys_license_key: ""
-# 打开模块的权限
-sys_open_right: ""
-# 语言包,默认包含自己模块的语言包
-sys_lang_list: []
-# 当关闭窗口时,如果提示是否保存,保存调用的action
-sys_save_action: ""
-# 该模块用到的枚举列表
-sys_enum_list: [
-  "pdm-job-status"
-]
-# 该模块用到的除了Action之外的权限列表
-sys_permission_list: []
-
-# 主表格
-view {
-  # 数据项, 默认包含表头中配置的数据项
-  data_keys: [ "id" ]
-  # 主键
-  primary_key: "id"
-  # 水平表头
-  horizontal_header: [
-    {
-      "name": "jobname",
-      "display": "Job Name",
-      "displayRole": "$jobname",
-      "width": 150,
-      "search": "string"
-    },
-    {
-      "name": "job_attrs.layer_count",
-      "display": "Layer Count",
-      "displayRole": "$job_attrs.layer_count",
-      "format": "hook(add(3,4))"
-    },
-    {
-      "name": "job_status",
-      "display": "Job Status",
-      "displayRole": "$job_status.text",
-      "decorationRole": "$job_status.icon",
-      "format": "enum(pdm-job-status)",
-      "sorting_enabled": 0
-    }
-  ]
-  # 默认排序列
-  sort_by: "id DESC"
-  # 数据集
-  data_set {
-    # 数据库表名
-    db_table_name: "pdm_job"
-    # 若有sql, 以sql为最优先
-    # 若无sql, 默认根据表头的配置进行查询
-    db_sql: ""
-  }
-}
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-single-table/uim.conf b/demo/examples/module/TEMPLATEDEMO/template-demo-single-table/uim.conf
deleted file mode 100644
index 3d11d270e866c01fabcc485178846055da6bd99a..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-single-table/uim.conf
+++ /dev/null
@@ -1,17 +0,0 @@
-# 工具栏
-"MAIN_TOOLBAR": [
-	{"type":"stretcher"},
-	{"type":"searchentry","name":"SEARCH_ENTRY"}
-  {"type":"toolitem","action":"refresh"}
-]
-
-# 表格的右键菜单
-"TABLEVIEW_POPUP": [
-	{"type":"menuitem","action":"refresh"}
-]
-
-# 底部工具栏
-"BOTTOM_TOOLBAR" : [
-	{"type":"stretcher"},
-	{"type":"pagetool","name":"PAGE_TOOL"}
-]
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-single-tree-2/module.conf b/demo/examples/module/TEMPLATEDEMO/template-demo-single-tree-2/module.conf
deleted file mode 100644
index a1528afefad550c16da2da14d5a9730e88028db6..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-single-tree-2/module.conf
+++ /dev/null
@@ -1,79 +0,0 @@
-# 模块标题
-sys_title: "Template Demo - Single Tree Show"
-sys_title_en: "Template Demo - Single Tree Show"
-sys_title_zhcn: "树形信息展示"
-sys_title_zhtw: ""
-# 模块图标
-sys_icon: "wpforms"
-# 模块对应的插件DLL名称
-sys_plugin: "toptemplateclassplugin"
-# 模块对应的类名
-sys_class: "TopTemplateClass1A"
-# 许可证验证键
-sys_license_key: ""
-# 打开模块的权限
-sys_open_right: ""
-# 语言包,默认包含自己模块的语言包
-sys_lang_list: []
-# 当关闭窗口时,如果提示是否保存,保存调用的action
-sys_save_action: ""
-# 该模块用到的枚举列表
-sys_enum_list: []
-# 该模块用到的除了Action之外的权限列表
-sys_permission_list: []
-
-# 主表格
-view {
-  # 数据项, 默认包含表头中配置的数据项
-  data_keys: [ "id", "part_code", "parent_part_code" ]
-  # 主键
-  primary_key: "id"
-  # 分组键
-  group_key: "part_code"
-  # 父结点键
-  # 当无此值,表示按照group_key进行分组,树形结构只有一级
-  # 当有此值,表示按照parent_key生成树形结果,可能有多级
-  parent_key: "parent_part_code"
-  # 同级结点排序的键
-  seq_key: "seq"
-  # 水平表头
-  horizontal_header: [
-    {
-      "name": "part_title",
-      "display": "Part Title",
-      "displayRole": "$part_title",
-      "width": 150
-    },
-    {
-      "name": "sys_version",
-      "display": "Sys Version",
-      "displayRole": "$sys_version",
-      "width": 150,
-    },
-    {
-      "name": "status",
-      "display": "Status",
-      "displayRole": "$status",
-      "width": 150
-    }
-  ]
-  # 默认排序列
-  sort_by: ""
-  # 数据集
-  data_set {
-    # 数据库表名
-    db_table_name: ""
-    # 若有sql, 以sql为最优先
-    # 若无sql, 默认根据表头的配置进行查询
-    db_sql: """
-        SELECT id, part_code, parent_part_code, part_title, sys_version, status
-        FROM 
-        ( 
-        SELECT *, rank() OVER( PARTITION BY part_code ORDER BY sys_version DESC ) AS r
-        FROM mes_partnumber_prod_parts
-        WHERE partnumber_id = 28 AND status != 'deleted' AND sys_version <= 99999999
-        ) AS t
-        WHERE r = 1
-    """
-  }
-}
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-single-tree-3/actions/refresh.js b/demo/examples/module/TEMPLATEDEMO/template-demo-single-tree-3/actions/refresh.js
deleted file mode 100644
index da9a43b138999c2b690f1011c255c6051d01d686..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-single-tree-3/actions/refresh.js
+++ /dev/null
@@ -1,23 +0,0 @@
-try {
-  this.refresh();
-} catch(e) {
-  print(e);
-}
-
-/*---ACTION---
-ICON: "refresh"
-LABEL: "Refresh"
-LABEL_ZHCN: "刷新"
-LABEL_ZHTW: "刷新"
-ACCEL: "F5"
-TOOLTIP: "Refresh"
-TOOLTIP_ZHCN: "刷新"
-TOOLTIP_ZHTW: "刷新"
-CHECKED: ""
-GROUP: ""
-STYLE: "size=small button_style=icon"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: ""
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-single-tree-3/module.conf b/demo/examples/module/TEMPLATEDEMO/template-demo-single-tree-3/module.conf
deleted file mode 100644
index 529055e0a5c495f13db29ea04d047174467fd6a9..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-single-tree-3/module.conf
+++ /dev/null
@@ -1,80 +0,0 @@
-# 模块标题
-sys_title: "Template Demo - Single Tree Show"
-sys_title_en: "Template Demo - Single Tree Show"
-sys_title_zhcn: "树形信息展示"
-sys_title_zhtw: ""
-# 模块图标
-sys_icon: "wpforms"
-# 模块对应的插件DLL名称
-sys_plugin: "toptemplateclassplugin"
-# 模块对应的类名
-sys_class: "TopTemplateClass1A"
-# 许可证验证键
-sys_license_key: ""
-# 打开模块的权限
-sys_open_right: ""
-# 语言包,默认包含自己模块的语言包
-sys_lang_list: []
-# 当关闭窗口时,如果提示是否保存,保存调用的action
-sys_save_action: ""
-# 该模块用到的枚举列表
-sys_enum_list: []
-# 该模块用到的除了Action之外的权限列表
-sys_permission_list: []
-
-# 主表格
-view {
-  # 数据项, 默认包含表头中配置的数据项
-  data_keys: [ "id", "parent_id" ]
-  # 主键
-  primary_key: "id"
-  # 分组键
-  group_key: ""
-  # 父结点键
-  # 当无此值,表示按照group_key进行分组,树形结构只有一级
-  # 当有此值,表示按照parent_key生成树形结果,可能有多级
-  child_key: "id"
-  parent_key: "parent_id"
-  # 同级结点排序的键
-  seq_key: "seq"
-  # 水平表头
-  horizontal_header: [
-    {
-      "name": "code",
-      "display": "Code",
-      "displayRole": "$code",
-      "search": "string"
-    },
-    {
-      "name": "name",
-      "display": "Name",
-      "displayRole": "$name",
-      "search": "string"
-    },
-    {
-      "name": "node_type",
-      "display": "Node Type",
-      "displayRole": "$node_type"
-    },
-    {
-      "name": "status",
-      "display": "Status",
-      "displayRole": "$status"
-    },
-    {
-      "name": "stop_reason",
-      "display": "Stop Reason",
-      "displayRole": "$stop_reason"
-    }
-  ]
-  # 默认排序列
-  sort_by: ""
-  # 数据集
-  data_set {
-    # 数据库表名
-    db_table_name: "mes_workcenter"
-    # 若有sql, 以sql为最优先
-    # 若无sql, 默认根据表头的配置进行查询
-    db_sql: ""
-  }
-}
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-single-tree-3/uim.conf b/demo/examples/module/TEMPLATEDEMO/template-demo-single-tree-3/uim.conf
deleted file mode 100644
index 3b68078a3756a2d9d7c9038e575d100c7f150d85..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-single-tree-3/uim.conf
+++ /dev/null
@@ -1,11 +0,0 @@
-# 表格的右键菜单
-"TREEVIEW_POPUP": [
-	{"type":"menuitem","action":"refresh"}
-]
-
-# 工具栏
-"MAIN_TOOLBAR": [
-	{"type":"stretcher"},
-	{"type":"searchentry","name":"SEARCH_ENTRY"}
-  {"type":"toolitem","action":"refresh"}
-]
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-single-tree/actions/__hooks__.js b/demo/examples/module/TEMPLATEDEMO/template-demo-single-tree/actions/__hooks__.js
deleted file mode 100644
index 1ae37900aadb03ba32c0710d62d06e757fde157a..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-single-tree/actions/__hooks__.js
+++ /dev/null
@@ -1,8 +0,0 @@
-this.afterViewInit = function() {
-  print("afterViewInit");
-  var self = this;
-  print("self.uim(): ", self.uim());
-  var label1 = self.uim().getWidget("MAIN_TOOLBAR/label1");
-  print("label1: ", label1);
-  print("text:", label1.text);
-}
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-single-tree/lang.conf b/demo/examples/module/TEMPLATEDEMO/template-demo-single-tree/lang.conf
deleted file mode 100644
index acb478250076975f2a0ecd6684bdc90e436db1a7..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-single-tree/lang.conf
+++ /dev/null
@@ -1,67 +0,0 @@
-"Are you sure to remove selected items?": {en: "Are you sure to remove selected items?",zhcn: "确定要移除所选项吗?"}
-"Calc Impedance": {en: "Calc Impedance",zhcn: "计算阻抗"}
-"Calc Mode": {en: "Calc Mode",zhcn: "计算方式"}
-"Coupon": {en: "Coupon", zhcn: "测试条"}
-"Coupon Name": {en: "Coupon Name",zhcn: "测试条"}
-"Display Mode": {en: "Display Mode",zhcn: "显示模式"}
-"Edit Impedance": {en: "Edit Impedance",zhcn: "编辑阻抗"}
-"Imp Tol Value": {en: "Imp Tol Value",zhcn: "阻抗公差值"}
-"Impedance Type": {en: "Impedance Type",zhcn: "阻抗类型"}
-"Impedance value outof range!": {en: "Impedance value outof range!",zhcn: "阻抗值超出范围!"}
-"Line Width Range": {en: "Line Width Range",zhcn: "线宽范围"}
-"Line width outof range!": {en: "Line width outof range!",zhcn: "线宽超出范围!"}
-"New Impedance": {en: "New Impedance",zhcn: "新建阻抗"}
-"Org Gnd Spacing": {en: "Org Gnd Spacing",zhcn: "原稿铜面间距"}
-"Org Line Width": {en: "Org Line Width",zhcn: "原稿线宽"}
-"Org Spacing": {en: "Org Spacing",zhcn: "原稿线距"}
-"Org W/S": {en: "Org W/S",zhcn: "原稿线宽/间距"}
-"Polar Type": {en: "Polar Type",zhcn: "Polar 类型"}
-"Ref Layer": {en: "Ref Layer",zhcn: "参考层"}
-"Signal Layer": {en: "Signal Layer",zhcn: "信号层"}
-"Target Impedance": {en: "Target Impedance",zhcn: "目标阻抗值"}
-"This job has no coupon data,please check job name!": {en: "This job has no coupon data,please check job name!",zhcn: "当前job没有coupon数据,请确认job名称是否正确"}
-"Choose Unit" : {en: "Choose Unit", zhcn: "选择单位"}
-"Row": {en: "Row", zhcn: "行号"}
-"Type": {en: "Type", zhcn: "类型"}
-"Target": {en: "Target", zhcn: "目标阻抗"}
-"Calc Tol": {en: "Calc Tol", zhcn: "计算公差"}
-"Calc Tol Value": {en: "", zhcn: "计算公差值"}
-"Org To Groud": {en: "Org To Groud", zhcn: "原稿距铜"}
-"Cal. W/S": {en: "Cal. W/S", zhcn: "计算线宽/间距"}
-"To Groud": {en: "To Groud", zhcn: "距铜"}
-"Alert Msg": {en: "Alert Msg", zhcn: "警报信息"}
-"Test Line Length": {en: "Test Line Length", zhcn: "阻抗条线宽"}
-"Line Adjust": {en: "Line Adjust", zhcn: "线宽范围"}
-"Unit": { en: "Unit", zhcn: "单位" }
-"Group Type": {en: "Group Type", zhcn: "分组类型"}
-"Max Coupon Set": {en: "Max Coupon Set", zhcn: "最大阻抗数"}
-"Group Config": {en: "Group Config", zhcn: "分组设置"}
-"Are you sure you want to overwrite the original packet data?": {en: "Are you sure you want to overwrite the original packet data?", zhcn:"你确定要覆盖原来的分组数据吗?"}
-"Are you sure cancel grouping?": {en: "Are you sure cancel grouping?", zhcn: "你确定要取消分组吗?"}
-"Manual Grouping": {en: "Manual Grouping", zhcn: "手动分组"}
-"Polar Calc Info": {en: "", zhcn: "Polar计算信息"}
-"Polar Para": {en: "", zhcn: "Polar参数"}
-"Line Width": {en: "", zhcn: "线宽"}
-"Spacing": {en: "", zhcn: "线距"}
-"Gnd Spacing": {en: "", zhcn: "距铜"}
-"Impedance Value": {en: "Impedance", zhcn: "阻抗"}
-"Adjust Calc Result": {en: "", zhcn: "调整计算结果"}
-"Apply": {en: "", zhcn: "应用"}
-"Calculate": {en: "", zhcn: "计算"}
-"Calculating impedance.": {en: "", zhcn: "计算阻抗."}
-"SM Open Impedance": {en: "", zhcn: "防焊前阻抗"}
-"Please calculate the impedance first!": {en: "", zhcn: "请先计算阻抗!"}
-"Initialize polar calculator failed, make sure polar software installed succefully!": {en: "", zhcn: "初始化Polar计算器失败,请检查Polar软件是否已正常安装!"}
-"The coupon name can only contain letters, numbers, underscores, plus signs, minus signs.": {en: "", zhcn: "名称中只能包含字母,数字,下划线,加号或减号!"}
-"Create Symmetric IMP": {en: "", zhcn: "创建对称阻抗"}
-"Top Ref Layer": {en: "", zhcn: "上参考层"}
-"Bot Ref Layer": {en: "", zhcn: "下参考层"}
-"Delete item": {en: "Delete item", zhcn: "删除条目", zhtw: ""}
-"Sure": {en: "Sure", zhcn: "确认", zhtw: ""}
-"There is not a qualified impedance here. Sure to Save it?" : {en: "", zhcn: "有不合格阻抗,确定要继续保存吗?"}
-"Ignore and Save": {en: "", zhcn: "忽略并保存"}
-"Data changes has been made on the group and it is recommended to re-group and save. Sure to Save it?": {en: "", zhcn: "分组中的数据被更改了,建议重新分组后再保存。确定要继续保存?"}
-"There is an uncalculated impedance here here. Sure to Save it?": {en: "", zhcn: "有未被计算的阻抗,确定要继续保存吗?"}
-"Calculate Mode": {en: "", zhcn: "试算模式"}
-"Choose Calculate Mode": {en: "", zhcn: "选择试算模式"}
-"Detail Info": {en: "", zhcn: "阻抗详情"}
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-single-tree/module.conf b/demo/examples/module/TEMPLATEDEMO/template-demo-single-tree/module.conf
deleted file mode 100644
index b43806ae05fbeeabea5e167e25d575b4158c68f0..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-single-tree/module.conf
+++ /dev/null
@@ -1,150 +0,0 @@
-# 模块标题
-sys_title: "Template Demo - Single Tree Show"
-sys_title_en: "Template Demo - Single Tree Show"
-sys_title_zhcn: "树形信息展示"
-sys_title_zhtw: ""
-# 模块图标
-sys_icon: "wpforms"
-# 模块对应的插件DLL名称
-sys_plugin: "toptemplateclassplugin"
-# 模块对应的类名
-sys_class: "TopTemplateClass1A"
-# 许可证验证键
-sys_license_key: ""
-# 打开模块的权限
-sys_open_right: ""
-# 语言包,默认包含自己模块的语言包
-sys_lang_list: []
-# 当关闭窗口时,如果提示是否保存,保存调用的action
-sys_save_action: ""
-# 该模块用到的枚举列表
-sys_enum_list: []
-# 该模块用到的除了Action之外的权限列表
-sys_permission_list: []
-
-# 主表格
-view {
-  # 数据项, 默认包含表头中配置的数据项
-  data_keys: [ "uid" ]
-  # 主键
-  primary_key: ""
-  # 分组键
-  group_key: "impedance_type"
-  # 父结点键
-  # 当无此值,表示按照group_key进行分组,树形结构只有一级
-  # 当有此值,表示按照parent_key生成树形结果,可能有多级
-  parent_key: ""
-  # 水平表头
-  horizontal_header: [
-    {
-        "name": "_category",
-        "display": "Coupon Name",
-        "resizeMode": "Interactive",
-        "size": 120,
-        "displayRole": "$_category"
-    },
-    {
-        "name": "impedance_polar_type",
-        "display": "Polar Type",
-        "resizeMode": "Interactive",
-        "size": 200,
-        "displayRole": "$impedance_polar_type"
-    },
-    {
-        "name": "impedance_type",
-        "display": "Type",
-        "resizeMode": "Interactive",
-        "size": 150,
-        "displayRole": "$impedance_type"
-    },
-    {
-        "name": "target_impedance",
-        "display": "Target",
-        "resizeMode": "Interactive",
-        "size": 100,
-        "displayRole": "$target_impedance"
-    },
-    {
-        "name": "calculate_impedance",
-        "display": "Calc Impedance",
-        "resizeMode": "Interactive",
-        "size": 100,
-        "displayRole": "$calculate_impedance",
-        "foregroundRole": "$calculate_impedance_fgcolor",
-        "backgroundRole": "$calculate_impedance_bgcolor"
-    },
-    {
-        "name": "sm_open_impedance",
-        "display": "SM Open Impedance",
-        "resizeMode": "Interactive",
-        "size": 100,
-        "displayRole": "$sm_open_impedance",
-    },
-    {
-        "name": "signal1",
-        "display": "Signal Layer",
-        "resizeMode": "Interactive",
-        "size": 100,
-        "displayRole": "$signal1"
-    },
-    {
-        "name": "org_coplanar_spacing",
-        "display": "Org To Groud",
-        "resizeMode": "Interactive",
-        "size": 100,
-        "displayRole": "$org_coplanar_spacing"
-    },
-    {
-        "name": "coplanar_spacing",
-        "display": "To Groud",
-        "resizeMode": "Interactive",
-        "size": 100,
-        "displayRole": "$coplanar_spacing"
-    },
-    {
-        "name": "org_coplanar_spacing",
-        "display": "Org To Groud",
-        "resizeMode": "Interactive",
-        "size": 100,
-        "displayRole": "$org_coplanar_spacing"
-    },
-    {
-        "name": "coplanar_spacing",
-        "display": "To Groud",
-        "resizeMode": "Interactive",
-        "size": 100,
-        "displayRole": "$coplanar_spacing"
-    },
-    {
-        "name": "coupon_name",
-        "display": "Coupon Name",
-        "resizeMode": "Interactive",
-        "size": 100,
-        "displayRole": "$coupon_name"
-    },
-    {
-        "name": "alert_msg",
-        "display": "Alert Msg",
-        "resizeMode": "Interactive",
-        "size": 100,
-        "displayRole": "$alert_msg"
-    },
-    {
-        "name": "test_line_length",
-        "display": "Test Line Length",
-        "resizeMode": "Interactive",
-        "size": 100,
-        "displayRole": "$test_line_length"
-    }
-  ]
-  # 默认排序列
-  sort_by: ""
-  # 数据集
-  data_set {
-    # 数据库表名
-    db_table_name: ""
-    # 若有sql, 以sql为最优先
-    # 若无sql, 默认根据表头的配置进行查询
-    db_sql: "SELECT * FROM pdm_job_imp WHERE job_id = 16188"
-  }
-}
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-single-tree/uim.conf b/demo/examples/module/TEMPLATEDEMO/template-demo-single-tree/uim.conf
deleted file mode 100644
index 6919d02f43428976d5f6a73be3db2946600b0475..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-single-tree/uim.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-# 工具栏
-"MAIN_TOOLBAR": [
-	{"type": "label", "name": "label1", "text": "Label 1" }
-]
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/actions/__hooks__.js b/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/actions/__hooks__.js
deleted file mode 100644
index 8d02a05e7ff0e4cd7e67f198be068f6da89c564f..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/actions/__hooks__.js
+++ /dev/null
@@ -1,9 +0,0 @@
-this.afterViewInit = function() {
-  this.sound = new TSound("BEEP");
-  this.sound.setLoops(10);
-}
-
-this.afterDataRefresh = function() {
-  print("___________afterDataRefresh____________");
-  this.sound.play();
-};
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/actions/cancel_detail.js b/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/actions/cancel_detail.js
deleted file mode 100644
index d779d76536b51c3803ec49b85d0e6f176c6853d6..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/actions/cancel_detail.js
+++ /dev/null
@@ -1,23 +0,0 @@
-try {
-  this.reloadItem();
-} catch(e) {
-  print(e);
-}
-
-/*---ACTION---
-ICON: "cancel"
-LABEL: "Cancel"
-LABEL_ZHCN: "取消"
-LABEL_ZHTW: "取消"
-ACCEL: ""
-TOOLTIP: "Cancel the action"
-TOOLTIP_ZHCN: "取消动作"
-TOOLTIP_ZHTW: "取消動作"
-CHECKED: ""
-GROUP: ""
-STYLE: "button_style=text"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: "return (this.isDetailModified()) ? 'enable' : 'hide';"
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/actions/copy_detail.js b/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/actions/copy_detail.js
deleted file mode 100644
index b6575ff3d9da682bdcbad460ec22be224f71c1c3..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/actions/copy_detail.js
+++ /dev/null
@@ -1,24 +0,0 @@
-try {
-  this.copyItem();
-} catch(e) {
-  print(e);
-}
-
-/*---ACTION---
-ICON: "copy"
-LABEL: "Copy"
-LABEL_ZHCN: "复制"
-LABEL_ZHTW: "複製"
-ACCEL: ""
-TOOLTIP: "Copy"
-TOOLTIP_ZHCN: "复制"
-TOOLTIP_ZHTW: "複製"
-PERMISSION: ""
-CHECKED: ""
-GROUP: ""
-STYLE: "button_style=icon"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: "return this.isDetailModified() ? 'hide' : 'enable';"
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/actions/delete.js b/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/actions/delete.js
deleted file mode 100644
index d840dea86623cce996b33795cd4e213cc8635d3b..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/actions/delete.js
+++ /dev/null
@@ -1,30 +0,0 @@
-try {
-  var ans = TMessageBox.question(this, this.ttr("Are you sure to delete selected items?"), '', '',
-      [this.ttr('Delete')+':Yes:Yes:Primary', this.ttr('Cancel')+':Cancel:Cancel:Normal']);
-  if (ans != 'Yes') {
-    return;
-  }
-  this.deleteItems(this.selectedItems());
-} catch (e) {
-  print(e);
-}
-
-
-/*---ACTION---
-ICON: "times-circle"
-LABEL: "Delete"
-LABEL_ZHCN: "刪除"
-LABEL_ZHTW: "刪除"
-ACCEL: "Delete"
-TOOLTIP: "Delete"
-TOOLTIP_ZHCN: "删除"
-TOOLTIP_ZHTW: "刪除"
-PERMISSION: ""
-CHECKED: ""
-GROUP: ""
-STYLE: "size=small button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: "if(this.selectedItems().length > 0 && !this.isDetailModified()){return 'enable'}else{return 'disable'}"
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/actions/new.js b/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/actions/new.js
deleted file mode 100644
index 590fc7ea676bd1fd2e02117d64f074b32ffe53ee..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/actions/new.js
+++ /dev/null
@@ -1,24 +0,0 @@
-try {
-  this.newItem();
-} catch (e) {
-  print(e);
-}
-
-/*---ACTION---
-ICON: "plus"
-LABEL: "New"
-LABEL_ZHCN: "新建"
-LABEL_ZHTW: "新建"
-ACCEL: "Ctrl+N"
-TOOLTIP: "New"
-TOOLTIP_ZHCN: "新建"
-TOOLTIP_ZHTW: "新建"
-PERMISSION: ""
-CHECKED: ""
-GROUP: ""
-STYLE: "button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: "if (!this.isDetailModified()){return 'enable'} else {return 'disable'}"
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/actions/refresh.js b/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/actions/refresh.js
deleted file mode 100644
index 2e614ee674d6491c2e204d3076c5ac08e43f382c..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/actions/refresh.js
+++ /dev/null
@@ -1,22 +0,0 @@
-try {
-    this.refresh();
-} catch (e) {
-    print(e);
-}
-/*---ACTION---
-ICON: "refresh"
-LABEL: "Refresh"
-LABEL_ZHCN: "刷新"
-LABEL_ZHTW: "刷新"
-ACCEL: "F5"
-TOOLTIP: "Refresh"
-TOOLTIP_ZHCN: "刷新"
-TOOLTIP_ZHTW: "刷新"
-CHECKED: ""
-GROUP: ""
-STYLE: "size=small button_style=icon"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: ""
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/actions/refresh_detail.js b/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/actions/refresh_detail.js
deleted file mode 100644
index 6d474848a9ce3fd9dc56b30305d3cc0fca6c5692..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/actions/refresh_detail.js
+++ /dev/null
@@ -1,22 +0,0 @@
-try {
-  this.reloadItem();
-} catch(e) {
-  print(e);
-}
-/*---ACTION---
-ICON: "refresh"
-LABEL: "Refresh"
-LABEL_ZHCN: "刷新"
-LABEL_ZHTW: "刷新"
-ACCEL: ""
-TOOLTIP: "Reload data from database"
-TOOLTIP_ZHCN: "重新从数据库加载数据"
-TOOLTIP_ZHTW: "重新從數據庫加載數據"
-CHECKED: ""
-GROUP: ""
-STYLE: "button_style=icon"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: "return this.isDetailModified() ? 'hide' : 'enable';"
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/actions/save_detail.js b/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/actions/save_detail.js
deleted file mode 100644
index 49420e218089e83f861149ba43a0f0584f014afb..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/actions/save_detail.js
+++ /dev/null
@@ -1,23 +0,0 @@
-try {
-  this.saveItem();
-} catch(e) {
-  print(e);
-}
-/*---ACTION---
-ICON: "save"
-LABEL: "Save"
-LABEL_ZHCN: "保存"
-LABEL_ZHTW: "保存"
-ACCEL: "Ctrl+S"
-TOOLTIP: "Save"
-TOOLTIP_ZHCN: "保存"
-TOOLTIP_ZHTW: "保存"
-PERMISSION: ""
-CHECKED: ""
-GROUP: ""
-STYLE: " button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: "return (this.isDetailModified()) ? 'enable' : 'disable';"
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/detail.ui.js b/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/detail.ui.js
deleted file mode 100644
index 7c95f70c2dc95127680263c30d032250f69a677a..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/detail.ui.js
+++ /dev/null
@@ -1,37 +0,0 @@
-function func(self) {
-  return {
-    type: 'ScrollArea',
-    property: { widget_resizable: true, frame_shape: 'NoFrame'},
-    child: {
-      type: 'FormLayout',
-      child: [
-        {
-          name: 'name',
-          type: 'LineEdit',
-          title: self.ttr('Name'),
-          pack: { label: self.ttr('Name') }
-        },
-        {
-          name: 'title',
-          type: 'LineEdit',
-          title: self.ttr('Title'),
-          pack: { label: self.ttr('Title') }
-        },
-        {
-          name: 'value_type',
-          type: 'ComboBox',
-          title: self.ttr('Value Type'),
-          pack: { label: self.ttr('Value Type') },
-          property: { item_list: TOPENM.enumList("mes-attrname-datatype").toComboList() }
-        },
-        {
-          name: 'remark',
-          type: 'PlainTextEdit',
-          title: self.ttr('Remark'),
-          pack: { label: self.ttr('Remark') },
-          property: { vertical_scroll_bar_policy : 'ScrollBarAlwaysOff' }
-        }
-      ]
-    }
-  };
-}
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/lang.conf b/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/lang.conf
deleted file mode 100644
index 88c6bee4212307e0fb5a2657bc3f164535847c72..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/lang.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-"Name": { en: "", zhcn: "名称" }
-"Title": { en: "", zhcn: "标题" }
-"Value Type": { en: "", zhcn: "数据类型" }
-"Remark": { en: "", zhcn: "备注" }
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/module.conf b/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/module.conf
deleted file mode 100644
index 7f2ed661e82fc094a703a995cb82a8ae4a6b5586..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/module.conf
+++ /dev/null
@@ -1,75 +0,0 @@
-# 模块标题
-sys_title: "Template Demo - Table With Detail"
-sys_title_en: "Template Demo - Table With Detail"
-sys_title_zhcn: "带详细信息的单表展示"
-sys_title_zhtw: ""
-# 模块图标
-sys_icon: "wpforms"
-# 模块对应的插件DLL名称
-sys_plugin: "toptemplateclassplugin"
-# 模块对应的类名
-sys_class: "TopTemplateClass3"
-# 许可证验证键
-sys_license_key: ""
-# 打开模块的权限
-sys_open_right: ""
-# 语言包,默认包含自己模块的语言包
-sys_lang_list: []
-# 当关闭窗口时,如果提示是否保存,保存调用的action
-sys_save_action: ""
-# 该模块用到的枚举列表
-sys_enum_list: [
-  "mes-attrname-datatype"
-]
-# 该模块用到的除了Action之外的权限列表
-sys_permission_list: []
-
-# 主表格
-view {
-  # 定时刷新间隔(单位:秒)
-  # 若不配置,或间隔小于0,则不执行定时刷新
-  timing_refresh_interval: 10
-
-  # 数据项, 默认包含表头中配置的数据项
-  data_keys: [ "id", "process_code", "remark" ]
-  # 主键
-  primary_key: "id"
-  # 水平表头
-  horizontal_header: [
-    {
-      "name": "name",
-      "display": "Name",
-      "displayRole": "$name",
-      "resizeMode": "ResizeToContents",
-      "search": "string"
-    },
-    {
-      "name": "title",
-      "display": "Title",
-      "displayRole": "$title",
-      "resizeMode": "ResizeToContents",
-      "search": "string"
-    },
-    {
-      "name": "value_type",
-      "display": "Value Type",
-      "displayRole": "$value_type.text",
-      "resizeMode": "ResizeToContents",
-      "format": "enum(mes-attrname-datatype)"
-    }
-  ]
-  # 默认排序列
-  sort_by: "id DESC"
-  # 数据集
-  data_set {
-    # 数据库表名
-    db_table_name: "iqs_cp_variable_lib"
-    # 删除标记
-    # 若为空表示做物理删除
-    db_del_flag_key: "del_flag"
-    # 过滤项
-    db_filter {
-      # "process_code": "L01"
-    }
-  }
-}
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/uim.conf b/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/uim.conf
deleted file mode 100644
index b9c7203f9922f7b0d89481d759a759009dfeb51c..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-table-with-detail/uim.conf
+++ /dev/null
@@ -1,31 +0,0 @@
-# 工具栏
-"MAIN_TOOLBAR": [
-	{"type":"toolitem","action":"new"},
-	{"type":"stretcher"},
-	{"type":"searchentry","name":"SEARCH_ENTRY"}
-  {"type":"toolitem","action":"refresh"}
-]
-
-# 表格的右键菜单
-"TABLEVIEW_POPUP": [
-  {"type":"menuitem","action":"new"},
-	{"type":"separator"},
-	{"type":"menuitem","action":"delete"},
-	{"type":"separator"},
-	{"type":"menuitem","action":"refresh"}
-]
-
-# 底部工具栏
-"BOTTOM_TOOLBAR" : [
-	{"type":"stretcher"},
-	{"type":"pagetool","name":"PAGE_TOOL"}
-]
-
-# 详细信息工具栏
-"DETAIL_TOOLBAR": [
-	{"type":"toolitem","action":"save_detail"},
-	{"type":"stretcher"},
-	{"type":"toolitem","action":"copy_detail"},
-	{"type":"toolitem","action":"cancel_detail"},
-	{"type":"toolitem","action":"refresh_detail"}
-]
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-template7/actions/__hooks__.js b/demo/examples/module/TEMPLATEDEMO/template-demo-template7/actions/__hooks__.js
deleted file mode 100644
index 06341d55e186b58650690b39c43ea46550d036e5..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-template7/actions/__hooks__.js
+++ /dev/null
@@ -1,3 +0,0 @@
-this.afterViewInit = function() {
-
-}
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-template7/actions/refresh.js b/demo/examples/module/TEMPLATEDEMO/template-demo-template7/actions/refresh.js
deleted file mode 100644
index 90ca99faa78ff621ca81df5f5df2389123e9efa8..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-template7/actions/refresh.js
+++ /dev/null
@@ -1,23 +0,0 @@
-try {
-    this.refresh();
-} catch (e) {
-    print(e)
-}
-/*---ACTION---
-ICON: "refresh"
-LABEL: "Refresh"
-LABEL_ZHCN: "刷新"
-LABEL_ZHTW: "刷新"
-ACCEL: ""
-TOOLTIP: "Refresh"
-TOOLTIP_ZHCN: "刷新"
-TOOLTIP_ZHTW: "刷新"
-PERMISSION: ""
-CHECKED: ""
-GROUP: ""
-STYLE: "button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: ""
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-template7/actions/reset.js b/demo/examples/module/TEMPLATEDEMO/template-demo-template7/actions/reset.js
deleted file mode 100644
index 9540e5aec5704fa1f22a7f0967765514dd5baf93..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-template7/actions/reset.js
+++ /dev/null
@@ -1,23 +0,0 @@
-try {
-    this.resetSearchUiLoader();
-} catch (e) {
-    print(e);
-}
-/*---ACTION---
-ICON: ""
-LABEL: "Reset"
-LABEL_ZHCN: "重置"
-LABEL_ZHTW: "重置"
-ACCEL: ""
-TOOLTIP: "Reset"
-TOOLTIP_ZHCN: "重置"
-TOOLTIP_ZHTW: "重置"
-PERMISSION: ""
-CHECKED: ""
-GROUP: ""
-STYLE: "button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: ""
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-template7/actions/search.js b/demo/examples/module/TEMPLATEDEMO/template-demo-template7/actions/search.js
deleted file mode 100644
index 5a1e5fde6d1e9e905ff5d017d5f6274e325a3324..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-template7/actions/search.js
+++ /dev/null
@@ -1,23 +0,0 @@
-try {
-    this.refresh();
-} catch (e) {
-    print(e);
-}
-/*---ACTION---
-ICON: "search"
-LABEL: "Search"
-LABEL_ZHCN: "查询"
-LABEL_ZHTW: "查詢"
-ACCEL: ""
-TOOLTIP: "Search"
-TOOLTIP_ZHCN: "查询"
-TOOLTIP_ZHTW: "查詢"
-PERMISSION: ""
-CHECKED: ""
-GROUP: ""
-STYLE: "button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: ""
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-template7/detail.ui.js b/demo/examples/module/TEMPLATEDEMO/template-demo-template7/detail.ui.js
deleted file mode 100644
index 30eb107946a4d588c97815ff30f1ce1ab6b26dd5..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-template7/detail.ui.js
+++ /dev/null
@@ -1,37 +0,0 @@
-function func(self) {
-    return {
-      type: 'ScrollArea',
-      property: { widget_resizable: true, frame_shape: 'NoFrame'},
-      child: {
-        type: 'FormLayout',
-        child: [
-          {
-            name: 'name',
-            type: 'LineEdit',
-            title: self.ttr('Name'),
-            pack: { label: self.ttr('Name') }
-          },
-          {
-            name: 'title',
-            type: 'LineEdit',
-            title: self.ttr('Title'),
-            pack: { label: self.ttr('Title') }
-          },
-          {
-            name: 'value_type',
-            type: 'ComboBox',
-            title: self.ttr('Value Type'),
-            pack: { label: self.ttr('Value Type') },
-            property: { item_list: TOPENM.enumList("mes-attrname-datatype").toComboList() }
-          },
-          {
-            name: 'remark',
-            type: 'PlainTextEdit',
-            title: self.ttr('Remark'),
-            pack: { label: self.ttr('Remark') },
-            property: { vertical_scroll_bar_policy : 'ScrollBarAlwaysOff' }
-          }
-        ]
-      }
-    };
-  }
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-template7/lang.conf b/demo/examples/module/TEMPLATEDEMO/template-demo-template7/lang.conf
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-template7/module.conf b/demo/examples/module/TEMPLATEDEMO/template-demo-template7/module.conf
deleted file mode 100644
index 4f0002760e077d2d3e0a5b07373369e840f1465d..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-template7/module.conf
+++ /dev/null
@@ -1,87 +0,0 @@
-# 模块标题
-sys_title: "Template7-Demo"
-sys_title_en: "Template7-Demo"
-sys_title_zhcn: "Template7-Demo"
-sys_title_zhtw: ""
-
-# 模块图标
-sys_icon: ""
-
-# 模块对应的插件DLL名称
-sys_plugin: "toptemplateclassplugin"
-
-# 模块对应的类名
-sys_class: "TopTemplateClass7"
-
-# 许可证验证键
-sys_license_key: ""
-
-# 打开模块的权限
-sys_open_right: ""
-
-# 语言包,默认包含自己模块的语言包
-sys_lang_list: []
-
-# 当关闭窗口时,如果提示是否保存,保存调用的action
-sys_save_action: ""
-
-# 该模块用到的枚举列表
-sys_enum_list: []
-
-# 该模块用到的除了Action之外的权限列表
-sys_permission_list: []
-
-# search.ui设置成导航栏形式,当is_navi=1时,以导航栏显示;否则普通控件展示;navi_is_expand=1, 表示导航栏展开;
-search_ui_set {
-  is_navi: 1,
-  navi_is_expand: 1
-}
-
-# 界面布局
-view_ratio: "4:3:3"
-#表格
-# 主表格
-view {
-  # 数据项, 默认包含表头中配置的数据项
-  data_keys: [ "id", "process_code", "remark" ]
-  # 主键
-  primary_key: "id"
-  # 水平表头
-  horizontal_header: [
-    {
-      "name": "name",
-      "display": "Name",
-      "displayRole": "$name",
-      "resizeMode": "ResizeToContents",
-      "search": "string"
-    },
-    {
-      "name": "title",
-      "display": "Title",
-      "displayRole": "$title",
-      "resizeMode": "ResizeToContents",
-      "search": "string"
-    },
-    {
-      "name": "value_type",
-      "display": "Value Type",
-      "displayRole": "$value_type.text",
-      "resizeMode": "ResizeToContents",
-      "format": "enum(mes-attrname-datatype)"
-    }
-  ]
-  # 默认排序列
-  sort_by: "id DESC"
-  # 数据集
-  data_set {
-    # 数据库表名
-    db_table_name: "iqs_cp_variable_lib"
-    # 删除标记
-    # 若为空表示做物理删除
-    db_del_flag_key: "del_flag"
-    # 过滤项
-    db_filter {
-      # "process_code": "L01"
-    }
-  }
-}
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-template7/search.ui.js b/demo/examples/module/TEMPLATEDEMO/template-demo-template7/search.ui.js
deleted file mode 100644
index 15cb9e1a2bbea2141c581e900f5db53af2ed36c7..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-template7/search.ui.js
+++ /dev/null
@@ -1,14 +0,0 @@
-function func(self) {
-  return {
-    type: "FormGridLayout",
-    child: [
-      {
-        name: 'value_type',
-        type: 'ComboBox',
-        title: self.ttr('Value Type'),
-        pack: { label: self.ttr('Value Type') },
-        property: { item_list: TOPENM.enumList("mes-attrname-datatype").toComboList() }
-      }
-    ]
-  }
-}
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-template7/uim.conf b/demo/examples/module/TEMPLATEDEMO/template-demo-template7/uim.conf
deleted file mode 100644
index 1fa326f7b8371ef7e4267fc431aa732290d7a626..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-template7/uim.conf
+++ /dev/null
@@ -1,26 +0,0 @@
-# 搜索页工具栏
-"SEARCH_TOOLBAR": [
-    {"type": "toolitem", "action": "reset"},
-    {"type": "toolitem", "action": "search"}
-]
-
-
-# 主界面工具栏
-"MAIN_TOOLBAR": [
-    {"type":"stretcher"},
-    {"type": "toolitem", "action": "refresh"}
-]
-
-# 表格弹出菜单
-"TABLEVIEW_POPUP": [
-]
-
-# 底部工具栏
-"BOTTOM_TOOLBAR": [
-    {"type":"stretcher"},
-    {"type": "pagetool","name":"PAGE_TOOL"}
-]
-
-#详情页工具栏
-"DEATIL_TOOLBAR": [
-]
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-uiloader/module.conf b/demo/examples/module/TEMPLATEDEMO/template-demo-uiloader/module.conf
deleted file mode 100644
index a9e85a20c03a0704844d026918b94ceec7dff501..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-uiloader/module.conf
+++ /dev/null
@@ -1,43 +0,0 @@
-# 模块标题
-sys_title: "Template Demo - UiLoader"
-sys_title_en: "Template Demo - UiLoader"
-sys_title_zhcn: "Template Demo - UiLoader"
-sys_title_zhtw: ""
-# 模块图标
-sys_icon: "wpforms"
-# 模块对应的插件DLL名称
-sys_plugin: "toptemplateclassplugin"
-# 模块对应的类名
-sys_class: "TopTemplateClass2"
-# 许可证验证键
-sys_license_key: ""
-# 打开模块的权限
-sys_open_right: ""
-# 语言包,默认包含自己模块的语言包
-sys_lang_list: []
-# 当关闭窗口时,如果提示是否保存,保存调用的action
-sys_save_action: ""
-# 该模块用到的枚举列表
-sys_enum_list: []
-# 该模块用到的除了Action之外的权限列表
-sys_permission_list: []
-
-# UiLoader配置
-uiloader {
-  # 在当前模块的Ui Key, 
-  ui_key: "test0"
-  # Ui字符串
-  # 若ui_key与ui_str同时存在,以ui_str为准
-  ui_str: ""
-
-  # 数据集
-  data_set {
-     # 数据库表名
-    "db_table_name": "sys_user",
-    "db_filter" : {
-      "id" : 1
-    }
-     # 若有sql, 以sql为最优先
-    "db_sql": ""
-  }
-}
diff --git a/demo/examples/module/TEMPLATEDEMO/template-demo-uiloader/test0.ui.js b/demo/examples/module/TEMPLATEDEMO/template-demo-uiloader/test0.ui.js
deleted file mode 100644
index 3646951a8565d55a9be8cc9a095b41202ca80a8c..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template-demo-uiloader/test0.ui.js
+++ /dev/null
@@ -1,34 +0,0 @@
-function func(self) {
-  return {
-    type: "FormGridLayout",
-    child: [
-      {
-        name: "id",
-        type: "LineEdit",
-        pack: { label: "ID" }
-      },
-      {
-        name: "username",
-        type: "LineEdit",
-        pack: { label: "Name" },
-        setter: function (obj, value, self) {
-            var dd = this.getObject('fullname').getData('value');
-            print('setter');
-            print(dd);
-        },
-        getter: function(obj){
-            var dd = this.getObject('fullname').getData('value');
-            print('getter');
-            print(typeof(dd));
-            print(dd);
-            return obj.getData('value');
-        }
-      },
-      {
-        name: "fullname",
-        type: "LineEdit",
-        pack: { label: "Name" }
-      },
-    ]
-  }
-}
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/actions/cancel_detail.js b/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/actions/cancel_detail.js
deleted file mode 100644
index 9eb4ceb8f1ed8d7103adaacc679446dacfd8d620..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/actions/cancel_detail.js
+++ /dev/null
@@ -1,23 +0,0 @@
-try {
-  this.reloadItem();
-} catch(e) {
-  print(e);
-}
-
-/*---ACTION---
-ICON: "cancel"
-LABEL: "Cancel"
-LABEL_ZHCN: "取消"
-LABEL_ZHTW: "取消"
-ACCEL: ""
-TOOLTIP: "Cancel Edit"
-TOOLTIP_ZHCN: "取消编辑"
-TOOLTIP_ZHTW: "刷新編輯"
-CHECKED: ""
-GROUP: ""
-STYLE: "button_style=text"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: "return (this.isDetailModified()) ? 'enable' : 'hide';"
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/actions/copy_detail.js b/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/actions/copy_detail.js
deleted file mode 100644
index b6575ff3d9da682bdcbad460ec22be224f71c1c3..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/actions/copy_detail.js
+++ /dev/null
@@ -1,24 +0,0 @@
-try {
-  this.copyItem();
-} catch(e) {
-  print(e);
-}
-
-/*---ACTION---
-ICON: "copy"
-LABEL: "Copy"
-LABEL_ZHCN: "复制"
-LABEL_ZHTW: "複製"
-ACCEL: ""
-TOOLTIP: "Copy"
-TOOLTIP_ZHCN: "复制"
-TOOLTIP_ZHTW: "複製"
-PERMISSION: ""
-CHECKED: ""
-GROUP: ""
-STYLE: "button_style=icon"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: "return this.isDetailModified() ? 'hide' : 'enable';"
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/actions/delete.js b/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/actions/delete.js
deleted file mode 100644
index d840dea86623cce996b33795cd4e213cc8635d3b..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/actions/delete.js
+++ /dev/null
@@ -1,30 +0,0 @@
-try {
-  var ans = TMessageBox.question(this, this.ttr("Are you sure to delete selected items?"), '', '',
-      [this.ttr('Delete')+':Yes:Yes:Primary', this.ttr('Cancel')+':Cancel:Cancel:Normal']);
-  if (ans != 'Yes') {
-    return;
-  }
-  this.deleteItems(this.selectedItems());
-} catch (e) {
-  print(e);
-}
-
-
-/*---ACTION---
-ICON: "times-circle"
-LABEL: "Delete"
-LABEL_ZHCN: "刪除"
-LABEL_ZHTW: "刪除"
-ACCEL: "Delete"
-TOOLTIP: "Delete"
-TOOLTIP_ZHCN: "删除"
-TOOLTIP_ZHTW: "刪除"
-PERMISSION: ""
-CHECKED: ""
-GROUP: ""
-STYLE: "size=small button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: "if(this.selectedItems().length > 0 && !this.isDetailModified()){return 'enable'}else{return 'disable'}"
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/actions/new.js b/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/actions/new.js
deleted file mode 100644
index 590fc7ea676bd1fd2e02117d64f074b32ffe53ee..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/actions/new.js
+++ /dev/null
@@ -1,24 +0,0 @@
-try {
-  this.newItem();
-} catch (e) {
-  print(e);
-}
-
-/*---ACTION---
-ICON: "plus"
-LABEL: "New"
-LABEL_ZHCN: "新建"
-LABEL_ZHTW: "新建"
-ACCEL: "Ctrl+N"
-TOOLTIP: "New"
-TOOLTIP_ZHCN: "新建"
-TOOLTIP_ZHTW: "新建"
-PERMISSION: ""
-CHECKED: ""
-GROUP: ""
-STYLE: "button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: "if (!this.isDetailModified()){return 'enable'} else {return 'disable'}"
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/actions/refresh.js b/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/actions/refresh.js
deleted file mode 100644
index 2e614ee674d6491c2e204d3076c5ac08e43f382c..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/actions/refresh.js
+++ /dev/null
@@ -1,22 +0,0 @@
-try {
-    this.refresh();
-} catch (e) {
-    print(e);
-}
-/*---ACTION---
-ICON: "refresh"
-LABEL: "Refresh"
-LABEL_ZHCN: "刷新"
-LABEL_ZHTW: "刷新"
-ACCEL: "F5"
-TOOLTIP: "Refresh"
-TOOLTIP_ZHCN: "刷新"
-TOOLTIP_ZHTW: "刷新"
-CHECKED: ""
-GROUP: ""
-STYLE: "size=small button_style=icon"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: ""
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/actions/refresh_detail.js b/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/actions/refresh_detail.js
deleted file mode 100644
index 6d474848a9ce3fd9dc56b30305d3cc0fca6c5692..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/actions/refresh_detail.js
+++ /dev/null
@@ -1,22 +0,0 @@
-try {
-  this.reloadItem();
-} catch(e) {
-  print(e);
-}
-/*---ACTION---
-ICON: "refresh"
-LABEL: "Refresh"
-LABEL_ZHCN: "刷新"
-LABEL_ZHTW: "刷新"
-ACCEL: ""
-TOOLTIP: "Reload data from database"
-TOOLTIP_ZHCN: "重新从数据库加载数据"
-TOOLTIP_ZHTW: "重新從數據庫加載數據"
-CHECKED: ""
-GROUP: ""
-STYLE: "button_style=icon"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: "return this.isDetailModified() ? 'hide' : 'enable';"
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/actions/save_detail.js b/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/actions/save_detail.js
deleted file mode 100644
index 49420e218089e83f861149ba43a0f0584f014afb..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/actions/save_detail.js
+++ /dev/null
@@ -1,23 +0,0 @@
-try {
-  this.saveItem();
-} catch(e) {
-  print(e);
-}
-/*---ACTION---
-ICON: "save"
-LABEL: "Save"
-LABEL_ZHCN: "保存"
-LABEL_ZHTW: "保存"
-ACCEL: "Ctrl+S"
-TOOLTIP: "Save"
-TOOLTIP_ZHCN: "保存"
-TOOLTIP_ZHTW: "保存"
-PERMISSION: ""
-CHECKED: ""
-GROUP: ""
-STYLE: " button_style=both"
-LANG: "JavaScript"
-STATUS: "Release"
-VERSION: "1"
-STATEHOOK: "return (this.isDetailModified()) ? 'enable' : 'disable';"
----ACTION---*/
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/detail.ui.js b/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/detail.ui.js
deleted file mode 100644
index decfed8d68b3cbae1a59a948ee2511806661ed7d..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/detail.ui.js
+++ /dev/null
@@ -1,332 +0,0 @@
-[
-    {
-        name: "basic_info_area",
-        type: "ScrollArea",
-        property: {
-            widget_resizable: true,
-            frame_shape: 'NoFrame'
-        },
-        pack: { label: self.ttr('Basic Info') },
-        child: [
-            {
-                name: 'formlayout',
-                type: 'FormGridLayout',
-                property: {
-                    // label_alignment: 'AlignTop | AlignRight',
-                    // horizontal_spacing: 10,
-                    // vertical_spacing: 10,
-                    // margin: 10,
-                    columns: 2
-                },
-                child: [ 
-                    {
-                        name: "id",
-                        type: "LineEdit",
-                        title: self.ttr(""),
-                        pack: {column_span: 2},
-                        initCallback: function(obj,value,self) {
-                            obj.setVisible(false)
-                        }
-                    },
-                    {
-                        name: "attr_data.machine_code",
-                        type: "LineEdit",
-                        title: self.ttr("Machine Code"),
-                        property: { readonly: true},
-                        validate: 'NOTNULL',
-                        child: [
-                            {
-                                name: "choose_machine",
-                                type: "ToolButton",
-                                property: {
-                                    text: self.ttr("Choose")
-                                },
-                                callback: function(){
-                                    var query = new TSqlQueryV2(T_SQLCNT_POOL.getSqlDatabase());
-                                    var sql = "SELECT id,code,name FROM tpm_machine ORDER BY id DESC";
-                                    try {
-                                        var dialog = new TTableViewDialog(self)
-                                        dialog.width = 400;
-                                        dialog.height = 600;
-                                        dialog.setTitle(self.ttr("Choose Machine"));
-                                        dialog.setButtons([self.ttr('Ok')+':Ok:Ok:Primary',self.ttr('Cancel')+':Cancel:Cancel:ERROR']);
-                                        dialog.setPrimaryKey('id');
-                                        dialog.setSearchKeys(['code','name']);
-                                        dialog.setHeaderItem(
-                                            [
-                                                {
-                                                },
-                                                {
-                                                    name: 'id',
-                                                    display: self.ttr('ID'),
-                                                    displayRole: '$id'
-                                                },
-                                                {
-                                                    name: 'code',
-                                                    display: self.ttr('Machine Code'),
-                                                    displayRole: '$code',
-                                                    size: 100
-                                                },
-                                                {
-                                                    name: 'name',
-                                                    display: self.ttr('Machine Name'),
-                                                    displayRole: '$name',
-                                                    size: 200
-                                                }
-                                            ]
-                                        );
-                                        dialog.setDataKeyList(['id','code','name']);
-                                        dialog.loadData(query.selectArrayMap(sql,{}));
-                                        dialog.refreshData(true);
-                                        var ret = dialog.run();
-                                        if(_.isEmpty(ret)) return;
-                                        this.getObject('attr_data.machine_code').setData('value',ret[0]['code']);
-                                        this.getObject('attr_data.machine_name').setData('value',ret[0]['name']);
-                                        this.getObject('machine_id').setData('value',ret[0]['id']);
-                                    } catch(e) {
-                                        GUI.msgbox({detail: e})
-                                        print(e)
-                                    }
-                                }
-                            }
-                        ]
-                    },
-                    {
-                        name: "attr_data.machine_name",
-                        type: "LineEdit",
-                        title: self.ttr("Machine Name"),
-                        state: function(obj,self){
-                            return 'disable';
-                        }
-                    },
-                    {
-                        name: "class",
-                        type: "ComboBox",
-                        title: self.ttr("Maintenance Type"),
-                        property: {
-                            item_list: TOPENM.enumList("tpm-machine-maintenance-plan-class").toComboList()
-                        },
-                        validate: 'NOTNULL'
-                    },
-                    {
-                        name: "title",
-                        type: "LineEdit",
-                        title: self.ttr("Title"),
-                    },
-                    {
-                        name: "priority",
-                        type: "ComboBox",
-                        title: self.ttr("Priority"),
-                        property: {
-                            item_list: TOPENM.enumList("tpm-machine-maintenance-plan-priority").toComboList()
-                        },
-                    },
-                    {
-                        name: "category",
-                        type: "ComboBox",
-                        title: self.ttr("Maintenance Category"),
-                        property: {
-                            item_list: TOPENM.enumList("tpm-machine-maintenance-plan-category").toComboList()
-                        },
-                    },
-                    {
-                        name: "execution_cycle",
-                        type: "ComboBox",
-                        title: self.ttr("Execution Type"),
-                        property: {
-                            item_list: TOPENM.enumList("tpm-machine-maintenance-plan-execution-cycle").toComboList()
-                        },
-                        validate: 'NOTNULL'
-                    },
-                    {
-                        type: 'HBoxLayout',
-                        title: self.ttr("Execution Cycle"),
-                        state: function(obj,self){
-                            if (this.getValue("execution_cycle") == "cycle"){
-                                return 'show';
-                            }
-                            return 'hide';
-                        },
-                        child: [
-                            {
-                                name: "attr_data.cycle_value",
-                                type: "IntLineEdit",
-                                title: self.ttr("Cycle Value"),
-                                state: function(obj,self){
-                                    if (this.getValue("execution_cycle") == "cycle"){
-                                        return 'show';
-                                    }
-                                    return 'hide';
-                                },
-                            },
-                            {
-                                name: "attr_data.cycle_unit",
-                                type: "ComboBox",
-                                title: self.ttr("Cycle Unit"),
-                                state: function(obj,self){
-                                    if (this.getValue("execution_cycle") == "cycle"){
-                                        return 'show';
-                                    }
-                                    return 'hide';
-                                },
-                                property: {
-                                    item_list: TOPENM.enumList("tpm-machine-maintenance-plan-cycle").toComboList()
-                                },
-                            }
-                        ]
-                    },
-                    {
-                        name: "last_execution_time",
-                        type: "DateTimeEdit",
-                        title: self.ttr("Last Execution Time"),
-                        state: function(obj,self){
-                            return 'disable';
-                        },
-                        getter: function(obj,self){
-                            if(_.isEmpty(obj.getData())){
-                                return null;
-                            }
-                            return obj.getData();
-                        }
-                    },
-                    {
-                        name: "next_execution_time",
-                        type: "DateTimeEdit",
-                        title: self.ttr("Next Execution Time"),
-                        getter: function(obj,self){
-                            if(_.isEmpty(obj.getData())){
-                                return null;
-                            }
-                            return obj.getData();
-                        },
-                        validate: "NOTNULL"
-                    },
-                    {
-                        name: "status",
-                        type: "ComboBox",
-                        title: self.ttr("Status"),
-                        property: {
-                            item_list: TOPENM.enumList("tpm-machine-maintenance-plan-status").toComboList()
-                        }
-                    },
-                    {
-                        type: 'HBoxLayout'
-                    },
-                    {
-                        name: "maintenance_person_name",
-                        type: "LineEdit",
-                        title: self.ttr("Maintenance Person"),
-                        pack: {column_span: 2},
-                        getter: function(obj,self){
-                            if (_.isEmpty(obj.getData())){
-                                return null;
-                            }
-                            return obj.getData().split(',');
-                        },
-                        setter: function(obj,val,self){
-                            if (_.isEmpty(val))return;
-                            val = val.replace('{','[');
-                            val = val.replace('}',']');
-                            obj.setData('value',eval('(' + val + ')').join(','))
-                        },
-                        child: [
-                            {
-                                name: "choose_person",
-                                type: "ToolButton",
-                                property: {
-                                    text: self.ttr("Choose")
-                                },
-                                callback: function(){
-                                    var query = new TSqlQueryV2(T_SQLCNT_POOL.getSqlDatabase());
-                                    var sql = "SELECT id,fullname FROM sys_user ORDER BY id DESC";
-                                    try {
-                                        var dialog = new TTableViewDialog(self)
-                                        dialog.width = 400;
-                                        dialog.height = 600;
-                                        dialog.setTitle(self.ttr("Choose Person"));
-                                        dialog.setButtons([self.ttr('Ok')+':Ok:Ok:Primary',self.ttr('Cancel')+':Cancel:Cancel:ERROR']);
-                                        dialog.setPrimaryKey('id');
-                                        dialog.setSearchKeys(['fullname']);
-                                        dialog.setSelectionMode(3);
-                                        dialog.setHeaderItem(
-                                            [
-                                                {
-                                                },
-                                                {
-                                                    name: 'id',
-                                                    display: self.ttr('ID'),
-                                                    displayRole: '$id'
-                                                },
-                                                {
-                                                    name: 'fullname',
-                                                    display: self.ttr('Name'),
-                                                    displayRole: '$fullname',
-                                                    size: 200
-                                                }
-                                            ]
-                                        );
-                                        dialog.setDataKeyList(['id','fullname']);
-                                        dialog.loadData(query.selectArrayMap(sql,{}));
-                                        dialog.refreshData(true);
-                                        var ret = dialog.run();
-                                        if(_.isEmpty(ret)) return;
-                                        var idList = [];
-                                        var nameList = [];
-                                        _.each(ret,function(people){
-                                            idList.push(people.id);
-                                            nameList.push(people.fullname)
-                                        });
-                                        this.getObject('maintenance_person_name').setData('value',nameList.join(','));
-                                        this.getObject('maintenance_person_ids').setData('value',idList.join(','));
-                                    } catch(e) {
-                                        GUI.msgbox({detail: e})
-                                        print(e)
-                                    }
-                                }
-                            }
-                        ]
-                    },
-                    {
-                        name: "description",
-                        type: "PlainTextEdit",
-                        title: self.ttr("Maintenance Content"),
-                        pack: {column_span: 2},
-                        property: {
-                            min_row_count: 8
-                        }
-                    },
-                    {
-                        name: "maintenance_person_ids",
-                        type: "LineEdit",
-                        pack: {column_span: 2},
-                        initCallback: function(obj,value,self) {
-                            obj.setVisible(false)
-                        },
-                        getter: function(obj,self){
-                            if (_.isEmpty(obj.getData())){
-                                return null;
-                            }
-                            return obj.getData().split(',');
-                        },
-                        setter: function(obj,val,self){
-                            if (_.isEmpty(val))return;
-                            val = val.replace('{','[');
-                            val = val.replace('}',']');
-                            obj.setData('value',eval('(' + val + ')').join(','))
-                        },
-                    },
-                    {
-                        name: "machine_id",
-                        type: "LineEdit",
-                        initCallback: function(obj,value,self) {
-                            obj.setVisible(false)
-                        }
-                    },
-                    {
-                        type: 'Stretch'
-                    }
-                ]
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/lang.conf b/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/lang.conf
deleted file mode 100644
index 5f495a8fd4494436f6ca47dad0bd64aa2376eb94..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/lang.conf
+++ /dev/null
@@ -1,36 +0,0 @@
-"Title": {en: "Title", zhcn: "标题", zhtw: "標題"}
-"Navigation": {en: "Navigation", zhcn: "导航栏", zhtw: "導航欄"}
-"Display Navigation": {en: "Display Navigation", zhcn: "显示导航栏", zhtw: "顯示導航欄"}
-"Catergory": {en: "Catergory", zhcn: "分类", zhtw: "分類"}
-"Priority": {en: "Priority", zhcn: "优先级", zhtw: "優先級"}
-"Last execution time": {en: "Last execution time", zhcn: "上次维护时间", zhtw: "上次維護時間"}
-"Next execution time": {en: "Next execution time", zhcn: "下次维护时间", zhtw: "下次維護時間"}
-"Machine Code": {en: "Machine Code", zhcn: "设备编号", zhtw: "設備編號"}
-"Machine Name": {en: "Machine Name", zhcn: "设备名称", zhtw: "設備名稱"}
-"Maintenance Type": {en: "Maintenance Type", zhcn: "维护类型", zhtw: "維護類型"}
-"Maintenance Category": {en: "Maintenance Category", zhcn: "维护分类", zhtw: "維護分類"}
-"Execution Type": {en: "Execution Type", zhcn: "计划类型", zhtw: "計劃類型"}
-"Execution Cycle": {en: "Execution Cycle", zhcn: "计划周期", zhtw: "計劃週期"}
-"Status": {en: "Status", zhcn: "状态", zhtw: "狀態"}
-"Last Execution Time": {en: "Last Execution Time", zhcn: "上次执行时间", zhtw: "上次執行時間"}
-"Next Execution Time": {en: "Next Execution Time", zhcn: "下次执行时间", zhtw: "下次執行時間"}
-"Maintenance Person": {en: "Maintenance Person", zhcn: "维护人员", zhtw: "維護人員"}
-"Maintenance Content": {en: "Maintenance Content", zhcn: "维护内容", zhtw: "維護內容"}
-"Class": {en: "Maintenance Class", zhcn: "维护类型", zhtw: "維護類型"}
-"Load data successful!": {en: "Load data successful!" ,zhcn: "加载数据完成!" ,zhtw: "加載數據完成!"}
-"Exec Plan": {en: "Exec Plan", zhcn: "执行计划", zhtw: "執行計劃"}
-"Class": {en: "Maintenance Class", zhcn: "维护类型", zhtw: ""}
-"Choose": {en: "Choose", zhcn: "选择", zhtw: "選擇"}
-"Choose Machine": {en: "Choose Machine", zhcn: "选择设备", zhtw: "選擇設備"}
-"Choose Person": {en: "Choose Person", zhcn: "选择人员", zhtw: "選擇人員"}
-"Record No": {en: "Record No", zhcn: "记录单号", zhtw: "記錄單號"}
-"Apply Time": {en: "Apply Time", zhcn: "申请时间", zhtw: "申請時間"}
-"Apply Person": {en: "Apply Person", zhcn: "申请人", zhtw: "申請人"}
-"Start Time": {en: "Start Time", zhcn: "开始时间", zhtw: "開始時間"}
-"End Time": {en: "End Time", zhcn: "结束时间", zhtw: "結束時間"}
-"Basic Info": {en: "Basic Info", zhcn: "基本信息", zhtw: "基本信息"}
-"Ok": {en: "OK", zhcn: "确定", zhtw: "確定"}
-"Cancel": {en: "Cancel", zhcn: "取消", zhtw: "取消"}
-"Cycle Value": {en: "Cycle Value", zhcn: "周期", zhtw: "週期"}
-"Cycle Unit": {en: "Cycle Unit", zhcn: "周期单位", zhtw: "週期單位"}
-"Name": {en: "Name", zhcn: "姓名", zhtw: "姓名"}
\ No newline at end of file
diff --git a/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/module.conf b/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/module.conf
deleted file mode 100644
index d23ba2138eb23d1605bc797f63d8bc58d5e85151..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/module.conf
+++ /dev/null
@@ -1,141 +0,0 @@
-# 模块标题
-sys_title: "Template4 Demo - Filter By Sql Where"
-sys_title_en: "Template4 Demo - Filter By Sql Where"
-sys_title_zhcn: "模板4-sql where语句过滤"
-sys_title_zhtw: ""
-# 模块图标
-sys_icon: "wpforms"
-# 模块对应的插件DLL名称
-sys_plugin: "toptemplateclassplugin"
-# 模块对应的类名
-sys_class: "TopTemplateClass4"
-# 许可证验证键
-sys_license_key: ""
-# 打开模块的权限
-sys_open_right: ""
-# 语言包,默认包含自己模块的语言包
-sys_lang_list: []
-# 当关闭窗口时,如果提示是否保存,保存调用的action
-sys_save_action: ""
-# 该模块用到的枚举列表
-sys_enum_list: []
-# 该模块用到的除了Action之外的权限列表
-sys_permission_list: []
-# 导航栏
-# is_checkable,=true 或1, 表示支持checkbox形式; =false 或0, 表示非checkbox形式
-navi: {
-    format: "filter_by_sql_where",
-    is_checkable: false,
-    categories: [
-        {
-            name: "class",
-            text: "Maintenance Type",
-            icon: "",
-            VISIBLE: 1,
-            EXPAND: 1,
-            checked: 0,
-            data: ""
-            CHILDREN: [
-                {
-                    name: "repair",
-                    text: "ç»´ä¿®",
-                    VISIBLE: 1,
-                    checked: 0,
-                    data: "class = 'repair'"
-                },
-                {
-                    name: "maintenance",
-                    text: "保养"
-                    VISIBLE: 1,
-                    checked: 0,
-                    data: "class = 'maintenance'"
-                },
-                {
-                    name: "spot_check",
-                    text: "点检",
-                    VISIBLE: 1,
-                    checked: 0,
-                    data: "class = 'spot_check'"
-                }
-            ]
-        }
-    ]
-}
-
-# 主表格
-view {
-  # 数据项, 默认包含表头中配置的数据项
-  data_keys: ["id","class","status","attr_data.machine_code","attr_data.machine_name","machine_id","execution_cycle","attr_data.cycle_value","attr_data.cycle_unit"
-        "title","category","priority","last_execution_time","next_execution_time","description","maintenance_person_name"]
-  # 主键
-  primary_key: "id"
-  # 水平表头
-  horizontal_header: [
-    {
-        "name": "attr_data.machine_code",
-        "display": "Machine Code",
-        "displayRole": "$attr_data.machine_code",
-        "size": 100
-    },
-    {
-        "name": "attr_data.machine_name",
-        "display": "Machine Name",
-        "displayRole": "$attr_data.machine_name",
-        "size": 100
-    },
-    {
-        "name": "title",
-        "display": "Title",
-        "displayRole": "$title",
-        "size": 100,
-        "search": "string"
-    },
-    {
-        "name": "class",
-        "display": "Class",
-        "displayRole": "$class.text",
-        "size": 100,
-        "format": "enum(tpm-machine-maintenance-plan-class)"
-    },
-    {
-        "name": "category",
-        "display": "Catergory",
-        "displayRole": "$category.text",
-        "size": 100
-        "format": "enum(tpm-machine-maintenance-plan-category)"
-    }, 
-    {
-        "name": "priority",
-        "display": "Priority",
-        "displayRole": "$priority",
-        "size": 100
-    },
-    {
-        "name": "status",
-        "display": "Status",
-        "displayRole": "$status.text",
-        "size": 100,
-        "format": "enum(tpm-machine-maintenance-plan-status)"
-    },
-    {
-        "name": "last_execution_time",
-        "display": "Last execution time",
-        "displayRole": "$last_execution_time",
-        "size": 200
-    },
-    {
-        "name": "next_execution_time",
-        "display": "Next execution time",
-        "displayRole": "$next_execution_time",
-        "size": 200
-    }
-  ]
-  # 默认排序列
-  sort_by: "id DESC"
-  # 数据集
-  data_set {
-    # 数据库表名
-    db_table_name: "tpm_machine_maintenance_plan"
-    db_filter: "status = 'waiting' or next_execution_time is not null"
-  }
-}
diff --git a/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/uim.conf b/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/uim.conf
deleted file mode 100644
index b9c7203f9922f7b0d89481d759a759009dfeb51c..0000000000000000000000000000000000000000
--- a/demo/examples/module/TEMPLATEDEMO/template4-demo-filter-by-sql/uim.conf
+++ /dev/null
@@ -1,31 +0,0 @@
-# 工具栏
-"MAIN_TOOLBAR": [
-	{"type":"toolitem","action":"new"},
-	{"type":"stretcher"},
-	{"type":"searchentry","name":"SEARCH_ENTRY"}
-  {"type":"toolitem","action":"refresh"}
-]
-
-# 表格的右键菜单
-"TABLEVIEW_POPUP": [
-  {"type":"menuitem","action":"new"},
-	{"type":"separator"},
-	{"type":"menuitem","action":"delete"},
-	{"type":"separator"},
-	{"type":"menuitem","action":"refresh"}
-]
-
-# 底部工具栏
-"BOTTOM_TOOLBAR" : [
-	{"type":"stretcher"},
-	{"type":"pagetool","name":"PAGE_TOOL"}
-]
-
-# 详细信息工具栏
-"DETAIL_TOOLBAR": [
-	{"type":"toolitem","action":"save_detail"},
-	{"type":"stretcher"},
-	{"type":"toolitem","action":"copy_detail"},
-	{"type":"toolitem","action":"cancel_detail"},
-	{"type":"toolitem","action":"refresh_detail"}
-]
\ No newline at end of file
diff --git a/demo/examples/shared/shared.pri b/demo/examples/shared/shared.pri
deleted file mode 100644
index 3e3bd41cfba6db8fc8ac9bb2237d9037014240f6..0000000000000000000000000000000000000000
--- a/demo/examples/shared/shared.pri
+++ /dev/null
@@ -1,62 +0,0 @@
-DEFINES += QT_NO_FOREACH
-
-win32-msvc* {
-    # support windows xp
-    QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS,5.01
-    # generating pdb in release mode
-    QMAKE_CXXFLAGS_RELEASE += /Zi
-    QMAKE_LFLAGS_RELEASE += /DEBUG
-}
-
-# get platform
-TOPIKM_PLATFORM=$$(TOPIKM_PLATFORM)
-isEmpty(TOPIKM_PLATFORM){
-    TOPIKM_PLATFORM=unknown
-    win32 {
-        TOPIKM_PLATFORM=win32
-        win32-g++ {
-            TOPIKM_PLATFORM=win32-mingw
-        }
-        win32-msvc2013 {
-            TOPIKM_PLATFORM=win32-msvc2013
-        }
-        win32-msvc2015 {
-            TOPIKM_PLATFORM=win32-msvc2015
-        }
-    }
-    macx {
-        TOPIKM_PLATFORM=macx
-    }
-    linux {
-        TOPIKM_PLATFORM=linux$$QMAKE_HOST.arch
-    }
-}
-# topikm sdk path
-TOPIKM_SDKPATH=$$DIST_DIR/topikm/qt$$[QT_VERSION]-$${TOPIKM_PLATFORM}
-
-# include topikm headers
-INCLUDEPATH += $${TOPIKM_SDKPATH}/include
-
-# support c++11
-CONFIG += c++11
-
-# debug suffix
-CONFIG += debug_and_release
-CONFIG(debug, debug | release) {
-    DESTDIR = $${TOPIKM_SDKPATH}/bin_dbg
-    win32 {
-        DEBUG_SUFFIX = d
-    }
-    macx {
-        DEBUG_SUFFIX = _debug
-    }
-} else {
-    DESTDIR = $${TOPIKM_SDKPATH}/bin
-    DEBUG_SUFFIX =
-}
-
-# libs
-LIBS += -L$$DESTDIR
-for(lib, LIB_LIST) {
-    LIBS += -l$${lib}$${DEBUG_SUFFIX}
-}
diff --git a/demo/examples/templatemain/templatemain.pro b/demo/examples/templatemain/templatemain.pro
deleted file mode 100644
index ee570bc0adc265d494ed23591293e3693a7e7ef1..0000000000000000000000000000000000000000
--- a/demo/examples/templatemain/templatemain.pro
+++ /dev/null
@@ -1,26 +0,0 @@
-QT       += widgets
-
-TARGET = Top
-TEMPLATE = app
-
-SOURCES += main.cpp
-
-RC_FILE = appicon.rc
-
-OTHER_FILES += \
-    appicon.rc
-
-LIB_LIST = toputil
-
-linux {
-    LIB_LIST = tbaseutil thoconwrapper boost_locale boost_system boost_thread tsec quazip twidget QtitanBase QtitanGrid tdatabaseutil xl texcelxs toputil topcore
-}
-
-win32 {
-    LIBS += -ldbghelp
-}
-
-DIST_DIR = $$PWD/../../../dist
-include(../shared/shared.pri)
-
-LIBS += -L$$DESTDIR
diff --git a/module.json b/module.json
new file mode 100644
index 0000000000000000000000000000000000000000..b2b425b018aeb058c20eac1f9dbba7cee4518ae6
--- /dev/null
+++ b/module.json
@@ -0,0 +1,14 @@
+{
+    "module_name": "TopSYS",
+    "module_name_en": "System Config",
+    "module_name_zhcn": "系统设置",
+    "module_name_zhtw": "系統設置",
+    "http_url": {
+        "http://139.196.104.13:9181/api/TOPMES6_PRODUCT_V6/ikm6": "TopMES",
+        "http://139.196.104.13:9181/api/TOPMES6_PCB_V6/ikm6": "TopMES",
+        "http://139.196.104.13:9181/api/TOPMES6_SPU_V6/ikm6": "TopMES",
+        "http://139.196.104.13:9181/api/TOPMES6_AIR_V6/ikm6": "TopMES",
+        "http://139.196.104.13:9181/api/TOPMES6_SEC_V6/ikm6": "TopMES"
+    },
+    "hook": "http://139.196.104.13:9181/api/_/ci/getModuleConfig"
+}
\ No newline at end of file
diff --git a/qdoc/config/doc.qdocconf b/qdoc/config/doc.qdocconf
deleted file mode 100644
index f19f19636dd3439f557aae7dd5824a255d03a712..0000000000000000000000000000000000000000
--- a/qdoc/config/doc.qdocconf
+++ /dev/null
@@ -1,51 +0,0 @@
-include(../global/qt-module-defaults-offline.qdocconf)
-
-# Name of the project which must match the outputdir. Determines the .index file
-project                 = templateclass
-description             = TopIKM6 Templateclass
-version                 = 1.0.0
-
-depends                 += qtcore qtgui qtwidgets qtnetwork qtscript qtsql qtxml
-
-outputformats=HTML
-
-outputdir   = ../html
-imagedirs   = ../images
-tagfile = ../doc.tags
-
-# The following parameters are for creating a qhp file, the qhelpgenerator
-# program can convert the qhp file into a qch file which can be opened in
-# Qt Assistant and/or Qt Creator.
-
-# Defines the name of the project. You cannot use operators (+, =, -) in
-# the name. Properties for this project are set using a qhp.<projectname>.property
-# format.
-qhp.projects                 = templateclass
-# Sets the name of the output qhp file.
-qhp.templateclass.file                 = templateclass.qhp
-qhp.templateclass.namespace            = net.topibd.topikm6.templateclass.1.0.0
-qhp.templateclass.virtualFolder        = templateclass
-
-# Title for the package, will be the main title for the package in
-# Assistant/Creator.
-qhp.templateclass.indexTitle = templateclass
-
-# Only update the name of the project for the next variables.
-qhp.templateclass.filterAttributes    = templateclass qtrefdoc
-qhp.templateclass.customFilters.Qt.name = templateclass
-qhp.templateclass.subprojects = classes
-qhp.templateclass.subprojects.classes.title = C++ Classes
-qhp.templateclass.subprojects.classes.indexTitle = All Classes
-qhp.templateclass.subprojects.classes.selectors = class fake:headerfile
-qhp.templateclass.subprojects.classes.sortPages = true
-
-headerdirs  += ../src \
-    ../../src/plugin
-
-sourcedirs  = ../src \
-    ../../src/plugin
-
-navigation.landingpage = "templateclass"
-navigation.cppclassespage = "templateclass C++ Classes"
-
-#indexes += $TOPIKM6_DOCS/topikm6/topikm6.index
diff --git a/qdoc/global/compat.qdocconf b/qdoc/global/compat.qdocconf
deleted file mode 100644
index 12d061a28ad0e82b3c62d79f77bff99ccabb8497..0000000000000000000000000000000000000000
--- a/qdoc/global/compat.qdocconf
+++ /dev/null
@@ -1,9 +0,0 @@
-macro.0                         = "\\\\0"
-macro.n                         = "\\\\n"
-macro.r                         = "\\\\r"
-macro.img                       = "\\image"
-macro.endquote                  = "\\endquotation"
-macro.relatesto                 = "\\relates"
-
-spurious                        = "Missing comma in .*" \
-                                  "Missing pattern .*"
diff --git a/qdoc/global/config.qdocconf b/qdoc/global/config.qdocconf
deleted file mode 100644
index 518cf68231e2a184d23981577d60cb9cb1a0802c..0000000000000000000000000000000000000000
--- a/qdoc/global/config.qdocconf
+++ /dev/null
@@ -1,15 +0,0 @@
-#Include this file to inherit configuration related to Qt Project based modules.
-
-dita.metadata.default.author      = TopLinker
-dita.metadata.default.permissions = all
-dita.metadata.default.publisher   = TopLinker Co., Ltd.
-dita.metadata.default.copyryear = 2020
-dita.metadata.default.copyrholder = TopLinker Co., Ltd.
-dita.metadata.default.audience = programmer
-
-#Set the main Qt index.html
-navigation.homepage = "topikm6"
-
-sourcedirs += includes
-
-url = http://139.196.104.13:8888/topikm6-templateclass
diff --git a/qdoc/global/externalsites.qdocconf b/qdoc/global/externalsites.qdocconf
deleted file mode 100644
index 46ce8401c0c972abb83dc23dc47dacf13180420a..0000000000000000000000000000000000000000
--- a/qdoc/global/externalsites.qdocconf
+++ /dev/null
@@ -1,3 +0,0 @@
-# Include the external websites
-sourcedirs += externalsites
-
diff --git a/qdoc/global/externalsites/external-resources.qdoc b/qdoc/global/externalsites/external-resources.qdoc
deleted file mode 100644
index a7b34af50c5035929aeade28ed42ee3ea729975c..0000000000000000000000000000000000000000
--- a/qdoc/global/externalsites/external-resources.qdoc
+++ /dev/null
@@ -1,494 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: http://www.gnu.org/copyleft/fdl.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-/*!
-    \externalpage http://www.freedesktop.org/
-    \title freedesktop.org
-*/
-
-/*!
-    \externalpage http://www.freedesktop.org/Standards/xembed-spec
-    \title XEmbed Specification
-*/
-
-/*!
-    \externalpage http://www.freedesktop.org/Standards/icon-theme-spec
-    \title Icon Themes Specification
-*/
-
-/*!
-    \externalpage http://www.cups.org/
-    \title Common Unix Printing System (CUPS)
-    \keyword CUPS
-*/
-
-/*!
-    \externalpage http://www.freedesktop.org/wiki/Standards_2fdesktop_2dentry_2dspec
-    \title Desktop Entry Specification
-*/
-
-/*!
-    \externalpage http://www.kde.org/
-    \title The K Desktop Environment
-    \keyword KDE
-*/
-
-/*!
-    \externalpage http://www.cmake.org/cmake/help/documentation.html
-    \title CMake Documentation
-*/
-
-/*!
-    \externalpage http://www.cmake.org/cmake/help/v2.8.11/cmake.html#command:find_package
-    \title CMake find_package Documentation
-*/
-
-/*!
-    \externalpage http://www.cmake.org/cmake/help/v2.8.11/cmake.html#prop_tgt:AUTOMOC
-    \title CMake AUTOMOC Documentation
-*/
-
-
-/*!
-    \externalpage http://www.cmake.org/cmake/help/v2.8.11/cmake.html#prop_tgt:LOCATION
-    \title CMake LOCATION Documentation
-*/
-
-/*!
-    \externalpage http://www.cmake.org/cmake/help/v2.8.11/cmake.html#prop_tgt:POSITION_INDEPENDENT_CODE
-    \title CMake POSITION_INDEPENDENT_CODE Documentation
-*/
-
-/*!
-    \externalpage http://www.cmake.org/cmake/help/v2.8.11/cmake.html#command:target_link_libraries
-    \title CMake target_link_libraries Documentation
-*/
-
-/*!
-    \externalpage http://www.gnome.org/
-    \title GNOME
-*/
-
-/*!
-    \externalpage http://www.gnu.org/software/emacs/
-    \title GNU Emacs
-*/
-
-/*!
-    \externalpage http://gnuwin32.sourceforge.net/packages.html
-    \title GnuWin32 Project
-*/
-
-/*!
-    \externalpage http://www.w3.org/Graphics/SVG/About.html
-    \title About SVG
-    \keyword Scalable Vector Graphics
-*/
-
-/*!
-    \externalpage http://www.w3.org/TR/SVG/types.html#ColorKeywords
-    \title SVG color keyword names
-*/
-
-/*!
-    \externalpage http://www.w3.org/Graphics/SVG/
-    \title SVG Working Group
-*/
-
-/*!
-    \externalpage http://www.w3.org/TR/SVGMobile/
-    \title Mobile SVG Profiles
-    \omit
-    Mobile SVG Profiles: SVG Tiny and SVG Basic
-    \endomit
-*/
-
-/*!
-    \externalpage http://www.w3.org/TR/SVGMobile12/
-    \title SVG 1.2 Tiny
-*/
-
-/*!
-    \externalpage http://www.w3.org/Graphics/SVG/feature/1.2/#SVG-static
-    \title SVG 1.2 Tiny Static Features
-*/
-
-
-
-/*!
-    \externalpage http://tdm-gcc.tdragon.net/
-    \title TDM-GCC
-*/
-
-/*!
-    \externalpage http://www.dependencywalker.com/
-    \title Dependency Walker
-*/
-
-/*!
-    \externalpage http://webkit.org/
-    \title WebKit Open Source Project
-*/
-
-/*!
-    \externalpage http://www.informit.com/store/product.aspx?isbn=0132354160
-    \title C++ GUI Programming with Qt 4, 2nd Edition
-*/
-
-/*!
-    \externalpage http://www.openssl.org/
-    \title OpenSSL Toolkit
-*/
-
-/*!
-    \externalpage http://arora-browser.org/
-    \title Arora Browser
-*/
-
-/*!
-    \externalpage http://www.activestate.com/Products/activeperl/index.mhtml
-    \title ActivePerl
-*/
-
-/*!
-    \externalpage https://chromium.googlesource.com/angle/angle/+/master/README.md
-    \title ANGLE
-*/
-
-/*!
-    \externalpage http://msdn.microsoft.com/en-us/directx/default.aspx
-    \title Direct X SDK
-*/
-
-/*!
-    \externalpage http://www.w3.org/TR/html401/
-    \title HTML 4
-*/
-
-/*!
-    \externalpage http://www.w3.org/TR/html5/
-    \title HTML 5
-*/
-
-/*!
-    \externalpage http://site.icu-project.org/
-    \title ICU
-*/
-
-/*!
-    \externalpage http://www.mingw.org/
-    \title MinGW
-*/
-
-/*!
-    \externalpage http://www.python.org/
-    \title Python
-*/
-
-/*!
-    \externalpage http://pyxml.sourceforge.net/topics/xbel/
-    \title XML Bookmark Exchange Language Resource Page
-*/
-
-/*!
-    \externalpage http://www.w3.org/TR/xquery/#errors
-    \title error handling in the XQuery language
-*/
-
-/*!
-    \externalpage http://xaos.sourceforge.net/
-    \title XaoS
-*/
-
-/*!
-    \externalpage http://www.unixodbc.org
-    \title http://www.unixodbc.org
-*/
-
-/*!
-    \externalpage http://www.postgresql.org
-    \title http://www.postgresql.org
-*/
-
-/*!
-    \externalpage http://www.postgresql.org/docs/current/static/installation-platform-notes.html#INSTALLATION-NOTES-MINGW
-    \title PostgreSQL MinGW/Native Windows
-*/
-
-/*!
-    \externalpage http://www.freetds.org
-    \title http://www.freetds.org
-*/
-
-/*!
-    \externalpage http://www.sybase.com
-    \title http://www.sybase.com
-*/
-
-/*!
-    \externalpage http://linux.sybase.com
-    \title http://linux.sybase.com
-*/
-
-/*!
-    \externalpage http://www.sqlite.org
-    \title http://www.sqlite.org
-*/
-
-/*!
-    \externalpage http://www.amazon.com/Threads-Primer-Guide-Multithreaded-Programming/dp/0134436989/ref=sr_1_1?ie=UTF8&qid=1354884049&sr=8-1&keywords=a+guide+to+multithreaded+programming
-    \title Threads Primer: A Guide to Multithreaded Programming
-*/
-
-/*!
-    \externalpage http://www.amazon.com/Thread-Time-MultiThreaded-Programming-Guide/dp/0131900676/ref=sr_1_sc_3?ie=UTF8&qid=1354884427&sr=8-3-spell&keywords=The+Mulltithread+Programming+Guide
-    \title Thread Time: The Multithreaded Programming Guide
-*/
-
-/*!
-    \externalpage http://www.amazon.com/Pthreads-Programming-Standard-Multiprocessing-Nutshell/dp/1565921151/ref=sr_1_1?s=books&ie=UTF8&qid=1354884565&sr=1-1&keywords=threads+Programming%3A+A+POSIX+Standard+for+Better+Multiprocessing
-    \title Pthreads Programming: A POSIX Standard for Better Multiprocessing
-*/
-
-/*!
-    \externalpage http://www.amazon.com/Win32-Multithreaded-Programming-Aaron-Cohen/dp/B00007GW3Z/ref=sr_1_1?s=books&ie=UTF8&qid=1354884647&sr=1-1&keywords=Win32+Multithreaded+Programming
-    \title Win32 Multithreaded Programming
-*/
-
-/*!
-    \externalpage http://www.phptr.com/content/images/0131872494/samplechapter/blanchette_ch10.pdf
-    \title "Item View Classes" Chapter of C++ GUI Programming with Qt 4
-*/
-
-/*!
-    \externalpage https://developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/AppleHIGuidelines/Intro/Intro.html
-    \title Mac OS X Aqua
-*/
-
-/*!
-    \externalpage http://www.kdedevelopers.org/node/2345
-    \title KDE applications
-*/
-
-/*!
-    \externalpage http://cgi.netscape.com/newsref/std/cookie_spec.html
-    \title Netscape Cookie Specification
-*/
-
-/*!
-    \externalpage http://msdn.microsoft.com/en-us/library/ms533046(VS.85).aspx
-    \title Mitigating Cross-site Scripting With HTTP-only Cookies
-*/
-
-/*!
-    \externalpage http://en.tldp.org/HOWTO/Framebuffer-HOWTO.html
-    \title Framebuffer HOWTO
-*/
-
-/*!
-    \externalpage http://wap.trafikanten.no
-    \title Trafikanten
-*/
-
-/*!
-    \externalpage http://www.w3.org/TR/scxml/
-    \title State Chart XML: State Machine Notation for Control Abstraction
-*/
-
-/*!
-    \externalpage http://www.wisdom.weizmann.ac.il/~dharel/SCANNED.PAPERS/Statecharts.pdf
-    \title Statecharts: A visual formalism for complex systems
-*/
-
-/*!
-    \externalpage http://www.gnu.org/licenses/gpl.html
-    \title GNU General Public License
-*/
-
-/*!
-    \externalpage http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
-    \title GNU Lesser General Public License, version 2.1
-*/
-
-/*!
-    \externalpage http://developers.sun.com/sunstudio/downloads/patches/index.jsp
-    \title Sun Studio Patches
-*/
-
-/*!
-    \externalpage http://www.qtcentre.org
-    \title Qt Centre
-*/
-
-/*!
-    \externalpage http://www.kde.org
-    \title KDE
-*/
-
-/*!
-    \externalpage http://www.directfb.org/index.php?path=Main%2FDownloads&amp;page=1
-    \title DirectFB - df_window example
-*/
-
-/*!
-    \externalpage http://www.directfb.org/docs/DirectFB_Reference_1_4/IDirectFBPalette.html
-    \title DirectFB - IDirectFBPalette
-*/
-
-/*!
-    \externalpage http://www.cplusplus.com/reference/clibrary/cstring/memcpy/
-    \title C++ Reference - memcpy
-*/
-
-/*!
-    \externalpage http://www.directfb.org/docs/DirectFB_Reference_1_4/IDirectFB_CreateInputEventBuffer.html
-    \title DirectFB - CreateInputEventBuffer
-*/
-
-/*!
-    \externalpage http://www.directfb.org/docs/DirectFB_Reference_1_4/types.html#DFBSurfaceBlittingFlags
-    \title DirectFB - DFBSurfaceBlittingFlags
-*/
-
-/*!
-    \externalpage http://directfb.org/docs/DirectFB_Reference_1_4/IDirectFBImageProvider.html
-    \title DirectFB - IDirectFBImageProvider
-*/
-
-/*!
-    \externalpage http://www.directfb.org/docs/DirectFB_Reference_1_4/IDirectFBSurface.html
-    \title DirectFB - IDirectFBSurface
-*/
-
-/*!
-    \externalpage http://www.directfb.org/docs/DirectFB_Reference_1_4/IDirectFBWindow
-    \title DirectFB - IDirectFBWindow
-*/
-
-/*!
-    \externalpage http://www.directfb.org/docs/DirectFB_Reference_1_4/types.html#DFBSurfaceDescription
-    \title DirectFB - DFBSurfaceDescription
-*/
-
-/*!
-    \externalpage http://www.w3.org/TR/REC-CSS2/selector.html#q1
-    \title Standard CSS2 selector
-*/
-
-/*!
-    \externalpage http://www.w3.org/XML/Core/#Publications
-    \title W3C XML specifications
-*/
-
-/*!
-    \externalpage http://www.w3.org/XML/Schema
-    \title XML Schema
-*/
-
-/*!
-    \externalpage http://opensource.org/licenses/bsd-license.php
-    \title New and Modified BSD Licenses
-*/
-
-/*!
-    \externalpage http://www.ecma-international.org/publications/standards/Ecma-262.htm
-    \title ECMAScript Language Specification
-*/
-
-/*!
-    \externalpage https://developer.mozilla.org/en/JavaScript
-    \title JavaScript Resources
-*/
-
-/*!
-    \externalpage https://developer.mozilla.org/en/JavaScript/Guide
-    \title JavaScript Guide
-*/
-
-/*!
-    \externalpage https://developer.mozilla.org/en/JavaScript/About_JavaScript
-    \title About JavaScript
-*/
-
-/*!
-    \externalpage http://www.libusb.org/
-    \title libusb
-*/
-
-/*!
-    \externalpage https://developer.mozilla.org/en/JavaScript/Reference/Reserved_Words
-    \title JavaScript Reserved Words
-*/
-
-/*!
-    \externalpage http://publicsuffix.org/
-    \title publicsuffix.org
-*/
-
-/*!
-    \externalpage http://accessibility.linuxfoundation.org/a11yspecs/ia2/docs/html/_accessible_event_i_d_8idl.html
-    \title AccessibleEventID.idl File Reference
-*/
-
-/*!
-    \externalpage http://msdn.microsoft.com/en-us/library/dd318066.aspx
-    \title Microsoft Active Accessibility Event Constants
-*/
-
-/*!
-    \externalpage ftp://ftp.qt-project.org/pub/qt/solutions/lgpl/qtmotifextension-2.7_1-opensource.tar.gz
-    \title Motif Extension
-*/
-
-/*!
-    \externalpage http://www.opengl.org/registry/
-    \title OpenGL Registry
-*/
-
-/*!
-    \externalpage http://www.khronos.org/registry/gles/
-    \title Khronos OpenGL ES API Registry
-*/
-
-/*!
-    \externalpage http://git.iksaif.net/?p=qsslkey-p11.git
-    \title qsslkey example
-*/
-
-/*!
-    \externalpage http://www.w3.org/TR/2009/WD-webdatabase-20091029/
-    \title HTML5 Web Database API
-*/
-
-/*!
-    \externalpage http://lldb.llvm.org/
-    \title The LLDB Debugger
-*/
-
-/*!
-    \externalpage https://login.qt.io/
-    \title Qt Account Sign-up
-*/
diff --git a/qdoc/global/externalsites/qt-webpages.qdoc b/qdoc/global/externalsites/qt-webpages.qdoc
deleted file mode 100644
index e70a4414959fa3ef515c5e97cdd2f897a3260af1..0000000000000000000000000000000000000000
--- a/qdoc/global/externalsites/qt-webpages.qdoc
+++ /dev/null
@@ -1,116 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: http://www.gnu.org/copyleft/fdl.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-/*!
-    \externalpage http://qt.io/
-    \title Qt Homepage
-*/
-/*!
-    \externalpage http://bugreports.qt.io
-    \title Qt Bug Tracker
-*/
-/*!
-    \externalpage http://qt.io/download
-    \title Downloads
-*/
-/*!
-    \externalpage http://qt.io/licensing/
-    \title Qt Licensing Overview
-*/
-/*!
-    \externalpage http://doc.qt.io/archives/qq/
-    \title Qt Quarterly
-*/
-/*!
-    \externalpage http://doc.qt.io/archives/qq/qq19-plurals.html
-    \title Qt Quarterly: Plural Form in Translation
-*/
-/*!
-    \externalpage https://code.qt.io/
-    \title Public Qt Repository
-*/
-/*!
-    \externalpage https://code.qt.io/cgit/%7bnon-gerrit%7d/qt-labs/qtestlib-tools.git/
-    \title qtestlib-tools
-*/
-
-/*!
-    \externalpage http://wiki.qt.io/Qt_Coding_Style
-    \title Qt Coding Style
-*/
-/*!
-    \externalpage http://doc.qt.io/archives/qt-eclipse-1.6/index.html
-    \title Eclipse Plugin
-*/
-/*!
-    \externalpage http://doc.qt.io/archives/qq/qq11-events.html
-    \title Qt Quarterly: Another Look at Events
-*/
-/*!
-    \externalpage http://qt-project.org/videos/watch/livecoding-video-effects-with-qt5
-    \title Livecoding video effects with Qt5
-*/
-/*!
-    \externalpage http://blog.qt.io/2012/02/29/pimp-my-video-shader-effects-and-multimedia/
-    \title Pimp my video
-*/
-/*!
-    \externalpage http://wiki.qt.io/QtMediaHub
-    \title QtMediaHub
-*/
-/*!
-    \externalpage http://wiki.qt.io/Qt_RaspberryPi
-    \title QtonPi
-*/
-
-/*!
-    \externalpage http://wiki.qt.io/jom
-    \title jom
-*/
-
-/*!
-    \externalpage http://doc.qt.io/qt-4.8
-    \title Qt 4.8 Reference Documentation
-*/
-
-/*!
-    \externalpage http://doc.qt.io/qt-4.8/qtquick.html
-    \title Qt Quick 1 Reference Documentation
-*/
-
-/*!
-    \externalpage http://wiki.qt.io/Qt_Localization
-    \title external: Translating Qt Into Other Languages
-*/
-
-/*!
-    \externalpage http://wiki.qt.io/BlackBerry
-    \title Qt for BlackBerry
-*/
-/*!
-    \externalpage http://wiki.qt.io/Qt_Multimedia_Backends
-    \title Qt Multimedia Backends
-*/
diff --git a/qdoc/global/externalsites/qtcreator.qdoc b/qdoc/global/externalsites/qtcreator.qdoc
deleted file mode 100644
index b8cd9dec0010a76ac359d4a7db0d9b7f99f8a45c..0000000000000000000000000000000000000000
--- a/qdoc/global/externalsites/qtcreator.qdoc
+++ /dev/null
@@ -1,525 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: http://www.gnu.org/copyleft/fdl.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-deployment-qnx.html
-    \title Qt Creator: Deploying Applications to QNX Neutrino Devices
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-developing-baremetal.html
-    \title Qt Creator: Connecting Bare Metal Devices
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-developing-qnx.html
-    \title Qt Creator: Connecting QNX Devices
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-developing-generic-linux.html
-    \title Qt Creator: Connecting Embedded Linux Devices
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-deployment-embedded-linux.html
-    \title Qt Creator: Deploying Applications to Embedded Linux Devices
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-faq.html
-    \title Qt Creator: FAQ
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-tips.html
-    \title Qt Creator: Tips and Tricks
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-help.html
-    \title Qt Creator: Using the Help Mode
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-quick-tour.html
-    \title Qt Creator: User Interface
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-cli.html
-    \title Qt Creator: Using Command Line Options
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-task-lists.html
-    \title Qt Creator: Showing Task List Files in Issues Pane
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-project-managing-sessions.html
-    \title Qt Creator: Managing Sessions
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-editor-external.html
-    \title Qt Creator: Using External Tools
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-version-control.html
-    \title Qt Creator: Using Version Control Systems
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-keyboard-shortcuts.html
-    \title Qt Creator: Keyboard Shortcuts
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/quick-screens.html
-    \title Qt Creator: Creating Screens
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-qtquick-designer-extensions.html
-    \title Qt Creator: Using Qt Quick Designer Extensions
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/qmldesigner-pathview-editor.html
-    \title Qt Creator: Editing PathView Properties
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/qmldesigner-connections.html
-    \title Qt Creator: Adding Connections
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/qtcreator-transitions-example.html
-    \title Qt Creator: Creating a Qt Quick Application
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/qtquick-iso-icon-browser.html
-    \title Qt Creator: Browsing ISO 7000 Icons
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/quick-export-to-qml.html
-    \title Qt Creator: Exporting Designs from Graphics Software
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-qml-modules-with-plugins.html
-    \title Qt Creator: Using QML Modules with Plugins
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-visual-editor.html
-    \title Qt Creator: Developing Qt Quick Applications
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-using-qt-quick-designer.html
-    \title Qt Creator: Using Qt Quick Designer
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/quick-projects.html
-    \title Qt Creator: Creating Qt Quick Projects
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/quick-components.html
-    \title Qt Creator: Creating Components
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/qt-quick-toolbars.html
-    \title Qt Creator: Using Qt Quick Toolbars
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/quick-buttons.html
-    \title Qt Creator: Creating Buttons
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/quick-scalable-image.html
-    \title Qt Creator: Creating Scalable Buttons and Borders
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-editor-options.html
-    \title Qt Creator: Configuring the Editor
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-editor-functions.html
-    \title Qt Creator: Writing Code
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-coding-navigating.html
-    \title Qt Creator: Working in Edit Mode
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-highlighting.html
-    \title Qt Creator: Semantic Highlighting
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-checking-code-syntax.html
-    \title Qt Creator: Checking Code Syntax
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-completing-code.html
-    \title Qt Creator: Completing Code
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-editor-codepasting.html
-    \title Qt Creator: Pasting and Fetching Code Snippets
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-macros.html
-    \title Qt Creator: Using Text Editing Macros
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-editor-fakevim.html
-    \title Qt Creator: Using FakeVim Mode
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-indenting-code.html
-    \title Qt Creator: Indenting Text or Code
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-editor-finding.html
-    \title Qt Creator: Finding and Replacing
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-editor-refactoring.html
-    \title Qt Creator: Refactoring
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-editor-locator.html
-    \title Qt Creator: Searching with the Locator
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-coding.html
-    \title Qt Creator: Coding
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-editor-options-text.html
-    \title Qt Creator: Specifying Text Editor Settings
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-finding-overview.html
-    \title Qt Creator: Finding
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-mime-types.html
-    \title Qt Creator: Editing MIME Types
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-modeling.html
-    \title Qt Creator: Modeling
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-qml-debugging-example.html
-    \title Qt Creator: Debugging a Qt Quick Example Application
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-debugging-example.html
-    \title Qt Creator: Debugging a C++ Example Application
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-debugger-engines.html
-    \title Qt Creator: Setting Up Debugger
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-debugging-qml.html
-    \title Qt Creator: Debugging Qt Quick Projects
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-debugging.html
-    \title Qt Creator: Debugging
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-debugger-operating-modes.html
-    \title Qt Creator: Launching the Debugger
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-debug-mode.html
-    \title Qt Creator: Interacting with the Debugger
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-debugging-helpers.html
-    \title Qt Creator: Using Debugging Helpers
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-troubleshooting-debugging.html
-    \title Qt Creator: Troubleshooting Debugger
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/index.html
-    \title Qt Creator Manual
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-advanced.html
-    \title Qt Creator: Advanced Use
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-os-supported-platforms.html
-    \title Qt Creator: Supported Platforms
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-connecting-mobile.html
-    \title Qt Creator: Connecting Mobile Devices
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-usability.html
-    \title Qt Creator: Optimizing Applications for Mobile Devices
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-acknowledgements.html
-    \title Qt Creator: Acknowledgements
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-help-overview.html
-    \title Qt Creator: Getting Help
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/technical-support.html
-    \title Qt Creator: Technical Support
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-overview.html
-    \title Qt Creator: IDE Overview
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-testing.html
-    \title Qt Creator: Testing
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-deployment.html
-    \title Qt Creator: Deploying to Mobile Devices
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-tutorials.html
-    \title Qt Creator: Tutorials
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-known-issues.html
-    \title Qt Creator: Known Issues
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-design-mode.html
-    \title Qt Creator: Designing User Interfaces
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-glossary.html
-    \title Qt Creator: Glossary
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-getting-started.html
-    \title Qt Creator: Getting Started
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-analyzer.html
-    \title Qt Creator: Detecting Memory Leaks
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-cache-profiler.html
-    \title Qt Creator: Profiling Function Execution
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-running-valgrind-remotely.html
-    \title Qt Creator: Running Valgrind Tools Remotely
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-valgrind-overview.html
-    \title Qt Creator: Using Valgrind Code Analysis Tools
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-analyze-mode.html
-    \title Qt Creator: Analyzing Code
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-qml-performance-monitor.html
-    \title Qt Creator: Profiling QML Applications
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-deploying-android.html
-    \title Qt Creator: Deploying Applications to Android Devices
-*/
-
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-developing-ios.html
-    \title Qt Creator: Connecting iOS devices
-*/
-
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-developing-android.html
-    \title Qt Creator: Connecting Android Devices
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-build-example-application.html
-    \title Qt Creator: Building and Running an Example
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-project-generic.html
-    \title Qt Creator: Setting Up a Generic Project
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-sharing-project-settings.html
-    \title Qt Creator: Sharing Project Settings
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-project-opening.html
-    \title Qt Creator: Opening Projects
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-project-managing.html
-    \title Qt Creator: Managing Projects
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-project-cmake.html
-    \title Qt Creator: Setting Up a CMake Project
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-targets.html
-    \title Qt Creator: Adding Kits
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-tool-chains.html
-    \title Qt Creator: Adding Compilers
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-project-qbs.html
-    \title Qt Creator: Setting Up a Qbs Project
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-project-creating.html
-    \title Qt Creator: Creating Projects
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-project-wizards.html
-    \title Qt Creator: Adding New Custom Wizards
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-project-wizards-json.html
-    \title Qt Creator: Adding JSON-Based Wizards
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-project-wizards-xml.html
-    \title Qt Creator: Adding XML-Based Wizards
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-projects-autotools.html
-    \title Qt Creator: Setting Up an Autotools Project
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-configuring-projects.html
-    \title Qt Creator: Configuring Projects
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-build-process-customizing.html
-    \title Qt Creator:  Customizing the Build Process
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-build-settings.html
-    \title Qt Creator: Specifying Build Settings
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-code-style-settings.html
-    \title Qt Creator: Specifying Code Style Settings
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-run-settings.html
-    \title Qt Creator: Specifying Run Settings
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-project-qmake-libraries.html
-    \title Qt Creator: Adding Libraries to Projects
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-project-other.html
-    \title Qt Creator: Using Other Build Systems
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-running-targets.html
-    \title Qt Creator: Running on Multiple Platforms
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-build-dependencies.html
-    \title Qt Creator: Specifying Dependencies
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-building-running.html
-    \title Qt Creator: Building and Running
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-editor-settings.html
-    \title Qt Creator: Specifying Editor Settings
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-project-qmake.html
-    \title Qt Creator: Adding Qt Versions
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-building-targets.html
-    \title Qt Creator: Building for Multiple Platforms
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-using-qt-designer.html
-    \title Qt Creator: Developing Widget Based Applications
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-writing-program.html
-    \title Qt Creator: Creating a Qt Widget Based Application
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/adding-plugins.html
-    \title Qt Creator: Adding Qt Designer Plugins
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-configuring.html
-    \title Qt Creator: Configuring Qt Creator
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-debuggers.html
-    \title Qt Creator: Adding Debuggers
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/qtcreator-accelbubble-example.html
-    \title Qt Creator: Creating a Mobile Application
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-diff-editor.html
-    \title Qt Creator: Comparing Files
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-beautifier.html
-    \title Qt Creator: Beautifying Source Code
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-developing-winrt.html
-    \title Qt Creator: Connecting Windows Runtime Devices
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-clang-codemodel.html
-    \title Qt Creator: Parsing C++ Files
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-quick-ui-forms.html
-    \title Qt Creator: Qt Quick UI Forms
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/qtcreator-uiforms-example.html
-    \title Qt Creator: Using Qt Quick UI Forms
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-clang-static-analyzer.html
-    \title Qt Creator: Using Clang Static Analyzer
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-cpu-usage-analyzer.html
-    \title Qt Creator: Analyzing CPU Usage
-*/
-/*!
-    \externalpage http://doc.qt.io/qtcreator/creator-autotest.html
-    \title Qt Creator: Running Autotests
-*/
diff --git a/qdoc/global/externalsites/rfc.qdoc b/qdoc/global/externalsites/rfc.qdoc
deleted file mode 100644
index a12363da7cc1426fad0377324832fbd66f73dbaf..0000000000000000000000000000000000000000
--- a/qdoc/global/externalsites/rfc.qdoc
+++ /dev/null
@@ -1,94 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: http://www.gnu.org/copyleft/fdl.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
-    \externalpage http://www.ietf.org/rfc/rfc1179.txt
-    \title RFC 1179
-    \keyword lpr
-*/
-
-/*!
-    \externalpage http://www.rfc-editor.org/rfc/rfc1738.txt
-    \title RFC 1738
-*/
-
-/*!
-    \externalpage http://www.rfc-editor.org/rfc/rfc1928.txt
-    \title RFC 1928
-*/
-
-/*!
-    \externalpage http://www.rfc-editor.org/rfc/rfc1929.txt
-    \title RFC 1929
-*/
-
-/*!
-    \externalpage http://www.rfc-editor.org/rfc/rfc2045.txt
-    \title RFC 2045
-*/
-
-/*!
-    \externalpage http://www.rfc-editor.org/rfc/rfc2109.txt
-    \title RFC 2109
-    HTTP State Management Mechanism
-*/
-
-/*!
-    \externalpage http://www.rfc-editor.org/rfc/rfc2965.txt
-    \title RFC 2965
-    HTTP State Management Mechanism
-*/
-
-/*!
-    \externalpage http://www.rfc-editor.org/rfc/rfc3174.txt
-    \title RFC 3174
-*/
-
-/*!
-    \externalpage http://www.rfc-editor.org/rfc/rfc3491.txt
-    \title RFC 3491
-*/
-
-/*!
-    \externalpage http://www.rfc-editor.org/rfc/rfc3986.txt
-    \title RFC 3986
-*/
-
-/*!
-    \externalpage http://www.rfc-editor.org/rfc/rfc2822.txt
-    \title RFC 2822
-*/
-
-/*!
-    \externalpage http://www.rfc-editor.org/rfc/rfc1036.txt
-    \title RFC 1036
-*/
-
-/*!
-    \externalpage http://www.rfc-editor.org/rfc/rfc850.txt
-    \title RFC 850
-*/
diff --git a/qdoc/global/fileextensions.qdocconf b/qdoc/global/fileextensions.qdocconf
deleted file mode 100644
index 7ff387628c6f86a66521c505fc6c2b904569fdbd..0000000000000000000000000000000000000000
--- a/qdoc/global/fileextensions.qdocconf
+++ /dev/null
@@ -1,10 +0,0 @@
-naturallanguage         = zhcn
-outputencoding          = UTF-8
-sourceencoding          = UTF-8
-
-examples.fileextensions = "*.cpp *.h *.js *.xq *.svg *.xml *.ui *.qhp *.qhcp *.qml *.css *.glsl"
-examples.imageextensions = "*.png *.jpg *.gif"
-
-headers.fileextensions  = "*.ch *.h *.h++ *.hh *.hpp *.hxx"
-sources.fileextensions  = "*.c++ *.cc *.cpp *.cxx *.mm *.qml *.qdoc"
-
diff --git a/qdoc/global/html-config.qdocconf b/qdoc/global/html-config.qdocconf
deleted file mode 100644
index 9b3b05b7d3e75e112007e76183f14a7701d1a363..0000000000000000000000000000000000000000
--- a/qdoc/global/html-config.qdocconf
+++ /dev/null
@@ -1,31 +0,0 @@
-#Additional HTML settings
-
-HTML.nonavigationbar      = "false"
-
-HTML.tocdepth = 2
-
-HTML.extraimages += template/images/arrow_bc.png \
-                    template/images/home.png \
-                    template/images/ico_out.png \
-                    template/images/ico_note.png \
-                    template/images/ico_note_attention.png \
-                    template/images/btn_prev.png \
-                    template/images/btn_next.png \
-                    template/images/bullet_dn.png \
-                    template/images/bullet_sq.png \
-                    template/images/bgrContent.png \
-                    template/images/logo.png
-
-#specify which files in the output directory should be packed into the qch file.
-#these files are assumed to be in each module's output directory."qtquick/images/ico_out.png" for example.
-qhp.extraFiles +=   images/arrow_bc.png \
-                    images/home.png \
-                    images/ico_out.png \
-                    images/ico_note.png \
-                    images/ico_note_attention.png \
-                    images/btn_prev.png \
-                    images/btn_next.png \
-                    images/bullet_dn.png \
-                    images/bullet_sq.png \
-                    images/bgrContent.png \
-                    images/logo.png
diff --git a/qdoc/global/html-footer.qdocconf b/qdoc/global/html-footer.qdocconf
deleted file mode 100644
index 9ba6e29139bb983d46ea0f77ea095e81a73288dd..0000000000000000000000000000000000000000
--- a/qdoc/global/html-footer.qdocconf
+++ /dev/null
@@ -1,14 +0,0 @@
-#Default HTML footer for QDoc builds.
-
-HTML.footer = \
-    "        </div>\n" \
-    "       </div>\n" \
-    "   </div>\n" \
-    "   </div>\n" \
-    "</div>\n" \
-    "<div class=\"footer\">\n" \
-    "   <acronym title=\"Copyright\">&copy;</acronym> 2020 TopLinker Co.,Ltd.\n" \
-    "   Documentation contributions included herein are the copyrights of\n" \
-    "   their respective owners.<br>" \
-    "   <a href=\"http://www.topibd.com\">无锡东领智能科技股份有限公司" </a> \
-    "</div>\n" \
diff --git a/qdoc/global/html-header-offline.qdocconf b/qdoc/global/html-header-offline.qdocconf
deleted file mode 100644
index d84f38fef871a217b07184c671a46ffbe53695f9..0000000000000000000000000000000000000000
--- a/qdoc/global/html-header-offline.qdocconf
+++ /dev/null
@@ -1,31 +0,0 @@
-#Default HTML header for QDoc builds.
-
-#specify the CSS file used by this template
-HTML.stylesheets = template/style/offline.css
-
-#for including files into the qch file
-qhp.extraFiles += style/offline.css
-
-HTML.headerstyles = \
-    "  <link rel=\"stylesheet\" type=\"text/css\" href=\"style/offline.css\" />\n"
-
-HTML.endheader = \
-    "</head>\n"
-
-HTML.postheader = \
-    "<body>\n" \
-    "<div class=\"header\" id=\"qtdocheader\">\n"\
-    "    <div class=\"main\">\n" \
-    "    <div class=\"main-rounded\">\n" \
-    "        <div class=\"navigationbar\">\n"\
-    "        <ul>\n"\
-
-
-
-HTML.postpostheader = \
-    "    </ul>\n"\
-    "    </div>\n" \
-    "</div>\n" \
-    "<div class=\"content\">\n" \
-    "<div class=\"line\">\n" \
-    "<div class=\"content mainContent\">\n" \
diff --git a/qdoc/global/includes-online/search.qdoc b/qdoc/global/includes-online/search.qdoc
deleted file mode 100644
index 170848286e55062dfd7323813541780f4b1b532e..0000000000000000000000000000000000000000
--- a/qdoc/global/includes-online/search.qdoc
+++ /dev/null
@@ -1,39 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: http://www.gnu.org/copyleft/fdl.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
-\page search-results.html
-\title Search Results
-
-\raw HTML
-<link rel="stylesheet" type="text/css" href="style/gsc.css" />
-<script type="text/javascript">
-$(function(){ $(".title").append(": " + decodeURIComponent(location.search.split('=')[1]).substring(0,32)); });
-</script>
-<gcse:searchresults-only></gcse:searchresults-only>
-\endraw
-*/
diff --git a/qdoc/global/includes/examples-run.qdocinc b/qdoc/global/includes/examples-run.qdocinc
deleted file mode 100644
index e9b8575650eaed0f36ee5341b4c285ea947ecabb..0000000000000000000000000000000000000000
--- a/qdoc/global/includes/examples-run.qdocinc
+++ /dev/null
@@ -1,5 +0,0 @@
-\section1 Running the Example
-
-To run the example from \l{Qt Creator Manual}{Qt Creator}, open the \gui Welcome
-mode and select the example from \gui Examples. For more information, visit
-\l{Qt Creator: Building and Running an Example}{Building and Running an Example}.
diff --git a/qdoc/global/macros.qdocconf b/qdoc/global/macros.qdocconf
deleted file mode 100644
index da583aedcd3be8a0e36e68cef8cd0342b5396ceb..0000000000000000000000000000000000000000
--- a/qdoc/global/macros.qdocconf
+++ /dev/null
@@ -1,39 +0,0 @@
-macro.aacute.HTML       = "&aacute;"
-macro.Aring.HTML        = "&Aring;"
-macro.aring.HTML        = "&aring;"
-macro.Auml.HTML         = "&Auml;"
-macro.author            = "\\b{Author:}"
-macro.BR.HTML           = "<br />"
-macro.copyright.HTML    = "&copy;"
-macro.eacute.HTML       = "&eacute;"
-macro.gui               = "\\b"
-macro.HR.HTML           = "<hr />"
-macro.iacute.HTML       = "&iacute;"
-macro.key               = "\\b"
-macro.macos             = "macOS"
-macro.menu              = "\\b"
-macro.oslash.HTML       = "&oslash;"
-macro.ouml.HTML         = "&ouml;"
-macro.QA                = "\\e{Qt Assistant}"
-macro.QD                = "\\e{Qt Designer}"
-macro.QL                = "\\e{Qt Linguist}"
-macro.QQV               = "\\e{Qt QML Viewer}"
-macro.param             = "\\e"
-macro.raisedaster.HTML  = "<sup>*</sup>"
-macro.rarrow.HTML       = "&rarr;"
-macro.reg.HTML          = "<sup>&reg;</sup>"
-macro.return            = "Returns"
-macro.starslash         = "\\c{*/}"
-macro.begincomment      = "\\c{/*}"
-macro.endcomment        = "\\c{*/}"
-macro.uuml.HTML         = "&uuml;"
-macro.mdash.HTML        = "&mdash;"
-macro.pi.HTML         = "&Pi;"
-macro.beginqdoc.HTML    = "/*!"
-macro.endqdoc.HTML      = "*/"
-
-macro.beginfloatleft.HTML   = "<div style=\"float: left; margin-right: 2em\">"
-macro.beginfloatright.HTML  = "<div style=\"float: right; margin-left: 2em\">"
-macro.endfloat.HTML         = "</div>"
-macro.clearfloat.HTML       = "<br style=\"clear: both\" />"
-macro.emptyspan.HTML        = "<span></span>"
diff --git a/qdoc/global/manifest-meta.qdocconf b/qdoc/global/manifest-meta.qdocconf
deleted file mode 100644
index a51d0d3b29b378a27ebf43eabff81bc2169d2b77..0000000000000000000000000000000000000000
--- a/qdoc/global/manifest-meta.qdocconf
+++ /dev/null
@@ -1,260 +0,0 @@
-# Additional meta information (attributes for matched entries, as well as tags)
-# to be added to manifest.xml files.
-#
-# manifestmeta.filters = <filter1>,<filter2>,...
-#
-# manifestmeta.<filter>.names = <Module1>/<name1>,<Module2>/<name2>,..
-# manifestmeta.<filter>.attributes = <attribute1:value1>,<attribute2:value2>,..
-# manifestmeta.<filter>.tags = <tag1>,<tag2>,..
-#
-# <filter>.names specify all the module/name combinations to apply the
-# attributes/tags to. You can use simple wildcard matching by appending
-# '*' at the end of name.
-#
-# Note: You cannot use operators (+, =, -) in the names.
-#
-# Examples: add a 'isHighlighted' attribute for two 'Analog Clock' examples,
-# add a 'database' tag for QtSql examples, and a 'qt5' tag for all examples
-#
-# manifestmeta.filters                = highlighted sql global
-#
-# manifestmeta.highlighted.names      = "QtGui/Analog Clock Window Example" \
-#                                       "QtWidgets/Analog Clock Example"
-# manifestmeta.highlighted.attributes = isHighlighted:true
-#
-# manifestmeta.sql.names              = "QtSql/*"
-# manifestmeta.sql.tags               = database
-#
-# manifestmeta.global.names           = *
-# manifestmeta.global.tags            = qt5
-
-manifestmeta.filters                =   highlighted android thumbnail ios
-
-manifestmeta.highlighted.names      =   "QtQuick/Qt Quick Demo - Same Game" \
-                                        "QtQuick/Qt Quick Demo - Photo Surface" \
-                                        "QtQuick/Qt Quick Demo - Tweet Search" \
-                                        "QtQuick/Qt Quick Demo - Maroon*" \
-                                        "QtQuick/Qt Quick Demo - Calqlatr" \
-                                        "QtQuick/Qt Quick Demo - StocQt" \
-                                        "QtQuick/Qt Quick Demo - Clocks" \
-                                        "QtQuick/Qt Quick Examples - Shader Effects" \
-                                        "QtQuickExtras/Qt Quick Extras - Dashboard" \
-                                        "QtQuickExtras/Qt Quick Extras - Flat" \
-                                        "QtQuickExtras/Qt Quick Extras - Gallery" \
-                                        "QtQuickControls/Qt Quick Controls - Gallery" \
-                                        "QtQuickControls/Qt Quick Controls - Text Editor Example" \
-                                        "QtQuickControls/Qt Quick Controls - Table View Example" \
-                                        "QtQuickControls/Qt Quick Controls - Calendar Example" \
-                                        "QtQuickControls/Qt Quick Controls - File System Browser Example" \
-                                        "QtQuickDialogs/Qt Quick System Dialog Examples" \
-                                        "QtWinExtras/Quick Player" \
-                                        "QtMultimedia/QML Video Shader Effects Example" \
-                                        "QtCanvas3D/Planets Example" \
-                                        "QtCanvas3D/Interactive Mobile Phone Example" \
-                                        "QtLocation/Map Viewer (QML)"
-
-manifestmeta.highlighted.attributes =   isHighlighted:true
-
-manifestmeta.android.names          =  "QtQuick/Qt Quick Demo - Maroon*" \
-                                       "QtQuick/Qt Quick Demo - Calqlatr" \
-                                       "QtWidgets/Application Chooser Example" \
-                                       "QtWidgets/Stickman Example" \
-                                       "QtWidgets/Move Blocks Example" \
-                                       "QtWidgets/Border Layout Example" \
-                                       "QtWidgets/Flow Layout Example" \
-                                       "QtWidgets/Dock Widgets Example" \
-                                       "QtWidgets/Recent Files Example" \
-                                       "QtWidgets/Concentric Circles Example" \
-                                       "QtWidgets/Gradients" \
-                                       "QtWidgets/Font Sampler Example" \
-                                       "QtWidgets/Path Stroking" \
-                                       "QtWidgets/Transformations Example" \
-                                       "QtWidgets/Syntax Highlighter Example" \
-                                       "QtWidgets/Calendar Example" \
-                                       "QtWidgets/Analog Clock Example" \
-                                       "QtWidgets/Calculator Example" \
-                                       "QtWidgets/Mouse Button Tester" \
-                                       "QtWidgets/Character Map Example" \
-                                       "QtWidgets/Digital Clock Example" \
-                                       "QtWidgets/Elided Label Example" \
-                                       "QtWidgets/Sliders Example" \
-                                       "QtWidgets/Tetrix Example" \
-                                       "QtWidgets/Group Box Example" \
-                                       "QtWidgets/Undo Framework" \
-                                       "QtWidgets/Colliding Mice Example" \
-                                       "QtWidgets/Diagram Scene Example" \
-                                       "QtWidgets/Elastic Nodes Example" \
-                                       "QtWidgets/Weather Anchor Layout Example" \
-                                       "QtNetwork/Torrent Example" \
-                                       "QtNetwork/Network Chat Example" \
-                                       "QtSQL/Master Detail Example" \
-                                       "QtLinguist/Arrow Pad Example" \
-                                       "QtGui/Raster Window Example" \
-                                       "QtGui/Analog Clock Window Example" \
-                                       "QtAndroidExtras/Qt Notifier" \
-                                       "QtMultimedia/QML Video Shader Effects Example" \
-                                       "QtMultimedia/QML Video Example" \
-                                       "QtMultimedia/QML Camera Example" \
-                                       "QtSVG/Text Object Example" \
-                                       "QtQML/Qt Quick Examples - XMLHttpRequest" \
-                                       "QtQuick/Qt Quick Particles Examples - *" \
-                                       "QtQuick/Qt Quick Examples - Touch Interaction" \
-                                       "QtQuick/Scene Graph - Custom Geometry" \
-                                       "QtQuick/Scene Graph - Graph" \
-                                       "QtQuick/Scene Graph - OpenGL Under QML" \
-                                       "QtQuick/Scene Graph - Painted Item" \
-                                       "QtQuick/Scene Graph - Rendering FBOs" \
-                                       "QtQuick/Scene Graph - Simple Material" \
-                                       "QtQuick/Qt Quick Examples - Image Elements" \
-                                       "QtQuick/Qt Quick Examples - Key Interaction" \
-                                       "QtQuick/Qt Quick Examples - Text" \
-                                       "QtQuick/Qt Quick Examples - Animation" \
-                                       "QtQuick/Qt Quick Examples - Shader Effects" \
-                                       "QtQuick/Qt Quick Examples - Canvas" \
-                                       "QtQuick/Qt Quick Examples - MouseArea" \
-                                       "QtQuick/Qt Quick Examples - Positioners" \
-                                       "QtQuick/Qt Quick Examples - Right to Left" \
-                                       "QtWidgets/Interview" \
-                                       "QtWidgets/Spreadsheet" \
-                                       "QtWidgets/Pixelator Example" \
-                                       "QtWidgets/Animated Tiles Example" \
-                                       "QtWidgets/Affine Transformations" \
-                                       "QtWidgets/Image Composition Example" \
-                                       "QtWidgets/Basic Drawing Example" \
-                                       "QtWidgets/Vector Deformation" \
-                                       "QtWidgets/Painter Paths Example" \
-                                       "QtWidgets/Style Sheet Example" \
-                                       "QtWidgets/Code Editor Example" \
-                                       "QtWidgets/Scribble Example" \
-                                       "QtWidgets/Line Edits Example" \
-                                       "QtWidgets/Calendar Widget Example" \
-                                       "QtWidgets/Completer Example" \
-                                       "QtWidgets/I18N Example" \
-                                       "QtQML/Extending QML - Grouped Properties Example" \
-                                       "QtQML/Extending QML - Methods Example" \
-                                       "QtQML/Extending QML - Signal Support Example" \
-                                       "QtQML/Extending QML - Attached Properties Example"
-
-manifestmeta.android.tags              =   android
-
-manifestmeta.ios.names              =  "QtCore/Contiguous Cache Example" \
-                                       "QtCore/Mandelbrot Example" \
-                                       "QtCore/Queued Custom Type Example" \
-                                       "QtGui/Analog Clock Window Example" \
-                                       "QtGui/OpenGL Window Example" \
-                                       "QtGui/Raster Window Example" \
-                                       "QtNetwork/Loopback Example" \
-                                       "QtNetwork/Network Chat Example" \
-                                       "QtNetwork/Torrent Example" \
-                                       "QtOpenGL/2D Painting Example" \
-                                       "QtOpenGL/Textures Example" \
-                                       "QtWidgets/Animated Tiles Example" \
-                                       "QtWidgets/Application Chooser Example" \
-                                       "QtWidgets/Easing Curves Example" \
-                                       "QtWidgets/Move Blocks Example" \
-                                       "QtWidgets/States Example" \
-                                       "QtWidgets/Class Wizard Example" \
-                                       "QtWidgets/Find Files Example" \
-                                       "QtWidgets/License Wizard Example" \
-                                       "QtWidgets/Standard Dialogs Example" \
-                                       "QtWidgets/Tab Dialog Example" \
-                                       "QtWidgets/Trivial Wizard Example" \
-                                       "QtWidgets/Draggable Text Example" \
-                                       "QtWidgets/Fridge Magnets Example" \
-                                       "QtWidgets/Blur Picker Effect Example" \
-                                       "QtWidgets/Fade Message Effect Example" \
-                                       "QtWidgets/Lighting Effect Example" \
-                                       "QtWidgets/Anchor Layout Example" \
-                                       "QtWidgets/Basic Graphics Layouts Example" \
-                                       "QtWidgets/40000 Chips" \
-                                       "QtWidgets/Colliding Mice Example" \
-                                       "QtWidgets/Diagram Scene Example" \
-                                       "QtWidgets/Elastic Nodes Example" \
-                                       "QtWidgets/Embedded Dialogs" \
-                                       "QtWidgets/Graphics View Flow Layout Example" \
-                                       "QtWidgets/Simple Anchor Layout Example" \
-                                       "QtWidgets/Weather Anchor Layout Example" \
-                                       "QtWidgets/Address Book Example" \
-                                       "QtWidgets/Basic Sort/Filter Model Example" \
-                                       "QtWidgets/Chart Example" \
-                                       "QtWidgets/Custom Sort/Filter Model Example" \
-                                       "QtWidgets/Dir View Example" \
-                                       "QtWidgets/Editable Tree Model Example" \
-                                       "QtWidgets/Frozen Column Example" \
-                                       "QtWidgets/Interview" \
-                                       "QtWidgets/Simple Tree Model Example" \
-                                       "QtWidgets/Simple Widget Mapper Example" \
-                                       "QtWidgets/Basic Layouts Example" \
-                                       "QtWidgets/Border Layout Example" \
-                                       "QtWidgets/Flow Layout Example" \
-                                       "QtWidgets/Basic Drawing Example" \
-                                       "QtWidgets/Concentric Circles Example" \
-                                       "QtWidgets/Font Sampler Example" \
-                                       "QtWidgets/Gradients" \
-                                       "QtWidgets/Image Composition Example" \
-                                       "QtWidgets/Painter Paths Example" \
-                                       "QtWidgets/Transformations Example" \
-                                       "QtWidgets/Calendar Example" \
-                                       "QtWidgets/Order Form Example" \
-                                       "QtWidgets/Syntax Highlighter Example" \
-                                       "QtWidgets/Text Edit" \
-                                       "QtWidgets/Traffic Light Example" \
-                                       "QtWidgets/Two-way Button Example" \
-                                       "QtWidgets/Completer Example" \
-                                       "QtWidgets/Custom Completer Example" \
-                                       "QtWidgets/Undo Framework" \
-                                       "QtWidgets/Analog Clock Example" \
-                                       "QtWidgets/Calculator Example" \
-                                       "QtWidgets/Calendar Widget Example" \
-                                       "QtWidgets/Character Map Example" \
-                                       "QtWidgets/Code Editor Example" \
-                                       "QtWidgets/Digital Clock Example" \
-                                       "QtWidgets/Elided Label Example" \
-                                       "QtWidgets/Line Edits Example" \
-                                       "QtWidgets/Scribble Example" \
-                                       "QtWidgets/Shaped Clock Example" \
-                                       "QtWidgets/Sliders Example" \
-                                       "QtWidgets/Validators Example" \
-                                       "QtWidgets/Window Flags Example" \
-                                       "QtWidgets/Wiggly Example" \
-                                       "QtQuick/Qt Quick Examples - Animation" \
-                                       "QtQuick/Qt Quick Examples - Canvas" \
-                                       "QtQuick/Qt Quick Examples - Drag and Drop" \
-                                       "QtQuick/Qt Quick Examples - Image Elements" \
-                                       "QtQuick/Qt Quick Examples - MouseArea" \
-                                       "QtQuick/Qt Quick Examples - Positioners" \
-                                       "QtQuick/Qt Quick Examples - Right to Left" \
-                                       "QtQuick/Scene Graph - OpenGL Under QML" \
-                                       "QtQuick/Qt Quick Examples - Shader Effects" \
-                                       "QtQuick/Qt Quick Examples - Text" \
-                                       "QtQuick/Qt Quick Examples - Touch Interaction" \
-                                       "QtQuick/Qt Quick Examples - Views" \
-                                       "QtQuick/Qt Quick Examples - Window and Screen"
-
-manifestmeta.ios.tags                  = ios
-
-# add a generic thumbnail image to examples that do not have any images in their documentation
-#manifestmeta.thumbnail.attributes  = "imageUrl:qthelp\://org.qt-project.qtdoc.$QT_VERSION_TAG/qtdoc/images/qt-codesample.png"
-
-manifestmeta.thumbnail.names    =      "QtCore/Contiguous Cache Example" \
-                                       "QtCore/Custom Type Example" \
-                                       "QtCore/JSON Save Game Example" \
-                                       "QtCore/Semaphores Example" \
-                                       "QtCore/Wait Conditions Example" \
-                                       "QtConcurrent/Map Example" \
-                                       "QtConcurrent/QtConcurrent Word Count Example" \
-                                       "QtConcurrent/Run Function Example" \
-                                       "QtGui/Raster Window Example" \
-                                       "QtNetwork/Network Download*" \
-                                       "QtWidgets/Dynamic Layouts Example" \
-                                       "QtWidgets/Event Transitions Example" \
-                                       "QtWidgets/Two-way Button Example" \
-                                       "QtWidgets/Validators Example" \
-                                       "QtDbus/*" \
-                                       "QtHelp/*" \
-                                       "QtMultimedia/AudioEngine Example" \
-                                       "QtQml/Extending QML*" \
-                                       "QtQuick/C++ Extensions: Image Response Provider Example" \
-                                       "QtQuick/Qt Quick Examples - Accessibility" \
-                                       "QtSensors/Qt Sensors - SensorGesture QML Type example" \
-                                       "QtWinExtras/Icon Extractor"
diff --git a/qdoc/global/qt-cpp-defines.qdocconf b/qdoc/global/qt-cpp-defines.qdocconf
deleted file mode 100644
index 54d2cbbe4eaa9f85f07ada4a7d497340150fcc8c..0000000000000000000000000000000000000000
--- a/qdoc/global/qt-cpp-defines.qdocconf
+++ /dev/null
@@ -1,167 +0,0 @@
-versionsym              = QT_VERSION_STR
-
-defines                 += Q_QDOC \
-                          QT_.*_SUPPORT \
-                          QT_.*_LIB \
-                          QT_COMPAT \
-                          QT_KEYPAD_NAVIGATION \
-                          QT_NO_EGL \
-                          QT3_SUPPORT \
-                          Q_DEAD_CODE_FROM_QT4_.* \
-                          Q_OS_.* \
-                          Q_BYTE_ORDER \
-                          QT_DEPRECATED \
-                          QT_DEPRECATED_* \
-                          Q_NO_USING_KEYWORD \
-                          __cplusplus \
-                          Q_COMPILER_INITIALIZER_LISTS \
-                          Q_COMPILER_UNIFORM_INIT \
-                          Q_COMPILER_RVALUE_REFS
-
-Cpp.ignoretokens        += \
-                          ENGINIOCLIENT_EXPORT \
-                          PHONON_EXPORT \
-                          Q_AUTOTEST_EXPORT \
-                          Q_BLUETOOTH_EXPORT \
-                          Q_COMPAT_EXPORT \
-                          Q_CORE_EXPORT \
-                          Q_CORE_EXPORT_INLINE \
-                          Q_DBUS_EXPORT \
-                          Q_DECL_CONSTEXPR \
-                          Q_DECL_RELAXED_CONSTEXPR \
-                          Q_DECL_CONST_FUNCTION \
-                          Q_DECL_DEPRECATED \
-                          Q_DECL_NOEXCEPT \
-                          Q_DECL_FINAL \
-                          Q_DECL_OVERRIDE \
-                          Q_DECL_NOTHROW \
-                          Q_DECL_PURE_FUNCTION \
-                          Q_DECL_UNUSED \
-                          Q_DECL_CF_RETURNS_RETAINED \
-                          Q_DECL_NS_RETURNS_AUTORELEASED \
-                          Q_DECL_EQ_DEFAULT \
-                          Q_DECLARATIVE_EXPORT \
-                          Q_EXPLICIT \
-                          Q_EXPORT \
-                          Q_EXPORT_CODECS_CN \
-                          Q_EXPORT_CODECS_JP \
-                          Q_EXPORT_CODECS_KR \
-                          Q_EXPORT_PLUGIN \
-                          Q_EXPORT_PLUGIN2 \
-                          Q_GADGET \
-                          Q_GFX_INLINE \
-                          Q_GUI_EXPORT \
-                          Q_GUI_EXPORT_INLINE \
-                          Q_GUI_EXPORT_STYLE_CDE \
-                          Q_GUI_EXPORT_STYLE_COMPACT \
-                          Q_GUI_EXPORT_STYLE_MAC \
-                          Q_GUI_EXPORT_STYLE_MOTIF \
-                          Q_GUI_EXPORT_STYLE_MOTIFPLUS \
-                          Q_GUI_EXPORT_STYLE_PLATINUM \
-                          Q_GUI_EXPORT_STYLE_POCKETPC \
-                          Q_GUI_EXPORT_STYLE_SGI \
-                          Q_GUI_EXPORT_STYLE_WINDOWS \
-                          Q_GUI_EXPORT_STYLE_WINDOWSXP \
-                          Q_INLINE_TEMPLATE \
-                          Q_INTERNAL_WIN_NO_THROW \
-                          Q_INVOKABLE \
-                          Q_LOCATION_EXPORT \
-                          Q_POSITIONING_EXPORT \
-                          Q_MULTIMEDIA_EXPORT \
-                          Q_NETWORK_EXPORT \
-                          Q_NEVER_INLINE \
-                          Q_NORETURN \
-                          Q_OPENGL_EXPORT \
-                          Q_OPENVG_EXPORT \
-                          Q_OUTOFLINE_TEMPLATE \
-                          Q_PRINTSUPPORT_EXPORT \
-                          Q_QML_EXPORT \
-                          Q_REQUIRED_RESULT \
-                          Q_SCRIPT_EXPORT \
-                          Q_SCRIPTTOOLS_EXPORT \
-                          Q_SERIALBUS_EXPORT \
-                          Q_SQL_EXPORT \
-                          Q_SVG_EXPORT \
-                          Q_TESTLIB_EXPORT \
-                          Q_TYPENAME \
-                          Q_WIDGETS_EXPORT \
-                          Q_WINEXTRAS_EXPORT \
-                          Q_XML_EXPORT \
-                          Q_XMLPATTERNS_EXPORT \
-                          Q_XMLSTREAM_EXPORT \
-                          QAXFACTORY_EXPORT \
-                          QDBUS_EXPORT \
-                          QDESIGNER_COMPONENTS_LIBRARY \
-                          QDESIGNER_EXTENSION_LIBRARY \
-                          QDESIGNER_SDK_LIBRARY \
-                          QDESIGNER_SHARED_LIBRARY \
-                          QDESIGNER_UILIB_LIBRARY \
-                          QHELP_EXPORT \
-                          QM_AUTOTEST_EXPORT \
-                          QM_EXPORT_CANVAS \
-                          QM_EXPORT_DNS \
-                          QM_EXPORT_DOM \
-                          QM_EXPORT_FTP \
-                          QM_EXPORT_HTTP \
-                          QM_EXPORT_ICONVIEW \
-                          QM_EXPORT_NETWORK \
-                          QM_EXPORT_OPENGL \
-                          QM_EXPORT_OPENVG \
-                          QM_EXPORT_SQL \
-                          QM_EXPORT_TABLE \
-                          QM_EXPORT_WORKSPACE \
-                          QM_EXPORT_XML \
-                          QT_ASCII_CAST_WARN \
-                          QT_ASCII_CAST_WARN_CONSTRUCTOR \
-                          QT_BEGIN_INCLUDE_NAMESPACE \
-                          QT_BEGIN_NAMESPACE \
-                          QT_BOOTSTRAPPED \
-                          QT_DESIGNER_STATIC \
-                          QT_END_INCLUDE_NAMESPACE \
-                          QT_END_NAMESPACE \
-                          QT_FASTCALL \
-                          QT_MUTEX_LOCK_NOEXCEPT \
-                          QT_WARNING_PUSH \
-                          QT_WARNING_POP \
-                          QT_WIDGET_PLUGIN_EXPORT \
-                          QWEBKIT_EXPORT
-
-Cpp.ignoredirectives    += \
-                          __attribute__ \
-                          K_DECLARE_PRIVATE \
-                          PHONON_HEIR \
-                          PHONON_OBJECT \
-                          Q_CLASSINFO \
-                          Q_DECLARE_INTERFACE \
-                          Q_DECLARE_METATYPE \
-                          Q_DECLARE_OPERATORS_FOR_FLAGS \
-                          Q_DECLARE_PRIVATE \
-                          Q_DECLARE_PRIVATE_D \
-                          Q_DECLARE_PUBLIC \
-                          Q_DECLARE_SHARED \
-                          Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6 \
-                          Q_DECLARE_TR_FUNCTIONS \
-                          Q_DECLARE_TYPEINFO \
-                          Q_DECL_NOEXCEPT_EXPR \
-                          QT_DEPRECATED_X \
-                          Q_DISABLE_COPY \
-                          Q_DUMMY_COMPARISON_OPERATOR \
-                          Q_ENUM \
-                          Q_ENUMS \
-                          Q_FLAG \
-                          Q_FLAGS \
-                          Q_INTERFACES \
-                          Q_PRIVATE_PROPERTY \
-                          QT_FORWARD_DECLARE_CLASS \
-                          Q_DECLARE_HANDLE \
-                          Q_REVISION \
-                          QT_WARNING_DISABLE_CLANG \
-                          QT_WARNING_DISABLE_GCC \
-                          QT_WARNING_DISABLE_INTEL \
-                          QT_WARNING_DISABLE_MSVC \
-                          Q_ATTRIBUTE_FORMAT_PRINTF \
-                          Q_MV_IOS
-
-# Qt 6: Remove
-falsehoods              += \
-                          "QT_VERSION >= QT_VERSION_CHECK\\(6,0,0\\)"
diff --git a/qdoc/global/qt-html-templates-offline-simple.qdocconf b/qdoc/global/qt-html-templates-offline-simple.qdocconf
deleted file mode 100644
index 1fea752a16862f4d6985d8c02c9a625f1eb9dfb3..0000000000000000000000000000000000000000
--- a/qdoc/global/qt-html-templates-offline-simple.qdocconf
+++ /dev/null
@@ -1,35 +0,0 @@
-# Specify a custom CSS file used by this template
-HTML.stylesheets  += template/style/offline-simple.css
-qhp.extraFiles    += style/offline-simple.css
-
-# Override the header styles
-HTML.headerstyles  = \
-    "  <link rel=\"stylesheet\" type=\"text/css\" href=\"style/offline-simple.css\" />\n" \
-    "  <script type=\"text/javascript\">\n" \
-    "    document.getElementsByTagName(\"link\").item(0).setAttribute(\"href\", \"style/offline.css\");\n" \
-    "  </script>\n"
-
-HTML.postheader = \
-    "<body>\n" \
-    "<div class=\"header\" id=\"qtdocheader\">\n"\
-    "  <div class=\"main\">\n" \
-    "    <div class=\"main-rounded\">\n" \
-    "      <div class=\"navigationbar\">\n" \
-    "        <table><tr>\n"
-
-HTML.postpostheader = \
-    "        </tr></table>\n"\
-    "      </div>\n" \
-    "    </div>\n" \
-    "<div class=\"content\">\n" \
-    "<div class=\"line\">\n" \
-    "<div class=\"content mainContent\">\n"
-
-HTML.navigationseparator = \
-    "<span class=\"naviSeparator\">  &#9702;  </span>\n"
-
-# Add some padding around code snippets, as we cannot
-# currectly style them for QTextBrowser using only CSS.
-codeindent         = 2
-codeprefix         = "\n\n"
-codesuffix         = "\n\n"
diff --git a/qdoc/global/qt-html-templates-offline.qdocconf b/qdoc/global/qt-html-templates-offline.qdocconf
deleted file mode 100644
index d5780a35da8cd15d0eb190f0d81035e8a6069093..0000000000000000000000000000000000000000
--- a/qdoc/global/qt-html-templates-offline.qdocconf
+++ /dev/null
@@ -1,33 +0,0 @@
-#include standard set of HTML header and footer.
-include(html-config.qdocconf)
-include(html-header-offline.qdocconf)
-include(html-footer.qdocconf)
-
-#uncomment if navigation bar is not wanted
-#HTML.nonavigationbar      = "true"
-
-HTML.stylesheets = template/style/offline.css
-HTML.extraimages += template/images/ico_out.png \
-                    template/images/ico_note.png \
-                    template/images/ico_note_attention.png \
-                    template/images/btn_prev.png \
-                    template/images/btn_next.png \
-                    template/images/bullet_dn.png \
-                    template/images/bullet_sq.png \
-                    template/images/bgrContent.png
-
-#specify which files in the output directory should be packed into the qch file.
-qhp.extraFiles +=   style/offline.css \
-                    images/ico_out.png \
-                    images/ico_note.png \
-                    images/ico_note_attention.png \
-                    images/btn_prev.png \
-                    images/btn_next.png \
-                    images/bullet_dn.png \
-                    images/bullet_sq.png \
-                    images/bgrContent.png
-
-# By default, include override definitions for a simplified template/CSS,
-# suited for rendering HTML with QTextBrowser. Comment out this line to
-# select the standard CSS.
-include(qt-html-templates-offline-simple.qdocconf)
diff --git a/qdoc/global/qt-module-defaults-offline.qdocconf b/qdoc/global/qt-module-defaults-offline.qdocconf
deleted file mode 100644
index 608ff1091d0879b90800991b5e2e66e50eb2b225..0000000000000000000000000000000000000000
--- a/qdoc/global/qt-module-defaults-offline.qdocconf
+++ /dev/null
@@ -1,17 +0,0 @@
-#The default configuration for a Qt 5 module, including Add-Ons and Tools.
-#Include this file for a standard Qt 5 module; builds with the offline style.
-
-#include standard set of macros and C++ defines and ignores
-include(macros.qdocconf)
-include(qt-cpp-defines.qdocconf)
-include(compat.qdocconf)
-#include(manifest-meta.qdocconf)
-include(fileextensions.qdocconf)
-
-include(qt-html-templates-offline.qdocconf)
-
-#extra configuration data such as file extensions
-include(config.qdocconf)
-
-# Show Qt version as part of the navigation bar
-buildversion = "TopIKM6 Reference Documentation"
diff --git a/qdoc/global/template/images/Qt-dark_gradient.png b/qdoc/global/template/images/Qt-dark_gradient.png
deleted file mode 100644
index 6ae10f37bf4b40ac6e8b44e08bdf95ca2adc1449..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/Qt-dark_gradient.png and /dev/null differ
diff --git a/qdoc/global/template/images/Qt-footer-bg.jpg b/qdoc/global/template/images/Qt-footer-bg.jpg
deleted file mode 100644
index c0ff209b7e77f1b83e9d5040dbda6c490c53b5e8..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/Qt-footer-bg.jpg and /dev/null differ
diff --git a/qdoc/global/template/images/Qt-footer_shadow.png b/qdoc/global/template/images/Qt-footer_shadow.png
deleted file mode 100644
index 5a7063dfee63fabed6bf07bf710fa8c312fe54c5..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/Qt-footer_shadow.png and /dev/null differ
diff --git a/qdoc/global/template/images/Qt-gradient.png b/qdoc/global/template/images/Qt-gradient.png
deleted file mode 100644
index aa38227cbb1741460f81157e38091c1a939cde78..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/Qt-gradient.png and /dev/null differ
diff --git a/qdoc/global/template/images/Qt-header-bg.jpg b/qdoc/global/template/images/Qt-header-bg.jpg
deleted file mode 100644
index c9a6d96db4539c1a0f56e409fede5a7a3664ed27..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/Qt-header-bg.jpg and /dev/null differ
diff --git a/qdoc/global/template/images/Qt-logo.png b/qdoc/global/template/images/Qt-logo.png
deleted file mode 100644
index 01256ab08dcf24aa990dc786723439f8dca192cc..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/Qt-logo.png and /dev/null differ
diff --git a/qdoc/global/template/images/arrow.png b/qdoc/global/template/images/arrow.png
deleted file mode 100644
index f2a83a5740683d31d9aab1e7da51c875d8b122fe..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/arrow.png and /dev/null differ
diff --git a/qdoc/global/template/images/arrow_bc.png b/qdoc/global/template/images/arrow_bc.png
deleted file mode 100644
index f2a83a5740683d31d9aab1e7da51c875d8b122fe..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/arrow_bc.png and /dev/null differ
diff --git a/qdoc/global/template/images/arrow_down.png b/qdoc/global/template/images/arrow_down.png
deleted file mode 100644
index 9d01e97f6a959434811ae2bc02107903f47734f8..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/arrow_down.png and /dev/null differ
diff --git a/qdoc/global/template/images/bg_l.png b/qdoc/global/template/images/bg_l.png
deleted file mode 100644
index 90b1da10b9b9f85eff333ba71fcc66803ce9dca2..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/bg_l.png and /dev/null differ
diff --git a/qdoc/global/template/images/bg_l_blank.png b/qdoc/global/template/images/bg_l_blank.png
deleted file mode 100644
index 5a9673d81bd4792d4789fc0089caf221b8bad42e..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/bg_l_blank.png and /dev/null differ
diff --git a/qdoc/global/template/images/bg_ll_blank.png b/qdoc/global/template/images/bg_ll_blank.png
deleted file mode 100644
index 95a1c45e04b99502491f0775c4a21100cbd1bdb9..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/bg_ll_blank.png and /dev/null differ
diff --git a/qdoc/global/template/images/bg_r.png b/qdoc/global/template/images/bg_r.png
deleted file mode 100644
index f0fb121dea583b5df61fbc11d75069beb6e0c42f..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/bg_r.png and /dev/null differ
diff --git a/qdoc/global/template/images/bg_ul_blank.png b/qdoc/global/template/images/bg_ul_blank.png
deleted file mode 100644
index 70512614cc78c36f2798da87e7c65af3a950440e..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/bg_ul_blank.png and /dev/null differ
diff --git a/qdoc/global/template/images/bgrContent.png b/qdoc/global/template/images/bgrContent.png
deleted file mode 100644
index 1a81b03087771415eeb8cbd0f020aed766cd1219..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/bgrContent.png and /dev/null differ
diff --git a/qdoc/global/template/images/blu_dot.png b/qdoc/global/template/images/blu_dot.png
deleted file mode 100644
index c332148f74538db9b3438dc33655dffbba42d5d0..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/blu_dot.png and /dev/null differ
diff --git a/qdoc/global/template/images/box_bg.png b/qdoc/global/template/images/box_bg.png
deleted file mode 100644
index 3322f923f81d060c50ca8e7a50182837c16f7bd9..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/box_bg.png and /dev/null differ
diff --git a/qdoc/global/template/images/breadcrumb.png b/qdoc/global/template/images/breadcrumb.png
deleted file mode 100644
index 0ded5514d236b9ccf458c0cc3f0afe7f89a1f8f1..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/breadcrumb.png and /dev/null differ
diff --git a/qdoc/global/template/images/btn_next.png b/qdoc/global/template/images/btn_next.png
deleted file mode 100644
index c649f18572e23f65f8485e7fe35c21bee8973831..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/btn_next.png and /dev/null differ
diff --git a/qdoc/global/template/images/btn_prev.png b/qdoc/global/template/images/btn_prev.png
deleted file mode 100644
index d1d29895b27ef56c21b6a1e185fe0ca584f00601..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/btn_prev.png and /dev/null differ
diff --git a/qdoc/global/template/images/bullet_dn.png b/qdoc/global/template/images/bullet_dn.png
deleted file mode 100644
index f7762472e2379b57e203b684bb20b95af9d97229..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/bullet_dn.png and /dev/null differ
diff --git a/qdoc/global/template/images/bullet_gt.png b/qdoc/global/template/images/bullet_gt.png
deleted file mode 100644
index 7561b4edc4ccfcadf17fe199c8ffda8a9c154109..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/bullet_gt.png and /dev/null differ
diff --git a/qdoc/global/template/images/bullet_sq.png b/qdoc/global/template/images/bullet_sq.png
deleted file mode 100644
index a84845e3c7e7a9dde3388ef851bd1bac74a6c40f..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/bullet_sq.png and /dev/null differ
diff --git a/qdoc/global/template/images/bullet_up.png b/qdoc/global/template/images/bullet_up.png
deleted file mode 100644
index 7de2f06954bb18c44791abe8e7b3e15c8ce666de..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/bullet_up.png and /dev/null differ
diff --git a/qdoc/global/template/images/feedbackground.png b/qdoc/global/template/images/feedbackground.png
deleted file mode 100644
index 3a38d995d7fa681a7bd2bbc4f5130abb35c8b1b4..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/feedbackground.png and /dev/null differ
diff --git a/qdoc/global/template/images/header_bg.png b/qdoc/global/template/images/header_bg.png
deleted file mode 100644
index a436aa61eff96c18f4fbb6e050d79f8d8da6146a..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/header_bg.png and /dev/null differ
diff --git a/qdoc/global/template/images/home.png b/qdoc/global/template/images/home.png
deleted file mode 100644
index 8de6d0c81f64dde8554f376925b458cae8585949..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/home.png and /dev/null differ
diff --git a/qdoc/global/template/images/horBar.png b/qdoc/global/template/images/horBar.png
deleted file mode 100644
index 100fe91c6c541706112335f854ca4698dd91f25a..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/horBar.png and /dev/null differ
diff --git a/qdoc/global/template/images/ico_note.png b/qdoc/global/template/images/ico_note.png
deleted file mode 100644
index 13794046cf2fec79410bb09f19f688cad261d217..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/ico_note.png and /dev/null differ
diff --git a/qdoc/global/template/images/ico_note_attention.png b/qdoc/global/template/images/ico_note_attention.png
deleted file mode 100644
index b85b696b10eb2275f9e52eebc1227890d9016d0d..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/ico_note_attention.png and /dev/null differ
diff --git a/qdoc/global/template/images/ico_out.png b/qdoc/global/template/images/ico_out.png
deleted file mode 100644
index 790a05e51dd7b87629fa2942b8f1a5e015cd6e30..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/ico_out.png and /dev/null differ
diff --git a/qdoc/global/template/images/logo.png b/qdoc/global/template/images/logo.png
deleted file mode 100644
index 698dde9215ca0c91d27745031000fdf83dc48ed0..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/logo.png and /dev/null differ
diff --git a/qdoc/global/template/images/page.png b/qdoc/global/template/images/page.png
deleted file mode 100644
index 1db151bd31e81a632d27236f7416ff3df5a02a89..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/page.png and /dev/null differ
diff --git a/qdoc/global/template/images/page_bg.png b/qdoc/global/template/images/page_bg.png
deleted file mode 100644
index 9b3bd999dfb5b4988ff40bbf82de81f762a5d034..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/page_bg.png and /dev/null differ
diff --git a/qdoc/global/template/images/spinner.gif b/qdoc/global/template/images/spinner.gif
deleted file mode 100644
index 1ed786f2ece49ec5db07dee13a56ef38025b628c..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/spinner.gif and /dev/null differ
diff --git a/qdoc/global/template/images/sprites-combined.png b/qdoc/global/template/images/sprites-combined.png
deleted file mode 100644
index c4f01c4bb956e8d627e411b08886ddf4f5db3435..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/images/sprites-combined.png and /dev/null differ
diff --git a/qdoc/global/template/scripts/extras.js b/qdoc/global/template/scripts/extras.js
deleted file mode 100644
index ba7a4a50fb0459a3edb5e672e2130755979edeb8..0000000000000000000000000000000000000000
--- a/qdoc/global/template/scripts/extras.js
+++ /dev/null
@@ -1,80 +0,0 @@
-var vOffset_init = 65;
-var vOffset = vOffset_init;
-var c = 'collapsed';
-
-function toggleList(toggle, content, maxItems) {
-    if (toggle.css('display') == 'none') {
-        vOffset = vOffset_init;
-        toggle.removeClass(c);
-        content.show();
-        return;
-    } else
-        vOffset = 8;
-
-    if (maxItems > content.children().length)
-        return;
-    content.hide();
-    toggle.addClass(c);
-}
-
-$(function () {
-    $('a[href*=#]:not([href=#])').on('click', function (e) {
-        if (e.which == 2 || e.metaKey || e.ctrlKey || e.shiftKey)
-            return true;
-        var target = $(this.hash.replace(/(\.)/g, "\\$1"));
-        target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
-        if (target.length) {
-            setTimeout(function () {
-                $('html, body').animate({scrollTop: target.offset().top - vOffset}, 50);}, 50);
-        }
-    });
-});
-
-$(window).load(function () {
-    var hashChanged = function() {
-        var h = window.location.hash;
-        var re = /[^a-z0-9_\.\#\-]/i
-        if (h.length > 1 && !re.test(h)) {
-            setTimeout(function () {
-                var tgt = $(h.replace(/(\.)/g, "\\$1"));
-                tgt = tgt.length ? tgt : $('[name=' + h.slice(1) + ']');
-                $(window).scrollTop(tgt.offset().top - vOffset);
-            }, 0);
-        }
-    }
-    $(window).bind('hashchange', hashChanged);
-    hashChanged.call();
-
-    if (!$('.sidebar toc').is(':empty')) {
-        $('<div id="toc-toggle"></div>').prependTo('.sidebar .toc');
-        var toc = $('.sidebar .toc ul');
-        var tocToggle = $('#toc-toggle');
-        var tocCallback = function() { toggleList(tocToggle, toc, 4); };
-
-        $('#toc-toggle').on('click', function(e) {
-            e.stopPropagation();
-            toc.toggle();
-            tocToggle.toggleClass(c);
-        });
-
-        tocCallback.call();
-        $(window).resize(tocCallback);
-    }
-
-    if (!$('#sidebar-content').is(':empty')) {
-        $('#sidebar-content h2').first().clone().prependTo('#sidebar-content');
-        $('<div id="sidebar-toggle"></div>').prependTo('#sidebar-content');
-        var sb = $('#sidebar-content .sectionlist');
-        var sbToggle = $('#sidebar-toggle');
-        var sbCallback = function() { toggleList(sbToggle, sb, 0); };
-
-        $('#sidebar-toggle').on('click', function(e) {
-            e.stopPropagation();
-            sb.toggle();
-            sbToggle.toggleClass(c);
-        });
-
-        sbCallback.call();
-        $(window).resize(sbCallback);
-    }
-});
diff --git a/qdoc/global/template/scripts/main.js b/qdoc/global/template/scripts/main.js
deleted file mode 100644
index 823cebecf85ac7639153643b0683913a050b4254..0000000000000000000000000000000000000000
--- a/qdoc/global/template/scripts/main.js
+++ /dev/null
@@ -1,241 +0,0 @@
-"use strict";
-
-function createCookie(name, value, days) {
-    var expires;
-    if (days) {
-        var date = new Date();
-        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
-        expires = "; expires=" + date.toGMTString();
-    } else {
-        expires = "";
-    }
-    document.cookie = escape(name) + "=" + escape(value) + expires + "; path=/";
-    $('.cookies_yum').click(function() {
-        $(this).fadeOut()
-    });
-}
-function readCookie(name) {
-    var nameEQ = escape(name) + "=";
-    var ca = document.cookie.split(';');
-    for (var i = 0; i < ca.length; i++) {
-        var c = ca[i];
-        while (c.charAt(0) === ' ') c = c.substring(1, c.length);
-        if (c.indexOf(nameEQ) === 0) return unescape(c.substring(nameEQ.length, c.length));
-    }
-    return null;
-}
-function eraseCookie(name) {
-    createCookie(name, "", -1);
-}
-function load_sdk(s, id, src) {
-    var js, fjs = document.getElementsByTagName(s)[0];
-    if (document.getElementById(id)) return;
-    js = document.createElement(s);
-    js.id = id;
-    js.src = src;
-    fjs.parentNode.insertBefore(js, fjs);
-}
-$(document).ready(function($) {
-    if (document.documentElement.clientWidth < 1280) {
-        oneQt.extraLinksToMain();
-    }
-
-    $('#menuextras .search').click(function(e){
-        e.preventDefault();
-        $('.big_bar.account').slideUp();
-        $('.big_bar.search').slideToggle();
-        $('.big_bar_search').focus();
-        $(this).toggleClass('open');
-    });
-    $('.cookies_yum').click(function() {
-        $('.cookies_yum').fadeOut();
-        createCookie("cookies_nom", "yum", 180);
-        var cookie_added = 1;
-    });
-    if (!(readCookie('cookies_nom') == 'yum')) {
-        $('.cookies_yum').fadeIn();
-    } else {
-        var cookie_added = 1;
-    }
-
-    Modernizr.load({test: Modernizr.input.placeholder,
-                    nope: wpThemeFolder + '/js/placeholders.min.js'});
-
-    $('#navbar .navbar-toggle').click(function(e) {
-        e.preventDefault();
-        if ($(this).hasClass('opened')) {
-            $(this).removeClass('opened');
-            $('#navbar .navbar-menu').css('max-height', '0px');
-        }
-        else {
-            $(this).addClass('opened');
-            $('#navbar .navbar-menu').css('max-height', $('#navbar .navbar-menu ul').outerHeight() + 'px');
-        }
-    });
-
-    $(window).resize(function() {
-        oneQt.stickySidebar();
-        oneQt.footerPosition();
-        if (document.documentElement.clientWidth < 1280) {
-            oneQt.extraLinksToMain();
-        } else {
-            oneQt.mainLinkstoExtra();
-        }
-    });
-
-    $(window).scroll(function() {
-        oneQt.stickySidebar();
-        oneQt.stickyHeader();
-    });
-
-    oneQt.stickySidebar();
-    oneQt.footerPosition();
-    oneQt.tabContents();
-});
-
-$( window ).load(function() {
-    load_sdk('script', 'facebook-jssdk','//connect.facebook.net/en_US/sdk.js#xfbml=1&appId=207346529386114&version=v2.0');
-    load_sdk('script', 'twitter-wjs', '//platform.twitter.com/widgets.js');
-    $.getScript("//www.google.com/jsapi", function(){
-        google.load("feeds", "1", {"callback": oneQt.liveFeeds});
-    });
-});
-
-var oneQt = {
-    stickySidebar: function() {
-        if ($('#sidebar').length && $('#sidebar').outerHeight() > 20) {
-            var $sidebar = $('#sidebar');
-            var $win = $(window);
-            var $sidebarContainer = $sidebar.parent();
-            var headerHeight = $('#navbar').outerHeight();
-            if ($win.outerHeight() - headerHeight > $sidebar.innerHeight() &&
-                    $win.scrollTop() > $sidebarContainer.offset().top) {
-                var newTop = headerHeight + $win.scrollTop() - $sidebarContainer.offset().top;
-                if (newTop + $sidebar.innerHeight() > $sidebarContainer.innerHeight())
-                    newTop = $sidebarContainer.innerHeight() - $sidebar.innerHeight();
-
-                $sidebar.css({top: newTop +'px'})
-            }
-            else {
-                $sidebar.css({top: '0'})
-            }
-        }
-    },
-
-    footerPosition: function () {
-        $('#footerbar').removeClass('fixed');
-        if (($('.hbspt-form').length > 0) || ($('#customerInfo').length > 0) || ($('.purchase_bar').length > 0)) {
-            var footerBottomPos = $('#footerbar').offset().top + $('#footerbar').outerHeight();
-            if (footerBottomPos < $(window).height())
-                $('#footerbar').addClass('fixed');
-        }
-    },
-
-    stickyHeader: function () {
-        var originalHeaderHeight = 79;
-        if ($(window).scrollTop() > originalHeaderHeight) {
-            $('#navbar').addClass('fixed');
-            $('#bottom_header').fadeOut();
-
-            if (!(cookie_added == 1)) {
-                $('.cookies_yum').fadeOut();
-                createCookie("cookies_nom", "yum", 180);
-                var cookie_added = 1;
-            }
-        }
-        else {
-            $('#navbar').removeClass('fixed');
-            $('#bottom_header').fadeIn();
-        }
-    },
-
-    tabContents: function () {
-        $('.tab-container').each(function(i) {
-            var $el = $(this);
-            $el.find('.tab-titles li:eq(0)').addClass('active');
-            $el.find('.tab-contents .tab:eq(0)').addClass('active');
-            $el.find('.tab-titles a').click(function(e) {
-                e.preventDefault();
-                var index = $(this).parent().index();
-                $el.find('.tab-titles li').removeClass('active');
-                $el.find('.tab-contents .tab').removeClass('active');
-                $(this).parent().addClass('active');
-                $el.find('.tab-contents .tab').eq(index).addClass('active');
-            })
-        });
-    },
-
-    liveFeeds: function () {
-        $('.feed-container').each(function(i) {
-            var feedUrl = $(this).data('url');
-            if (feedUrl != "") oneQt.blogFeed($(this), feedUrl);
-        });
-    },
-
-    blogFeed: function ($container, feedUrl) {
-        var feed = new google.feeds.Feed(feedUrl);
-        feed.setNumEntries(3);
-        feed.load(function(result) {
-            $container.html('');
-            if (!result.error) {
-                for (var i = 0; i < result.feed.entries.length; i++) {
-                    var entry = result.feed.entries[i];
-                    var $article = $('<article class="discussion-tile cf"></article>');
-                    $container.append($article);
-                    var html = '    <div class="author retina">';
-                    html += '        <img src="'+wpThemeFolder+'/assets/images/author_placeholder.png" alt="">';
-                    html += '    </div>';
-                    html += '    <div class="discussion-item">';
-                    html += '        <h4><a href="'+encodeURI(entry.link)+'"></a></h4>'
-                    html += '        <h3><a href="'+encodeURI(entry.link)+'" target="_blank"></a></h3>'
-                    html += '        <p><a href="'+encodeURI(entry.link)+'" target="_blank"></a></p>';
-                    html += '        <ul class="taglist cf">';
-                    html += '        </ul>';
-                    html += '    </div>';
-                    $article.append(html);
-                    $article.find('h4 a').text(result.feed.title);
-                    $article.find('h3 a').text(entry.title);
-                    $article.find('p a').text(entry.author);
-                    try {
-                        for (var j=0; j<entry.categories.length; j++) {
-                            var $li = $('<li><a href="'+encodeURI(entry.link)+'" target="_blank" class="btn btn-tag"></a></li>');
-                            $li.find('a').text(entry.categories[j]);
-                            $article.find('.taglist').append($li);
-                        }
-                    } catch(e) {}
-                }
-                if (result.feed.link && result.feed.link != "") {
-                    var linkHtml = '<a href="'+encodeURI(result.feed.link)+'" class="text-lightgrey" target="_blank">Show all</a>';
-                    $container.append(linkHtml);
-                }
-            }
-        });
-    },
-
-    extraLinksToMain: function() {
-        var extramenuLinks = $('#menuextras').find('li');
-        var mainmenu = $('#mainmenu');
-        var count = 0;
-        if ($(extramenuLinks).length > 2) {
-            $(extramenuLinks).each(function() {
-                if (count < 3) {
-                    var newLink = $(this);
-                    $(newLink).addClass('dynamic-add');
-                    $(mainmenu).append(newLink);
-                }
-                count++;
-            });
-        }
-    },
-
-    mainLinkstoExtra: function() {
-        var mainmenuLinks = $('#mainmenu').find('.dynamic-add');
-        var extramenu = $('#menuextras');
-        var count = 0;
-        $(mainmenuLinks).each(function() {
-            var newLink = $(this);
-            $(extramenu).prepend(newLink);
-            count++;
-        });
-    }
-}
diff --git a/qdoc/global/template/style/cookiebar-x.png b/qdoc/global/template/style/cookiebar-x.png
deleted file mode 100644
index 6aea1e62d132f50051a8602d9fb9386d22024328..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/style/cookiebar-x.png and /dev/null differ
diff --git a/qdoc/global/template/style/doc_search.png b/qdoc/global/template/style/doc_search.png
deleted file mode 100644
index 0d7bccd46f95748946bad81b2cecb8d0df7f6ca2..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/style/doc_search.png and /dev/null differ
diff --git a/qdoc/global/template/style/gsc.css b/qdoc/global/template/style/gsc.css
deleted file mode 100644
index e3d6391d6b59de514c080bf1e203ca3c09efd1b4..0000000000000000000000000000000000000000
--- a/qdoc/global/template/style/gsc.css
+++ /dev/null
@@ -1,192 +0,0 @@
-.gsc-control-cse table, table td, table th {
-  border: none !important;
-  margin-bottom: 10px !important
-}
-.gsc-control-cse {
-  width: 100% !important;
-  box-sizing: border-box !important
-}
-.gsc-control-cse * {
-  font-family: 'Open Sans', Arial, Helvetica, sans-serif !important;
-  line-height: 1.5 !important;
-  font-weight: 300 !important
-}
-.gsc-control-cse,
-.gsc-control-cse .gsc-table-result {
-  width: 100% !important;
-  font-family: 'Open Sans', Arial, Helvetica, sans-serif !important;
-  font-weight: 300 !important;
-  font-size: 13px !important
-}
-.gsc-resultsHeader {
-  width: 100% !important;
-  clear: both !important
-}
-.gsc-resultsHeader td.gsc-twiddleRegionCell {
-  width: 75% !important
-}
-.gsc-resultsbox-visible {
-  display: block !important
-}
-.gsc-resultsbox-invisible {
-  display: none !important
-}
-.gsc-results {
-  padding-bottom: 2px !important;
-  width: 99% !important
-}
-.gsc-result {
-  margin-bottom: 10px !important
-}
-.gsc-result .gs-title {
-  height: 1.4em !important;
-  overflow: hidden !important
-}
-.gsc-result div.gs-watermark {
-  display: none !important
-}
-.gsc-results .gsc-result img.gs-ad-marker {
-  display: none !important
-}
-.gsc-webResult:after {
-  content: "." !important;
-  display: block !important;
-  height: 0 !important;
-  clear: both !important;
-  visibility: hidden !important
-}
-.gsc-webResult {
-  zoom: 1 !important
-}
-.gsc-webResult .gsc-result {
-  margin: 0 !important;
-  padding: .5em 0 !important;
-  border-bottom: 1px solid #ebebeb !important
-}
-.gsc-above-wrapper-area {
-  border-bottom: 1px solid #E9E9E9 !important;
-  padding: 5px 0 5px 0 !important
-}
-.gsc-above-wrapper-area-invisible {
-  display: none !important
-}
-.gsc-above-wrapper-area-container {
-  width: 100% !important
-}
-.gsc-result-info {
-  text-align: left !important;
-  color: #676767 !important;
-  font-size: 13px !important;
-  padding-left: 8px !important;
-  margin: 10px 0 10px 0 !important
-}
-.gsc-result-info-container {
-  text-align: left !important
-}
-.gsc-result-info-invisible {
-  display: none !important
-}
-.gsc-orderby-container {
-  text-align: right !important;
-  background: transparent !important
-}
-.gsc-orderby-invisible {
-  display: none !important
-}
-.gsc-orderby-label {
-  color: #676767 !important;
-  padding: 5px 5px 6px 0 !important
-}
-.gsc-selected-option-container {
-  background-color: transparent !important;
-  border: 1px solid #eee !important;
-  border: 1px solid rgba(0, 0, 0, 0.1) !important;
-  border-radius: 2px !important;
-  box-shadow: none !important;
-  color: #444 !important;
-  cursor: default !important;
-  font-size: 11px !important;
-  font-weight: bold !important;
-  height: 20px !important;
-  line-height: 20px !important;
-  max-width: 90% !important;
-  min-width: 54px !important;
-  outline: 0 !important;
-  padding: 0 28px 0 6px !important;
-  position: relative !important;
-  text-align: center !important;
-  width: 50px !important !important
-}
-.gsc-selected-option {
-  position: relative !important;
-  width: 100% !important;
-}
-.gsc-control-cse .gsc-option-selector {
-  border: none !important;
-  height: 11px !important;
-  margin-top: -4px !important;
-  position: absolute !important;
-  right: 5px !important;
-  top: 8px !important;
-  width: 7px !important;
-  padding: 0 5px 0 5px !important;
-  background: url(//ssl.gstatic.com/ui/v1/disclosure/small-grey-disclosure-arrow-down.png) center no-repeat
-}
-.gsc-results .gsc-cursor-box .gsc-trailing-more-results {
-  margin-bottom: 0 !important;
-  display: inline !important
-}
-.gsc-results .gsc-cursor {
-  display: inline !important
-}
-.gsc-results .gsc-cursor-box {
-  margin: 10px 5px 10px !important
-}
-.gsc-results .gsc-cursor-box .gsc-cursor-page {
-  cursor: pointer !important;
-  color: #000000 !important;
-  text-decoration: underline !important;
-  margin-right: 8px !important;
-  display: inline !important
-}
-.gsc-results .gsc-cursor-box .gsc-cursor-current-page {
-  cursor: default !important;
-  color: white !important;
-  background-color: #5caa15 !important;
-  font-weight: bold !important;
-  text-decoration: none !important;
-  padding: 0 3px 0 3px !important;
-  margin-top: 10px !important;
-  cursor: pointer !important
-}
-.gs-result .gs-title,
-.gs-result .gs-title * {
-  color: #5caa15 !important;
-  text-decoration: underline !important
-}
-.gs-webResult div.gs-visibleUrl-long,
-.gs-promotion div.gs-visibleUrl-long {
-  overflow: hidden !important;
-  display: none !important
-}
-.gs-webResult div.gs-per-result-labels a.gs-label {
-  text-decoration: underline !important;
-  cursor: pointer !important;
-  padding: 3px !important;
-  color: #26282a !important
-}
-.gs-webResult div.gs-per-result-labels a.gs-label.gs-labelActive {
-  cursor: default !important;
-  text-decoration: none !important
-}
-.gsc-control-cse:after {
-  content: "." !important;
-  display: block !important;
-  clear: both !important;
-  height: 0 !important;
-  visibility: hidden !important
-}
-
-*:first-child + html .gsc-inline-block {
-  display: inline !important
-}
diff --git a/qdoc/global/template/style/icomoon.eot b/qdoc/global/template/style/icomoon.eot
deleted file mode 100644
index 68f0fa6ae6f0c2e28b928f3cb3d8b78abeede398..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/style/icomoon.eot and /dev/null differ
diff --git a/qdoc/global/template/style/icomoon.svg b/qdoc/global/template/style/icomoon.svg
deleted file mode 100644
index 3246f83769d65a2371ae0c66e6d4591ca2de6069..0000000000000000000000000000000000000000
--- a/qdoc/global/template/style/icomoon.svg
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata>Generated by IcoMoon</metadata>
-<defs>
-<font id="icomoon" horiz-adv-x="512">
-<font-face units-per-em="512" ascent="480" descent="-32" />
-<missing-glyph horiz-adv-x="512" />
-<glyph unicode="&#x20;" d="" horiz-adv-x="256" />
-<glyph unicode="&#xe600;" d="M70.281 478.981c-38.026 6.451-70.281-21.729-70.281-62.472v-448.51l347.671 58.398c24.106 4.075 42.78 32.255 42.78 62.812v337.486l-320.17 52.286zM232.233 147.608c-10.185-23.767-25.464-39.045-46.175-46.514 2.037-10.865 5.433-17.655 9.506-21.729 2.376-2.037 5.772-3.735 9.846-3.735h11.544c-2.376 0-4.414-0.679-6.451-0.679l0.339-0.339c2.037 0 3.055 0 6.451 0.339v-31.915l-14.939-2.037c-4.414-0.679-8.488-0.679-12.223-0.679-12.902 0-23.088 3.055-30.897 9.507-10.185 8.149-17.994 24.106-22.748 47.533-22.409 4.753-39.724 19.014-51.608 42.78-12.223 24.106-18.334 59.416-18.334 105.931 0 49.91 8.488 86.578 25.124 110.005 14.26 19.692 33.953 29.538 58.737 29.538 4.075 0 8.149-0.339 12.223-0.679 29.199-3.395 50.25-16.976 64.17-41.082 13.581-23.427 20.032-56.7 20.032-100.838 0-40.403-4.754-71.979-14.6-95.406zM346.313 125.199c-13.581-5.433-24.785-8.827-37.008-9.846-1.697 0-3.395-0.339-5.093-0.339-10.865 0-19.692 3.055-25.464 9.507-6.791 7.469-10.525 19.353-10.525 35.65v125.623l-13.581 0.679v33.273l17.994-1.358 11.884 49.57 27.841-3.055v-49.231l30.557-2.376v-30.897l-30.557 1.358v-113.061c0-9.846 1.019-16.297 3.055-19.014s5.093-3.735 9.167-3.735c0.339 0 1.019 0 1.358 0 6.111 0.339 13.581 2.377 20.372 5.772v-28.52zM162.631 347.586c-1.018 0-1.697 0-2.716 0-10.525 0-18.673-6.111-24.446-18.673-6.112-13.581-9.167-41.422-9.167-84.202 0-41.082 3.055-70.281 9.167-87.257 5.772-16.297 14.26-24.445 25.803-24.445 0.339 0 1.018 0 1.358 0 11.204 0.679 19.692 8.488 25.464 23.427 5.772 14.599 8.488 43.798 8.488 86.918 0 38.706-2.716 65.528-8.488 80.127-5.433 14.939-13.921 23.088-25.464 24.106zM206.090 75.289v0zM206.090 75.289c1.358 0 2.716 0 4.414 0 2.037 0 4.075 0.679 6.451 0.679h-11.544l0.679-0.679z" horiz-adv-x="391" />
-<glyph unicode="&#xe601;" d="M511.589 224.206c0-141.272-114.523-255.794-255.794-255.794s-255.794 114.523-255.794 255.794c0 141.271 114.523 255.794 255.794 255.794s255.794-114.523 255.794-255.794zM192.565 127.717c0-18.066-14.781-32.436-32.436-32.436s-32.847 14.37-32.847 32.436c0 18.066 14.781 32.436 32.436 32.436s32.847-14.37 32.847-32.436zM127.281 367.91v-50.502c133.030 0 221.716-89.097 221.716-222.127h50.502c0 165.466-107.163 272.628-272.218 272.628zM142.473 262.8c-3.696 0-11.496 0-15.192-0.411v-45.164c3.695 0.411 11.497 0.411 15.192 0.411 61.999 0 107.163-45.164 107.163-107.163 0-3.695 0-11.907-0.411-15.192h45.575c0.411 3.695 0.411 11.497 0.411 15.192-0.411 94.024-58.714 152.327-152.738 152.327z" />
-<glyph unicode="&#xe602;" d="M511.589 224.206c0-141.272-114.523-255.794-255.794-255.794s-255.794 114.523-255.794 255.794c0 141.271 114.523 255.794 255.794 255.794s255.794-114.523 255.794-255.794zM382.666 298.111h-253.331c-8.212 0-14.781 6.57-14.781 14.781v18.887c0 8.212 6.57 14.781 14.781 14.781h253.331c8.212 0 14.781-6.57 14.781-14.781v-18.887c0-8.212-6.57-14.781-14.781-14.781zM382.666 199.981h-253.331c-8.212 0-14.781 6.57-14.781 14.781v18.887c0 8.212 6.57 14.781 14.781 14.781h253.331c8.212 0 14.781-6.57 14.781-14.781v-18.887c0-8.212-6.57-14.781-14.781-14.781zM382.666 101.44h-253.331c-8.212 0-14.781 6.57-14.781 14.781v18.887c0 8.212 6.57 14.781 14.781 14.781h253.331c8.212 0 14.781-6.57 14.781-14.781v-18.887c0-7.801-6.57-14.781-14.781-14.781z" />
-<glyph unicode="&#xe603;" d="M511.795 224c0-141.272-114.524-255.795-255.795-255.795s-255.795 114.524-255.795 255.795c0 141.272 114.523 255.795 255.795 255.795s255.795-114.524 255.795-255.795zM405.529 256.947l-103.168 14.797-46.566 92.646-46.080-92.646-103.245-14.797 74.471-71.68-17.664-101.581 92.416 47.974 93.056-48.051-17.69 101.657z" />
-<glyph unicode="&#xe604;" d="M511.589 224.206c0-141.272-114.523-255.794-255.794-255.794s-255.794 114.523-255.794 255.794c0 141.271 114.523 255.794 255.794 255.794s255.794-114.523 255.794-255.794zM379.381 126.486l-74.726 75.137c12.728 17.245 20.118 39.005 20.118 61.998 0 29.152-11.907 55.429-30.794 74.316-18.887 19.298-45.575 31.204-74.726 31.204s-55.429-11.907-74.316-30.794c-18.887-18.887-30.794-45.575-30.794-74.316 0-29.151 11.907-55.429 30.794-74.316s45.575-30.794 74.316-30.794c20.119 0 38.595 5.748 54.608 15.192l75.959-75.959c5.337-5.337 13.96-5.337 19.298 0l9.854 9.854c5.748 4.517 5.748 13.139 0.411 18.476zM165.055 209.424c-13.96 13.96-22.582 32.847-22.582 54.197s8.623 40.238 22.582 54.197c13.96 13.96 32.847 22.582 54.197 22.582s40.238-8.623 54.197-22.582c13.96-13.96 22.582-32.847 22.582-54.197s-8.623-40.238-22.582-54.197c-13.96-13.96-32.847-22.582-54.197-22.582-20.94 0-40.238 8.623-54.197 22.582z" />
-<glyph unicode="&#xe605;" d="M511.589 224.206c0-141.272-114.523-255.794-255.794-255.794s-255.794 114.523-255.794 255.794c0 141.271 114.523 255.794 255.794 255.794s255.794-114.523 255.794-255.794zM255.794-22.557c67.746 0 129.335 27.509 174.088 71.442-5.748 4.106-11.907 8.623-18.887 13.55-22.993 15.602-52.966 34.9-92.382 59.535-1.642 1.232-2.874 2.464-3.284 3.695-0.821 1.232-1.232 2.464-1.232 3.284-0.411 2.053-0.821 4.106-0.821 6.159 0 4.927 0.821 10.264 2.874 16.423 1.642 6.159 4.517 12.317 7.801 18.476 2.053 3.695 4.927 9.854 7.39 17.655s4.927 17.655 7.39 28.741c4.517 22.172 7.39 49.681 7.39 79.243 0 13.138-5.337 29.973-14.781 45.575-9.854 15.602-23.404 29.972-39.827 38.595-11.086 5.748-22.993 9.033-35.721 9.033v0 0c-18.476-0.411-35.31-7.801-49.681-19.708s-25.867-27.92-32.847-43.933c-4.517-10.675-6.57-20.94-6.57-29.562 0-22.171 1.643-43.112 4.517-61.588s6.57-34.489 10.264-45.986c2.464-7.801 5.338-13.96 7.391-17.655 3.696-5.748 6.159-12.317 7.801-18.476s2.874-11.497 2.874-16.423c0-1.642 0-2.874-0.411-4.517s-0.821-3.284-1.643-4.927c-0.821-1.232-1.643-2.464-3.285-3.695-51.323-32.026-87.044-55.429-111.679-73.084 43.933-44.343 105.52-71.853 173.267-71.853z" />
-<glyph unicode="&#xe606;" d="M511.087 224.411c0-141.109-114.392-255.502-255.501-255.502s-255.501 114.392-255.501 255.501c0 141.109 114.392 255.501 255.501 255.501s255.501-114.392 255.501-255.501zM369.577 360.185h-227.981c-2.263-0.003-4.095-1.838-4.098-4.098v-263.767c0.003-2.263 1.838-4.095 4.098-4.098h227.981c2.263 0.003 4.095 1.838 4.098 4.098v263.767c-0.007 2.263-1.838 4.095-4.098 4.098zM291.959 165.217c0-4.507-3.688-8.197-8.197-8.197h-112.482c-4.507 0-8.196 3.688-8.196 8.197v2.263c0 4.507 3.689 8.197 8.197 8.197h112.482c4.507 0 8.197-3.688 8.197-8.197v-2.263zM348.089 210.007c0-4.507-3.688-8.197-8.197-8.197h-168.612c-4.507 0-8.196 3.688-8.196 8.197v2.263c0 4.507 3.689 8.197 8.197 8.197h168.608c4.507 0 8.197-3.688 8.197-8.197v-2.263zM348.089 254.796c0-4.507-3.688-8.197-8.197-8.197h-168.612c-4.507 0-8.196 3.689-8.196 8.197v2.263c0 4.508 3.689 8.197 8.197 8.197h168.608c4.507 0 8.197-3.688 8.197-8.197v-2.263zM348.089 299.584c0-4.507-3.688-8.197-8.197-8.197h-168.612c-4.507 0-8.196 3.689-8.196 8.197v2.263c0 4.508 3.689 8.197 8.197 8.197h168.608c4.507 0 8.197-3.688 8.197-8.197v-2.263z" />
-<glyph unicode="&#xe607;" d="M0 139.988v153.96c0 19.471 0.36 36.417 3.966 50.84 36.056 11.538 85.093 18.389 127.279 18.389 23.797 0 53.724-2.524 75.719-5.409v122.231h55.166v-340.012c0-18.389-0.361-35.335-3.966-51.56-34.254-11.538-86.535-18.389-126.918-18.389-42.547 0-89.059 6.49-126.197 17.668-3.606 16.947-5.048 34.253-5.048 52.281zM57.33 308.372c-1.443-7.572-2.163-19.471-2.163-34.974v-113.578c0-18.389 0.721-29.927 2.163-34.974 20.191-5.409 49.758-7.933 73.916-7.933 27.042 0 56.248 3.245 73.555 8.293 1.442 5.048 2.163 16.586 2.163 34.614v150.355c-21.634 3.606-51.921 5.769-76.44 5.769-23.436 0.361-51.56-3.245-73.195-7.572zM389.048 360.293v-287.009h-55.887v287.009h55.887zM658.028 28.214c1.442 6.49 2.163 15.144 2.163 24.879v29.566c-22.355-2.524-50.479-4.327-72.112-4.327-41.826 0-89.059 6.13-123.673 17.668-2.885 16.947-4.327 33.893-4.327 51.2v146.75c0 18.028 1.442 34.974 4.327 50.839 34.254 11.538 81.848 18.389 123.673 18.389 41.465 0 87.256-6.851 123.673-18.389 3.606-16.586 3.966-32.812 3.966-50.839v-271.865c-15.865-46.512-64.18-54.084-124.034-54.084-25.961 0-62.377 4.327-91.583 10.096v43.988c29.206-5.769 72.834-9.735 108.169-7.933 19.11 0.721 40.383 5.769 49.758 14.062zM660.192 129.533v143.865c0 16.586-0.361 27.403-2.524 34.975-19.471 4.327-45.792 7.933-69.588 7.933-23.437 0-50.119-3.245-69.588-7.933-1.803-7.572-2.885-19.471-2.885-34.975v-107.087c0-15.865 1.082-27.403 2.885-34.974 18.389-5.409 45.431-7.933 69.228-7.933 23.076 0.361 50.479 2.163 72.473 6.13zM842.276 360.293v-287.009h-55.888v287.009h55.888zM1159.211 344.067c-36.417 12.62-73.555 18.75-115.741 18.75-36.057 0-91.583-5.769-123.673-15.144v-51.2h27.403c5.048 4.327 9.014 10.096 11.899 16.226 10.457 2.524 32.812 5.048 74.637 5.048 23.797 0 51.2-3.966 71.752-8.293 1.443-13.341 2.524-26.681 2.524-38.941v-23.076h-120.067c-22.355 0-51.2-3.245-75.357-12.619-3.606-15.143-4.688-32.451-5.048-44.71v-50.118c0-18.028 1.442-35.335 5.048-51.921 36.778-11.538 84.011-17.668 126.557-17.668 40.383 0 85.814 6.13 120.068 17.668 3.605 15.865 3.966 32.812 3.966 51.2v143.504c0 15.504-0.361 34.974-3.966 61.296zM998.039 206.693h110.333v-35.696c0-14.423 0.361-34.614-1.803-46.152-17.307-5.048-40.023-7.572-66.704-7.572-1.443 0-2.884 0-3.966 0-23.076 0-52.282 2.524-71.391 7.572-1.803 10.817-2.885 26.321-2.885 35.696v3.606c0 8.293 0.361 27.043 3.606 38.581 8.293 2.885 19.11 3.966 32.812 3.966zM912.586 234.817c-3.606-15.144-5.048-44.71-5.048-44.71v-50.118zM387.966 476.034v-59.493h-55.887v59.493h55.887zM842.276 476.034v-59.493h-55.888v59.493h55.888z" horiz-adv-x="1163" />
-<glyph unicode="&#xe608;" d="M512.419 224.922c0-141.385-114.615-256-256-256s-256 114.615-256 256c0 141.385 114.615 256 256 256s256-114.615 256-256zM414.157 260.356l-108.984 15.832-48.921 98.764-7.456-15.246-41.047-83.519-108.984-15.832 78.744-76.9-18.597-108.565 97.424 51.267 97.759-51.267-18.597 108.565 78.659 76.9zM256.252 145.005l-75.142-39.539 14.409 83.769-60.817 59.309 84.189 12.314 37.362 76.231 37.78-76.231 84.188-12.231-60.817-59.309 14.409-83.853-75.56 39.539z" horiz-adv-x="513" />
-<glyph unicode="&#xe609;" d="M511.795 224c0-141.272-114.524-255.795-255.795-255.795s-255.795 114.524-255.795 255.795c0 141.272 114.523 255.795 255.795 255.795s255.795-114.524 255.795-255.795zM418.457 266.368l-112.435 16.128-50.279 100.070-11.392-22.912-38.4-77.159-112.409-16.102 81.229-78.183-19.174-110.157 100.224 51.993 100.582-51.942-19.175 110.106 81.229 78.157z" />
-</font></defs></svg>
\ No newline at end of file
diff --git a/qdoc/global/template/style/icomoon.ttf b/qdoc/global/template/style/icomoon.ttf
deleted file mode 100644
index 4518527c8b4cadba1fdb54c4f9987cb5877e605d..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/style/icomoon.ttf and /dev/null differ
diff --git a/qdoc/global/template/style/icomoon.woff b/qdoc/global/template/style/icomoon.woff
deleted file mode 100644
index 5c8466c40fbeb6d98c53192c2e9fcfc0507f8c83..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/style/icomoon.woff and /dev/null differ
diff --git a/qdoc/global/template/style/list_arrow.png b/qdoc/global/template/style/list_arrow.png
deleted file mode 100644
index 7bb07b32d0232b3a65e3cd214ca7fa78c162bf4d..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/style/list_arrow.png and /dev/null differ
diff --git a/qdoc/global/template/style/list_expand.png b/qdoc/global/template/style/list_expand.png
deleted file mode 100644
index d2145145fdf21404a8d90fb98dadd773bedb3839..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/style/list_expand.png and /dev/null differ
diff --git a/qdoc/global/template/style/offline-simple.css b/qdoc/global/template/style/offline-simple.css
deleted file mode 100644
index a805b924a30c1abaabbbe52ca2a295ea1df49546..0000000000000000000000000000000000000000
--- a/qdoc/global/template/style/offline-simple.css
+++ /dev/null
@@ -1,162 +0,0 @@
-pre, .LegaleseLeft {
-  background-color: #f0f0f0;
-  font-family: Courier, monospace;
-  font-weight: 600;
-  vertical-align: top;
-  margin: 15px 85px 15px 35px;
-  padding: 25px;
-  width: 90%;
-  overflow-x:auto;
-}
-
-pre a[href] {
-  color: #5caa15;
-}
-
-p {
-  width: 70%;
-  margin: 15px 0px 10px 15px;
-}
-
-table p {
-  margin: 0px;
-  padding: 0px;
-}
-
-a[href] {
-  color: #007330;
-  text-decoration: none;
-}
-
-/* Different color for ext. links */
-a[href|="http://"], a[href|="https://"] {
-    color: #6bb8db;
-}
-
-h1.title {
-  margin-top: 30px;
-  margin-left: 6px;
-  padding: 6px;
-}
-
-h2, p.h2 {
-  background-color: #F2F3F4;
-  padding: 4px;
-  margin: 30px 0px 20px 10px;
-}
-
-h3 {
-  margin: 30px 0px 30px 6px;
-}
-
-ul, ol {
-  margin-top: 4px;
-  margin-bottom: 0px;
-}
-
-ul li, ol li {
-  margin-bottom: 8px;
-}
-
-.mainContent li.level2 {
-  margin-left: 16px;
-}
-
-.rightAlign {
-  text-align: right;
-}
-
-h3.fn, span.fn {
-  border-width: 3px;
-  border-style: solid;
-  border-color: #aaaaaa;
-  background-color: #eeeeee;
-  word-spacing: 3px;
-  padding: 5px;
-  text-decoration: none;
-  font-weight: 400;
-  margin: 45px 0px 0px 6px;
-}
-
-table {
-  max-width: 80%;
-  padding: 15px 45px 15px 15px;
-}
-
-table th {
-  text-align: left;
-  padding: 8px;
-}
-
-table td {
-  padding: 6px 10px 6px 10px;
-}
-
-table tr.odd {
-  background-color: #eeeeee;
-}
-
-table.qmlname td {
-  padding: 0px;
-  margin-left: 6px;
-}
-
-table.qmlname p .name,
-h3.fn .name, h3.fn .type {
-  font-weight: bold;
-}
-
-.context h3.fn {
-  font-weight: 400;
-}
-
-.qmlreadonly, .qmldefault {
-  font-family: Courier, monospace;
-  margin-right: 6px;
-}
-
-code {
-  font-family: Courier, monospace;
-  font-weight: 400;
-}
-
-p.naviNextPrevious {
-  text-align: right;
-  margin-right: 20px;
-}
-
-span.naviSeparator {
-  white-space: pre;
-}
-
-.toc h3 {
-  margin: 0px 0px 10px 6px;
-}
-
-.toc ul {
-  list-style-type: none;
-}
-
-.navigationbar table {
-  padding: 0;
-  margin: 0;
-}
-
-.navigationbar table tr {
-  background-color: #eeeeee;
-}
-
-td#buildversion {
-  background-color: #ffffff;
-}
-
-.footer, .footer p {
-  padding: 5px 0px 5px 0px;
-  margin: 45px 15px 5px 15px;
-  font-size: 8.5pt;
-  background-color: #cccccc;
-}
-
-.footer p {
-  margin: 0px;
-}
diff --git a/qdoc/global/template/style/offline.css b/qdoc/global/template/style/offline.css
deleted file mode 100644
index b943dbb7ac372031afa4691509933f9558e65b11..0000000000000000000000000000000000000000
--- a/qdoc/global/template/style/offline.css
+++ /dev/null
@@ -1,778 +0,0 @@
-body {
-    font: normal 400 14px/1.2 Arial;
-    margin-top: 85px;
-    font-family: Arial, Helvetica;
-    text-align: left;
-    margin-left: 5px;
-    margin-right: 5px;
-    background-color: #fff;
-}
-
-p {
-    line-height: 20px
-}
-
-img {
-    margin-left: 0px;
-    max-width: 800px;
-    height: auto;
-}
-
-.content {
-
-}
-
-.content .indexboxcont li {
-     font: normal bold 13px/1 Verdana
- }
-
-.content .normallist li {
-     font: normal 13px/1 Verdana
- }
-
-.descr {
-    margin-top: 35px;
-    margin-bottom: 45px;
-    margin-left: 5px;
-    text-align: left;
-    vertical-align: top;
-}
-
-.name {
-    max-width: 75%;
-    font-weight: 100;
-}
-
-tt {
-    text-align: left
-}
-
-/*
------------
-links
------------
-*/
-
-a:link {
-    color: #007330;
-    text-decoration: none;
-    text-align: left;
-}
-
-a.qa-mark:target:before {
-    content: "***";
-    color: #ff0000;
-}
-
-a:hover {
-    color: #44a51c;
-    text-align: left;
-}
-
-a:visited {
-    color: #007330;
-    text-align: left;
-}
-
-a:visited:hover {
-    color: #44a51c;
-    text-align: left;
-}
-
-/*
------------
-offline viewing: HTML links display an icon
------------
-*/
-
-a[href*="http://"], a[href*="ftp://"], a[href*="https://"] {
-    text-decoration: none;
-    background-image: url(../images/ico_out.png);
-    background-repeat: no-repeat;
-    background-position: left;
-    padding-left: 20px;
-    text-align: left;
-}
-
-.flags {
-    text-decoration: none;
-    text-height: 24px;
-}
-
-.flags:target {
-    background-color: #FFFFD6;
-}
-
-/*
--------------------------------
-NOTE styles
--------------------------------
-*/
-
-.notetitle, .tiptitle, .fastpathtitle {
-    font-weight: bold
-}
-
-.attentiontitle, .cautiontitle, .dangertitle, .importanttitle, .remembertitle, .restrictiontitle {
-    font-weight: bold
-}
-
-.note, .tip, .fastpath {
-    background: #F2F2F2 url(../images/ico_note.png);
-    background-repeat: no-repeat;
-    background-position: top left;
-    padding: 5px;
-    padding-left: 40px;
-    padding-bottom: 10px;
-    border: #999 1px dotted;
-    color: #666666;
-    margin: 5px;
-}
-
-.attention, .caution, .danger, .important, .remember, .restriction {
-    background: #F2F2F2 url(../images/ico_note_attention.png);
-    background-repeat: no-repeat;
-    background-position: top left;
-    padding: 5px;
-    padding-left: 40px;
-    padding-bottom: 10px;
-    border: #999 1px dotted;
-    color: #666666;
-    margin: 5px;
-}
-
-/*
--------------------------------
-Top navigation
--------------------------------
-*/
-
-.qtref {
-    display: block;
-    position: relative;
-    height: 15px;
-    z-index: 1;
-    font-size: 11px;
-    padding-right: 10px;
-    float: right;
-}
-
-.naviNextPrevious {
-    clear: both;
-    display: block;
-    position: relative;
-    text-align: right;
-    top: -47px;
-    float: right;
-    height: 20px;
-    z-index: 1;
-    padding-right: 10px;
-    padding-top: 2px;
-    vertical-align: top;
-    margin: 0px;
-}
-
-.naviNextPrevious > a:first-child {
-     background-image: url(../images/btn_prev.png);
-     background-repeat: no-repeat;
-     background-position: left;
-     padding-left: 20px;
-     height: 20px;
-     padding-left: 20px;
- }
-
-.naviNextPrevious > a:last-child {
-     background-image: url(../images/btn_next.png);
-     background-repeat: no-repeat;
-     background-position: right;
-     padding-right: 20px;
-     height: 20px;
-     margin-left: 30px;
- }
-
-.naviSeparator { display: none }
-/*
------------
-footer and license
------------
-*/
-
-.footer {
-    text-align: left;
-    padding-top: 45px;
-    padding-left: 5px;
-    margin-top: 45px;
-    margin-bottom: 45px;
-    font-size: 10px;
-    border-top: 1px solid #999;
-}
-
-.footer p {
-    line-height: 14px;
-    font-size: 11px;
-    padding: 0;
-    margin: 0;
-}
-
-.footer a[href*="http://"], a[href*="ftp://"], a[href*="https://"] {
-    font-weight: bold;
-}
-
-.footerNavi {
-    width: auto;
-    text-align: right;
-    margin-top: 50px;
-    z-index: 1;
-}
-
-.navigationbar {
-    display: block;
-    position: relative;
-    top: -20px;
-    border-top: 1px solid #cecece;
-    border-bottom: 1px solid #cecece;
-    background-color: #F2F2F2;
-    z-index: 1;
-    height: 20px;
-    padding-left: 7px;
-    margin: 0px;
-    padding-top: 2px;
-    margin-left: -5px;
-    margin-right: -5px;
-}
-
-.navigationbar .first {
-     background: url(../images/home.png);
-     background-position: left;
-     background-repeat: no-repeat;
-     padding-left: 20px;
- }
-
-.navigationbar ul {
-     margin: 0px;
-     padding: 0px;
- }
-
-  .navigationbar ul li {
-      list-style-type: none;
-      padding-top: 2px;
-      padding-left: 4px;
-      margin: 0;
-      height: 20px;
-  }
-
-.navigationbar li {
-     float: left
- }
-
-  .navigationbar li a, .navigationbar td a {
-      display: block;
-      text-decoration: none;
-      background: url(../images/arrow_bc.png);
-      background-repeat: no-repeat;
-      background-position: right;
-      padding-right: 17px;
-  }
-
-table.buildversion {
-      float: right;
-      margin-top: -18px !important;
-}
-
-.navigationbar table {
-      border-radius: 0;
-      border: 0 none;
-      background-color: #F2F2F2;
-      margin: 0;
-}
-
-.navigationbar table td {
-    padding: 0;
-    border: 0 none;
-}
-
-#buildversion {
-    font-style: italic;
-    font-size: small;
-    float: right;
-    margin-right: 5px;
-}
-
-/*
-
-/* table of content
-no display
-*/
-
-/*
------------
-headers
------------
-*/
-
-@media screen {
-    .title {
-        color: #313131;
-        font-size: 24px;
-        font-weight: normal;
-        left: 0;
-        padding-bottom: 20px;
-        padding-left: 10px;
-        padding-top: 20px;
-        position: absolute;
-        right: 0;
-        top: 0;
-        background-color: #E6E6E6;
-        border-bottom: 1px #CCC solid;
-        border-top: 2px #CCC solid;
-        font-weight: bold;
-        margin-left: 0px;
-        margin-right: 0px;
-    }
-    .subtitle, .small-subtitle {
-        display: block;
-        clear: left;
-    }
-}
-
-h1 {
-    margin: 0
-}
-
-h2, p.h2 {
-    font: 500 16px/1.2 Arial;
-    font-weight: 100;
-    background-color: #F2F3F4;
-    padding: 4px;
-    margin-bottom: 30px;
-    margin-top: 30px;
-    border-top: #E0E0DE 1px solid;
-    border-bottom: #E0E0DE 1px solid;
-    max-width: 99%;
-}
-
-h2:target {
-    background-color: #F2F3D4;
-}
-
-h3 {
-    font: 500 14px/1.2 Arial;
-    font-weight: 100;
-    text-decoration: underline;
-    margin-bottom: 30px;
-    margin-top: 30px;
-}
-
-h3.fn, span.fn {
-    border-width: 1px;
-    border-style: solid;
-    border-color: #E6E6E6;
-    -moz-border-radius: 7px 7px 7px 7px;
-    -webkit-border-radius: 7px 7px 7px 7px;
-    border-radius: 7px 7px 7px 7px;
-    background-color: #F6F6F6;
-    word-spacing: 3px;
-    padding: 5px 5px;
-    text-decoration: none;
-    font-weight: bold;
-    max-width: 75%;
-    font-size: 14px;
-    margin: 0px;
-    margin-top: 45px;
-}
-h3.fn code {
-    float: right;
-}
-h3.fn:target {
-    background-color: #F6F6D6;
-}
-
-.name {
-    color: #1A1A1A
-}
-
-.type {
-    color: #808080
-}
-
-@media print {
-    .title {
-        color: #0066CB;
-        font-family: Arial, Helvetica;
-        font-size: 32px;
-        font-weight: normal;
-        left: 0;
-        position: absolute;
-        right: 0;
-        top: 0;
-    }
-}
-
-/*
------------------
-table styles
------------------
-*/
-
-.table img {
-    border: none;
-    margin-left: 0px;
-    -moz-box-shadow: 0px 0px 0px #fff;
-    -webkit-box-shadow: 0px 0px 0px #fff;
-    box-shadow: 0px 0px 0px #fff;
-}
-
-/* table with border alternative colours*/
-
-table, pre, .LegaleseLeft {
-    -moz-border-radius: 7px 7px 7px 7px;
-    -webkit-border-radius: 7px 7px 7px 7px;
-    border-radius: 7px 7px 7px 7px;
-    background-color: #F6F6F6;
-    border: 1px solid #E6E6E6;
-    border-collapse: separate;
-    margin-bottom: 25px;
-    margin-left: 15px;
-    font-size: 12px;
-    line-height: 1.2;
-}
-
- table tr.even {
-     background-color: white;
-     color: #66666E;
- }
-
- table tr.odd {
-     background-color: #F6F6F6;
-     color: #66666E;
- }
-
- table tr:target {
-     background-color: #F6F6D6;
- }
-
- table thead {
-     text-align: left;
-     padding-left: 20px;
-     background-color: #e1e0e0;
-     border-left: none;
-     border-right: none;
- }
-
-  table thead th {
-      padding-top: 5px;
-      padding-left: 10px;
-      padding-bottom: 5px;
-      border-bottom: 2px solid #D1D1D1;
-      padding-right: 10px;
-  }
-
- table th {
-     text-align: left;
-     padding-left: 20px;
- }
-
- table td {
-     padding: 3px 15px 3px 20px;
-     border-bottom: #CCC dotted 1px;
- }
-
- table p {
-     margin: 0px
- }
-
-.LegaleseLeft {
-    font-family: monospace;
-    white-space: pre-wrap;
-}
-/* table bodless & white*/
-
-.borderless {
-    border-radius: 0px 0px 0px 0px;
-    background-color: #fff;
-    border: 1px solid #fff;
-}
-
-.borderless tr {
-     background-color: #FFF;
-     color: #66666E;
- }
-
-.borderless td {
-     border: none;
-     border-bottom: #fff dotted 1px;
- }
-
-/*
------------
-List
------------
-*/
-
-ul {
-    margin-top: 10px;
-}
-
-li {
-    margin-bottom: 10px;
-    padding-left: 8px;
-    list-style: outside;
-    text-align: left;
-}
-
- ul > li {
-    list-style-type: square;
- }
-
-ol {
-    margin: 10px;
-    padding: 0;
-}
-
-ol.A > li {
-    list-style-type: upper-alpha;
-}
-
-ol.a > li{
-    list-style-type: lower-alpha;
-}
-
- ol > li {
-     margin-left: 30px;
-     padding-left: 8px;
-     list-style: decimal;
- }
-
-.centerAlign {
-    text-align: left
-}
-
-.cpp, .LegaleseLeft {
-    display: block;
-    margin: 10px;
-    overflow: auto;
-    padding: 20px 20px 20px 20px;
-}
-
-.js {
-    display: block;
-    margin: 10px;
-    overflow: auto;
-    padding: 20px 20px 20px 20px;
-}
-
-.memItemLeft {
-    padding-right: 3px
-}
-
-.memItemRight {
-    padding: 3px 15px 3px 0
-}
-
-.qml {
-    display: block;
-    margin: 10px;
-    overflow: auto;
-    padding: 20px 20px 20px 20px;
-}
-
-.qmldefault {
-    padding-left: 5px;
-    float: right;
-    color: red;
-}
-
-.qmlreadonly {
-    padding-left: 5px;
-    float: right;
-    color: #254117;
-}
-
-.rightAlign {
-    padding: 3px 5px 3px 10px;
-    text-align: right;
-}
-
-.qmldoc {
-    margin-left: 15px
-}
-
-.flowList {
-  padding: 25px
-}
-.flowList dd {
-  display: inline-block;
-  margin-left: 10px;
-  width: 255px;
-  line-height: 1.15em;
-  overflow-x: hidden;
-  text-overflow: ellipsis
-}
-.alphaChar {
-  font-size: 2em;
-  position: relative
-}
-/*
------------
-Content table
------------
-*/
-
-@media print {
-    .toc {
-        float: right;
-        clear: right;
-        padding-bottom: 10px;
-        padding-top: 50px;
-        width: 100%;
-        background-image: url(../images/bgrContent.png);
-        background-position: top;
-        background-repeat: no-repeat;
-    }
-}
-
-@media screen {
-    .toc {
-        float: right;
-        clear: right;
-        vertical-align: top;
-        -moz-border-radius: 7px 7px 7px 7px;
-        -webkit-border-radius: 7px 7px 7px 7px;
-        border-radius: 7px 7px 7px 7px;
-        background: #FFF url('../images/bgrContent.png');
-        background-position: top;
-        background-repeat: repeat-x;
-        border: 1px solid #E6E6E6;
-        padding-left: 5px;
-        padding-bottom: 10px;
-        height: auto;
-        width: 200px;
-        text-align: left;
-        margin-left: 20px;
-    }
-}
-
-
-.toc h3 {
-    text-decoration: none
-}
-
-.toc h3 {
-    font: 500 14px/1.2 Arial;
-    font-weight: 100;
-    padding: 0px;
-    margin: 0px;
-    padding-top: 5px;
-    padding-left: 5px;
-}
-
-.toc ul {
-    padding-left: 10px;
-    padding-right: 5px;
-}
-
-.toc ul li {
-     margin-left: 15px;
-     list-style-image: url(../images/bullet_dn.png);
-     marker-offset: 0px;
-     margin-bottom: 8px;
-     padding-left: 0px;
- }
-
-.toc .level1 {
-    border: none
-}
-
-.toc .level2 {
-    border: none;
-    margin-left: 25px;
-}
-
-.level3 {
-    border: none;
-    margin-left: 30px;
-}
-
-.clearfix {
-    clear: both
-}
-
-/*
------------
-Landing page
------------
-*/
-
-.col-group {
-    white-space: nowrap;
-    vertical-align: top;
-}
-
-
-.landing h2 {
-    background-color: transparent;
-    border: none;
-    margin-bottom: 0px;
-    font-size: 18px;
-}
-
-.landing a, .landing li {
-    font-size: 13px;
-    font-weight: bold !important;
-}
-
-.col-1 {
-    display: inline-block;
-    white-space: normal;
-    width: 70%;
-    height: 100%;
-    float: left;
-}
-
-.col-2 {
-    display: inline-block;
-    white-space: normal;
-    width: 20%;
-    margin-left: 5%;
-    position: relative;
-    top: -20px;
-}
-
-.col-1 h1 {
-     margin: 20px 0 0 0;
- }
-
-.col-1 h2 {
-    font-size: 18px;
-    font-weight: bold !important;
-}
-
-.landingicons {
-    display: inline-block;
-    width: 100%;
-}
-
-.icons1of3 {
-    display: inline-block;
-    width: 33.3333%;
-    float: left;
-}
-
-.icons1of3 h2, .doc-column h2 {
-    font-size: 15px;
-    margin: 0px;
-    padding: 0px;
-}
-
-div.multi-column {
-    position: relative;
-}
-
-div.multi-column div {
-    display: -moz-inline-box;
-    display: inline-block;
-    vertical-align: top;
-    margin-top: 1em;
-    margin-right: 4em;
-    width: 24em;
-}
diff --git a/qdoc/global/template/style/online.css b/qdoc/global/template/style/online.css
deleted file mode 100644
index c0caa84027fc8673238029f92e229151fd2e07cb..0000000000000000000000000000000000000000
--- a/qdoc/global/template/style/online.css
+++ /dev/null
@@ -1,1717 +0,0 @@
-#navbar {
-  position:fixed;
-  top:0;
-  left:0;
-  z-index:100;
-  background:#fff;
-  width:100%
-}
-#navbar .container {
-  overflow:visible
-}
-.fixed .container {
-  overflow:visible
-}
-.box-shadowed-nav #navbar {
-  border-bottom:1px solid #eee
-}
-#navbar .navbar-header {
-  position:relative
-}
-#navbar .navbar-toggle {
-  display:none;
-  float:right;
-  line-height:18px;
-  min-width:95px;
-  position:relative;
-  text-align:center;
-  border-left:1px solid #eee;
-  border-right:1px solid #eee;
-  padding:10px 0 10px 0
-}
-#navbar .navbar-toggle:hover figure {
-  background:#5caa15
-}
-#navbar .navbar-toggle span {
-  color:#bdbebf;
-  font-weight:300
-}
-#navbar .navbar-toggle figure {
-  background:#7fc241;
-  border-radius:100%;
-  -webkit-border-radius:100%;
-  -moz-border-radius:100%;
-  transition:all 0.2s ease-in-out;
-  -webkit-transition:all 0.2s ease-in-out;
-  -moz-transition:all 0.2s ease-in-out;
-  -ms-transition:all 0.2s ease-in-out;
-  -o-transition:all 0.2s ease-in-out;
-  height:26px;
-  width:34px;
-  padding:8px 0 0 0;
-  margin-top:3px;
-  margin-left:auto;
-  margin-right:auto;
-  text-align:center
-}
-#navbar .navbar-toggle figure span.line {
-  display:inline-block;
-  width:1.125em;
-  height:0.1875em;
-  background:#fff;
-  transition:0.3s;
-  position:relative;
-  vertical-align:middle;
-  margin-top:-3px
-}
-#navbar .navbar-toggle figure span.line:before,#navbar .navbar-toggle figure span.line:after {
-  display:inline-block;
-  width:1.125em;
-  height:0.1875em;
-  background:#fff;
-  position:absolute;
-  left:0;
-  content:'';
-  -webkit-transform-origin:0.28571rem center;
-  transform-origin:0.28571rem center;
-  transition:0.3s;
-  -webkit-transition:0.3s;
-  -moz-transition:0.3s;
-  -ms-transition:0.3s;
-  -o-transition:0.3s
-}
-#navbar .navbar-toggle figure span.line:before {
-  top:6px
-}
-#navbar .navbar-toggle figure span.line:after {
-  top:-6px
-}
-#navbar .navbar-toggle.opened figure {
-  background:#5caa15
-}
-#navbar .navbar-toggle.opened span {
-  color:#5caa15
-}
-#navbar .navbar-toggle.opened span.line {
-  background:transparent
-}
-#navbar .navbar-toggle.opened span.line:before,#navbar .navbar-toggle.opened span.line:after {
-  -webkit-transform-origin:50% 50%;
-  -moz-transform-origin:50% 50%;
-  transform-origin:50% 50%;
-  top:0;
-  width:23px;
-  margin-left:-2px
-}
-#navbar .navbar-toggle.opened span.line:before {
-  transform:rotate3d(0, 0, 1, 45deg);
-  -webkit-transform:rotate3d(0, 0, 1, 45deg);
-  -moz-transform:rotate3d(0, 0, 1, 45deg);
-  -ms-transform:rotate3d(0, 0, 1, 45deg);
-  -o-transform:rotate3d(0, 0, 1, 45deg);
-  left:0
-}
-#navbar .navbar-toggle.opened span.line:after {
-  transform:rotate3d(0, 0, 1, -45deg);
-  -webkit-transform:rotate3d(0, 0, 1, -45deg);
-  -moz-transform:rotate3d(0, 0, 1, -45deg);
-  -ms-transform:rotate3d(0, 0, 1, -45deg);
-  -o-transform:rotate3d(0, 0, 1, -45deg)
-}
-#navbar .navbar-oneQt {
-  display:inline;
-  float:left;
-  width:31px;
-  padding:20px 8px;
-  margin:0 15px 0 0
-}
-#navbar .navbar-oneQt:before {
-  content:attr(data-icon);
-  position:absolute;
-  top:15px;
-  left:0;
-  color:#80c342;
-  font-family:'Qt Icons';
-  line-height:1;
-  font-size:3.125em;
-  transition:all 0.2s ease-in-out;
-  -webkit-transition:all 0.2s ease-in-out;
-  -moz-transition:all 0.2s ease-in-out;
-  -ms-transition:all 0.2s ease-in-out;
-  -o-transition:all 0.2s ease-in-out
-}
-.navbar-oneQt {
-  color: #80c342 !important;
-}
-.navbar-oneQt:hover {
-  color: #80c342;
-}
-#navbar .navbar-menu {
-  width:auto;
-  float:left
-}
-.lt-ie9 #navbar {
-  border-bottom:1px solid #ddd
-}
-#mainmenu {
-  float:left;
-  list-style:none;
-  margin-left:16px
-}
-#mainmenu li {
-  float:left;
-  margin-left:0;
-  list-style-type:none !important
-}
-#mainmenu li a {
-  display:block;
-  padding:29px 0.7em;
-  font-size:1.125em;
-  font-weight:300;
-  line-height:20px;
-  height:80px;
-  color:#26282a;
-  text-decoration:none;
-  border:0px solid #80c342;
-  -webkit-transition:all 0.2s ease-in-out;
-  box-sizing:border-box;
-  -webkit-box-sizing:border-box;
-  -moz-box-sizing:border-box;
-  *behavior:url(boxsizing.htc)
-}
-#mainmenu li a:hover {
-  color:#5caa15;
-  border-bottom:4px solid #80C342
-}
-#mainmenu li.current-menu-item a {
-  color:#5caa15;
-  border-bottom:4px solid #80C342
-}
-#menuextras, #mainmenu, #menuextraslanguages {
-  margin-bottom:0
- }
-#menuextras {
-  display:inline-block;
-  float:right;
-  list-style-type:none;
-  margin-right:0;
-  margin-left:0;
-  letter-spacing:-0.31em;
-  line-height:0
-}
-#menuextras li {
-  letter-spacing:normal;
-  float:left;
-  display:inline-block
-}
-#menuextras li a {
-  display:inline-block;
-  text-align:center;
-  height:80px;
-  border-left:1px solid #eee;
-  padding-top:14px;
-  box-sizing:border-box;
-  overflow:hidden;
-  min-width:85px;
-  font-weight:100
-}
-#menuextras li:last-child a {
-  border-right:1px solid #eee;
-}
-#menuextras li a:before {
-  display:inline-block;
-  font-family:'Qt Icons';
-  content:attr(data-icon);
-  font-size:2.125em;
-  width:100%;
-  color:#80c342;
-  line-height:1;
-  transition:all 0.2s ease-in-out;
-  -webkit-transition:all 0.2s ease-in-out;
-  -moz-transition:all 0.2s ease-in-out;
-  -ms-transition:all 0.2s ease-in-out;
-  -o-transition:all 0.2s ease-in-out
-}
-#menuextras li a:hover:before {
-  color:#5caa15
-}
-#menuextras .search.open a {
-  color:#006325
-}
-#menuextras .search a {
-  border-right:1px solid #eee
-}
-#menuextras li a span {
-  color:#bdbebf;
-  display:inline-block;
-  overflow:hidden;
-  max-height:30px;
-  transition:max-height 0.2s ease-in-out;
-  -webkit-transition:max-height 0.2s ease-in-out;
-  -moz-transition:max-height 0.2s ease-in-out;
-  -ms-transition:max-height 0.2s ease-in-out;
-  -o-transition:max-height 0.2s ease-in-out;
-  line-height:1.4;
-  font-size:0.875em
-}
-@media (min-width: 1320px) {
-  .context .flowListDiv dl.flowList {
-    -webkit-column-count:3;
-    -moz-column-count:3;
-    column-count:3
-  }
-}
-@media (min-width: 1120px) {
-  #navbar.fixed,#navbar.shadow_bottom {
-    -moz-box-shadow:0px 0px 8px rgba(0,0,0,0.2);
-    -webkit-box-shadow:0px 0px 8px rgba(0,0,0,0.2);
-    box-shadow:0px 0px 8px rgba(0,0,0,0.2)
-  }
-  #navbar.fixed #menuextras li a,#navbar.shadow_bottom #menuextras li a {
-    padding-top:9px;
-    height:50px
-  }
-  #navbar.fixed #menuextras li a span,#navbar.shadow_bottom #menuextras li a span {
-    max-height:0
-  }
-  #navbar.fixed #menuextras li a:before,#navbar.shadow_bottom #menuextras li a:before {
-    font-size:30px
-  }
-  #navbar.fixed #mainmenu li a {
-    height:50px;
-    padding:14px 0.7em
-  }
-  #navbar.fixed #mainmenu li a:hover {
-    border-bottom:4px solid #5caa15
-  }
-  #navbar.fixed .navbar-toggle {
-    padding:13px 14px 9px
-  }
-  #navbar.fixed #menuextras li.navbar-search {
-    padding:0px 0
-  }
-  #navbar.fixed #menuextras ul.menuextraslinks,#navbar.fixed #menuextras ul.menuextraslanguages {
-    display:none
-  }
-  #navbar.fixed .navbar-oneQt:before {
-    font-size:35px;
-    top:7px
-  }
-  #navbar.fixed #mainmenu li.current-menu-item a {
-    border-bottom:4px solid #80C342
-  }
-  .flowListDiv dl.flowList {
-    -webkit-column-count:2;
-    -moz-column-count:2;
-    column-count:2
-  }
-}
-@media (max-width: 1120px) {
-  #navbar {
-    padding:0;
-    position:relative
-  }
-  #navbar .container {
-    max-width:100%
-  }
-  #navbar .menuextraslanguages {
-    bottom:10px !important;
-    right:0
-  }
-  #navbar .menuextraslanguages li a {
-    color:#7fc241 !important
-  }
-  #navbar .menuextraslanguages li.active a,#navbar .menuextraslanguages li a:hover {
-    border-color:#7fc241 !important
-  }
-  #navbar .container {
-    padding:0
-  }
-  #navbar .navbar-toggle {
-    display:block
-  }
-  #navbar .navbar-oneQt,#navbar.fixed .navbar-oneQt,#navbar .navbar-oneQt:hover {
-    margin-left:0;
-    height:26px;
-    width:22px;
-    padding:7px 20px 7px 15px
-  }
-  #navbar .navbar-oneQt:before {
-    left:20px
-  }
-  #navbar .navbar-menu {
-    max-height:0;
-    overflow:hidden;
-    width:100%;
-    border-top:1px solid #eee;
-    -webkit-transition:all 600ms ease-in-out;
-    -moz-transition:all 600ms ease-in-out;
-    -o-transition:all 600ms ease-in-out;
-    transition:all 600ms ease-in-out;
-    position:relative
-  }
-  #mainmenu {
-    float:none;
-    width:100%;
-    padding:0;
-    margin:0
-  }
-  #mainmenu li {
-    float:none;
-    list-style:none
-  }
-  #mainmenu li:nth-child(odd) {
-    background:rgba(0,0,0,0)
-  }
-  #mainmenu li a,#navbar.fixed #mainmenu li a {
-    padding:10px;
-    border-left:3px solid #fff;
-    height:auto;
-    width:100%
-  }
-  #mainmenu li.current-menu-item a,#navbar.fixed #mainmenu li.current-menu-item a {
-    border-bottom:none;
-    border-left:3px solid #5caa15;
-    padding:10px
-  }
-  #mainmenu li a:hover {
-    border-bottom:0;
-    padding:10px;
-    border-left:3px solid #5caa15
-  }
-  #navbar.fixed {
-    -moz-box-shadow:0px 0px 0px rgba(0,0,0,0);
-    -webkit-box-shadow:0px 0px 0px rgba(0,0,0,0);
-    box-shadow:0px 0px 0px rgba(0,0,0,0)
-  }
-  .lt-ie9 #navbar.fixed {
-    border-bottom:none
-  }
-  #menuextras li.navbar-search {
-    padding:5px 0
-  }
-  #footerbar .container {
-    padding:0
-  }
-  body .main {
-    margin-top:0px
-  }
-  #footerbar .footer-main .footer-nav {
-    padding:3.9% 0 3.9% 3%;
-    border-bottom:1px solid #413d3b;
-    float:none;
-    display:block;
-    width:auto
-  }
-  #footerbar .footer-main .theqtcompany {
-    clear:both;
-    float:left;
-    margin:30px 0 28px 3%
-  }
-  #footerbar .footer-main .footer-social {
-    float:left;
-    padding:30px 0px 0px 3%
-  }
-  #footerbar #menu-footer-submenu {
-    clear:both;
-    float:none;
-    display:block;
-    padding:0px 0px 3.9% 3%
-  }
-  ul#menu-footer-submenu {
-    margin-left: 0
-  }
-}
-.in-page-nav {
-  width:100%;
-  background:#eeeeee
-}
-.in-page-nav ul {
-  margin:0 auto;
-  letter-spacing:-0.31em;
-  max-width:1180px;
-  text-align:center
-}
-.in-page-nav ul li {
-  display:inline-block;
-  letter-spacing:normal
-}
-.in-page-nav ul li a {
-  color:#26282a;
-  padding:25px 10px;
-  display:inline-block
-}
-body.qt-account #navbar .navbar-oneQt {
-  width:auto;
-  height:auto
-}
-body.qt-account #navbar .navbar-oneQt:before {
-  left:0;
-  position:relative;
-  display:inline-block;
-  vertical-align:middle;
-  top:0;
-  margin-right:20px
-}
-body.qt-account #navbar .navbar-oneQt h2 {
-  margin:0;
-  color:#000;
-  display:inline-block;
-  vertical-align:middle
-}
-.landing header[role="banner"] {
-  background:#26282a
-}
-.landing header[role="banner"] figure {
-  max-width:1180px;
-  margin:auto;
-  position:relative
-}
-.landing header[role="banner"] figure img {
-  max-width:100%
-}
-.landing header[role="banner"] figcaption {
-  color:#fff;
-  position:absolute;
-  left:0px;
-  width:100%;
-  text-align:center
-}
-.landing header[role="banner"] figcaption.top {
-  top:0
-}
-.landing header[role="banner"] figcaption.bottom {
-  bottom:0
-}
-.landing header[role="banner"] figcaption h1 {
-  margin:50px auto 0 auto;
-  max-width:70%;
-  font-weight:600
-}
-.landing header[role="banner"] figcaption h3 {
-  margin-bottom:40px
-}
-.cookies_yum {
-  background-color:#d6d6d6;
-  display:none;
-  line-height:1.625em;
-  width:100%
-}
-.cookies_yum img {
-  width:25px;
-  top:6px;
-  display:inline-block;
-  position:absolute;
-  left:6px
-}
-.cookies_yum div {
-  margin:0 auto;
-  max-width:1280px;
-  min-height:30px;
-  padding:6px 0px 6px 0px;
-  position:relative
-}
-.cookies_yum p {
-  color:#585a5c;
-  margin:0px;
-  font-size:0.79em;
-  display:inline-block;
-  line-height:1.2;
-  padding:0 30px 0 50px
-}
-.cookies_yum p a {
-  white-space:nowrap
-}
-.cookies_yum a:hover {
-  color:white
-}
-.cookies_yum .close {
-  width:15px;
-  height:15px;
-  background-image:url("cookiebar-x.png");
-  background-size:15px 30px;
-  background-position:top left;
-  cursor:pointer;
-  top:13px;
-  right:13px;
-  position:absolute;
-  transition:none;
-}
-#sidebar-toggle,#toc-toggle {
-  width:24px;
-  height:14px;
-  background-size:24px 28px;
-  cursor:pointer;
-  background-image:url("list_expand.png");
-  float:right
-}
-#sidebar-toggle.collapsed,
-#toc-toggle.collapsed {
-  background-position:bottom left
-}
-#sidebar-content > h2 {
-  display:none
-}
-.cookies_yum .close:hover {
-  background-position:bottom left
-}
-#bottom_header {
-  display:block;
-  position:absolute;
-  width:100%;
-  z-index:50;
-  padding-top:15px
-}
-#bottom_header .container {
-  overflow:visible
-}
-#bottom_header .left {
-  font-weight:bolder
-}
-#bottom_header a {
-  color:white;
-  transition-duration:0.3s
-}
-#bottom_header .left a:hover {
-  padding-left:10px
-}
-.fixed .menuextraslanguages {
-  opacity:0;
-  visibility:hidden
-}
-@media (max-width: 1120px) {
-  .fixed .menuextraslanguages {
-    opacity:1 !important;
-    visibility:visible !important
-  }
-}
-#navbar .menuextraslanguages {
-  position:absolute;
-  right:0;
-  bottom:-35px;
-  transition:all 0.2s ease-in-out;
-  -webkit-transition:all 0.2s ease-in-out;
-  -moz-transition:all 0.2s ease-in-out;
-  -ms-transition:all 0.2s ease-in-out;
-  -o-transition:all 0.2s ease-in-out
-}
-#navbar .menuextraslanguages li {
-  display:inline;
-  list-style:none;
-  margin-left:3px;
-  padding:0px 4px;
-  font-size:0.6875em
-}
-#navbar .menuextraslanguages li.dark a {
-  color:#868482
-}
-#navbar .menuextraslanguages li.dark a:hover {
-  border:2px solid #868482
-}
-#navbar .menuextraslanguages li.active.dark a {
-  border-color:#868482;
-  color:#868482
-}
-#navbar .menuextraslanguages a {
-  color:#fff;
-  padding:2px 4px;
-  border:2px solid transparent
-}
-#navbar .menuextraslanguages a:hover,#navbar .menuextraslanguages li.active a {
-  border:2px solid #fff;
-  color:#fff
-}
-#bottom_header .dark,#bottom_header .dark.active {
-  color:#868482;
-  transition-duration:0.3s;
-  border-color:#868482 !important
-}
-#navbar .big_bar {
-  width:100%;
-  height:100px;
-  background-color:#80C342;
-  display:none;
-  position:relative
-}
-#navbar .big_bar.search {
-  height:auto;
-  overflow:hidden;
-  display:none
-}
-#navbar .big_bar ::-webkit-input-placeholder {
-  color:#fff
-}
-#navbar .big_bar :-moz-input-placeholder {
-  color:#fff
-}
-#navbar .big_bar ::-moz-input-placeholder {
-  color:#fff
-}
-#navbar .big_bar :-ms-input-placeholder {
-  color:#fff
-}
-#navbar .big_bar:hover>div .big_bar_button.account {
-  background-position:right bottom
-}
-#navbar .big_bar.account h1 {
-  padding-top:20px
-}
-#navbar .big_bar.account h1,#navbar .big_bar.account h1 a {
-  color:#FFF;
-  margin-bottom:5px
-}
-#navbar .big_bar.account h1 a:hover {
-  color:#328930
-}
-#navbar .big_bar_button:hover {
-  background-position:left bottom;
-  cursor:pointer
-}
-#navbar .big_bar_button.account {
-  background-position:right top
-}
-#navbar .big_bar input.big_bar_search {
-  background:none repeat scroll 0 0 transparent;
-  border:medium none;
-  color:#fff;
-  display:block;
-  float:left;
-  font-size:4em;
-  outline:0 none;
-  width:70%;
-  line-height:1.3;
-  height:auto;
-  margin:10px 5%;
-  padding:0;
-  box-sizing:border-box;
-  -webkit-box-sizing:border-box;
-  -moz-box-sizing:border-box;
-  *behavior:url(boxsizing.htc)
-}
-#navbar .big_bar_button {
-  background-color:transparent;
-  border:none;
-  width:18%;
-  transition-duration:0.3s;
-  display:block;
-  float:left;
-  position:relative;
-  font-family:'QT Icons';
-  font-size:3.5em;
-  color:#fff;
-  margin:15px 2% 0 0 !important;
-  text-align:right;
-  padding-right:2px !important;
-  transition:all 0.2s ease-in-out;
-  -webkit-transition:all 0.2s ease-in-out;
-  -moz-transition:all 0.2s ease-in-out;
-  -ms-transition:all 0.2s ease-in-out;
-  -o-transition:all 0.2s ease-in-out
-}
-#navbar .big_bar_button:focus,#navbar .big_bar_button:hover {
-  outline:0;
-  color:#ebebeb
-}
-.hero_slide>div {
-  width:80%;
-  margin:0 auto
-}
-.hero_slide>div:first-child>div {
-  width:80%;
-  margin:0 auto
-}
-.hero_slide .content {
-  margin-top:70px
-}
-.hero_bar {
-  padding-top:50px;
-  padding-bottom:18px
-}
-.hero_bar p {
-  font-size:0.875em;
-  text-align:center
-}
-.hero_bar .arrow {
-  bottom:65px;
-  display:block;
-  margin:0 auto;
-  position:relative;
-  right:260px;
-  width:230px
-}
-.hero_bar .comment {
-  margin:0
-}
-#footerbar {
-  background:#26282a;
-  color:#fff
-}
-#footerbar.fixed {
-  bottom:0;
-  left:0;
-  width:100%
-}
-#footerbar .footer-nav {
-  display:inline;
-  float:left
-}
-#footerbar .footer-main .footer-nav li {
-  float:left;
-  margin-right:1em
-}
-#footerbar .footer-main .footer-nav li a {
-  display:block;
-  padding:31px 10px 15px 0;
-  line-height:20px;
-  height:20px;
-  color:#d6d6d6
-}
-#footerbar .footer-main .footer-nav li a:hover,#footerbar .footer-main .footer-nav li.current-menu-item a {
-  color:#eee
-}
-#footerbar .footer-main .footer-nav .sub-menu {
-  margin-left:0;
-  margin-bottom:0
-}
-#footerbar .footer-main .footer-nav .sub-menu li {
-  float:none
-}
-#footerbar .footer-main .footer-nav .sub-menu ul {
-  padding:1px 1em;
-  font-size:0.786em;
-  line-height:8px;
-  float:none;
-  color:#5d5b59;
-  margin-bottom:0
-}
-#footerbar .footer-main .footer-nav .sub-menu li a {
-  padding:1px 0;
-  font-size:0.786em;
-  line-height:8px;
-  float:none;
-  color:#d6d6d6
-}
-#footerbar .footer-main .footer-nav .sub-menu li a:hover,#footerbar .footer-main .footer-nav .sub-menu li.current-menu-item a {
-  color:#eee
-}
-#footerbar .theqtcompany {
-  background:url("theqtcompany.png") no-repeat;
-  background-size:100%;
-  width:215px;
-  height:68px;
-  display:inline;
-  float:right;
-  margin:29px 0 28px 30px
-}
-#footerbar .footer-social {
-  display:inline;
-  float:right;
-  padding-top:31px;
-  width:164px
-}
-#footerbar .footer-main .footer-social>div {
-  margin-left:0.1em;
-  margin-bottom:10px
-}
-#footerbar .disclaimer {
-  font-size:0.786em;
-  line-height:2.73;
-  color:#868584;
-  padding-top:20px;
-  padding-bottom:0.5%
-}
-#footerbar .disclaimer a {
-  color:#bdbebf
-}
-#footerbar .disclaimer a:hover {
-  color:#d6d6d6
-}
-#footerbar .disclaimer ul li {
-  float:left;
-  vertical-align:middle;
-  margin-left:1.18em
-}
-#footerbar .disclaimer ul li:first-child {
-  margin-left:0
-}
-#footerbar .disclaimer ul.lang-selector a {
-  color:#506a34;
-  color:rgba(128,195,66,0.3)
-}
-#footerbar .disclaimer ul.lang-selector a:hover {
-  color:#80c342;
-  color:rgba(128,195,66,0.7)
-}
-#menu-footer-menu, #menu-footer-menu ul {
-  margin-left:0;
-  margin-bottom:0
-}
-@font-face {
-  font-family:'Open Sans';
-  font-style:normal;
-  font-weight:300;
-  src:local("Open Sans Light"),local("OpenSans-Light"),url(//fonts.gstatic.com/s/opensans/v10/DXI1ORHCpsQm3Vp6mXoaTYnF5uFdDttMLvmWuJdhhgs.ttf) format("truetype")
-}
-@font-face {
-  font-family:'Open Sans';
-  font-style:normal;
-  font-weight:400;
-  src:local("Open Sans"),local("OpenSans"),url(//fonts.gstatic.com/s/opensans/v10/cJZKeOuBrn4kERxqtaUH3aCWcynf_cDxXwCLxiixG1c.ttf) format("truetype")
-}
-@font-face {
-  font-family:'Open Sans';
-  font-style:normal;
-  font-weight:600;
-  src:local("Open Sans Semibold"),local("OpenSans-Semibold"),url(//fonts.gstatic.com/s/opensans/v10/MTP_ySUJH_bn48VBG8sNSonF5uFdDttMLvmWuJdhhgs.ttf) format("truetype")
-}
-@font-face {
-  font-family:'Open Sans';
-  font-style:normal;
-  font-weight:700;
-  src:local("Open Sans Bold"),local("OpenSans-Bold"),url(//fonts.gstatic.com/s/opensans/v10/k3k702ZOKiLJc3WVjuplzInF5uFdDttMLvmWuJdhhgs.ttf) format("truetype")
-}
-@font-face {
-  font-family:'Open Sans';
-  font-style:normal;
-  font-weight:800;
-  src:local("Open Sans Extrabold"),local("OpenSans-Extrabold"),url(//fonts.gstatic.com/s/opensans/v10/EInbV5DfGHOiMmvb1Xr-honF5uFdDttMLvmWuJdhhgs.ttf) format("truetype")
-}
-@font-face {
-  font-family:'Droid Sans Mono';
-  font-style:normal;
-  font-weight:400;
-  src:local("Droid Sans Mono"),local("DroidSansMono"),url(//fonts.gstatic.com/s/droidsansmono/v7/ns-m2xQYezAtqh7ai59hJUYuTAAIFFn5GTWtryCmBQ4.woff) format("woff")
-}
-@font-face {
-  font-family:'Qt Icons';
-  src:url("../style/icomoon.eot?-tgjuoj");
-  src:url("../style/icomoon.eot?#iefix-tgjuoj") format("embedded-opentype"),url("../style/icomoon.woff?-tgjuoj") format("woff"),url("../style/icomoon.ttf?-tgjuoj") format("truetype"),url("../style/icomoon.svg?-tgjuoj#icomoon") format("svg");
-  font-weight:normal;
-  font-style:normal
-}
-.clearfix:before,.clearfix:after {
-  content:" ";
-  display:table
-}
-.clearfix:after {
-  clear:both
-}
-.clearfix {
-  *zoom:1
-}
-.clearfix .right {
-  float:right
-}
-html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video {
-  margin:0;
-  padding:0;
-  border:0;
-  font-size:100%
-}
-html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,caption,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video {
-  vertical-align:baseline
-}
-body {
-  font-family:“Open Sans”, Arial, Helvetica, sans-serif;
-  line-height:1.5;
-  font-weight:400
-}
-h1,h2,h3,h4,h5,h6 {
-  font-weight:300
-}
-.context h2,.context h3,.context h4,.context h5,.context h6 {
-  margin:1.5em 0 1em
-}
-.context h1 {
-  margin-bottom:1em;
-  font-size:3.125em
-}
-.context h3.fn,.context h3.flags {
-  color:#26282a;
-  font-size:1.46em;
-  padding:15px 0 15px 0;
-  border-bottom:2px #eee solid;
-  word-wrap:break-word
-}
-.context h3.fn .name,
-.context h3 span.type,
-.qmlname span.name {
-  font-weight: 400
-}
-.qmlname {
-  font-size:1.46em
-}
-.qmlproto table {
-  border:none;
-  border-bottom:2px #eee solid
-}
-.qmlproto table p {
-  max-width:100%
-}
-.qmlproto table tr {
-  background-color:#fff
-}
-.qmlname td, .qmlname th {
-  border:none;
-  text-align:left;
-  padding:5px 0 0 0
-}
-.qmlreadonly,.qmldefault {
-  padding:0 5px 0 5px;
-  font-size:0.75em;
-  background-color:#eee;
-  float:right
-}
-.qmlreadonly {
-  color:#414141
-}
-.qmldefault {
-  color:#D14141
-}
-.rightAlign {
-  padding:3px 5px 3px 10px;
-  text-align:right
-}
-article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section {
-  display:block
-}
-body {
-  line-height:1;
-  font-family:"Open Sans", Arial, Helvetica, sans-serif;
-  transition-duration:1s
-}
-ol,ul {
-  list-style:none
-}
-.context ol,.context ul {
-  margin-top:0.75em;
-  margin-left:20px
-}
-
-.context ol > li {
-  margin-left: 20px
-}
-
-.mainContent ol>li {
-  list-style-type: decimal;
-}
-
-.mainContent ol.a >li {
-  list-style-type: lower-alpha;
-}
-
-.mainContent ol.A >li {
-  list-style-type: upper-alpha;
-}
-
-blockquote,q {
-  quotes:none
-}
-blockquote:before,blockquote:after,q:before,q:after {
-  content:'';
-  content:none;
-  width:100%
-}
-table {
-  border-collapse:collapse;
-  border-spacing:0;
-  margin-bottom:25px;
-  width:100%
-}
-a {
-  color:#5caa15;
-  text-decoration:none;
-  transition-duration:0.3s
-}
-a:hover {
-  color:#46a2da
-}
-.main,.navbar-header,#footerbar>div {
-  max-width:1280px;
-  width:95%;
-  margin:0 auto
-}
-.main {
-  margin-top:100px
-}
-.main_index {
-  background-color:#fff
-}
-.sectionlist {
-  margin-bottom:2em
-}
-[class*="col-"] {
-  letter-spacing:normal
-}
-.landing,.main_index .row {
-  letter-spacing:-0.31em
-}
-.main_index .row>div {
-  letter-spacing:normal
-}
-.col-1,.context {
-  width:80%;
-  display:inline-block;
-  background-color:#fff;
-  padding:35px;
-  -webkit-box-sizing:border-box;
-  -moz-box-sizing:border-box;
-  -ms-box-sizing:border-box;
-  box-sizing:border-box
-}
-.col-1 h2 {
-  font-size:2.1875em;
-  font-weight:300;
-  line-height:1.1;
-  margin-bottom:0.83em;
-  margin-top:1em
-}
-.icons1of3 img {
-  display:inline-block;
-  float:left;
-  margin-right:0.75em;
-  margin-top:-5px;
-  width:2.75em
-}
-div.multi-column {
-  position:relative
-}
-div.multi-column div {
-  display:-moz-inline-box;
-  display:inline-block;
-  vertical-align:top;
-  margin-top:1em;
-  margin-right:2em;
-  width:16em
-}
-.sidebar {
-  display:block;
-  float:right;
-  -webkit-box-sizing:border-box;
-  -moz-box-sizing:border-box;
-  -ms-box-sizing:border-box;
-  box-sizing:border-box;
-  width:20%;
-  padding-left:30px
-}
-.toc,.sectionlist {
-  padding:35px;
-  background-color:#fff;
-  margin-bottom:2em
-}
-.sidebar-content:empty {
-  display:none;
-  visibility:hidden
-}
-.col-2 h2,.toc h3,.sidebar-content h2,.sidebar-content h3,.sectionlist h2 {
-  font-weight:400;
-  margin-bottom:2em
-}
-.toc h3 a {
-  color:#404244
-}
-.title {
-  font-size:3em;
-  font-weight:300;
-  letter-spacing:-1px;
-  line-height:1.15em;
-  margin-bottom:0.5em;
-  word-wrap:break-word
-}
-.navigationbar,col-1 h2 {
-  font-size:0.75em
-}
-.navigationbar h1 {
-  font-size:3.125em;
-  margin-bottom:1em;
-  margin-top:1em
-}
-.navigationbar li {
-  display:inline-block;
-  margin-right:5px;
-  position:relative;
-  padding-right:10px;
-  color:#585a5c
-}
-.navigationbar li a {
-  color:#58585c
-}
-body {
-  background-color:#eee;
-  color:#404244
-}
-.sectionlist li {
-  margin-bottom:5px
-}
-dd {
-  padding-bottom:0.25em;
-  padding-left:2em
-}
-.col-1 ul {
-  margin-bottom:1.56em
-}
-.mainContent li {
-  margin-top:0.8em;
-  line-height:1.25em
-}
-.mainContent li.level2 {
-  margin-left:10px;
-  margin-top:0.4em;
-  font-size:0.9375em;
-  line-height:1.15em;
-}
-.mainContent p {
-  line-height:1.56em;
-  margin-bottom:1.5em;
-  color:#404244;
-  max-width:85%
-}
-.mainContent b {
-  font-weight:600
-}
-.context ul,.context ol {
-  margin-bottom:1.5em
-}
-.mainContent ul ul {
-  margin-top:0.5em
-}
-.mainContent .naviNextPrevious {
-  margin-top:25px;
-  max-width:100%
-}
-.naviNextPrevious.headerNavi {
-  display:none
-}
-.nextPage {
-  float:right
-}
-.prevPage:before {
-  content:"< "
-}
-.nextPage:after {
-  content:" >"
-}
-.navigationbar li:after {
-  color:#404244;
-  content:"›";
-  display:inline-block;
-  font-size:1.5em;
-  line-height:1;
-  position:absolute;
-  right:-2px;
-  top:-4px
-}
-.navigationbar ul:last li a {
-  color:#80c342
-}
-.sub-navigation {
-  margin-top:10px
-}
-.navigationbar li:last-child:after,.sub-navigation li:after {
-  content:none
-}
-.navigationbar {
-  margin-bottom:10px
-}
-#buildversion {
-  font-style:italic;
-  font-size:small;
-  float:right
-}
-.copy-notice {
-  width:65%;
-  font-size:0.75em;
-  margin-top:50px;
-  margin-bottom:25px;
-  line-height:1.75em;
-  color:#585a5c
-}
-li a.active {
-  color:#585a5c
-}
-.flowList {
-  padding:25px
-}
-.flowListDiv dl {
-  -webkit-column-count:1;
-  -moz-column-count:1;
-  column-count:1
-}
-.flowList dd {
-  display:inline-block;
-  margin-left:10px;
-  width:90%;
-  line-height:1.15em;
-  overflow-x:hidden;
-  text-overflow:ellipsis
-}
-.alphaChar {
-  font-size:2em;
-  position:absolute
-}
-.flowList.odd {
-  background-color:#f9f9f9
-}
-.context ul>li,.doc-column ul>li {
-  list-style-image:url("list_arrow.png");
-  margin-left:15px;
-  color:#404244;
-  line-height:1.16em
-}
-.mainContent table p {
-  margin:0px;
-  padding:0px;
-  max-width:initial;
-  min-height:2em
-}
-.mainContent table p.centerAlign {
-  text-align:center
-}
-.context h2 {
-  font-size:2.1875em
-}
-.context h3 {
-  font-size:1.75em
-}
-.context h4 {
-  font-size:1.375em
-}
-.context p img {
-  margin-top:0.75em;
-  max-width:100%
-}
-.context table {
-  vertical-align:initial
-}
-table .odd {
-  background-color:#f9f9f9
-}
-table thead {
-  text-align:left;
-  padding-left:20px
-}
-table,table td,table th {
-  border:1px solid #eee
-}
-table td,table th {
-  padding:5px 20px;
-  line-height:1.3
-}
-table.alignedsummary,table.propsummary {
-  width:initial
-}
-table.valuelist td.tblval {
-  font-size:0.75em
-}
-div.main_index .row {
-  border-bottom:1px solid #eee
-}
-div.main_index .row {
-  position:relative
-}
-div.main_index .row>div {
-  display:inline-block;
-  width:50%;
-  vertical-align:top;
-  padding:50px;
-  -webkit-box-sizing:border-box;
-  -moz-box-sizing:border-box;
-  -ms-box-sizing:border-box;
-  box-sizing:border-box
-}
-div.main_index h2 {
-  font-size:2.1875em;
-  margin-bottom:1em
-}
-#search_bar {
-  width:40%;
-  float:right
-}
-div.main_index .row:after {
-  content:"";
-  position:absolute;
-  top:0;
-  right:50%;
-  height:100%;
-  width:1px;
-  background-color:#eee
-}
-div.table {
-  overflow-x:auto
-}
-.context tr > td > pre {
-  font-size:0.85em
-}
-p.qt_commercial {
-  border:3px solid #5caa15;
-  margin:0 auto;
-  padding:15px;
-  width:28%;
-  text-align:center;
-  clear:both
-}
-h1.qt_commercial {
-  padding:20px;
-  background-color:#5caa15;
-  display:inline;
-  float:right;
-  font-size:1.25em;
-  line-height:1.25em;
-  height:1.25em;
-  color:#fff
-}
-div.qt_commercial {
-  border-top:5px solid #5caa15;
-  margin-bottom:50px
-}
-pre, .LegaleseLeft {
-  background-color:#404244;
-  color:#fff;
-  display:block;
-  font-family:"Droid Sans Mono";
-  line-height:1.5;
-  overflow-x:auto;
-  margin-bottom:25px;
-  padding:25px;
-  margin-top:0.75em
-}
-.mainContent .LegaleseLeft p {
-  color:#fff;
-  white-space: pre-wrap
-}
-.copy_text {
-  background-color:#46a2da;
-  color:#fff;
-  border:2px solid #46a2da;
-  padding:10px 16px;
-  margin-left:-10px;
-  margin-top:-50px;
-  position:absolute;
-  opacity:0;
-  cursor:pointer;
-  float:right
-}
-.copy_text:hover {
-  background-color:#fff;
-  color:#46a2da
-}
-code,.codelike {
-  font-family:"Droid Sans Mono"
-}
-h3.fn code {
-  font-size:0.75em;
-  float:right;
-  background-color:#eee;
-  padding:3px;
-  margin: 3px 0 0 20px
-}
-pre:hover>.copy_text {
-  display:inline-block;
-  opacity:1;
-  transition:0.5s ease
-}
-#main_title_bar {
-  letter-spacing:-0.31em
-}
-#main_title_bar .search_bar {
-  letter-spacing:normal;
-  width:50%;
-  display:inline-block;
-  -webkit-box-sizing:border-box;
-  -moz-box-sizing:border-box;
-  -ms-box-sizing:border-box;
-  box-sizing:border-box;
-  vertical-align:middle
-}
-#main_title_bar h1 {
-  letter-spacing:normal;
-  width:50%;
-  display:inline-block;
-  -webkit-box-sizing:border-box;
-  -moz-box-sizing:border-box;
-  -ms-box-sizing:border-box;
-  box-sizing:border-box;
-  vertical-align:middle
-}
-#main_title_bar .search_bar * {
-  letter-spacing:normal;
-  padding:0;
-  margin:0;
-  border:none
-}
-#sidebar-toggle,#toc-toggle {
-  display:none
-}
-@media (max-width: 980px) {
-  body {
-    font-size:calc-em(14px)
-  }
-  #main_title_bar {
-    letter-spacing:-0.31em;
-    width:100%
-  }
-  #main_title_bar>h1,#main_title_bar .search_bar {
-    display:block;
-    width:100%
-  }
-  #main_title_bar .search_bar {
-    margin-bottom:15px
-  }
-  .main {
-    margin-top:0px
-  }
-  .main_index .row {
-    border:none !important
-  }
-  .title {
-    font-size:1.5em;
-    font-weight:400;
-    word-wrap:break-word
-  }
-  .col-1,.context,.naviNextPrevious,.sidebar {
-    padding:10px
-  }
-  .sidebar {
-    padding-top:0
-  }
-  .search .sidebar {
-    display:none;
-    visibility:hidden
-  }
-  .col-2 h2,.toc h3,.sidebar-content h2,.sidebar-content h3,.sectionlist h2 {
-    text-align:center;
-    margin-bottom:0
-  }
-  div.main_index .row:after {
-    content:none
-  }
-  div.main_index .row>div {
-    display:block !important;
-    width:100%;
-    padding:0;
-    margin:0
-  }
-  .context,.sidebar,.col-1 {
-    width:100%
-  }
-  .main_index h2,h1 {
-    text-align:center
-  }
-  .context h4,.context h3,.context h2 {
-    text-align:center
-  }
-  .sidebar-content,.col-2,.toc {
-    background-color:#fff;
-    margin-bottom:1em;
-    padding:20px
-  }
-  #sidebar-toggle,#toc-toggle {
-    display:block
-  }
-  #sidebar-toggle.collapsed + h2 {
-    display:block
-  }
-  .mainContent p {
-    line-height:1.56em;
-    margin-bottom:1em;
-    max-width:100%
-  }
-  table td,table th {
-    padding:5px 5px
-  }
-  .sectionlist {
-    padding:0
-  }
-}
-[id]:target,[name]:target,[name]:target+* {
-  -webkit-animation:highlighter 3s;
-  animation:highlighter 3s
-}
-@-webkit-keyframes highlighter {
-  25% {
-    background-color:#d1e8f6;
-    color:#444
-  }
-  75% {
-    background-color:#d1e8f6;
-    color:#444
-  }
-}
-@keyframes highlighter {
-  25% {
-    background-color:#d1e8f6;
-    color:#444
-  }
-  75% {
-    background-color:#d1e8f6;
-    color:#444
-  }
-}
-@-webkit-keyframes copypaste {
-  25% {
-    opacity:1
-  }
-  100% {
-    border-radius:10px;
-    margin-top:-50px;
-    opacity:1
-  }
-}
-@keyframes copypaste {
-  25% {
-    opacity:1
-  }
-  100% {
-    border-radius:10px;
-    margin-top:-50px;
-    opacity:1
-  }
-}
-#footer {
-  clear:both
-}
-.menuextraslanguages {
-  display:none;
-  visibility:hidden
-}
-form.gsc-search-box {
-  font-size: 25px !important;
-  margin-top: 0 !important;
-  margin-right: 0 !important;
-  margin-bottom: 4px !important;
-  margin-left: 0 !important;
-  width: 100% !important;
-}
-table.gsc-search-box {
-  border-style: none !important;
-  border-width: 0 !important;
-  border-spacing: 0 0 !important;
-  width: 100% !important;
-  margin-bottom: 2px !important;
-}
-
-table.gsc-search-box td {
-  vertical-align: middle !important;
-}
-
-table.gsc-search-box td.gsc-input {
-  padding-right: 0px !important;
-}
-table.gsc-search-box td.gsc-input input {
-  background-position: 15px center !important;
-}
-
-td.gsc-search-button {
-  width: 1% !important;
-}
-
-td.gsc-clear-button {
-  width: 14px !important;
-  visibility:hidden !important;
-  display:none !important;
-}
-table.gsc-branding td,
-table.gsc-branding {
-  margin: 0 0 0 0 !important;
-  padding: 0 0 0 0 !important;
-  border: none !important;
-}
-
-table.gsc-branding {
-  border-style: none !important;
-  border-width: 0 !important;
-  border-spacing: 0 0 !important;
-  width: 100% !important;
-}
-
-.gsc-branding-text {
-  color: #676767 !important;
-}
-
-td.gsc-branding-text {
-  vertical-align: top !important;
-}
-td.gsc-branding-text div.gsc-branding-text {
-  padding-bottom: 2px !important;
-  text-align: right !important;
-  font-size: 11px !important;
-  margin-right: 2px !important;
-}
-
-td.gsc-branding-img {
-  width: 65px !important;
-  vertical-align: bottom !important;
-}
-
-img.gsc-branding-img {
-  padding-top: 1px !important;
-  margin: 0 0 0 0 !important;
-  padding-right: 0 !important;
-  padding-left: 0 !important;
-  padding-bottom: 0 !important;
-  border: none !important;
-  display: inline !important;
-}
-
-input.gsc-search-button {
-  background-color: white !important;
-  height: 35px !important;
-  width: 25px !important;
-  color: transparent !important;
-  background-image: url("doc_search.png") !important;
-  background-size: 25px auto;
-  background-position: 0px 5px;
-  background-repeat: no-repeat;
-  margin-left: -43px !important;
-  overflow: hidden;
-  min-width: 20px !important;
-}
-
-input.gsc-search-button:hover {
-  cursor: pointer;
-}
-
-input.gsc-search-button:focus {
-  outline: none;
-  box-shadow: none;
-}
-
-.gsc-search-box-tools .gsc-clear-button {
-  display: none !important;
-  visibility: none !important;
-}
-
-.gsc-overflow-hidden {
-  overflow: hidden !important;
-}
-
-input.gsc-input {
-  background-color: #fff !important;
-  border: 1px solid #d6d6d6 !important;
-  border-radius: 5px !important;
-  box-sizing: border-box !important;
-  -moz-box-sizing: border-box !important;
-  color: #868482 !important;
-  outline: 0 none !important;
-  padding: 9px 10px 10px !important;
-  transition: color 0.5s ease 0s, box-shadow 0.5s ease 0s, background-color 0.5s ease 0s !important;
-}
-
-input {
-  font-family: 'Open Sans', Arial, Helvetica, sans-serif !important;
-  line-height: 1.5 !important;
-  font-weight: 300 !important;
-  vertical-align:middle
-}
-
-input:focus {
-  border-color: #46a2da;
-  box-shadow: 0 0 5px #46a2da;
-  color: #000;
-}
-
-a.qa-mark:target:before {
-  content: "***";
-  color: #ff0000;
-}
-
diff --git a/qdoc/global/template/style/theqtcompany.png b/qdoc/global/template/style/theqtcompany.png
deleted file mode 100644
index fee3d26f3d1230ff2e535ae4ec9e07debeb1b118..0000000000000000000000000000000000000000
Binary files a/qdoc/global/template/style/theqtcompany.png and /dev/null differ
diff --git a/qdoc/src/templateclass-index.qdoc b/qdoc/src/templateclass-index.qdoc
deleted file mode 100644
index c5d892b280e13e4310fac80eefa9be847ef73dcf..0000000000000000000000000000000000000000
--- a/qdoc/src/templateclass-index.qdoc
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
-
-\page templateclass-index.html
-
-\title templateclass
-
-\l {templateclass C++ Classes}
-
-*/
diff --git a/qdoc/src/templateclass.qdoc b/qdoc/src/templateclass.qdoc
deleted file mode 100644
index fd951fdde08c34feb1cb68472467c7c6895f75da..0000000000000000000000000000000000000000
--- a/qdoc/src/templateclass.qdoc
+++ /dev/null
@@ -1,4 +0,0 @@
-/*!
-    \module templateclass
-    \title templateclass C++ Classes
-*/
diff --git a/qdoc/topikm6-templateclass-qdoc.pro b/qdoc/topikm6-templateclass-qdoc.pro
deleted file mode 100644
index 4d09148c666b248cce1dfb4e07bd0fbc2f78354a..0000000000000000000000000000000000000000
--- a/qdoc/topikm6-templateclass-qdoc.pro
+++ /dev/null
@@ -1,39 +0,0 @@
-TEMPLATE = aux
-
-TargetName=templateclass
-
-HELPGENERATOR = $$shell_path($$[QT_INSTALL_BINS]/qhelpgenerator)
-QDOC_BIN = $$shell_path($$[QT_INSTALL_BINS]/qdoc)
-QDOC_GLOBAL = QT_INSTALL_DOCS=$$[QT_INSTALL_DOCS]/src
-QDOC_INDEX_DIR=$$[QT_INSTALL_DOCS]
-
-QHP_FILE = $$PWD/html/$${TargetName}.qhp
-QCH_FILE = $$PWD/$${TargetName}.qch
-
-doc_generate.TARGET = $$TargetName.qhp
-doc_generate.commands = $$QDOC_BIN $$PWD/config/doc.qdocconf -indexdir $${QDOC_INDEX_DIR}
-qch_docs.TARGET=$$TargetName.qch
-qch_docs.commands = $$HELPGENERATOR -o $$QCH_FILE $$QHP_FILE
-qch_docs.depends += doc_generate
-
-QMAKE_EXTRA_TARGETS += doc_generate qch_docs
-
-PRE_TARGETDEPS += qch_docs
-
-DISTFILES += \
-    config/doc.qdocconf \
-    global/compat.qdocconf \
-    global/config.qdocconf \
-    global/externalsites.qdocconf \
-    global/fileextensions.qdocconf \
-    global/html-config.qdocconf \
-    global/html-footer.qdocconf \
-    global/html-header-offline.qdocconf \
-    global/macros.qdocconf \
-    global/manifest-meta.qdocconf \
-    global/qt-cpp-defines.qdocconf \
-    global/qt-html-templates-offline-simple.qdocconf \
-    global/qt-html-templates-offline.qdocconf \
-    global/qt-module-defaults-offline.qdocconf \
-    src/templateclass.qdoc \
-    src/templateclass-index.qdoc
diff --git a/sincpm.json b/sincpm.json
index eda09dad6e54ee63de451e4686acb3595d224624..8146e7663155e59ed086733a4b5e9a4d78aed44d 100644
--- a/sincpm.json
+++ b/sincpm.json
@@ -1,7 +1,7 @@
 [
   {
-    "name": "topikm6-templateclass",
-    "version": "1.2.8",
+    "name": "topikm6-topsys",
+    "version": "6.1.63",
     "os": "windows",
     "arch": "x86",
     "compiler": "msvc2015",
@@ -9,25 +9,28 @@
     "noqt": false,
     "devDependencies": {
       "topikm6-frame": "^6.0.0",
-	  "topikm6-topsys": "^6.1.0"
+      "topikm6-templateclass": "^1.0.0"
     },
     "prefix": "dist/topikm/qt5.6.3-win32-msvc2015/",
     "dist_comment": "The following dist is written like this for compatibility with the topikm6 directory structure.",
     "dist": "dist/topikm/qt5.6.3-win32-msvc2015/",
     "dependencies": {
-      "topikm6-frame": "^6.0.0"
+      "topikm6-frame": "^6.0.0",
+      "topikm6-templateclass": "^1.0.0"
     },
     "packageFiles": [
-      "/bin/plugins/toptemplateclassplugin.dll",
-      "/bin/plugins/toptemplateclassplugin.lib",
-      "/bin/plugins/toptemplateclassplugin.pdb",
-      "/language/toptemplateclass_zhcn.qm",
-      "/language/toptemplateclass_zhtw.qm"
+      "/bin/plugins/topikm6-topsys-plugin.dll",
+      "/bin/plugins/topikm6-topsys-plugin.lib",
+      "/bin/plugins/topikm6-topsys-plugin.pdb",
+      "/language/topikm6_topsys_en.qm",
+      "/language/topikm6_topsys_zhcn.qm",
+      "/language/topikm6_topsys_zhtw.qm",
+      "/resource/res/topsys.rcc"
     ]
   },
   {
-    "name": "topikm6-templateclass",
-    "version": "1.2.8",
+    "name": "topikm6-topsys",
+    "version": "6.1.63",
     "os": "linux",
     "arch": "x64",
     "compiler": "gcc",
@@ -35,23 +38,26 @@
     "noqt": false,
     "devDependencies": {
       "topikm6-frame": "^6.0.0",
-      "topikm6-topsys": "^6.1.0"
+      "topikm6-templateclass": "^1.0.0"
     },
     "prefix": "dist/topikm/qt5.6.3-linuxx86_64/",
     "dist_comment": "The following dist is written like this for compatibility with the topikm6 directory structure.",
     "dist": "dist/topikm/qt5.6.3-linuxx86_64/",
     "dependencies": {
-      "topikm6-frame": "^6.0.0"
+      "topikm6-frame": "^6.0.0",
+      "topikm6-templateclass": "^1.0.0"
     },
     "packageFiles": [
-      "/bin/libtoptemplateclassplugin.so",
-      "/language/toptemplateclass_zhcn.qm",
-      "/language/toptemplateclass_zhtw.qm"
+      "/bin/libtopikm6-topsys-plugin.so",
+      "/language/topikm6_topsys_en.qm",
+      "/language/topikm6_topsys_zhcn.qm",
+      "/language/topikm6_topsys_zhtw.qm",
+      "/resource/res/topsys.rcc"
     ]
   },
   {
-    "name": "topikm6-templateclass-debug",
-    "version": "1.2.8",
+    "name": "topikm6-topsys-debug",
+    "version": "6.1.63",
     "os": "windows",
     "arch": "x86",
     "compiler": "msvc2015",
@@ -59,21 +65,23 @@
     "noqt": false,
     "devDependencies": {
       "topikm6-frame-debug": "^6.0.0",
-      "topikm6-topsys-debug": "^6.1.0",
-      "topikm6-stackup-viewer-debug": "^1.0.0"
+      "topikm6-templateclass-debug": "^1.0.0"
     },
     "prefix": "dist/topikm/qt5.6.3-win32-msvc2015/",
     "dist_comment": "The following dist is written like this for compatibility with the topikm6 directory structure.",
     "dist": "dist/topikm/qt5.6.3-win32-msvc2015/",
     "dependencies": {
-      "topikm6-frame-debug": "^6.0.0"
+      "topikm6-frame-debug": "^6.0.0",
+      "topikm6-templateclass-debug": "^1.0.0"
     },
     "packageFiles": [
-      "/bin_dbg/plugins/toptemplateclassplugind.dll",
-      "/bin_dbg/plugins/toptemplateclassplugind.lib",
-      "/bin_dbg/plugins/toptemplateclassplugind.pdb",
-      "/language/toptemplateclass_zhcn.qm",
-      "/language/toptemplateclass_zhtw.qm"
+      "/bin_dbg/plugins/topikm6-topsys-plugind.dll",
+      "/bin_dbg/plugins/topikm6-topsys-plugind.lib",
+      "/bin_dbg/plugins/topikm6-topsys-plugind.pdb",
+      "/language/topikm6_topsys_en.qm",
+      "/language/topikm6_topsys_zhcn.qm",
+      "/language/topikm6_topsys_zhtw.qm",
+      "/resource/res/topsys.rcc"
     ]
   }
 ]
\ No newline at end of file
diff --git a/demo/examples/templatemain/appicon.rc b/src/class/main/appicon.rc
similarity index 100%
rename from demo/examples/templatemain/appicon.rc
rename to src/class/main/appicon.rc
diff --git a/demo/examples/templatemain/applogo.ico b/src/class/main/applogo.ico
similarity index 100%
rename from demo/examples/templatemain/applogo.ico
rename to src/class/main/applogo.ico
diff --git a/demo/examples/templatemain/main.cpp b/src/class/main/main.cpp
similarity index 100%
rename from demo/examples/templatemain/main.cpp
rename to src/class/main/main.cpp
diff --git a/src/class/main/main.pro b/src/class/main/main.pro
new file mode 100644
index 0000000000000000000000000000000000000000..d49b761c701f90a65cf7d79294a164a918093184
--- /dev/null
+++ b/src/class/main/main.pro
@@ -0,0 +1,51 @@
+###############################  COPYRIGHT ##################################
+#                                                                           #
+#   Copyright (c) 2009-2017 TopLinker Co.,Ltd. (http://www.toplinker.net)   #
+#                           ALL RIGHTS RESERVED                             #
+#                                                                           #
+#   The entire contents of this file is protected by copyright law and      #
+#   international treaties. Unauthorized reproduction, reverse-engineering  #
+#   and distribution of all or any portion of the code contained in this    #
+#   file is strictly prohibited and may result in severe civil and          #
+#   criminal penalties and will be prosecuted to the maximum extent         #
+#   possible under the law.                                                 #
+#                                                                           #
+#   RESTRICTIONS                                                            #
+#                                                                           #
+#   THE SOURCE CODE CONTAINED WITHIN THIS FILE AND ALL RELATED              #
+#   FILES OR ANY PORTION OF ITS CONTENTS SHALL AT NO TIME BE                #
+#   COPIED, TRANSFERRED, SOLD, DISTRIBUTED, OR OTHERWISE MADE               #
+#   AVAILABLE TO OTHER INDIVIDUALS WITHOUT WRITTEN CONSENT                  #
+#   AND PERMISSION FROM DEVELOPER MACHINES                                  #
+#                                                                           #
+#   CONSULT THE END USER LICENSE AGREEMENT FOR INFORMATION ON               #
+#   ADDITIONAL RESTRICTIONS.                                                #
+#                                                                           #
+#############################################################################
+
+QT       += widgets
+
+TARGET = Top
+TEMPLATE = app
+
+SOURCES += main.cpp
+
+RC_FILE = appicon.rc
+
+OTHER_FILES += \
+    appicon.rc
+
+LIB_LIST = tsec tbaseutil tdatabaseutil twidget topcore toputil
+
+linux {
+    LIB_LIST = tsec tbaseutil thoconwrapper boost_locale boost_system boost_thread tsec quazip twidget QtitanBase QtitanGrid tchart tdatabaseutil xl texcelxs topcore toputil
+}
+
+win32 {
+    LIBS += -ldbghelp
+}
+
+DIST_DIR = $$PWD/../../../dist
+include(../shared/shared.pri)
+
+LIBS += -L$$DESTDIR
diff --git a/src/class/misc/icon/chart_dev.svg b/src/class/misc/icon/chart_dev.svg
new file mode 100644
index 0000000000000000000000000000000000000000..219e3603f770575cac1a5b555f3d82e30b1a02b3
--- /dev/null
+++ b/src/class/misc/icon/chart_dev.svg
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 23.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 45 45" style="enable-background:new 0 0 45 45;" xml:space="preserve">
+<g>
+	<path d="M11.27,32.46L11.27,32.46c-0.81,0-1.46,0.66-1.46,1.46v4.41c0,0.81,0.66,1.46,1.46,1.46h0c0.81,0,1.46-0.66,1.46-1.46
+		v-4.41C12.74,33.11,12.08,32.46,11.27,32.46z"/>
+	<path d="M18.85,28.16L18.85,28.16c-0.81,0-1.46,0.66-1.46,1.46v8.71c0,0.81,0.66,1.46,1.46,1.46h0c0.81,0,1.46-0.66,1.46-1.46
+		v-8.71C20.31,28.81,19.66,28.16,18.85,28.16z"/>
+	<path d="M26.42,24.55L26.42,24.55c-0.81,0-1.46,0.66-1.46,1.46v12.32c0,0.81,0.66,1.46,1.46,1.46h0c0.81,0,1.46-0.66,1.46-1.46
+		V26.01C27.89,25.2,27.23,24.55,26.42,24.55z"/>
+	<path d="M34,30.44L34,30.44c-0.81,0-1.46,0.66-1.46,1.46v6.42c0,0.81,0.66,1.46,1.46,1.46h0c0.81,0,1.46-0.66,1.46-1.46v-6.42
+		C35.46,31.1,34.8,30.44,34,30.44z"/>
+	<path d="M41.73,20.28c-0.24-0.32-0.63-0.54-1.06-0.54h-6.22c-1.84-2.49-4.44-4.38-7.46-5.34c1.93-1.4,3.19-3.65,3.19-6.21
+		c0-4.25-3.44-7.69-7.69-7.69c-4.25,0-7.69,3.44-7.69,7.69c0,2.56,1.27,4.82,3.19,6.21c-3.02,0.96-5.61,2.85-7.46,5.34H4.06
+		c0,0,0,0,0,0c0,0,0,0,0,0c-0.73,0-1.33,0.59-1.33,1.33V42.9c0,0.44,0.21,0.82,0.54,1.06c0.25,0.32,0.63,0.54,1.06,0.54h36.61
+		c0,0,0,0,0,0c0,0,0,0,0,0c0.73,0,1.33-0.59,1.33-1.33V21.35C42.27,20.91,42.06,20.53,41.73,20.28z M17.01,8.19
+		c0-3.03,2.46-5.49,5.49-5.49c3.03,0,5.49,2.46,5.49,5.49c0,3.03-2.46,5.49-5.49,5.49C19.47,13.68,17.01,11.22,17.01,8.19z
+		 M22.5,15.95c3.53,0,6.71,1.46,8.99,3.79H13.51C15.79,17.41,18.97,15.95,22.5,15.95z M39.61,41.83H5.39V22.42h34.22V41.83z"/>
+</g>
+</svg>
diff --git a/src/class/misc/icon/chart_navi.svg b/src/class/misc/icon/chart_navi.svg
new file mode 100644
index 0000000000000000000000000000000000000000..93e163052991386c2e281915feb20bd2cbb46bde
--- /dev/null
+++ b/src/class/misc/icon/chart_navi.svg
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 23.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 45 45" style="enable-background:new 0 0 45 45;" xml:space="preserve">
+<g>
+	<path d="M42.92,15.33C45.2,9.66,44.99,5.1,42.43,2.54c-3.11-3.11-9.95-2.7-15.96,0.97c-0.33,0.17-0.56,0.47-0.66,0.83
+		c-0.09,0.36-0.03,0.73,0.17,1.04c0.17,0.33,0.47,0.56,0.83,0.66c0.36,0.09,0.73,0.03,1.04-0.17c5.39-3.25,10.71-3.25,12.58-1.38
+		c1.73,1.73,1.66,5.25-0.14,9.82c-0.75,1.84-1.76,3.76-2.98,5.7c-1.66-2.21-3.57-4.43-5.74-6.6C20.38,2.2,7.66-2.57,2.55,2.54
+		C-1.2,6.24,0.37,14.09,5.87,22.4c-5.5,8.32-7.07,16.15-3.33,19.89c1.38,1.38,3.32,2.08,5.67,2.08c3.95,0,9.02-1.91,14.29-5.37
+		c5.25,3.47,10.32,5.37,14.26,5.37c2.28,0,4.22-0.62,5.67-1.94c3.71-3.76,2.14-11.62-3.38-19.96
+		C40.66,20.05,41.98,17.64,42.92,15.33z M4.48,40.43c-2.36-2.41-1.35-8.45,3.1-15.59c1.68,2.24,3.62,4.49,5.82,6.67
+		c2.2,2.2,4.45,4.12,6.7,5.79C12.97,41.83,6.86,42.85,4.48,40.43z M22.48,35.68c-2.33-1.68-4.74-3.7-7.14-6.1
+		c-2.42-2.4-4.45-4.81-6.14-7.14c1.69-2.38,3.72-4.84,6.14-7.3c1.24-1.25,2.56-2.42,3.87-3.53c0.56-0.5,0.62-1.36,0.14-1.94
+		c-0.5-0.56-1.36-0.62-1.94-0.14c-1.31,1.18-2.7,2.42-4.01,3.73c-2.22,2.22-4.17,4.49-5.85,6.75C3.07,12.94,2.07,6.89,4.48,4.48
+		c3.46-3.45,14.38,0.07,25.09,10.85c2.29,2.29,4.33,4.7,6.07,7.12c-1.74,2.42-3.78,4.83-6.07,7.12
+		C27.19,31.97,24.8,33.99,22.48,35.68z M40.29,30.61c1.8,4.49,1.87,8.09,0.14,9.82c-2.41,2.36-8.46,1.35-15.53-3.11
+		c2.24-1.66,4.49-3.57,6.68-5.74c2.14-2.14,4.06-4.38,5.75-6.64C38.54,26.87,39.54,28.78,40.29,30.61z"/>
+	<polygon points="19.64,25.27 20.53,32.46 28.51,16.4 12.45,24.39 	"/>
+</g>
+</svg>
diff --git a/src/class/misc/icon/enum_mgt.svg b/src/class/misc/icon/enum_mgt.svg
new file mode 100644
index 0000000000000000000000000000000000000000..d1fdbc21417fe322c5e19af484dd5e95898ce863
--- /dev/null
+++ b/src/class/misc/icon/enum_mgt.svg
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 23.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 45 45" style="enable-background:new 0 0 45 45;" xml:space="preserve">
+<g>
+	<path d="M8.07,5.28c0.36,0,1.06-0.4,2.1-1.2v5.59c0,0.33,0.08,0.58,0.23,0.74c0.15,0.17,0.35,0.25,0.6,0.25
+		c0.56,0,0.84-0.41,0.84-1.23V2.4c0-0.29-0.07-0.53-0.2-0.69c-0.13-0.17-0.31-0.25-0.52-0.25c-0.19,0-0.32,0.04-0.39,0.11
+		c-0.07,0.07-0.22,0.27-0.45,0.59c-0.23,0.32-0.49,0.61-0.79,0.87C9.19,3.28,8.8,3.52,8.3,3.76C7.97,3.91,7.74,4.04,7.61,4.14
+		c-0.13,0.1-0.2,0.25-0.2,0.46c0,0.18,0.07,0.34,0.2,0.48C7.74,5.21,7.9,5.28,8.07,5.28z"/>
+	<path d="M12.67,25.63H9.41c0.1-0.16,0.21-0.29,0.31-0.41c0.23-0.28,0.66-0.68,1.29-1.19c0.63-0.51,1.07-0.89,1.34-1.13
+		c0.27-0.24,0.53-0.57,0.78-0.99c0.26-0.42,0.38-0.89,0.38-1.41c0-0.33-0.06-0.65-0.18-0.95c-0.12-0.31-0.29-0.58-0.52-0.81
+		c-0.22-0.23-0.48-0.42-0.77-0.55c-0.45-0.2-0.99-0.3-1.63-0.3c-0.53,0-0.99,0.08-1.38,0.23c-0.39,0.16-0.72,0.36-0.97,0.62
+		C7.8,19,7.61,19.28,7.48,19.59c-0.13,0.31-0.19,0.61-0.19,0.9c0,0.24,0.07,0.42,0.21,0.56c0.14,0.14,0.31,0.21,0.52,0.21
+		c0.24,0,0.42-0.08,0.54-0.23c0.12-0.15,0.23-0.36,0.33-0.64c0.1-0.28,0.17-0.45,0.21-0.51c0.31-0.48,0.74-0.72,1.29-0.72
+		c0.26,0,0.5,0.06,0.72,0.18c0.22,0.12,0.39,0.28,0.52,0.49c0.13,0.21,0.19,0.45,0.19,0.72c0,0.25-0.06,0.5-0.18,0.75
+		c-0.12,0.26-0.29,0.51-0.52,0.75c-0.23,0.24-0.51,0.49-0.85,0.73c-0.19,0.13-0.51,0.4-0.96,0.81c-0.45,0.41-0.95,0.9-1.5,1.48
+		c-0.13,0.14-0.26,0.34-0.37,0.58c-0.11,0.25-0.17,0.45-0.17,0.6c0,0.23,0.09,0.44,0.26,0.61c0.17,0.17,0.42,0.26,0.73,0.26h4.6
+		c0.28,0,0.48-0.07,0.62-0.21c0.14-0.14,0.2-0.31,0.2-0.52c0-0.23-0.09-0.41-0.26-0.54C13.24,25.7,13,25.63,12.67,25.63z"/>
+	<path d="M12.87,39.05c-0.22-0.22-0.49-0.42-0.81-0.59c0.33-0.28,0.59-0.56,0.77-0.86c0.18-0.29,0.27-0.64,0.27-1.05
+		c0-0.31-0.06-0.6-0.18-0.87c-0.12-0.27-0.31-0.51-0.55-0.71c-0.24-0.21-0.53-0.36-0.85-0.47c-0.33-0.11-0.69-0.16-1.09-0.16
+		c-0.46,0-0.87,0.06-1.24,0.19c-0.37,0.13-0.68,0.3-0.93,0.51c-0.25,0.21-0.44,0.44-0.57,0.67c-0.13,0.24-0.19,0.46-0.19,0.67
+		c0,0.22,0.07,0.4,0.21,0.53c0.14,0.13,0.29,0.2,0.45,0.2c0.14,0,0.26-0.02,0.37-0.07c0.11-0.05,0.18-0.12,0.22-0.2
+		c0.07-0.16,0.15-0.33,0.23-0.51c0.08-0.18,0.17-0.33,0.27-0.44c0.09-0.11,0.22-0.21,0.38-0.28c0.16-0.07,0.37-0.1,0.62-0.1
+		c0.37,0,0.66,0.11,0.88,0.34c0.22,0.23,0.33,0.5,0.33,0.81c0,0.41-0.14,0.73-0.41,0.95c-0.27,0.22-0.6,0.33-0.97,0.33H9.81
+		c-0.29,0-0.51,0.06-0.66,0.18c-0.15,0.12-0.22,0.28-0.22,0.48c0,0.2,0.06,0.36,0.18,0.47c0.12,0.11,0.3,0.17,0.52,0.17
+		c0.05,0,0.16-0.01,0.33-0.02c0.17-0.02,0.3-0.02,0.38-0.02c0.47,0,0.83,0.14,1.09,0.41c0.26,0.27,0.39,0.65,0.39,1.13
+		c0,0.32-0.08,0.61-0.23,0.86c-0.15,0.25-0.35,0.43-0.58,0.56c-0.24,0.13-0.48,0.19-0.74,0.19c-0.44,0-0.79-0.14-1.03-0.42
+		c-0.24-0.28-0.47-0.7-0.69-1.27c-0.03-0.09-0.1-0.18-0.21-0.24c-0.11-0.07-0.22-0.1-0.33-0.1c-0.23,0-0.42,0.07-0.57,0.22
+		c-0.15,0.15-0.23,0.34-0.23,0.58c0,0.18,0.06,0.42,0.19,0.7c0.13,0.28,0.32,0.56,0.57,0.82c0.25,0.26,0.57,0.48,0.96,0.66
+		c0.39,0.18,0.83,0.26,1.32,0.26c0.48,0,0.93-0.08,1.33-0.23c0.4-0.15,0.75-0.37,1.04-0.64c0.29-0.27,0.51-0.58,0.66-0.93
+		c0.15-0.35,0.22-0.71,0.22-1.08c0-0.31-0.06-0.6-0.17-0.87C13.25,39.52,13.09,39.28,12.87,39.05z"/>
+	<path d="M1.99,0.5H1.75C1.06,0.5,0.5,1.06,0.5,1.75v8.63c0,0.69,0.56,1.25,1.25,1.25h0.24c0.69,0,1.25-0.56,1.25-1.25V1.75
+		C3.24,1.06,2.68,0.5,1.99,0.5z"/>
+	<path d="M1.99,16.94H1.75c-0.69,0-1.25,0.56-1.25,1.25v8.63c0,0.69,0.56,1.25,1.25,1.25h0.24c0.69,0,1.25-0.56,1.25-1.25v-8.63
+		C3.24,17.5,2.68,16.94,1.99,16.94z"/>
+	<path d="M1.99,33.38H1.75c-0.69,0-1.25,0.56-1.25,1.25v8.63c0,0.69,0.56,1.25,1.25,1.25h0.24c0.69,0,1.25-0.56,1.25-1.25v-8.63
+		C3.24,33.93,2.68,33.38,1.99,33.38z"/>
+	<path d="M43.14,11.63c0.69,0,1.25-0.56,1.25-1.25V1.75c0-0.69-0.56-1.25-1.25-1.25H19.33c-0.69,0-1.25,0.56-1.25,1.25v8.63
+		c0,0.69,0.56,1.25,1.25,1.25h10.47v5.31H19.33c-0.69,0-1.25,0.56-1.25,1.25v8.63c0,0.69,0.56,1.25,1.25,1.25h10.47v5.31H19.33
+		c-0.69,0-1.25,0.56-1.25,1.25v8.63c0,0.69,0.56,1.25,1.25,1.25h23.81c0.69,0,1.25-0.56,1.25-1.25v-8.63c0-0.69-0.56-1.25-1.25-1.25
+		H32.67v-5.31h10.47c0.69,0,1.25-0.56,1.25-1.25v-8.63c0-0.69-0.56-1.25-1.25-1.25H32.67v-5.31H43.14z M41.69,41.69h-20.9v-5.5h20.9
+		V41.69z M41.69,25.25h-20.9v-5.5h20.9V25.25z M20.79,3.31h20.9v5.5h-20.9V3.31z"/>
+</g>
+</svg>
diff --git a/src/class/misc/icon/module_upload.svg b/src/class/misc/icon/module_upload.svg
new file mode 100644
index 0000000000000000000000000000000000000000..7d9f6e3d2571976719ae7081e1dbd4571416c34e
--- /dev/null
+++ b/src/class/misc/icon/module_upload.svg
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 23.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 45 45" style="enable-background:new 0 0 45 45;" xml:space="preserve">
+<g>
+	<path d="M30.49,25.89c0.5-0.5,0.5-1.3,0-1.78l-7.09-7.09c-0.24-0.24-0.56-0.37-0.89-0.37c-0.33,0-0.67,0.13-0.89,0.37l-7.22,7.22
+		c-0.5,0.5-0.5,1.3,0,1.8c0.24,0.24,0.57,0.37,0.89,0.37c0.33,0,0.65-0.13,0.89-0.37l4.98-5v17.33c0,0.7,0.57,1.26,1.26,1.26
+		s1.26-0.57,1.26-1.26V20.87l5.02,5.02C29.19,26.39,29.99,26.39,30.49,25.89z"/>
+	<path d="M41.44,19.16c-1.43-1.45-3.17-2.42-5.1-2.86c-0.65-2.74-2.07-5.18-4.14-7.11c-2.64-2.46-6.08-3.81-9.69-3.81
+		c-3.36,0-6.61,1.19-9.16,3.35c-2.01,1.69-3.52,3.97-4.33,6.46C4.04,16.37,0.5,20.81,0.5,26.02c0,2.89,1.09,5.62,3.07,7.69
+		c1.98,2.08,4.65,3.3,7.56,3.44h4.57c0.69,0,1.25-0.56,1.25-1.25s-0.56-1.25-1.25-1.25l-4.51,0C8.98,34.56,6.91,33.61,5.37,32
+		c-1.53-1.61-2.38-3.73-2.38-5.97c0-4.26,3.03-7.85,7.21-8.54l0.8-0.13l0.2-0.78c0.6-2.3,1.93-4.41,3.75-5.94
+		c2.11-1.78,4.79-2.76,7.56-2.76c2.98,0,5.81,1.12,7.99,3.14c1.89,1.75,3.12,4.03,3.56,6.57l0.16,0.9l0.9,0.12
+		c1.72,0.24,3.29,1.03,4.54,2.3c1.51,1.53,2.34,3.55,2.34,5.68c0,2.15-0.84,4.18-2.36,5.7c-1.53,1.53-3.49,2.34-5.68,2.34h-4.97
+		c-0.69,0-1.25,0.56-1.25,1.25s0.56,1.25,1.25,1.25h4.97c2.82,0,5.46-1.09,7.44-3.07c1.99-1.99,3.09-4.64,3.09-7.46
+		C44.5,23.79,43.41,21.16,41.44,19.16z"/>
+</g>
+</svg>
diff --git a/src/misc/misc.pro b/src/class/misc/misc.pro
similarity index 51%
rename from src/misc/misc.pro
rename to src/class/misc/misc.pro
index 1e5d737a7a66e01f505441e2fcb0d1fe5d98cae9..7c455175c916a2f1ac432a70158c7190b557c08b 100644
--- a/src/misc/misc.pro
+++ b/src/class/misc/misc.pro
@@ -1,6 +1,6 @@
 TEMPLATE = aux
 
-DIST_DIR = $$PWD/../../dist
+DIST_DIR = $$PWD/../../../dist
 include(../shared/shared.pri)
 
 COPY=cp
@@ -8,6 +8,11 @@ win32: COPY=copy
 SHELL_SUFFIX=sh
 win32: SHELL_SUFFIX=bat
 
+!exists($$system_path($${TOPIKM_SDKPATH})) {
+    mkpath($$system_path($${TOPIKM_SDKPATH}))
+}
+
+
 # 复制topikm.cfg
 !exists($$system_path($${DIST_DIR}/topikm/config)) {
     mkpath($$system_path($${DIST_DIR}/topikm/config))
@@ -16,5 +21,14 @@ win32: SHELL_SUFFIX=bat
     system($${COPY} topikm.cfg $$system_path($${DIST_DIR}/topikm/config/))
 }
 
+# 编译rcc到目标目
+!exists($$system_path($${TOPIKM_SDKPATH}\resource\res)) {
+    mkpath($$system_path($${TOPIKM_SDKPATH}\resource\res))
+}
+system($${QTBIN}/rcc -binary res.qrc -o $${TOPIKM_SDKPATH}/resource/res/topsys.rcc)
+
 DISTFILES += \
     topikm.cfg
+
+RESOURCES += \
+    res.qrc
diff --git a/src/class/misc/res.qrc b/src/class/misc/res.qrc
new file mode 100644
index 0000000000000000000000000000000000000000..0e30eb17427318876312519661879811d37c7fed
--- /dev/null
+++ b/src/class/misc/res.qrc
@@ -0,0 +1,8 @@
+<RCC>
+    <qresource prefix="/topsys">
+        <file>icon/chart_dev.svg</file>
+        <file>icon/chart_navi.svg</file>
+        <file>icon/enum_mgt.svg</file>
+        <file>icon/module_upload.svg</file>
+    </qresource>
+</RCC>
diff --git a/src/class/misc/topikm.cfg b/src/class/misc/topikm.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..366e2bd4b7220eea7e91792a1575407713c94fc9
--- /dev/null
+++ b/src/class/misc/topikm.cfg
@@ -0,0 +1,11 @@
+{
+    "debug_mode": "5",
+    "http_url": "http://139.196.104.13:9181/api/TOPMES6_PRODUCT_V6/ikm6",
+    "module_dirs_dev": [
+        "../../../src/module/TOPSYS",
+        "../../../src/module/DEMO"
+    ],
+    "module_dirs_prod": [],
+    "module_dirs_project": [],
+    "product_category": "topsys"
+}
diff --git a/src/toptemplateclass.pro b/src/class/mtopsys.pro
similarity index 53%
rename from src/toptemplateclass.pro
rename to src/class/mtopsys.pro
index 0fbd2be1a935b4b743ed202d0e12f6d19b81318d..77697c5e4db21e2cc1927aab38aeee566be69dd8 100644
--- a/src/toptemplateclass.pro
+++ b/src/class/mtopsys.pro
@@ -3,8 +3,6 @@ TEMPLATE = subdirs
 SUBDIRS += \
     misc \
     plugin \
-    examples
-
-examples.file = $$PWD/../demo/examples/examples.pro
+    main
 
 CONFIG += ordered
diff --git a/src/class/plugin/lupdate.bat b/src/class/plugin/lupdate.bat
new file mode 100644
index 0000000000000000000000000000000000000000..58c211c8da70a1137f840b9f581deeccca922ba5
--- /dev/null
+++ b/src/class/plugin/lupdate.bat
@@ -0,0 +1,3 @@
+@echo off
+%QTBIN%/lupdate plugin.pro
+
diff --git a/src/class/plugin/plugin.pro b/src/class/plugin/plugin.pro
new file mode 100644
index 0000000000000000000000000000000000000000..d7f0fc5411c4bd07add2300cf6abe636ed20e667
--- /dev/null
+++ b/src/class/plugin/plugin.pro
@@ -0,0 +1,87 @@
+###############################  COPYRIGHT ##################################
+#                                                                           #
+#   Copyright (c) 2009-2020 TopLinker Co.,Ltd. (http://www.topibd.com)      #
+#                           ALL RIGHTS RESERVED                             #
+#                                                                           #
+#   The entire contents of this file is protected by copyright law and      #
+#   international treaties. Unauthorized reproduction, reverse-engineering  #
+#   and distribution of all or any portion of the code contained in this    #
+#   file is strictly prohibited and may result in severe civil and          #
+#   criminal penalties and will be prosecuted to the maximum extent         #
+#   possible under the law.                                                 #
+#                                                                           #
+#   RESTRICTIONS                                                            #
+#                                                                           #
+#   THE SOURCE CODE CONTAINED WITHIN THIS FILE AND ALL RELATED              #
+#   FILES OR ANY PORTION OF ITS CONTENTS SHALL AT NO TIME BE                #
+#   COPIED, TRANSFERRED, SOLD, DISTRIBUTED, OR OTHERWISE MADE               #
+#   AVAILABLE TO OTHER INDIVIDUALS WITHOUT WRITTEN CONSENT                  #
+#   AND PERMISSION FROM DEVELOPER MACHINES                                  #
+#                                                                           #
+#   CONSULT THE END USER LICENSE AGREEMENT FOR INFORMATION ON               #
+#   ADDITIONAL RESTRICTIONS.                                                #
+#                                                                           #
+#############################################################################
+
+TARGET = $$qtLibraryTarget(musermgt-plugin)
+
+QT += core sql widgets script network xml scripttools printsupport
+win32 {
+    QT += axcontainer
+}
+
+TEMPLATE = lib
+
+CONFIG += plugin
+
+SOURCES += \
+    topsysplugin.cpp
+
+HEADERS += \
+    topsysplugin.h
+
+LIB_LIST = tsec tbaseutil tdatabaseutil twidget topcore toputil tchart
+win32 {
+    LIB_LIST += tole
+}
+
+win32 {
+    LIBS += -ldbghelp
+    LIBS += -luser32
+}
+
+include (sysmainwindow/sysmainwindow.pri)
+include (sysusermgt/sysusermgt.pri)
+
+DIST_DIR = $$PWD/../../../dist
+include(../shared/shared.pri)
+
+INCLUDEPATH += ../lib
+
+LIBS += -L$$DESTDIR
+win32 {
+    LIBS += -L$${DESTDIR}/plugins
+}
+win32{
+    DESTDIR = $${DESTDIR}/plugins
+}
+
+TRANSLATIONS += topikm6_topsys_zhcn.ts \
+                topikm6_topsys_en.ts   \
+                topikm6_topsys_zhtw.ts
+
+QM_LIST = $$PWD/*.qm
+
+DEST_LANGUAGE_PATH = $$system_path($${TOPIKM_SDKPATH}/language)
+!exists($${DEST_LANGUAGE_PATH}) {
+    mkpath($${DEST_LANGUAGE_PATH})
+}
+
+for(qm, QM_LIST) {
+    win32{
+        system(copy $$system_path($${qm}) $${DEST_LANGUAGE_PATH})
+    }
+    else{
+        system(cp $$system_path($${qm}) $${DEST_LANGUAGE_PATH})
+    }
+}
diff --git a/src/class/plugin/sysmainwindow/sysmainwindow.cpp b/src/class/plugin/sysmainwindow/sysmainwindow.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..293b336b0ff8c7df1189ce68c90494849adc7858
--- /dev/null
+++ b/src/class/plugin/sysmainwindow/sysmainwindow.cpp
@@ -0,0 +1,153 @@
+#include "SysMainWindow.h"
+#include <QCloseEvent>
+#include <QDesktopServices>
+#include <QProcess>
+#include <QGraphicsDropShadowEffect>
+#include <QHBoxLayout>
+#include <QMenu>
+#include <QDateTime>
+#include <QResource>
+#include <QTabBar>
+#include <QFileDialog>
+#include <QFileInfo>
+#include <QToolBar>
+#include <QApplication>
+#include <QVBoxLayout>
+#include <QPainter>
+#include <tbaseutil/tdataparse.h>
+#include <tbaseutil/tfileio.h>
+#include <tbaseutil/tlogger.h>
+#include <tbaseutil/tresource.h>
+#include <tbaseutil/ttheme.h>
+#include <tdatabaseutil/tsqlqueryv2.h>
+#include <tdatabaseutil/tsqlconnectionpoolv2.h>
+#include <toputil/topaboutusdialog.h>
+#include <topcore/topclasssqlthread.h>
+#include <topcore/topcore.h>
+#include <toputil/toploginpwdrestdialog.h>
+#include <topcore/topmessagecontroller.h>
+#include <twidget/tmessagebox.h>
+#include <twidget/tpushbutton.h>
+#include <twidget/tuiloaderdialog.h>
+#include <twidget/tpanelmenu.h>
+#include <twidget/twebview.h>
+#include <twidget/ttoolbutton.h>
+#include <twidget/tdialog.h>
+#include <twidget/tradiobox.h>
+#include <twidget/tcheckbox.h>
+#include <twidget/tgroupbox.h>
+#include <twidget/tdialogbuttonbox.h>
+
+
+
+
+SysMainWindow::SysMainWindow(const QString &iModuleNameStr,
+                   const QVariantMap &iUrlPars,
+                   QWidget *iParent)
+    :TopClassAbs(iParent)
+{
+    initModule(iModuleNameStr,iUrlPars);
+    if (this->isHookExists("afterModuleInit")) {
+            this->callHooks("afterModuleInit");
+    }
+
+    setHasWindowTitleBar(false);
+
+       QStringList rccLst = config("resource.rcc").toStringList();
+       for (QString rcc : rccLst) {
+           TRES->loadRcc(rcc);
+       }
+
+       initMainWidget();
+
+       setMinimumSize(TTHEME_DP(800), TTHEME_DP(600));
+       QVariantMap defalutSize = config("default_size").toMap();
+       if (!defalutSize.isEmpty() && defalutSize["width"].toInt() > 0
+               && defalutSize["height"].toInt() > 0) {
+           resize(TTHEME_DP(defalutSize["width"].toInt()),
+                   TTHEME_DP(defalutSize["height"].toInt()));
+       } else {
+           showMaximized();
+       }
+
+       refreshActionState();
+}
+
+SysMainWindow::~SysMainWindow()
+{
+    if (this->isHookExists("onDestory")) {
+        this->callHooks("onDestory");
+    }
+}
+
+//初始化主界面
+void SysMainWindow::initMainWidget()
+{
+    mBodySplitter = new QSplitter(this);
+    mBodySplitter->setObjectName("mBodySplitter");
+    setCentralWidget(mBodySplitter);
+    mMgtSplitter = new QSplitter(this);
+    mBodySplitter->addWidget(mMgtSplitter);
+
+    mBodyWgt = new QWidget(this);
+    QVBoxLayout *bodyLayout = new QVBoxLayout(mBodyWgt);
+    bodyLayout->setMargin(0);
+    bodyLayout->setSpacing(0);
+    mMgtSplitter->addWidget(mBodyWgt);
+}
+
+//打开当前选择模块
+void SysMainWindow::openModule(const QString &iUrl,
+                          const QVariant &iConfig)
+{
+    bool exists = false;
+    TopClassAbs *module = APP->openModule(iUrl, &exists);
+    if (module == nullptr) {
+        TLOG_ERROR(QString("open module(%1) failed!").arg(iUrl));
+        return;
+    }
+
+    QVariantMap paramMap = iConfig.toMap();
+    QString title = paramMap.value("title_" + APP->language()).toString();
+    if (title.isEmpty()) {
+        title = paramMap.value("title").toString();
+    }
+    module->setTitle(title);
+    module->setIconName(paramMap.value("icon").toString());
+
+    const QString url = module->url().toUpper();
+    if (!exists) {
+        connect(module, SIGNAL(windowTitleChanged(QString)),
+                this, SLOT(onModuleWindowTitleChanged()),
+                Qt::UniqueConnection);
+        connect(module, SIGNAL(windowModifyChanged(bool)),
+                this, SLOT(onModuleWindowTitleChanged()),
+                Qt::UniqueConnection);
+    }
+
+    if (!mUrlAddressWidgetMap.contains(url)) {
+        mUrlAddressWidgetMap.insert(url, module);
+        mUrlAddressConfigMap.insert(url, iConfig.toMap());
+    }
+    QVariantMap config;
+    config.insert("title", module->title());
+    config.insert("icon", module->iconName());
+    mStackedWidget->addWidget(module);
+    mStackedWidget->setCurrentWidget(module);
+}
+
+
+void StackedWidget::setBackground(const QString &iBackground)
+{
+    mBackground = iBackground;
+}
+
+void StackedWidget::paintEvent(QPaintEvent *iEvent)
+{
+    Q_UNUSED(iEvent)
+
+    if (!mBackground.isEmpty()) {
+        QPainter p(this);
+        p.drawPixmap(this->rect(), QPixmap(mBackground));
+    }
+}
diff --git a/src/class/plugin/sysmainwindow/sysmainwindow.h b/src/class/plugin/sysmainwindow/sysmainwindow.h
new file mode 100644
index 0000000000000000000000000000000000000000..92668991361e82b27566cffce87c758dbc263d74
--- /dev/null
+++ b/src/class/plugin/sysmainwindow/sysmainwindow.h
@@ -0,0 +1,67 @@
+#ifndef MWINDOWS_H
+#define MWINDOWS_H
+
+#include <QStackedWidget>
+#include <topcore/topclassabs.h>
+#include <topcore/topclasshelper.h>
+#include <tdatabaseutil/tsqlselectorv2.h>
+#include <QSystemTrayIcon>
+#include <QLineEdit>
+#include <QSplitter>
+#include <QPushButton>
+
+class QHBoxLayout;
+class QLabel;
+class QPropertyAnimation;
+class QStackedWidget;
+class QTabBar;
+class QDateTime;
+class QVBoxLayout;
+class TFramelessWindowBar;
+class TPanelMenu;
+class TopMessageController;
+class TopQuickToolBar;
+class TopQuickButton;
+class TToolButton;
+class TSplitter;
+
+class StackedWidget : public QStackedWidget {
+    Q_OBJECT
+public:
+    StackedWidget(QWidget *iParent = nullptr);
+    void setBackground(const QString &iBackground);
+protected:
+    void paintEvent(QPaintEvent *iEvent);
+private:
+    QString mBackground;
+};
+
+
+class SysMainWindow:public TopClassAbs
+{
+    Q_OBJECT
+
+public:
+    explicit SysMainWindow(const QString &iModuleNameStr = QString(""),
+                           const QVariantMap &iUrlPars = QVariantMap(),
+                           QWidget *iParent = nullptr);
+    ~SysMainWindow();
+
+public slots:
+    void openModule(const QString &iUrl, const QVariant &iConfig);
+private:
+    QMap<QString, QWidget *> mUrlAddressWidgetMap;   // urlAddress:QWidget
+    QMap<QString, QVariantMap> mUrlAddressConfigMap;
+    QHBoxLayout *Hboxlayout;
+    QLineEdit Title;
+    QLabel *mMessageLabel = nullptr;
+    StackedWidget *mStackedWidget = nullptr;
+    QSplitter *mBodySplitter = nullptr;
+    QSplitter *mMgtSplitter = nullptr;
+    QWidget *mBodyWgt;
+
+    void initMainWidget();
+};
+
+
+#endif
diff --git a/src/class/plugin/sysmainwindow/sysmainwindow.pri b/src/class/plugin/sysmainwindow/sysmainwindow.pri
new file mode 100644
index 0000000000000000000000000000000000000000..6137e2608aef10c9a41be54b0ee9ae843a42880a
--- /dev/null
+++ b/src/class/plugin/sysmainwindow/sysmainwindow.pri
@@ -0,0 +1,4 @@
+HEADERS += \
+    $$PWD/sysmainwindow.h
+SOURCES += \
+    $$PWD/sysmainwindow.cpp
diff --git a/src/plugin/toptemplateclass3.cpp b/src/class/plugin/sysusermgt/musermgt.cpp
similarity index 52%
rename from src/plugin/toptemplateclass3.cpp
rename to src/class/plugin/sysusermgt/musermgt.cpp
index 8de381da53083998f33ea2698b19c88dff80c3fb..80c2846fff5835fcebe46f1d1bf5244b2f7a0078 100644
--- a/src/plugin/toptemplateclass3.cpp
+++ b/src/class/plugin/sysusermgt/musermgt.cpp
@@ -1,38 +1,41 @@
-#include "toptemplateclass3.h"
-#include <QtWidgets>
+#include "musermgt.h"
+#include <QGraphicsDropShadowEffect>
+#include <QToolBar>
+#include <QVBoxLayout>
 #include <tbaseutil/tdataparse.h>
 #include <tbaseutil/tdataresponse.h>
 #include <tbaseutil/tenumlist.h>
 #include <tbaseutil/ttheme.h>
+#include <tbaseutil/tlogger.h>
+#include <tdatabaseutil/tsqlconnectionpoolv2.h>
 #include <tdatabaseutil/tsqlqueryv2.h>
 #include <tdatabaseutil/tsqlselectorv2.h>
-#include <tdatabaseutil/tsqlconnectionpoolv2.h>
-#include <topcore/topcore.h>
 #include <topcore/topclasssqlthread.h>
 #include <topcore/topenummanager.h>
-#include <twidget/tsplitter.h>
+#include <topcore/topcore.h>
+#include <toputil/t.h>
 #include <twidget/ttableview.h>
 #include <twidget/tsearchentry.h>
 #include <twidget/tpagetool.h>
-#include <twidget/tuiloader.h>
-
-/*!
- * \class TopTemplateClass3
- * \inmodule templateclass
- * \brief 带详细信息的单表展示。支持新建、复制新建、删除。
- */
-
-TopTemplateClass3::TopTemplateClass3(const QString &iModuleName,
-                                     const QVariantMap &iUrlPars,
-                                     QWidget *iParent)
-    : TopClassAbs(iParent)
+#include <twidget/tmessagebar.h>
+#include <twidget/tcategorytreeview.h>
+#include <twidget/ttableviewdialog.h>
+#include <twidget/tmessagebox.h>
+#include <twidget/taccordion.h>
+#include <twidget/tsplitter.h>
+
+
+Musermgt::Musermgt(const QString &iModuleNameStr,
+                               const QVariantMap &iUrlPars,
+                               QWidget *iParent):
+    TopClassAbs(iParent)
 {
-    initModule(iModuleName, iUrlPars);
-    QString licenseKey = config("sys_license_key").toString();
+    initModule(iModuleNameStr, iUrlPars);
+    QString licenseKey = config("sys_common").toString();
     if (!licenseKey.isEmpty()) {
         setLicenseKey(licenseKey);
     }
-    QStringList langLst = config("sys_lang_list").toStringList();
+    QStringList langLst = config("lang.conf").toStringList();
     for (const auto &lang : langLst) {
         appendLanguage(lang);
     }
@@ -40,7 +43,7 @@ TopTemplateClass3::TopTemplateClass3(const QString &iModuleName,
         callHooks("afterModuleInit");
     }
     TopClassHelper::parseTableConf0(this, "view", &mTableConf);
-    initUi();
+    initTableView();
     connect(this, SIGNAL(detailSaved(QString)),
             this, SLOT(onDetailSaved(QString)));
     connect(this, SIGNAL(isDetailModifiedChanged(bool)),
@@ -53,256 +56,131 @@ TopTemplateClass3::TopTemplateClass3(const QString &iModuleName,
     restoreSizeState();
     restoreObjectState(mBodySplitter);
     restoreObjectState(mTableView);
+
     refreshActionState();
     QTimer::singleShot(0, this, SLOT(refresh()));
 
     auto refreshInterval = config("view.timing_refresh_interval", 0).toInt();
     if (refreshInterval > 0) {
         mRefreshTimer = new QTimer(this);
-        connect(mRefreshTimer, SIGNAL(timeout()), this, SLOT(refresh()));
+        connect(mRefreshTimer, &QTimer::timeout, [=]() {
+            this->callAction("refresh");
+        });
         mRefreshTimer->start(refreshInterval * 1000);
     }
 }
 
-TopTemplateClass3::~TopTemplateClass3()
+Musermgt::~Musermgt()
 {
-    saveSizeState();
-    saveObjectState(mBodySplitter);
-    saveObjectState(mTableView);
-    if (isHookExists("onDestroy")) {
-        callHooks("onDestroy");
-    }
-    if (mRefreshTimer != nullptr) {
-        if (mRefreshTimer->isActive()) {
-            mRefreshTimer->stop();
-        }
-        mRefreshTimer->deleteLater();
-    }
+    this->saveSizeState();
+    this->saveObjectState(mTableView);
 }
 
-/*!
- * \brief 返回详细信息模块是否发生数据改变
- */
-bool TopTemplateClass3::isDetailModified() const
+void Musermgt::reload()
 {
-    return mIsDetailModified;
+    setDetailUid(mLastDetailUid.isEmpty() ? mDetailUid : mLastDetailUid, true);
 }
 
-/*!
- * \brief 刷新数据,\a iResetPage 表示是否要重置分页
- */
-void TopTemplateClass3::refresh(bool iResetPage)
+bool Musermgt::DetailModified() const
 {
-    TSqlSelectorV2 selector;
-    if (!mTableConf.dbSql.isEmpty()) {
-        selector.setTable(QString("(%1) _TEMP_TABLE_").arg(mTableConf.dbSql));
-    } else {
-        selector.setTable(mTableConf.dbTableName);
-    }
-    selector.setField(mTableConf.queryFields);
-    selector.setReturnRowCount(true);
-    selector.setFieldFormat(mTableConf.fieldFormatMap);
-    // 搜索分页
-    TopClassHelper::handleSearchPageOnQuery(mSearchEntry, mPageTool, iResetPage, &selector);
-    // 排序
-    TopClassHelper::handleOrderOnQuery(mTableView, &mTableConf, &selector);
-    // 只获取有效数据
-    if (!mTableConf.dbDelFlagKey.isEmpty()) {
-        selector.addWhere(QString("%1 = 0 OR %1 IS NULL").arg(mTableConf.dbDelFlagKey));
-    }
-    // 过滤项
-    if(!mTableConf.dbFilter.isEmpty()) {
-        selector.addWhere(mTableConf.dbFilter);
-    }
-    loading(ttr("Loading"));
-    QVariant data = doThreadWork(new TopClassSqlThread(this), TOPSQLTHREAD_SELECT_ARRAYMAP, QVariant::fromValue(selector));
-    unloading();
-    TDataResponse response(data.toMap());
-    if (response.hasError()) {
-        alertError(ttr("Load data failed!"));
-    } else {
-        if (mPageTool != nullptr) {
-            mPageTool->setRowCount(response.dataCount(), true);
-        }
-        QVariantList tableData = response.data().toList();
-        TopClassHelper::formatTableData(this, &mTableConf, tableData);
-        mTableView->loadData(tableData);
-        mSelectedItems.clear();
-        alertOk(ttr("Data loaded"));
-        if (isHookExists("afterDataRefresh")) {
-            callHooks("afterDataRefresh");
-        }
-    }
+    return IsDetailchange;
 }
 
-/*!
- * \brief 刷新详细信息
- */
-void TopTemplateClass3::refreshDetail(const QString &iUid)
+void Musermgt::setIsDetailModified(bool iIsDetailModified)
 {
-    if (iUid.isEmpty()) {
-        mDetailView->loadValues(QVariantMap(), true);
-    } else {
-        if (!mTableConf.dbTableName.isEmpty()) {
-            TSqlSelectorV2 selector;
-            selector.setTable(mTableConf.dbTableName);
-            selector.setField(mTableConf.queryFields);
-            selector.setWhere(mTableConf.primaryKey, iUid);
-            selector.setFieldFormat(mTableConf.fieldFormatMap);
-            TError err;
-            QVariant data = runSqlQueryOnThreadSync(TOPSQLTHREAD_SELECT_MAP,
-                                                    QVariant::fromValue(selector),
-                                                    &err);
-            if (err.isValid()) {
-                alertError(ttr("Load data failed!"), err.text());
-                return;
-            }
-            QVariantMap dataMap = data.toMap();
-            mDetailView->loadValues(dataMap, true);
-        }
+    if (IsDetailchange == iIsDetailModified) {
+        qDebug()<<iIsDetailModified;
+        return;
     }
-    setIsDetailModified(false);
+    IsDetailchange = iIsDetailModified;
+    emit isDetailModifiedChanged(iIsDetailModified);
 }
 
-/*!
- * \brief 当前的详细信息的UID
- */
-QString TopTemplateClass3::detailUid() const
+QVariantList Musermgt::selectedItems()
 {
-    return mDetailUid;
+    return mSelectedItems;
 }
 
-/*!
- * \brief 设置详细信息的UID为 \a iUid,
- * 如果 \a iForceRefresh 为 true, 表示无论UID发生改变,都强制刷新
- */
-void TopTemplateClass3::setDetailUid(const QString &iUid, bool iForceRefresh)
+QString Musermgt::detailUid() const
 {
-    if (iForceRefresh || mDetailUid != iUid) {
-        mDetailUid = iUid;
-        emit detailUidChanged(iUid);
-    }
+   return mDetailUid;
 }
 
-/*!
- * \brief 设置详细信息的数据改变状态
- */
-void TopTemplateClass3::setIsDetailModified(bool iIsDetailModified)
+void Musermgt::setDetailUid(const QString &iUid, bool iForceRefresh)
 {
-    if (mIsDetailModified == iIsDetailModified) {
-        return;
+   if (iForceRefresh || mDetailUid != iUid) {
+       mDetailUid = iUid;
+       emit detailUidChanged(iUid);
     }
-    mIsDetailModified = iIsDetailModified;
-    emit isDetailModifiedChanged(iIsDetailModified);
 }
 
-/*!
- * \brief 当前选中条目的primaryKey
- */
-QVariantList TopTemplateClass3::selectedItems() const
-{
-    return mSelectedItems;
-}
-
-/*!
- * \brief 当前选中条目的所有数据
- */
-QVariantList TopTemplateClass3::selectedDataMaps() const
-{
-    return mTableView->selectedRowDataMaps(true);
-}
-
-/*!
- * \brief 新建条目
- */
-void TopTemplateClass3::newItem()
+void Musermgt::newItem()
 {
     mLastDetailUid = mDetailUid;
     setDetailUid(QString());
     setIsDetailModified(true);
 }
 
-/*!
- * \brief 保存条目
- */
-void TopTemplateClass3::saveItem()
+//新增用户
+void Musermgt::addUser()
 {
-    QVariantList errLst = mDetailView->validateAll("COMMIT", true, "ERROR");
+    //验证有效性
+    QVariantList errLst = DetailView->validateAll("COMMIT", true, "ERROR");
     if (!errLst.isEmpty()) {
         QStringList errStrLst;
         for (QVariant err : errLst) {
             errStrLst.append(err.toMap().value("text").toString());
         }
-        alertError(ttr("Save data failed!"), errStrLst.join("\n"));
+        alertError(ttr("saved failed!"), errStrLst.join("\n"));
         return;
     }
-    TSqlInserterV2 inserter;
-    inserter.setTable(mTableConf.dbTableName);
+
+    //使用TopClassTableConf类对象配置各项信息
+    TSqlInserterV2 insertor;
+    insertor.setTable(mTableConf.dbTableName);
     QVariantMap saveData;
     QMap<QString, QString> updatePolicy;
-    TopClassHelper::fetchSaveFieldsFromUi(mDetailView, saveData, updatePolicy);
-    inserter.setUniqueField(mTableConf.primaryKey);
-    inserter.setAutoIncrementField(mTableConf.primaryKey);
+    TopClassHelper::fetchSaveFieldsFromUi(DetailView, saveData, updatePolicy);
+    insertor.addUniqueField(mTableConf.primaryKey);
+    insertor.setAutoIncrementField(mTableConf.primaryKey);
     saveData.insert(mTableConf.primaryKey, mDetailUid);
-    // 添加过滤项数据
-    if (config("view.data_set.db_filter").type() == QVariant::Map) {
-        QVariantMap dbFilterMap = config("view.data_set.db_filter").toMap();
-        QMapIterator<QString, QVariant> i(dbFilterMap);
-        while (i.hasNext()) {
-            i.next();
-            saveData.insert(i.key(), i.value());
-        }
-    }
-    inserter.setData(saveData);
-    QStringList fields = saveData.keys();
-    fields.removeOne(mTableConf.primaryKey);
-    inserter.setField(fields);
-    // 设置更新策略
-    {
-        QMapIterator<QString, QString> i(updatePolicy);
-        while (i.hasNext()) {
-            i.next();
-            inserter.setUpdatePolicy(i.key(), i.value());
-        }
-    }
-    TError err;
-    QVariant result = runSqlQueryOnThreadSync(TOPSQLTHREAD_REPLACE_ROW,
-                                              QVariant::fromValue(inserter),
-                                              &err);
-    if (err.isValid()) {
-        alertError(ttr("Save data failed!"), err.text());
-        return;
-    }
-    setIsDetailModified(false);
-    emit detailSaved(result.toString());
-    alertOk(ttr("Data saved"));
-}
-
-/*!
- * \brief 重新载入条目
- */
-void TopTemplateClass3::reloadItem()
-{
-    setDetailUid(mLastDetailUid.isEmpty() ? mDetailUid : mLastDetailUid, true);
-}
 
-/*!
- * \brief 复制条目
- */
-void TopTemplateClass3::copyItem()
-{
-    mLastDetailUid = mDetailUid;
-    mDetailUid = "";
-    setIsDetailModified(true);
+    if (config("view.data_set.db_filter").type() == QVariant::Map) {
+          QVariantMap dbFilterMap = config("view.data_set.db_filter").toMap();
+          QMapIterator<QString, QVariant> i(dbFilterMap);
+          while (i.hasNext()) {
+              i.next();
+              saveData.insert(i.key(), i.value());      //向saveData里插入各项数据的键和值
+          }
+      }
+      insertor.setData(saveData);
+      QStringList fields = saveData.keys();
+      fields.removeOne(mTableConf.primaryKey);
+      insertor.setField(fields);
+      {
+          QMapIterator<QString, QString> i(updatePolicy);
+          while (i.hasNext()) {
+              i.next();
+              insertor.setUpdatePolicy(i.key(), i.value());
+          }
+      }
+      TError err;
+      QVariant result = runSqlQueryOnThreadSync(TOPSQLTHREAD_REPLACE_ROW,
+                                                QVariant::fromValue(insertor),
+                                                &err);
+      if (err.isValid()) {
+          alertError(ttr("Save data failed!"), err.text());
+          return;
+      }
+      emit detailSaved(result.toString());
+      setIsDetailModified(false);
+      alertOk(ttr("Data saved"));
 }
 
-/*!
- * \brief 删除条目
- */
-void TopTemplateClass3::deleteItems(const QVariantList &iItems)
+//删除用户
+void Musermgt::removeUser(const QVariantList &iItems)
 {
     if (mTableConf.dbDelFlagKey.isEmpty()) {
-        // 物理删除
         TSqlDeleterV2 deleter;
         deleter.setTable(mTableConf.dbTableName);
         deleter.setWhere(mTableConf.primaryKey, iItems);
@@ -317,7 +195,6 @@ void TopTemplateClass3::deleteItems(const QVariantList &iItems)
             alertOk(ttr("Data deleted"));
         }
     } else {
-        // 逻辑删除
         TSqlUpdaterV2 updater;
         updater.setTable(mTableConf.dbTableName);
         updater.setWhere(mTableConf.primaryKey, iItems);
@@ -335,26 +212,12 @@ void TopTemplateClass3::deleteItems(const QVariantList &iItems)
     }
 }
 
-/*!
- * \brief 表格控件对象
- */
-TTableView *TopTemplateClass3::tableView() const
-{
-    return mTableView;
-}
-
-/*!
- * \brief 详细信息的表单对象
- */
-TUiLoader *TopTemplateClass3::uiLoader() const
+void Musermgt::onPageChanged()
 {
-    return mDetailView;
+    refresh(false);
 }
 
-/*!
- * \brief 当选中发生改变时的槽函数
- */
-void TopTemplateClass3::onSelectionChanged()
+void Musermgt::onSelectionChanged()
 {
     mSelectedItems = mTableView->selectedPrimaryKeys();
     QString curId;
@@ -363,74 +226,136 @@ void TopTemplateClass3::onSelectionChanged()
     }
     if (mDetailUid != curId) {
         mLastDetailUid = curId;
-        if (!mIsDetailModified) {
+        if (!IsDetailchange) {
             setDetailUid(curId);
         }
     }
     refreshActionState();
 }
 
-/*!
- * \brief 当分页发生改变时的槽函数
- */
-void TopTemplateClass3::onPageChanged()
+void Musermgt::onDetailSaved(const QVariant &iUidStr)
 {
-    refresh(false);
+    this->refresh(false);
+    mTableView->selectRow(iUidStr);
 }
 
-/*!
- * \brief 当详细信息表单数据发生改变时的槽函数
- */
-void TopTemplateClass3::onDetailDataChanged()
+void Musermgt::onDetailDataChanged()
 {
     setIsDetailModified(true);
 }
 
-/*!
- * \brief 当详细信息表单保存成功时的槽函数
- */
-void TopTemplateClass3::onDetailSaved(const QString &iUid)
-{
-    refresh(false);
-    mTableView->selectRow(iUid);
-}
-
-/*!
- * \brief 当详细信息表单数据改变状态发生变化时的槽函数
- */
-void TopTemplateClass3::onDetailChanged(bool iIsDetailModified)
-{
+void Musermgt::onDetailChanged(bool iIsDetailModified)
+{   
     mTableView->setEnabled(!iIsDetailModified);
     if (iIsDetailModified) {
-        showMaskFrame(mBodyWgt);
+        showMaskFrame(mBodyWidget);
     } else {
         hideMaskFrame();
     }
     refreshActionState();
 }
 
-/*!
- * \brief 初始化界面
- */
-void TopTemplateClass3::initUi()
+//刷新表格
+void Musermgt::refresh(bool iResetPage)
+{
+    TSqlSelectorV2 selector;
+    if (!mTableConf.dbSql.isEmpty()) {
+        selector.setTable(QString("(1% TEMP_TABLE)").arg(mTableConf.dbSql));
+    } else if (!mTableConf.dbTableName.isEmpty()) {
+        selector.setTable(mTableConf.dbTableName);
+    }
+    selector.setField(mTableConf.queryFields);
+    selector.setFieldFormat(mTableConf.fieldFormatMap);
+
+    selector.setReturnRowCount(true);
+    TopClassHelper::handleSearchPageOnQuery(mSearchEntry, mPageTool, iResetPage, &selector);
+    TopClassHelper::handleOrderOnQuery(mTableView, &mTableConf, &selector);
+    if (!mTableConf.dbDelFlagKey.isEmpty()) {
+        selector.addWhere(QString("%1 = 0 OR %1 IS NULL").arg(mTableConf.dbDelFlagKey));
+    }
+    if(!mTableConf.dbFilter.isEmpty()) {
+        selector.addWhere(mTableConf.dbFilter);
+    }
+    t::loading(this);
+    QVariant data = doThreadWork(new TopClassSqlThread(this), TOPSQLTHREAD_SELECT_ARRAYMAP, QVariant::fromValue(selector));
+    unloading();
+    TDataResponse response(data.toMap());
+    if (response.hasError()) {
+        alertError(ttr("Load data failed!"));
+    } else {
+        if (mPageTool != nullptr) {
+            mPageTool->setRowCount(response.dataCount(), true);
+        }
+        QVariantList tableData = response.data().toList();
+        TopClassHelper::formatTableData(this, &mTableConf, tableData);
+        if (isHookExists("handleTableData")) {
+            tableData = callHooksQuick("handleTableData", QVariantList() << QVariant(tableData)).toVariant().toList();
+        }
+        mTableView->loadData(tableData);
+        mTableView->adjustViewSpan(mTableConf.mergeKeys);
+        mSelectedItems.clear();
+        setDetailUid(QString());
+        alertOk(ttr("Data loaded"));
+    }
+    return;
+}
+
+//刷新详细表单
+void Musermgt::refreshDetail(const QString &iUid)
+{
+    if (iUid.isEmpty()) {
+        DetailView->loadValues(QVariantMap(), true);
+    } else {
+        TSqlSelectorV2 selector;
+        if (!mTableConf.dbSql.isEmpty()) {
+            selector.setTable(QString("(%1) _TEMP_TABLE_").arg(mTableConf.dbSql));
+        } else if (!mTableConf.dbTableName.isEmpty()) {
+            selector.setTable(mTableConf.dbTableName);
+        } else {
+            return;
+        }
+        selector.setField(mTableConf.queryFields);
+        selector.setWhere(mTableConf.primaryKey, iUid);
+        selector.setFieldFormat(mTableConf.fieldFormatMap);
+        TError err;
+        QVariant data = runSqlQueryOnThreadSync(TOPSQLTHREAD_SELECT_MAP,
+                                                QVariant::fromValue(selector),
+                                                &err);
+        if (err.isValid()) {
+            alertError(ttr("Load data failed!"), err.text());
+            return;
+        }
+        QVariantMap dataMap = data.toMap();
+        DetailView->loadValues(dataMap, true);
+    }
+    alertOk(ttr("Data loaded"));
+    setIsDetailModified(false);
+}
+
+//初始化界面
+void Musermgt::initTableView()
 {
     mBodySplitter = new TSplitter(this);
     mBodySplitter->setObjectName("mBodySplitter");
     setCentralWidget(mBodySplitter);
+    mBodyWidget = new TSplitter(this);
+    mBodySplitter->addWidget(mBodyWidget);
 
     mBodyWgt = new QWidget(this);
     QVBoxLayout *bodyLayout = new QVBoxLayout(mBodyWgt);
     bodyLayout->setMargin(0);
     bodyLayout->setSpacing(0);
+    mBodyWidget->addWidget(mBodyWgt);
 
     mTableView = new TTableView(this);
-    mTableView->setObjectName("mTableView");
+    mTableView->setObjectName("__view__");
+    mTableView->setHeaderPopupEnabled(true);
     connect(mTableView->horizontalHeader(), SIGNAL(sortIndicatorChanged(int,Qt::SortOrder)),
             this, SLOT(refresh()));
     connect(mTableView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
-            this, SIGNAL(selectionChanged()));
-    connect(this, SIGNAL(selectionChanged()),
             this, SLOT(onSelectionChanged()));
+    connect(mTableView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
+            this, SIGNAL(selectionChanged()));
     mTableView->setDataKeyList(mTableConf.dataKeys);
     mTableView->setPrimaryKey(mTableConf.primaryKey);
     QVariantList headerItems = mTableConf.horizontalHeaders;
@@ -461,8 +386,6 @@ void TopTemplateClass3::initUi()
         }
     }
 
-    mBodySplitter->addWidget(mBodyWgt);
-
     QWidget *detailWgt = new QWidget(this);
     QVBoxLayout *detailLayout = new QVBoxLayout(detailWgt);
     detailLayout->setSpacing(0);
@@ -471,20 +394,25 @@ void TopTemplateClass3::initUi()
     if (QToolBar *toolbar = qobject_cast<QToolBar*>(uim()->getWidget("DETAIL_TOOLBAR"))) {
         detailLayout->addWidget(toolbar, 0);
     }
-    mDetailView = new TUiLoader(this);
+    DetailView = new TUiLoader(this);
+    DetailView->setObjectName("__detail__");
     const QStringList typePlugins = config("uiloader_plugins").toStringList();
     if (typePlugins.size() > 0) {
-        TopClassHelper::setUiLoaderPluginCallback(mDetailView,this,typePlugins);
+        TopClassHelper::setUiLoaderPluginCallback(DetailView,this,typePlugins);
+    }
+    connect(DetailView, SIGNAL(dataChanged()), this, SLOT(onDetailDataChanged()));
+    DetailView->setProperty("SS_BG", "PANEL");
+    DetailView->setSelf(this);
+    DetailView->setScriptEngine(APP->scriptEngine());
+    DetailView->setUiStr(ui("detail").toString());
+    detailLayout->addWidget(DetailView);
+
+    if (!ui("detail").isNull()) {
+        mBodySplitter->addWidget(detailWgt);
+        mBodySplitter->setStretchFactor(0, 1);
+        mBodySplitter->setSizes(QList<int>{1, config("detail.perfect_width", 600).toInt()});
+    } else {
+        detailWgt->setVisible(false);
     }
-    connect(mDetailView, SIGNAL(dataChanged()), this, SLOT(onDetailDataChanged()));
-    mDetailView->setProperty("SS_BG", "PANEL");
-    mDetailView->setSelf(this);
-    mDetailView->setScriptEngine(APP->scriptEngine());
-    mDetailView->setUiStr(ui("detail").toString());
-    detailLayout->addWidget(mDetailView);
-
-    mBodySplitter->addWidget(detailWgt);
-
-    mBodySplitter->setStretchFactor(0, 1);
-    mBodySplitter->setSizes(QList<int>{1, config("detail.perfect_width", 600).toInt()});
 }
+
diff --git a/src/class/plugin/sysusermgt/musermgt.h b/src/class/plugin/sysusermgt/musermgt.h
new file mode 100644
index 0000000000000000000000000000000000000000..c3f323eb7ad229c94d02f4e2f4d3b59ba6773780
--- /dev/null
+++ b/src/class/plugin/sysusermgt/musermgt.h
@@ -0,0 +1,71 @@
+#ifndef MUSERMGT
+#define MUSERMGT
+
+#include <topcore/topclassabs.h>
+#include <tdatabaseutil/tsqlselectorv2.h>
+#include <tbaseutil/tdataresponse.h>
+#include <topcore/topclasshelper.h>
+
+class TCategoryTreeView;
+class TTableView;
+class TSearchEntry;
+class TPageTool;
+class TSplitter;
+
+class Musermgt : public TopClassAbs
+{
+    Q_OBJECT
+
+public:
+
+    explicit Musermgt(const QString &iModuleNameStr = QString(""),
+                            const QVariantMap &iUrlPars = QVariantMap(),
+                            QWidget *iParent = nullptr);
+
+    ~Musermgt();
+
+public slots:
+    void refresh(bool iResetPageBol = true);        //刷新表格信息
+    void refreshDetail(const QString &iUid);        //刷新右侧详细信息
+    void reload();                                  //详细表单刷新后重新载入数据
+    bool DetailModified() const;                        //用于判断详细表单的数据是否发生改变
+    void setIsDetailModified(bool iIsDetailModified);   //设置详细表单的状态(是否发生改变)
+    QVariantList selectedItems();                       //返回选中的表格数据LIST
+    void newItem();                                     //"新建"功能
+    void addUser();                                     //新增用户,对应action-保存
+    void removeUser(const QVariantList &iItems);        //删除表格里的用户,对应右键菜单里的action-删除
+
+    QString detailUid() const;                          //返回当前条目的uid
+    void setDetailUid(const QString &iUid, bool iForceRefresh = false); //设置条目的uid
+private slots:
+    void onPageChanged();                               //翻页对应的槽函数
+    void onSelectionChanged();                          //当表单中选择改变时对应的槽函数
+    void onDetailSaved(const QVariant &iUidStr);        //保存详细表单时对应的槽函数
+    void onDetailChanged(bool iIsDetailModified);                             //详细表单内容改变时的槽函数
+    void onDetailDataChanged();
+signals:
+    void isDetailModifiedChanged(bool iIsDetailModified);   //详细表单发生改变时发射该信号
+    void detailUidChanged(const QString &iDetailUid);       //当左侧选中条目改变时详细表单的UID变化,发送该信号刷新详细表单
+    void detailSaved(const QString &iUid);                  //当详细表单数据保存时发送
+    void selectionChanged();                                //左侧表单选中条目变化时发送该信号
+private:
+    void initTableView();                                   //初始化界面
+
+private:
+    TSplitter *mBodySplitter = nullptr;
+    TSplitter *mBodyWidget = nullptr;
+    TTableView* mTableView = nullptr;
+    TSearchEntry* mSearchEntry = nullptr;
+    TPageTool* mPageTool = nullptr;
+    TUiLoader *DetailView;
+    QWidget *mBodyWgt = nullptr;
+    QString mLastDetailUid;
+    QString mDetailUid;
+
+    bool IsDetailchange = false;
+    TopClassTableConf mTableConf;
+    QTimer *mRefreshTimer = nullptr;
+    QVariantList mSelectedItems;
+};
+
+#endif //MUSERMGT
diff --git a/src/class/plugin/sysusermgt/sysusermgt.pri b/src/class/plugin/sysusermgt/sysusermgt.pri
new file mode 100644
index 0000000000000000000000000000000000000000..3fdbd78eb2c5b85934c6ee7c3c5ed805e12165d1
--- /dev/null
+++ b/src/class/plugin/sysusermgt/sysusermgt.pri
@@ -0,0 +1,6 @@
+HEADERS += \
+    $$PWD/musermgt.h    \
+
+SOURCES += \
+    $$PWD/musermgt.cpp \
+
diff --git a/src/class/plugin/topikm6_topsys_en.ts b/src/class/plugin/topikm6_topsys_en.ts
new file mode 100644
index 0000000000000000000000000000000000000000..04847cef7d995eb0d4257b4a071071b886f5b13f
--- /dev/null
+++ b/src/class/plugin/topikm6_topsys_en.ts
@@ -0,0 +1,376 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="en_US">
+<context>
+    <name>QObject</name>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="559"/>
+        <source>Title</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="560"/>
+        <source>Title(English)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="561"/>
+        <source>Title(Chinese Simplified)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="562"/>
+        <source>Title(Chinese Tranditional)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="563"/>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="76"/>
+        <source>Icon Name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="564"/>
+        <source>Search Code</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="565"/>
+        <source>Layout Size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="566"/>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="85"/>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="78"/>
+        <source>Background Color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="567"/>
+        <source>Url Address</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="86"/>
+        <source>Background Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="87"/>
+        <source>DockArea Alignment</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="88"/>
+        <source>Horizontal</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="89"/>
+        <source>Vertical</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="90"/>
+        <source>Module Click Type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="91"/>
+        <source>Double Click</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="92"/>
+        <source>Click</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="72"/>
+        <source>GroupName</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="73"/>
+        <source>GroupName(English)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="74"/>
+        <source>GroupName(Chinese Simplified)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="75"/>
+        <source>GroupName(Chinese Tranditional)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="77"/>
+        <source>Title Color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="79"/>
+        <source>Size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="80"/>
+        <source>Top Left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="81"/>
+        <source>Top</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="82"/>
+        <source>Top Right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="83"/>
+        <source>Left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="84"/>
+        <source>Center</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="85"/>
+        <source>Right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="86"/>
+        <source>Bottom Left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="87"/>
+        <source>Bottom</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="88"/>
+        <source>Bottom Right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="89"/>
+        <source>Absolute Position</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="90"/>
+        <source>Dock Area</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="91"/>
+        <source>Dock Sequence</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TopDesktopItemAbs</name>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="214"/>
+        <source>1X1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="218"/>
+        <source>2X1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="222"/>
+        <source>2X2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="226"/>
+        <source>2X4</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="230"/>
+        <source>4X1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="234"/>
+        <source>4X2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="238"/>
+        <source>4x4</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="253"/>
+        <source>Adjust size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="257"/>
+        <source>Setting Module</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="258"/>
+        <source>Delete Module</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TopQuickButtonV2</name>
+    <message>
+        <location filename="sysmainwindowv2/topquickbuttonv2.cpp" line="200"/>
+        <source>Close</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topquickbuttonv2.cpp" line="211"/>
+        <source>Unpin On Toolbar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topquickbuttonv2.cpp" line="217"/>
+        <source>Pin On Toolbar</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TopWin8Desktop</name>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="145"/>
+        <source>Search</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="156"/>
+        <source>Refresh</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="161"/>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="759"/>
+        <source>Edit Desktop</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="166"/>
+        <source>Save Desktop</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="171"/>
+        <source>Desktop Config</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="176"/>
+        <source>Add Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="428"/>
+        <source>Open File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="428"/>
+        <source>Images (*.png *.jpeg *.jpg)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="448"/>
+        <source>Copy image to resource directory failed.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="553"/>
+        <source>Unknow Error!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="590"/>
+        <source>Edit Config</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="754"/>
+        <source>Cancel Edit</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TopWin8DesktopGroup</name>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="629"/>
+        <source>Edit - %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="634"/>
+        <source>New Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="666"/>
+        <source>Are you sure to delete category group %1?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="669"/>
+        <source>Delete</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="670"/>
+        <source>Yes</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="670"/>
+        <source>No</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="734"/>
+        <source>Setting Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="735"/>
+        <source>Delete Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="736"/>
+        <source>Add Module</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TopWin8DesktopItem</name>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="752"/>
+        <source>Edit - %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="757"/>
+        <source>New Module</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+</TS>
diff --git a/src/class/plugin/topikm6_topsys_zhcn.qm b/src/class/plugin/topikm6_topsys_zhcn.qm
new file mode 100644
index 0000000000000000000000000000000000000000..f1a820f672adbf05f80c25c60eb41cb12fefe991
Binary files /dev/null and b/src/class/plugin/topikm6_topsys_zhcn.qm differ
diff --git a/src/class/plugin/topikm6_topsys_zhcn.ts b/src/class/plugin/topikm6_topsys_zhcn.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8d4a1256fa2e3b954d824ceb697b39ee754be8c5
--- /dev/null
+++ b/src/class/plugin/topikm6_topsys_zhcn.ts
@@ -0,0 +1,377 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="zh_CN">
+<context>
+    <name>QObject</name>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="559"/>
+        <source>Title</source>
+        <translation>标题</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="560"/>
+        <source>Title(English)</source>
+        <translation>标题(英文)</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="561"/>
+        <source>Title(Chinese Simplified)</source>
+        <translation>标题(简体中文)</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="562"/>
+        <source>Title(Chinese Tranditional)</source>
+        <translation>标题(繁体中文)</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="563"/>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="76"/>
+        <source>Icon Name</source>
+        <translation>图标</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="564"/>
+        <source>Search Code</source>
+        <translation>搜索码</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="565"/>
+        <source>Layout Size</source>
+        <translation>尺寸</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="566"/>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="85"/>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="78"/>
+        <source>Background Color</source>
+        <translation>背景色</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="567"/>
+        <source>Url Address</source>
+        <translation>模块地址</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="86"/>
+        <source>Background Image</source>
+        <translation>背景图片</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="87"/>
+        <source>DockArea Alignment</source>
+        <translation>停靠区域对齐</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="81"/>
+        <source>Top</source>
+        <translation>上</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="91"/>
+        <source>Double Click</source>
+        <oldsource>Left Dock</oldsource>
+        <translation>鼠标双击</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="88"/>
+        <source>Horizontal</source>
+        <translation>æ°´å¹³</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="89"/>
+        <source>Vertical</source>
+        <translation>垂直</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="90"/>
+        <source>Module Click Type</source>
+        <translation>如何打开模块</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="92"/>
+        <source>Click</source>
+        <translation>鼠标单击</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="72"/>
+        <source>GroupName</source>
+        <translation>组名</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="73"/>
+        <source>GroupName(English)</source>
+        <translation>组名(英文)</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="74"/>
+        <source>GroupName(Chinese Simplified)</source>
+        <translation>组名(简体中文)</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="75"/>
+        <source>GroupName(Chinese Tranditional)</source>
+        <translation>组名(繁体中文)</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="77"/>
+        <source>Title Color</source>
+        <translation>标题颜色</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="79"/>
+        <source>Size</source>
+        <translation>尺寸</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="80"/>
+        <source>Top Left</source>
+        <translation>左上</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="82"/>
+        <source>Top Right</source>
+        <translation>右上</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="83"/>
+        <source>Left</source>
+        <translation>å·¦</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="84"/>
+        <source>Center</source>
+        <translation>中间</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="85"/>
+        <source>Right</source>
+        <translation>右</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="86"/>
+        <source>Bottom Left</source>
+        <translation>左下</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="87"/>
+        <source>Bottom</source>
+        <translation>下</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="88"/>
+        <source>Bottom Right</source>
+        <translation>右下</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="89"/>
+        <source>Absolute Position</source>
+        <translation>绝对位置</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="90"/>
+        <source>Dock Area</source>
+        <translation>停靠区域</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="91"/>
+        <source>Dock Sequence</source>
+        <translation>停靠序列</translation>
+    </message>
+</context>
+<context>
+    <name>TopDesktopItemAbs</name>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="214"/>
+        <source>1X1</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="218"/>
+        <source>2X1</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="222"/>
+        <source>2X2</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="226"/>
+        <source>2X4</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="230"/>
+        <source>4X1</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="234"/>
+        <source>4X2</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="238"/>
+        <source>4x4</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="253"/>
+        <source>Adjust size</source>
+        <translation>调整大小</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="257"/>
+        <source>Setting Module</source>
+        <translation>模块设置</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="258"/>
+        <source>Delete Module</source>
+        <translation>删除模块</translation>
+    </message>
+</context>
+<context>
+    <name>TopQuickButtonV2</name>
+    <message>
+        <location filename="sysmainwindowv2/topquickbuttonv2.cpp" line="200"/>
+        <source>Close</source>
+        <translation>关闭</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topquickbuttonv2.cpp" line="211"/>
+        <source>Unpin On Toolbar</source>
+        <translation>取消固定</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topquickbuttonv2.cpp" line="217"/>
+        <source>Pin On Toolbar</source>
+        <translation>固定在工具栏上</translation>
+    </message>
+</context>
+<context>
+    <name>TopWin8Desktop</name>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="145"/>
+        <source>Search</source>
+        <translation>搜索</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="156"/>
+        <source>Refresh</source>
+        <translation>刷新</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="161"/>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="759"/>
+        <source>Edit Desktop</source>
+        <translation>编辑桌面</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="166"/>
+        <source>Save Desktop</source>
+        <translation>保存桌面</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="171"/>
+        <source>Desktop Config</source>
+        <translation>桌面配置</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="176"/>
+        <source>Add Group</source>
+        <translation>添加组</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="428"/>
+        <source>Open File</source>
+        <translation>打开文件</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="428"/>
+        <source>Images (*.png *.jpeg *.jpg)</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="448"/>
+        <source>Copy image to resource directory failed.</source>
+        <translation>拷贝图片到资源目录失败。</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="553"/>
+        <source>Unknow Error!</source>
+        <translation>未知错误!</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="590"/>
+        <source>Edit Config</source>
+        <translation>编辑配置</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="754"/>
+        <source>Cancel Edit</source>
+        <translation>取消编辑</translation>
+    </message>
+</context>
+<context>
+    <name>TopWin8DesktopGroup</name>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="629"/>
+        <source>Edit - %1</source>
+        <translation>编辑 - %1</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="634"/>
+        <source>New Group</source>
+        <translation>新建组</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="666"/>
+        <source>Are you sure to delete category group %1?</source>
+        <translation>确定要删除%1组吗?</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="669"/>
+        <source>Delete</source>
+        <translation>删除</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="670"/>
+        <source>Yes</source>
+        <translation>确定</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="670"/>
+        <source>No</source>
+        <translation>取消</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="734"/>
+        <source>Setting Group</source>
+        <translation>组设置</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="735"/>
+        <source>Delete Group</source>
+        <translation>删除组</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="736"/>
+        <source>Add Module</source>
+        <translation>添加模块</translation>
+    </message>
+</context>
+<context>
+    <name>TopWin8DesktopItem</name>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="752"/>
+        <source>Edit - %1</source>
+        <translation>编辑 - %1</translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="757"/>
+        <source>New Module</source>
+        <translation>添加模块</translation>
+    </message>
+</context>
+</TS>
diff --git a/src/class/plugin/topikm6_topsys_zhtw.ts b/src/class/plugin/topikm6_topsys_zhtw.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c3d4ea63a0bfc232b2789841cab3a36d62db64e0
--- /dev/null
+++ b/src/class/plugin/topikm6_topsys_zhtw.ts
@@ -0,0 +1,376 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+    <name>QObject</name>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="559"/>
+        <source>Title</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="560"/>
+        <source>Title(English)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="561"/>
+        <source>Title(Chinese Simplified)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="562"/>
+        <source>Title(Chinese Tranditional)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="563"/>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="76"/>
+        <source>Icon Name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="564"/>
+        <source>Search Code</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="565"/>
+        <source>Layout Size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="566"/>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="85"/>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="78"/>
+        <source>Background Color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="567"/>
+        <source>Url Address</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="86"/>
+        <source>Background Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="87"/>
+        <source>DockArea Alignment</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="88"/>
+        <source>Horizontal</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="89"/>
+        <source>Vertical</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="90"/>
+        <source>Module Click Type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="91"/>
+        <source>Double Click</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="92"/>
+        <source>Click</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="72"/>
+        <source>GroupName</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="73"/>
+        <source>GroupName(English)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="74"/>
+        <source>GroupName(Chinese Simplified)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="75"/>
+        <source>GroupName(Chinese Tranditional)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="77"/>
+        <source>Title Color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="79"/>
+        <source>Size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="80"/>
+        <source>Top Left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="81"/>
+        <source>Top</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="82"/>
+        <source>Top Right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="83"/>
+        <source>Left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="84"/>
+        <source>Center</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="85"/>
+        <source>Right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="86"/>
+        <source>Bottom Left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="87"/>
+        <source>Bottom</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="88"/>
+        <source>Bottom Right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="89"/>
+        <source>Absolute Position</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="90"/>
+        <source>Dock Area</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="91"/>
+        <source>Dock Sequence</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TopDesktopItemAbs</name>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="214"/>
+        <source>1X1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="218"/>
+        <source>2X1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="222"/>
+        <source>2X2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="226"/>
+        <source>2X4</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="230"/>
+        <source>4X1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="234"/>
+        <source>4X2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="238"/>
+        <source>4x4</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="253"/>
+        <source>Adjust size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="257"/>
+        <source>Setting Module</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="258"/>
+        <source>Delete Module</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TopQuickButtonV2</name>
+    <message>
+        <location filename="sysmainwindowv2/topquickbuttonv2.cpp" line="200"/>
+        <source>Close</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topquickbuttonv2.cpp" line="211"/>
+        <source>Unpin On Toolbar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topquickbuttonv2.cpp" line="217"/>
+        <source>Pin On Toolbar</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TopWin8Desktop</name>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="145"/>
+        <source>Search</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="156"/>
+        <source>Refresh</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="161"/>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="759"/>
+        <source>Edit Desktop</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="166"/>
+        <source>Save Desktop</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="171"/>
+        <source>Desktop Config</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="176"/>
+        <source>Add Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="428"/>
+        <source>Open File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="428"/>
+        <source>Images (*.png *.jpeg *.jpg)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="448"/>
+        <source>Copy image to resource directory failed.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="553"/>
+        <source>Unknow Error!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="590"/>
+        <source>Edit Config</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktop.cpp" line="754"/>
+        <source>Cancel Edit</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TopWin8DesktopGroup</name>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="629"/>
+        <source>Edit - %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="634"/>
+        <source>New Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="666"/>
+        <source>Are you sure to delete category group %1?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="669"/>
+        <source>Delete</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="670"/>
+        <source>Yes</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="670"/>
+        <source>No</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="734"/>
+        <source>Setting Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="735"/>
+        <source>Delete Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topwin8desktopgroup.cpp" line="736"/>
+        <source>Add Module</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TopWin8DesktopItem</name>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="752"/>
+        <source>Edit - %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="sysmainwindowv2/topdesktop/topdesktopitemabs.cpp" line="757"/>
+        <source>New Module</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+</TS>
diff --git a/src/class/plugin/topsysplugin.cpp b/src/class/plugin/topsysplugin.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..2ac0b8afc173fbc5dbfe1b4011285b21ba57eb0d
--- /dev/null
+++ b/src/class/plugin/topsysplugin.cpp
@@ -0,0 +1,20 @@
+#include "topsysplugin.h"
+//#include "sysmainwindow/sysmainwindow.h"
+#include "sysusermgt/musermgt.h"
+//#include "sysusermgt/sysuser.h"
+
+
+QStringList TopSysPlugin::getClassList()
+{    
+    return QStringList()<< QStringLiteral("Musermgt");
+}
+
+TopClassAbs *TopSysPlugin::newClass(const QString &iClassName,
+                                          const QString &iModuleName,
+                                          const QVariantMap &iUrlPars)
+{
+    if (iClassName == QStringLiteral("Musermgt")) {
+        return new Musermgt(iModuleName, iUrlPars, nullptr);
+    }
+    return nullptr;
+}
diff --git a/src/plugin/toptemplateclassplugin.h b/src/class/plugin/topsysplugin.h
similarity index 75%
rename from src/plugin/toptemplateclassplugin.h
rename to src/class/plugin/topsysplugin.h
index d0c54bec7e420d6800a859db6414e4f69e6b6f61..be1a25ab121da695abc0859212b88a730597b26e 100644
--- a/src/plugin/toptemplateclassplugin.h
+++ b/src/class/plugin/topsysplugin.h
@@ -1,11 +1,11 @@
-#ifndef TEMPLATEPLUGIN_H
-#define TEMPLATEPLUGIN_H
+#ifndef SYSADMINPLUGIN_H
+#define SYSADMINPLUGIN_H
 
 #include <QtPlugin>
 #include <QVariantMap>
 #include <topcore/topclasspluginabs.h>
 
-class TemplatePlugin : public QObject, public TopClassPluginAbs
+class TopSysPlugin : public QObject, TopClassPluginAbs
 {
     Q_OBJECT
     Q_PLUGIN_METADATA(IID "net.toplinker.TopClassAbsPlugin")
@@ -18,4 +18,4 @@ public:
                           const QVariantMap &iUrlPars = QVariantMap()) override;
 };
 
-#endif // TEMPLATEPLUGIN_H
+#endif // SYSADMINPLUGIN_H
diff --git a/src/shared/shared.pri b/src/class/shared/shared.pri
similarity index 79%
rename from src/shared/shared.pri
rename to src/class/shared/shared.pri
index 3e3bd41cfba6db8fc8ac9bb2237d9037014240f6..66fbd0c5b22291cbea8db6aca30e9c2f10bb5be5 100644
--- a/src/shared/shared.pri
+++ b/src/class/shared/shared.pri
@@ -1,9 +1,16 @@
+# set QTBIN
+TEMPNAME = $${QMAKE_QMAKE}
+QTBIN = $$dirname(TEMPNAME)
+
+# never use foreach or Q_FOREACH
 DEFINES += QT_NO_FOREACH
 
 win32-msvc* {
     # support windows xp
     QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS,5.01
     # generating pdb in release mode
+    # QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINGO
+    # QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO
     QMAKE_CXXFLAGS_RELEASE += /Zi
     QMAKE_LFLAGS_RELEASE += /DEBUG
 }
@@ -57,6 +64,11 @@ CONFIG(debug, debug | release) {
 
 # libs
 LIBS += -L$$DESTDIR
-for(lib, LIB_LIST) {
+for (lib, LIB_LIST) {
     LIBS += -l$${lib}$${DEBUG_SUFFIX}
 }
+
+linux {
+    QMAKE_RPATHDIR += .
+    QMAKE_RPATHDIR += ./party3libs/pg
+}
diff --git a/src/misc/topikm.cfg b/src/misc/topikm.cfg
deleted file mode 100644
index 2c056def254b5c13a31f5368ff0d3f9ae85ab064..0000000000000000000000000000000000000000
--- a/src/misc/topikm.cfg
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-    "debug_mode": "5",
-    "http_url": "http://139.196.104.13:9181/api/TOPMESV6_DEV_V6/ikm6",
-    "module_dirs_dev": [
-        "F:\\workspace\\toplinker\\gitlab\\topikm6-sysadmin\\src\\module\\01_TOP",
-        "F:\\workspace\\toplinker\\gitlab\\topikm6-templateclass\\demo\\examples\\module\\TEMPLATEDEMO"
-    ],
-    "module_dirs_prod": [],
-    "module_dirs_project": [],
-    "product_category": "templateclass"
-}
diff --git a/src/module/TEMPLATEDEMO/temp/actions/add.js b/src/module/TEMPLATEDEMO/temp/actions/add.js
new file mode 100644
index 0000000000000000000000000000000000000000..2ee2e83d5d58c885bd05b1ec5b8ae958ef661a9a
--- /dev/null
+++ b/src/module/TEMPLATEDEMO/temp/actions/add.js
@@ -0,0 +1,28 @@
+try {
+	this.addUser();
+} catch (e) {
+	print(e);
+}
+
+/*---ACTION---
+ICON: "plus"
+LABEL: "Add"
+LABEL_ZHCN: "添加客户"
+LABEL_ZHTW: "添加客戶"
+ACCEL: "Ctrl+N"
+TOOLTIP: "Add Customer"
+TOOLTIP_ZHCN: "添加客户"
+TOOLTIP_ZHTW: "添加客戶"
+CHECKED: ""
+GROUP: ""
+LABEL_EN: ""
+LABEL_JP: ""
+TOOLTIP_EN: ""
+TOOLTIP_JP: ""
+PERMISSION: ""
+STYLE: "button_style=both"
+LANG: "JavaScript"
+STATUS: "Release"
+VERSION: "1"
+STATEHOOK: "return (this.state() != 'EDIT') ? 'enable' : 'hide';"
+---ACTION---*/
\ No newline at end of file
diff --git a/src/module/TEMPLATEDEMO/temp/actions/cancel_detail.js b/src/module/TEMPLATEDEMO/temp/actions/cancel_detail.js
index 9eb4ceb8f1ed8d7103adaacc679446dacfd8d620..f6042baa5948889a9d238580e39d48e539ddf2d4 100644
--- a/src/module/TEMPLATEDEMO/temp/actions/cancel_detail.js
+++ b/src/module/TEMPLATEDEMO/temp/actions/cancel_detail.js
@@ -1,5 +1,5 @@
 try {
-  this.reloadItem();
+  this.reload();
 } catch(e) {
   print(e);
 }
@@ -19,5 +19,5 @@ STYLE: "button_style=text"
 LANG: "JavaScript"
 STATUS: "Release"
 VERSION: "1"
-STATEHOOK: "return (this.isDetailModified()) ? 'enable' : 'hide';"
+STATEHOOK: "return (this.DetailModified()) ? 'enable' : 'hide';"
 ---ACTION---*/
\ No newline at end of file
diff --git a/src/module/TEMPLATEDEMO/temp/actions/copy_detail.js b/src/module/TEMPLATEDEMO/temp/actions/copy_detail.js
index b6575ff3d9da682bdcbad460ec22be224f71c1c3..18a3032aa8c87cba226a74f27727313453a75e72 100644
--- a/src/module/TEMPLATEDEMO/temp/actions/copy_detail.js
+++ b/src/module/TEMPLATEDEMO/temp/actions/copy_detail.js
@@ -1,5 +1,5 @@
 try {
-  this.copyItem();
+  this.copy();
 } catch(e) {
   print(e);
 }
@@ -20,5 +20,5 @@ STYLE: "button_style=icon"
 LANG: "JavaScript"
 STATUS: "Release"
 VERSION: "1"
-STATEHOOK: "return this.isDetailModified() ? 'hide' : 'enable';"
+STATEHOOK: "return this.DetailModified() ? 'hide' : 'enable';"
 ---ACTION---*/
\ No newline at end of file
diff --git a/src/module/TEMPLATEDEMO/temp/actions/delete.js b/src/module/TEMPLATEDEMO/temp/actions/delete.js
index d840dea86623cce996b33795cd4e213cc8635d3b..1c24f1677a2ddedbb567e9f62718ece74c5732cc 100644
--- a/src/module/TEMPLATEDEMO/temp/actions/delete.js
+++ b/src/module/TEMPLATEDEMO/temp/actions/delete.js
@@ -1,13 +1,13 @@
 try {
-  var ans = TMessageBox.question(this, this.ttr("Are you sure to delete selected items?"), '', '',
-      [this.ttr('Delete')+':Yes:Yes:Primary', this.ttr('Cancel')+':Cancel:Cancel:Normal']);
-  if (ans != 'Yes') {
-    return;
+	var ans = TMessageBox.question(this, this.ttr("Are you sure to delete selected items?"), '', '',
+		[this.ttr('Delete')+':Yes:Yes:Primary', this.ttr('Cancel')+':Cancel:Cancel:Normal']);
+	if (ans != 'Yes') {
+	  return;
+	}
+	this.removeUser(this.selectedItems());
+  } catch (e) {
+	print(e);
   }
-  this.deleteItems(this.selectedItems());
-} catch (e) {
-  print(e);
-}
 
 
 /*---ACTION---
@@ -26,5 +26,5 @@ STYLE: "size=small button_style=both"
 LANG: "JavaScript"
 STATUS: "Release"
 VERSION: "1"
-STATEHOOK: "if(this.selectedItems().length > 0 && !this.isDetailModified()){return 'enable'}else{return 'disable'}"
+STATEHOOK: "if(this.selectedItems().length > 0 && !this.DetailModified()){return 'enable'}else{return 'disable'}"
 ---ACTION---*/
\ No newline at end of file
diff --git a/src/module/TEMPLATEDEMO/temp/actions/new.js b/src/module/TEMPLATEDEMO/temp/actions/new.js
index 590fc7ea676bd1fd2e02117d64f074b32ffe53ee..5e98a48f1e8a11fc7c962ba52085b4d0300a0349 100644
--- a/src/module/TEMPLATEDEMO/temp/actions/new.js
+++ b/src/module/TEMPLATEDEMO/temp/actions/new.js
@@ -20,5 +20,5 @@ STYLE: "button_style=both"
 LANG: "JavaScript"
 STATUS: "Release"
 VERSION: "1"
-STATEHOOK: "if (!this.isDetailModified()){return 'enable'} else {return 'disable'}"
+STATEHOOK: "if (!this.DetailModified()){return 'enable'} else {return 'disable'}"
 ---ACTION---*/
\ No newline at end of file
diff --git a/src/module/TEMPLATEDEMO/temp/actions/refresh_detail.js b/src/module/TEMPLATEDEMO/temp/actions/refresh_detail.js
index 6d474848a9ce3fd9dc56b30305d3cc0fca6c5692..7f59891c68ad9264547b12ec1a80f1bf5dd1cd0f 100644
--- a/src/module/TEMPLATEDEMO/temp/actions/refresh_detail.js
+++ b/src/module/TEMPLATEDEMO/temp/actions/refresh_detail.js
@@ -1,5 +1,5 @@
 try {
-  this.reloadItem();
+  this.reload();
 } catch(e) {
   print(e);
 }
@@ -18,5 +18,5 @@ STYLE: "button_style=icon"
 LANG: "JavaScript"
 STATUS: "Release"
 VERSION: "1"
-STATEHOOK: "return this.isDetailModified() ? 'hide' : 'enable';"
+STATEHOOK: "return this.DetailModified() ? 'hide' : 'enable';"
 ---ACTION---*/
\ No newline at end of file
diff --git a/src/module/TEMPLATEDEMO/temp/actions/save_detail.js b/src/module/TEMPLATEDEMO/temp/actions/save_detail.js
index 49420e218089e83f861149ba43a0f0584f014afb..f24eb2b5f262f4e2e1909db9bbdeece813b1dde6 100644
--- a/src/module/TEMPLATEDEMO/temp/actions/save_detail.js
+++ b/src/module/TEMPLATEDEMO/temp/actions/save_detail.js
@@ -1,5 +1,5 @@
 try {
-  this.saveItem();
+  this.addUser();
 } catch(e) {
   print(e);
 }
@@ -19,5 +19,5 @@ STYLE: " button_style=both"
 LANG: "JavaScript"
 STATUS: "Release"
 VERSION: "1"
-STATEHOOK: "return (this.isDetailModified()) ? 'enable' : 'disable';"
+STATEHOOK: "return (this.DetailModified()) ? 'enable' : 'disable';"
 ---ACTION---*/
\ No newline at end of file
diff --git a/src/module/TEMPLATEDEMO/temp/detail.ui.js b/src/module/TEMPLATEDEMO/temp/detail.ui.js
index 486e9f87892fa6e4616c7680a9c75053e4cba423..6b5c7c156e712f9fde18402a93635c8883502d5d 100644
--- a/src/module/TEMPLATEDEMO/temp/detail.ui.js
+++ b/src/module/TEMPLATEDEMO/temp/detail.ui.js
@@ -40,18 +40,6 @@
                             }
                         },
                     },
-                    {
-                        name: "password",
-                        type: "LineEdit",
-                        title :self.ttr("Password"),
-                        validate: function (obj, val, title, moment, self) {
-                            if (val.trim() == '') {
-                                return [title + self.ttr(" can not be null"), 'Error'];
-                            } else if (!val.match(new RegExp('^[A-Za-z0-9_]+$'))) {
-                                return [title + self.ttr(" can only contain [A-Za-z0-9]!"), 'Error'];
-                            } 
-                        },
-                    },
                     {
                         name: "fullname",
                         type: "LineEdit",
diff --git a/src/module/TEMPLATEDEMO/temp/module.conf b/src/module/TEMPLATEDEMO/temp/module.conf
index edae8732bbd84aa1b241e3ef3315a808123890a0..e1991fab9139803c456bacdc7bf319df5fa3bbe9 100644
--- a/src/module/TEMPLATEDEMO/temp/module.conf
+++ b/src/module/TEMPLATEDEMO/temp/module.conf
@@ -1,14 +1,14 @@
-# 模块标题
-sys_title: "Template Demo - Table With Category And Detail"
-sys_title_en: "Template Demo - Table With Category And Detail"
-sys_title_zhcn: "带导航栏和详细信息的单表展示"
+# 模块标题
+sys_title: "My test program"
+sys_title_en: "My test program"
+sys_title_zhcn: "我的测试程序"
 sys_title_zhtw: ""
 # 模块图标
 sys_icon: "wpforms"
 # 模块对应的插件DLL名称
-sys_plugin: "toptemplateclassplugin"
+sys_plugin: "musermgt-plugin"
 # 模块对应的类名
-sys_class: "TopTemplateClass4"
+sys_class: "Musermgt"
 # 许可证验证键
 sys_license_key: ""
 # 打开模块的权限
@@ -46,36 +46,7 @@ navi: {
     ]
 }
 
-# 高级查询
-# advance: {
-#   "advanced_items" : [		
-#     {"name" : "username", "title" : "username" , "widgetType" : "LineEdit" , "wgt_prop" : "" , "optionList" : []},
-#     {"name" : "fullname", "title" : "fullname" , "widgetType" : "LineEdit" , "wgt_prop" : "" , "optionList" : []},
-#     {"name" : "attr_data.age", "title" : "age" , "widgetType" : "LineEdit" , "wgt_prop" : "" , "optionList" : []},
-#     {"name" : "attr_data.gender", "title" : "gender" , "widgetType" : "ComboBox" , "wgt_prop" : "" , "optionList" : "enum(tpm-machine-maintenance-plan-gender)"}
-#   ],
-#   "condition" :{
-#     "condition": "1 and 2",
-#     "value": [
-#         {
-#             "ignoreEmpty": false,
-#             "name": "attr_data.gender",
-#             "operator": "LIKE",
-#             "title": "attr_data.gender",
-#             "valid": true,
-#             "value1": "man"
-#         },
-#         {
-#             "ignoreEmpty": false,
-#             "name": "attr_data.gender",
-#             "operator": "LIKE",
-#             "title": "attr_data.gender",
-#             "valid": true,
-#             "value1": "woman"
-#         }
-#     ]
-#   }
-# } 
+
 
 # 主表格
 view {
@@ -108,7 +79,7 @@ view {
     {
         "name": "status",
         "display": "状态",
-        "displayRole": "$status",
+        "displayRole": "$status.text",
         "size": 100,
         "format": "enum(tpm-machine-maintenance-plan-status)"
     },
@@ -121,8 +92,9 @@ view {
     {
         "name": "attr_data.gender",
         "display": "性别",
-        "displayRole": "$attr_data.gender",
+        "displayRole": "$attr_data.gender.text",
         "size": 100
+        "format": "enum(tpm-machine-maintenance-plan-gender)"
     },
   ]
   # 默认排序列
diff --git a/src/plugin/lupdate.bat b/src/plugin/lupdate.bat
deleted file mode 100644
index 24f47951774df912bb9ac8f1534e70e7d1e5b9a6..0000000000000000000000000000000000000000
--- a/src/plugin/lupdate.bat
+++ /dev/null
@@ -1,3 +0,0 @@
-@echo off
-%QT_BIN%/lupdate plugin.pro
-
diff --git a/src/plugin/plugin.pro b/src/plugin/plugin.pro
deleted file mode 100644
index 4ddf87b2f93f206283bfe1dd9460084430c49fd5..0000000000000000000000000000000000000000
--- a/src/plugin/plugin.pro
+++ /dev/null
@@ -1,63 +0,0 @@
-TARGET = $$qtLibraryTarget(toptemplateclassplugin)
-
-CONFIG += plugin
-
-QT += core  sql widgets script network xml scripttools
-
-TEMPLATE = lib
-
-LIB_LIST = tsec tbaseutil tdatabaseutil twidget topcore toputil
-win32 {
-    LIB_LIST += tole
-}
-SOURCES += \
-    toptemplateclass4.cpp \
-
-HEADERS += \
-    toptemplateclass4.h \
-
-win32 {
-    LIBS += -ldbghelp
-}
-
-DIST_DIR = $$PWD/../../dist
-include(../shared/shared.pri)
-
-INCLUDEPATH += ../lib
-
-LIBS += -L$$DESTDIR
-win32 {
-    LIBS += -L$${DESTDIR}/plugins
-}
-win32{
-    DESTDIR = $${DESTDIR}/plugins
-}
-
-HEADERS += \
-    toptemplateclassplugin.h
-
-SOURCES += \
-    toptemplateclassplugin.cpp
-
-# i18n
-TRANSLATIONS += toptemplateclass_en.ts toptemplateclass_zhcn.ts toptemplateclass_zhtw.ts
-
-QM_LIST = $$PWD/*.qm
-DEST_LANGUAGE_PATH = $$system_path($${TOPIKM_SDKPATH}/language)
-!exists($${DEST_LANGUAGE_PATH}) {
-    mkpath($${DEST_LANGUAGE_PATH})
-}
-for(qm, QM_LIST) {
-    win32 {
-        system(copy $$system_path($${qm}) $${DEST_LANGUAGE_PATH})
-    } else {
-        system(cp $$system_path($${qm}) $${DEST_LANGUAGE_PATH})
-    }
-}
-
-#版本信息
-CONFIG += skip_target_version_ext
-VERSION = 1.2.8.0
-QMAKE_TARGET_PRODUCT = toptemplateclass
-QMAKE_TARGET_COMPANY = TopLinker Co.,Ltd.
-QMAKE_TARGET_COPYRIGHT = Copyright(C) 2020 TopLinker
diff --git a/src/plugin/toptemplateclass0.cpp b/src/plugin/toptemplateclass0.cpp
deleted file mode 100644
index b55b310fd4bdd743ac685ca07d9f6810122237b2..0000000000000000000000000000000000000000
--- a/src/plugin/toptemplateclass0.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-#include "toptemplateclass0.h"
-
-/*!
- * \class TopTemplateClass0
- * \brief 空模板
- */
-
-TopTemplateClass0::TopTemplateClass0(const QString &iModuleName,
-                                     const QVariantMap &iUrlPars,
-                                     QWidget *iParent)
-    : TopClassAbs(iParent)
-{
-    initModule(iModuleName, iUrlPars);
-    QString licenseKey = config("sys_license_key").toString();
-    if (!licenseKey.isEmpty()) {
-        setLicenseKey(licenseKey);
-    }
-    QStringList langLst = config("sys_lang_list").toStringList();
-    for (const auto &lang : langLst) {
-        appendLanguage(lang);
-    }
-    if (isHookExists("afterModuleInit")) {
-        callHooks("afterModuleInit");
-    }
-    initUi();
-    if (isHookExists("afterViewInit")) {
-        callHooks("afterViewInit");
-    }
-}
-
-TopTemplateClass0::~TopTemplateClass0()
-{
-    if (isHookExists("onDestroy")) {
-        callHooks("onDestroy");
-    }
-}
-
-/*!
- * \brief 初始化界面
- */
-void TopTemplateClass0::initUi()
-{
-    // Do nothing
-}
diff --git a/src/plugin/toptemplateclass0.h b/src/plugin/toptemplateclass0.h
deleted file mode 100644
index 3b3cd7369cce62aa3440823e97fdb9ffd0c830b9..0000000000000000000000000000000000000000
--- a/src/plugin/toptemplateclass0.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef TEMPLATECLASS0_H
-#define TEMPLATECLASS0_H
-
-#include <topcore/topclassabs.h>
-
-class TopTemplateClass0 : public TopClassAbs
-{
-    Q_OBJECT
-public:
-    explicit TopTemplateClass0(const QString &iModuleName = QString(""),
-                               const QVariantMap &iUrlPars = QVariantMap(),
-                               QWidget *iParent = nullptr);
-    ~TopTemplateClass0();
-private:
-    void initUi();
-};
-
-#endif // TEMPLATECLASS0_H
diff --git a/src/plugin/toptemplateclass0a.cpp b/src/plugin/toptemplateclass0a.cpp
deleted file mode 100644
index 6290e4d09bb07f14ed19fb0247556b1ca3b29a84..0000000000000000000000000000000000000000
--- a/src/plugin/toptemplateclass0a.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
-#include "toptemplateclass0a.h"
-#include <QtWidgets>
-#include <topcore/topcore.h>
-
-/*!
- * \class TopTemplateClass0A
- * \inmodule templateclass
- * \brief 带背景的空模板,常用来做首页
- */
-
-TopTemplateClass0A::TopTemplateClass0A(const QString &iModuleName,
-                                       const QVariantMap &iUrlPars,
-                                       QWidget *iParent)
-    : TopClassAbs(iParent)
-{
-    initModule(iModuleName, iUrlPars);
-    QString licenseKey = config("sys_license_key").toString();
-    if (!licenseKey.isEmpty()) {
-        setLicenseKey(licenseKey);
-    }
-    QStringList langLst = config("sys_lang_list").toStringList();
-    for (const auto &lang : langLst) {
-        appendLanguage(lang);
-    }
-    if (isHookExists("afterModuleInit")) {
-        callHooks("afterModuleInit");
-    }
-    initUi();
-    if (isHookExists("afterViewInit")) {
-        callHooks("afterViewInit");
-    }
-}
-
-TopTemplateClass0A::~TopTemplateClass0A()
-{
-    if (isHookExists("onDestroy")) {
-        callHooks("onDestroy");
-    }
-}
-
-/*!
- * \brief 初始化界面
- */
-void TopTemplateClass0A::initUi()
-{
-    QWidget *centerWgt = new QWidget(this);
-    setCentralWidget(centerWgt);
-    QVBoxLayout *layout = new QVBoxLayout(centerWgt);
-    layout->setMargin(0);
-    layout->setSpacing(0);
-    QLabel *label = new QLabel(this);
-    QString backgroundImagePath = config("background_image_path").toString();
-    backgroundImagePath = QDir(APP->appPlatformPath()).filePath(backgroundImagePath);
-    QPixmap pixmap(backgroundImagePath);
-#if 0
-    // 下面的代码是之前的首页实现,暂时注释掉
-    QPixmap temp(pixmap.size());
-    temp.fill(Qt::transparent);
-    QPainter painter(&temp);
-    painter.setCompositionMode(QPainter::CompositionMode_Source);
-    painter.drawPixmap(0, 0, pixmap);
-    painter.setCompositionMode(QPainter::CompositionMode_DestinationIn);
-    painter.fillRect(temp.rect(), QColor(0, 0, 0, 200));
-    painter.end();
-    pixmap = temp;
-#endif
-    label->setPixmap(pixmap);
-    label->setScaledContents(true);
-    label->setMinimumSize(100, 100);
-    layout->addWidget(label);
-}
diff --git a/src/plugin/toptemplateclass0a.h b/src/plugin/toptemplateclass0a.h
deleted file mode 100644
index 0ea415286685d50e1aa1bcc80a8b227a2356bbc5..0000000000000000000000000000000000000000
--- a/src/plugin/toptemplateclass0a.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef TOPTEMPLATECLASS0A_H
-#define TOPTEMPLATECLASS0A_H
-
-#include <topcore/topclassabs.h>
-
-class TopTemplateClass0A : public TopClassAbs
-{
-    Q_OBJECT
-public:
-    explicit TopTemplateClass0A(const QString &iModuleName = QString(""),
-                                const QVariantMap &iUrlPars = QVariantMap(),
-                                QWidget *iParent = nullptr);
-    ~TopTemplateClass0A();
-private:
-    void initUi();
-};
-
-#endif // TOPTEMPLATECLASS0A_H
diff --git a/src/plugin/toptemplateclass1.cpp b/src/plugin/toptemplateclass1.cpp
deleted file mode 100644
index a0cda90dbbdd69e2c24e3fedb1c70a110cdd5ea6..0000000000000000000000000000000000000000
--- a/src/plugin/toptemplateclass1.cpp
+++ /dev/null
@@ -1,186 +0,0 @@
-#include "toptemplateclass1.h"
-#include <QtWidgets>
-#include <tbaseutil/tdataparse.h>
-#include <tbaseutil/tdataresponse.h>
-#include <tbaseutil/tenumlist.h>
-#include <tdatabaseutil/tsqlqueryv2.h>
-#include <tdatabaseutil/tsqlselectorv2.h>
-#include <tdatabaseutil/tsqlconnectionpoolv2.h>
-#include <topcore/topcore.h>
-#include <topcore/topclasssqlthread.h>
-#include <topcore/topenummanager.h>
-#include <twidget/tsplitter.h>
-#include <twidget/ttableview.h>
-#include <twidget/tsearchentry.h>
-#include <twidget/tpagetool.h>
-
-/*!
- * \class TopTemplateClass1
- * \inmodule templateclass
- * \brief 该模板只有一个表格,支持搜索分页
- */
-
-TopTemplateClass1::TopTemplateClass1(const QString &iModuleName,
-                                     const QVariantMap &iUrlPars,
-                                     QWidget *iParent)
-    : TopClassAbs(iParent)
-{
-    initModule(iModuleName, iUrlPars);
-    QString licenseKey = config("sys_license_key").toString();
-    if (!licenseKey.isEmpty()) {
-        setLicenseKey(licenseKey);
-    }
-    QStringList langLst = config("sys_lang_list").toStringList();
-    for (const auto &lang : langLst) {
-        appendLanguage(lang);
-    }
-    if (isHookExists("afterModuleInit")) {
-        callHooks("afterModuleInit");
-    }
-    TopClassHelper::parseTableConf0(this, "view", &mTableConf);
-    initUi();
-    if (isHookExists("afterViewInit")) {
-        callHooks("afterViewInit");
-    }
-    restoreSizeState();
-    restoreObjectState(mTableView);
-    QTimer::singleShot(0, this, SLOT(refresh()));
-}
-
-TopTemplateClass1::~TopTemplateClass1()
-{
-    saveSizeState();
-    saveObjectState(mTableView);
-    if (isHookExists("onDestroy")) {
-        callHooks("onDestroy");
-    }
-}
-
-/*!
- * \brief 刷新数据,\a iResetPage 表示是否要重置分页
- */
-void TopTemplateClass1::refresh(bool iResetPage)
-{
-    QString sql = config("table.data_set.db_sql").toString();
-    if (sql.isEmpty()) {
-        TSqlSelectorV2 selector;
-        selector.setTable(mTableConf.dbTableName);
-        selector.setField(mTableConf.queryFields);
-        selector.setReturnRowCount(true);
-        // 搜索分页
-        TopClassHelper::handleSearchPageOnQuery(mSearchEntry, mPageTool, iResetPage, &selector);
-        // 排序
-        TopClassHelper::handleOrderOnQuery(mTableView, &mTableConf, &selector);
-        loading(ttr("Loading"));
-        QVariant data = doThreadWork(new TopClassSqlThread(this), TOPSQLTHREAD_SELECT_ARRAYMAP, QVariant::fromValue(selector));
-        unloading();
-        TDataResponse response(data.toMap());
-        if (response.hasError()) {
-            alertError(ttr("Load data failed!"));
-        } else {
-            if (mPageTool != nullptr) {
-                mPageTool->setRowCount(response.dataCount(), true);
-            }
-            QVariantList tableData = response.data().toList();
-            TopClassHelper::formatTableData(this, &mTableConf, tableData);
-            mTableView->loadData(tableData);
-            alertOk(ttr("Data loaded"));
-        }
-    } else {
-        // @todo
-    }
-}
-
-/*!
- * \brief 表格控件对象
- */
-TTableView *TopTemplateClass1::tableView() const
-{
-    return mTableView;
-}
-
-/*!
- * \brief 当前选中条目的primaryKey
- */
-QVariantList TopTemplateClass1::selectedItems() const
-{
-    return mSelectedLst;
-}
-
-/*!
- * \brief 当前选中条目的所有数据
- */
-QVariantList TopTemplateClass1::selectedDataMaps() const
-{
-    return mTableView->selectedRowDataMaps(true);
-}
-
-/*!
- * \brief 当选中发生改变时的槽函数
- */
-void TopTemplateClass1::onSelectionChanged()
-{
-    mSelectedLst = mTableView->selectedPrimaryKeys();
-    refreshActionState();
-}
-
-/*!
- * \brief 当分页发生改变时的槽函数
- */
-void TopTemplateClass1::onPageChanged()
-{
-    refresh(false);
-}
-
-/*!
- * \brief 初始化界面
- */
-void TopTemplateClass1::initUi()
-{
-    TSplitter *bodySplitter = new TSplitter(this);
-    setCentralWidget(bodySplitter);
-
-    mBodyWgt = new QWidget(this);
-    QVBoxLayout *bodyLayout = new QVBoxLayout(mBodyWgt);
-    bodyLayout->setMargin(0);
-    bodyLayout->setSpacing(0);
-
-    mTableView = new TTableView(this);
-    mTableView->setObjectName("mTableView");
-    connect(mTableView->horizontalHeader(), SIGNAL(sortIndicatorChanged(int,Qt::SortOrder)),
-            this, SLOT(refresh()));
-    connect(mTableView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
-            this, SLOT(onSelectionChanged()));
-    mTableView->setDataKeyList(mTableConf.dataKeys);
-    mTableView->setPrimaryKey(mTableConf.primaryKey);
-    QVariantList headerItems = mTableConf.horizontalHeaders;
-    headerItems.prepend(QVariant());
-    mTableView->setHeaderItem(headerItems);
-
-    if (QToolBar *toolbar = qobject_cast<QToolBar*>(uim()->getWidget("MAIN_TOOLBAR"))) {
-        bodyLayout->addWidget(toolbar, 0);
-        mSearchEntry = qobject_cast<TSearchEntry *>(uim()->getWidget("MAIN_TOOLBAR/SEARCH_ENTRY"));
-        if (mSearchEntry != nullptr) {
-            connect(mSearchEntry, SIGNAL(search(QString,QVariant)), this, SLOT(refresh()));
-            mSearchEntry->setOptionList(TDataParse::headerItem2searchList(mTableView->headerItem()));
-            mSearchEntry->setPlaceholderText(ttr("Search %1"));
-        }
-    }
-    if (QMenu *tablePopup = qobject_cast<QMenu *>(uim()->getWidget("TABLEVIEW_POPUP"))) {
-        mTableView->setContextMenu(tablePopup);
-    }
-
-    bodyLayout->addWidget(mTableView, 1);
-
-    if (QToolBar *toolbar = qobject_cast<QToolBar*>(uim()->getWidget("BOTTOM_TOOLBAR"))) {
-        bodyLayout->addWidget(toolbar, 0);
-        mPageTool = qobject_cast<TPageTool *>(uim()->getWidget("BOTTOM_TOOLBAR/PAGE_TOOL"));
-        if (mPageTool != nullptr) {
-            mPageTool->setPageSizeVisible(true);
-            connect(mPageTool, SIGNAL(pageChanged(int,int)), this, SLOT(onPageChanged()));
-        }
-    }
-
-    bodySplitter->addWidget(mBodyWgt);
-    bodySplitter->setStretchFactor(0, 1);
-}
diff --git a/src/plugin/toptemplateclass1.h b/src/plugin/toptemplateclass1.h
deleted file mode 100644
index dd054713d5a8d001862eb8da42b38aa7dadd030a..0000000000000000000000000000000000000000
--- a/src/plugin/toptemplateclass1.h
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef TEMPLATECLASS1_H
-#define TEMPLATECLASS1_H
-
-#include <topcore/topclassabs.h>
-#include <topcore/topclasshelper.h>
-
-class QWidget;
-class TSearchEntry;
-class TPageTool;
-class TTableView;
-
-class TopTemplateClass1 : public TopClassAbs
-{
-    Q_OBJECT
-public:
-    explicit TopTemplateClass1(const QString &iModuleName = QString(""),
-                               const QVariantMap &iUrlPars = QVariantMap(),
-                               QWidget *iParent = nullptr);
-    ~TopTemplateClass1();
-public slots:
-    void refresh(bool iResetPage = true);
-    TTableView *tableView() const;
-    QVariantList selectedItems() const;
-    QVariantList selectedDataMaps() const;
-private slots:
-    void onSelectionChanged();
-    void onPageChanged();
-private:
-    void initUi();
-private:
-    QWidget *mBodyWgt = nullptr;
-    TTableView *mTableView = nullptr;
-    TSearchEntry *mSearchEntry = nullptr;
-    TPageTool *mPageTool = nullptr;
-    TopClassTableConf mTableConf;
-    QVariantList mSelectedLst;
-};
-
-#endif // TEMPLATECLASS1_H
diff --git a/src/plugin/toptemplateclass1a.cpp b/src/plugin/toptemplateclass1a.cpp
deleted file mode 100644
index 1075f7a417c0f4794cc0cd557b3e7b013146fabc..0000000000000000000000000000000000000000
--- a/src/plugin/toptemplateclass1a.cpp
+++ /dev/null
@@ -1,399 +0,0 @@
-#include "toptemplateclass1a.h"
-#include <QtWidgets>
-#include <tbaseutil/tconcurrent.h>
-#include <tbaseutil/tdataparse.h>
-#include <tbaseutil/tdataresponse.h>
-#include <tbaseutil/tenumlist.h>
-#include <tdatabaseutil/tsqlqueryv2.h>
-#include <tdatabaseutil/tsqlselectorv2.h>
-#include <tdatabaseutil/tsqlconnectionpoolv2.h>
-#include <topcore/topcore.h>
-#include <topcore/topclasssqlthread.h>
-#include <topcore/topenummanager.h>
-#include <twidget/tsplitter.h>
-#include <twidget/ttreeview.h>
-#include <twidget/tsearchentry.h>
-
-/*!
- * \class TopTemplateClass1A
- * \inmodule templateclass
- * \brief 该模板只有一个TreeView,支持搜索
- */
-
-TopTemplateClass1A::TopTemplateClass1A(const QString &iModuleName,
-                                       const QVariantMap &iUrlPars,
-                                       QWidget *iParent)
-    : TopClassAbs(iParent)
-{
-    initModule(iModuleName, iUrlPars);
-    QString licenseKey = config("sys_license_key").toString();
-    if (!licenseKey.isEmpty()) {
-        setLicenseKey(licenseKey);
-    }
-    QStringList langLst = config("sys_lang_list").toStringList();
-    for (const auto &lang : langLst) {
-        appendLanguage(lang);
-    }
-    if (isHookExists("afterModuleInit")) {
-        callHooks("afterModuleInit");
-    }
-    TopClassHelper::parseTableConf0(this, "view", &mTreeConf);
-    initUi();
-    if (isHookExists("afterViewInit")) {
-        callHooks("afterViewInit");
-    }
-    restoreSizeState();
-    restoreObjectState(mTreeView);
-    QTimer::singleShot(0, this, SLOT(refresh()));
-}
-
-TopTemplateClass1A::~TopTemplateClass1A()
-{
-    saveSizeState();
-    saveObjectState(mTreeView);
-    if (isHookExists("onDestroy")) {
-        callHooks("onDestroy");
-    }
-}
-
-/*!
- * \brief 刷新数据
- */
-void TopTemplateClass1A::refresh()
-{
-    if (mTreeConf.dbSql.isEmpty() && mTreeConf.dbTableName.isEmpty()) {
-        return;
-    }
-
-    QString groupKey = config("view.group_key").toString();
-    QString parentKey = config("view.parent_key").toString();
-    QString childKey = config("view.child_key").toString();
-    QString seqKey = config("view.seq_key").toString();
-
-    if (mTreeConf.dbSql.isEmpty()) {
-        TSqlSelectorV2 selector;
-        selector.setTable(mTreeConf.dbTableName);
-        QStringList fields = mTreeConf.queryFields;
-        fields.removeOne("_category");
-        selector.setField(fields);
-        selector.setReturnRowCount(false);
-        loading(ttr("Loading"));
-        QVariant data = doThreadWork(new TopClassSqlThread(this),
-                                     TOPSQLTHREAD_SELECT_ARRAYMAP,
-                                     QVariant::fromValue(selector));
-        unloading();
-        TDataResponse response(data.toMap());
-        if (response.hasError()) {
-            alertError(ttr("Load data failed!"));
-        } else {
-            QVariantList tableData = response.data().toList();
-            if (!groupKey.isEmpty()) {
-                loadDataByGrouping(tableData, groupKey, seqKey);
-            } else if (!parentKey.isEmpty() && !childKey.isEmpty()) {
-                loadDataByParent(tableData, parentKey, childKey, seqKey);
-            } else {
-                Q_ASSERT(false);
-            }
-            alertOk(ttr("Data loaded"));
-        }
-    } else {
-        TError err;
-        loading(ttr("Loading"));
-        QVariantList tableData = TConcurrent::runSync([this, &err](){
-            TSqlQueryV2 query(T_SQLCNT_POOL->getSqlDatabase());
-            QVariantList v = query.selectArrayMap(mTreeConf.dbSql, QVariantMap());
-            if (query.lastError().isValid()) {
-                err = query.lastError();
-                return QVariantList();
-            }
-            return v;
-        }).toList();
-        unloading();
-        if (err.isValid()) {
-            alertError(ttr("Load data failed!"), err.text());
-            return;
-        }
-        loadTableData(tableData, groupKey, parentKey, seqKey);
-        alertOk(ttr("Data loaded"));
-    }
-}
-
-/*!
- * \brief 树形控件对象
- */
-TTreeView *TopTemplateClass1A::treeView() const
-{
-    return mTreeView;
-}
-
-/*!
- * \brief 根据配置生成的查询数据库的字段
- */
-QStringList TopTemplateClass1A::queryFields() const
-{
-    return mTreeConf.queryFields;
-}
-
-/*!
- * \brief 当前选中条目的primaryKey
- */
-QVariantList TopTemplateClass1A::selectedItems() const
-{
-    return mSelectedLst;
-}
-
-/*!
- * \brief 当前选中条目的所有数据
- */
-QVariantList TopTemplateClass1A::selectedDataMaps() const
-{
-    return mTreeView->selectedRowDataMaps(true);
-}
-
-/*!
- * \brief 导入树形结构的数据
- * [
- *   {
- *     "name": "",
- *     "CHILDREN": [
- *       {
- *         "name": ""
- *       }
- *     ]
- *   }
- * ]
- */
-void TopTemplateClass1A::loadTreeData(const QVariantList &iTreeData,
-                                      const QString &iChildKey)
-{
-    mTreeView->loadTreeData(iTreeData, iChildKey);
-}
-
-/*!
- * \brief 导入列表数据,此接口已废弃
- * \param iGroupKey 分组Key
- * \param iParentKey 父结点Key, 此值为空时只按iGroupKey分组,树形只有一级
- * \param iSeqKey 同级结点排序的Key
- */
-void TopTemplateClass1A::loadTableData(const QVariantList &iTableData,
-                                       const QString &iGroupKey,
-                                       const QString &iParentKey,
-                                       const QString &iSeqKey)
-{
-    Q_UNUSED(iSeqKey)
-
-    QVariantList tableData = iTableData;
-    TopClassHelper::formatTableData(this, &mTreeConf, tableData);
-    QVariantList data;
-    if (iParentKey.isEmpty()) {
-        QVariantMap categoryMap;
-        for (const auto & i : tableData) {
-            QVariantMap iMap = i.toMap();
-            QString category = iMap.value(iGroupKey).toString();
-            QVariantList items = categoryMap.value(category).toList();
-            items.append(i);
-            categoryMap.insert(category, items);
-        }
-        QMapIterator<QString, QVariant> iter(categoryMap);
-        while (iter.hasNext()) {
-            iter.next();
-            QVariantMap item;
-            item.insert("_category", iter.key());
-            item.insert("CHILDREN", iter.value());
-            data.append(item);
-        }
-    } else {
-        // 此接口已废弃,不支持此分支
-        Q_ASSERT(false);
-    }
-    mTreeView->loadTreeData(data);
-}
-
-/*!
- * \brief 导入列表数据,根据 \a iGroupKey  进行分组,此树形结构只有一级
- */
-void TopTemplateClass1A::loadDataByGrouping(const QVariantList &iTableData,
-                                            const QString &iGroupKey,
-                                            const QString &iSeqKey)
-{
-    Q_UNUSED(iSeqKey)
-    QVariantList tableData = iTableData;
-    TopClassHelper::formatTableData(this, &mTreeConf, tableData);
-    QVariantList data;
-    QVariantMap categoryMap;
-    for (const auto & i : tableData) {
-        QVariantMap iMap = i.toMap();
-        QString category = iMap.value(iGroupKey).toString();
-        QVariantList items = categoryMap.value(category).toList();
-        items.append(i);
-        categoryMap.insert(category, items);
-    }
-    QMapIterator<QString, QVariant> iter(categoryMap);
-    while (iter.hasNext()) {
-        iter.next();
-        QVariantMap item;
-        item.insert("_category", iter.key());
-        item.insert("CHILDREN", iter.value());
-        data.append(item);
-    }
-    mTreeView->loadTreeData(data);
-}
-
-/*!
- * \brief 导入列表数据,根据 \a iParentKey 和 \a iChildKey 生成树,此树形结构可能有多级
- */
-void TopTemplateClass1A::loadDataByParent(const QVariantList &iTableData,
-                                          const QString &iParentKey,
-                                          const QString &iChildKey,
-                                          const QString &iSeqKey)
-{
-    QVariantList tableData = iTableData;
-    TopClassHelper::formatTableData(this, &mTreeConf, tableData);
-    mTreeView->loadTreeData(buildTree(tableData, iParentKey, iChildKey, iSeqKey));
-}
-
-/*!
- * \brief 当选中项发生改变时的槽函数
- */
-void TopTemplateClass1A::onSelectionChanged()
-{
-    mSelectedLst = mTreeView->selectedPrimaryKeys();
-    refreshActionState();
-}
-
-/*!
- * \brief 搜索
- */
-void TopTemplateClass1A::onSearch(const QString &iText, const QVariant &iFields)
-{
-    QRegExp regex(iText);
-    regex.setPatternSyntax(QRegExp::Wildcard);
-    regex.setCaseSensitivity(Qt::CaseInsensitive);
-    auto searchCols = iFields.toStringList();
-    if (searchCols.isEmpty()) {
-        searchCols = mSearchCols;
-    }
-    mTreeView->findRows(regex, searchCols);
-}
-
-/*!
- * \brief 初始化界面
- */
-void TopTemplateClass1A::initUi()
-{
-    TSplitter *bodySplitter = new TSplitter(this);
-    setCentralWidget(bodySplitter);
-
-    mBodyWgt = new QWidget(this);
-    QVBoxLayout *bodyLayout = new QVBoxLayout(mBodyWgt);
-    bodyLayout->setMargin(0);
-    bodyLayout->setSpacing(0);
-
-    mTreeView = new TTreeView(this);
-    mTreeView->setObjectName("mTreeView");
-    mTreeView->header()->setStretchLastSection(true);
-    connect(mTreeView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
-            this, SLOT(onSelectionChanged()));
-    QStringList dataKeys = mTreeConf.dataKeys;
-    dataKeys.append("_category");
-    mTreeView->setDataKeyList(dataKeys);
-    mTreeView->setPrimaryKey(mTreeConf.primaryKey);
-    mTreeView->setHeaderItem(mTreeConf.horizontalHeaders);
-
-    if (QToolBar *toolbar = qobject_cast<QToolBar*>(uim()->getWidget("MAIN_TOOLBAR"))) {
-        bodyLayout->addWidget(toolbar, 0);
-        mSearchEntry = qobject_cast<TSearchEntry *>(uim()->getWidget("MAIN_TOOLBAR/SEARCH_ENTRY"));
-        if (mSearchEntry != nullptr) {
-            auto searchLst = TDataParse::headerItem2searchList(mTreeView->headerItem());
-            for (auto i : searchLst) {
-                mSearchCols.push_back(i.toMap().value("name").toString());
-            }
-            mSearchEntry->setOptionList(searchLst);
-            mSearchEntry->setPlaceholderText(ttr("Search %1"));
-            connect(mSearchEntry, SIGNAL(search(QString,QVariant)),
-                    this, SLOT(onSearch(QString,QVariant)));
-        }
-    }
-    if (QMenu *tablePopup = qobject_cast<QMenu *>(uim()->getWidget("TREEVIEW_POPUP"))) {
-        mTreeView->setContextMenu(tablePopup);
-    }
-
-    bodyLayout->addWidget(mTreeView, 1);
-
-    if (QToolBar *toolbar = qobject_cast<QToolBar*>(uim()->getWidget("BOTTOM_TOOLBAR"))) {
-        bodyLayout->addWidget(toolbar, 0);
-    }
-
-    bodySplitter->addWidget(mBodyWgt);
-    bodySplitter->setStretchFactor(0, 1);
-}
-
-/*!
- * \brief 根据列表数据生成树形数据
- */
-QVariantList TopTemplateClass1A::buildTree(const QVariantList &iDataLst,
-                                           const QString &iParentKey,
-                                           const QString &iChildKey,
-                                           const QString &iSeqKey)
-{
-    if (iDataLst.isEmpty()) {
-        return QVariantList();
-    }
-
-    QVariantList ret;
-    QVariantList toplevel;
-    QVariantMap parentDataMap;
-    QVariantMap tmpDataMap;
-
-    auto sequencePred = [iSeqKey](const QVariant &left, const QVariant &right) ->bool {
-        return left.toMap().value(iSeqKey).toInt() < right.toMap().value(iSeqKey).toInt();
-    };
-    std::function<QVariantList(const QVariantMap &)> getChildren;
-    getChildren = [&getChildren, &parentDataMap, &iChildKey, &sequencePred](const QVariantMap &iRowMap) ->QVariantList  {
-        if (parentDataMap.contains(iRowMap.value(iChildKey).toString())) {
-            QVariantList childLst;
-            QVariantList tmp = parentDataMap.value(iRowMap.value(iChildKey).toString()).toList();
-            for (const auto & child : tmp) {
-                QVariantMap childMap = child.toMap();
-                QVariantList children  = getChildren(childMap);
-                if (!children.isEmpty()) {
-                    std::sort(children.begin(), children.end(), sequencePred);
-                    childMap.insert("CHILDREN", children);
-                }
-                childLst.append(childMap);
-            }
-            return childLst;
-        } else {
-            return QVariantList();
-        }
-    };
-
-    for (const auto & i : iDataLst) {
-        QVariantMap iMap = i.toMap();
-        QVariantList childrenList = parentDataMap.value(
-                    iMap.value(iParentKey).toString()).toList();
-        childrenList.append(iMap);
-        parentDataMap.insert(iMap.value(iParentKey).toString(), childrenList);
-        tmpDataMap.insert(iMap.value(iChildKey).toString(), iMap);
-    }
-
-    for (const auto & i : iDataLst) {
-        QVariantMap dataMap = i.toMap();
-        QString parentId = dataMap.value(iParentKey).toString();
-        if (!tmpDataMap.contains(parentId)) {
-            toplevel.append(dataMap);
-        }
-    }
-
-    for (const auto & i : toplevel) {
-        QVariantMap iMap = i.toMap();
-        QVariantList children = getChildren(iMap);
-        if (!children.isEmpty()) {
-            std::sort(children.begin(), children.end(), sequencePred);
-            iMap.insert("CHILDREN", children);
-        }
-        ret.append(iMap);
-    }
-    std::sort(ret.begin(), ret.end(), sequencePred);
-    return ret;
-}
diff --git a/src/plugin/toptemplateclass1a.h b/src/plugin/toptemplateclass1a.h
deleted file mode 100644
index 9b8dd7d911836c53f4a4e5e18764b3ac5bda088f..0000000000000000000000000000000000000000
--- a/src/plugin/toptemplateclass1a.h
+++ /dev/null
@@ -1,56 +0,0 @@
-#ifndef TEMPLATECLASS1A_H
-#define TEMPLATECLASS1A_H
-
-#include <topcore/topclassabs.h>
-#include <topcore/topclasshelper.h>
-
-class QWidget;
-class TTreeView;
-class TSearchEntry;
-
-class TopTemplateClass1A : public TopClassAbs
-{
-    Q_OBJECT
-public:
-    explicit TopTemplateClass1A(const QString &iModuleName = QString(""),
-                                const QVariantMap &iUrlPars = QVariantMap(),
-                                QWidget *iParent = nullptr);
-    ~TopTemplateClass1A();
-public slots:
-    void refresh();
-    TTreeView *treeView() const;
-    QStringList queryFields() const;
-    QVariantList selectedItems() const;
-    QVariantList selectedDataMaps() const;
-    void loadTreeData(const QVariantList &iTreeData,
-                      const QString &iChildKey = QString("CHILDREN"));
-    Q_DECL_DEPRECATED void loadTableData(const QVariantList &iTableData,
-                                         const QString &iGroupKey,
-                                         const QString &iParentKey,
-                                         const QString &iSeqKey);
-    void loadDataByGrouping(const QVariantList &iTableData,
-                            const QString &iGroupKey,
-                            const QString &iSeqKey);
-    void loadDataByParent(const QVariantList &iTableData,
-                          const QString &iParentKey,
-                          const QString &iChildKey,
-                          const QString &iSeqKey);
-private slots:
-    void onSelectionChanged();
-    void onSearch(const QString &iText, const QVariant &iFields);
-private:
-    void initUi();
-    QVariantList buildTree(const QVariantList &iDataLst,
-                           const QString &iParentKey,
-                           const QString &iChildKey,
-                           const QString &iSeqKey);
-private:
-    QWidget *mBodyWgt = nullptr;
-    TTreeView *mTreeView = nullptr;
-    TSearchEntry *mSearchEntry = nullptr;
-    QStringList mSearchCols;
-    TopClassTableConf mTreeConf;
-    QVariantList mSelectedLst;
-};
-
-#endif // TEMPLATECLASS1A_H
diff --git a/src/plugin/toptemplateclass2.cpp b/src/plugin/toptemplateclass2.cpp
deleted file mode 100644
index d16547bbe0c28270804d99d3a4e5cf91a58274ff..0000000000000000000000000000000000000000
--- a/src/plugin/toptemplateclass2.cpp
+++ /dev/null
@@ -1,182 +0,0 @@
-#include "toptemplateclass2.h"
-#include <QtWidgets>
-#include <tbaseutil/tconcurrent.h>
-#include <tdatabaseutil/tsqlqueryv2.h>
-#include <tdatabaseutil/tsqlselectorv2.h>
-#include <tdatabaseutil/tsqlconnectionpoolv2.h>
-#include <topcore/topcore.h>
-#include <topcore/topclasshelper.h>
-#include <topcore/topclasssqlthread.h>
-#include <twidget/tuiloader.h>
-
-/*!
- * \class TopTemplateClass2
- * \inmodule templateclass
- * \brief 表单模板。常用做表单展示。
- */
-
-TopTemplateClass2::TopTemplateClass2(const QString &iModuleName,
-                                     const QVariantMap &iUrlPars,
-                                     QWidget *iParent)
-    : TopClassAbs(iParent)
-{
-    initModule(iModuleName, iUrlPars);
-    QString licenseKey = config("sys_license_key").toString();
-    if (!licenseKey.isEmpty()) {
-        setLicenseKey(licenseKey);
-    }
-    QStringList langLst = config("sys_lang_list").toStringList();
-    for (const auto &lang : langLst) {
-        appendLanguage(lang);
-    }
-    if (isHookExists("afterModuleInit")) {
-        callHooks("afterModuleInit");
-    }
-    initUi();
-    if (isHookExists("afterViewInit")) {
-        callHooks("afterViewInit");
-    }
-    QTimer::singleShot(0, this, SLOT(refresh()));
-}
-
-TopTemplateClass2::~TopTemplateClass2()
-{
-    if (isHookExists("onDestroy")) {
-        callHooks("onDestroy");
-    }
-}
-
-/*!
- * \brief 设置表单,\a iKey 为 该模块中对应的ui.js文件
- */
-void TopTemplateClass2::setUiKey(const QString &iKey)
-{
-    if (mUiLoader == nullptr) {
-        return;
-    }
-    mUiLoader->setUiStr(ui(iKey).toString());
-}
-
-/*!
- * \brief 设置表单,\a iUi 为表单界面的字符串
- */
-void TopTemplateClass2::setUiStr(const QString &iUi)
-{
-    if (mUiLoader == nullptr) {
-        return;
-    }
-    mUiLoader->setUiStr(iUi);
-}
-
-/*!
- * \brief 刷新数据
- */
-void TopTemplateClass2::refresh()
-{
-    QString sql = config("uiloader.data_set.db_sql").toString();
-    if (sql.isEmpty()) {
-        QString tableName = config("uiloader.data_set.db_table_name").toString();
-        if (!tableName.isEmpty()) {
-            TSqlSelectorV2 selector;
-            selector.setTable(tableName);
-            selector.setField(TopClassHelper::fetchQueryFieldsFromUi(mUiLoader));
-            QVariantMap filterMap = config("uiloader.data_set.db_filter").toMap();
-            if (!filterMap.isEmpty()) {
-                QMapIterator<QString, QVariant> i(filterMap);
-                while (i.hasNext()) {
-                    i.next();
-                    selector.addWhere(i.key(), i.value());
-                }
-            }
-            TError err;
-            QVariantMap data = runSqlQueryOnThreadSync(TOPSQLTHREAD_SELECT_MAP, QVariant::fromValue(selector), &err).toMap();
-            if (err.isValid()) {
-                alertError(ttr("Load data failed!"), err.text());
-                return;
-            }
-            mUiLoader->loadValues(data);
-        }
-    } else {
-        TError err;
-        QVariantMap data = TConcurrent::runSync([this, &err, sql](){
-            TSqlQueryV2 query(T_SQLCNT_POOL->getSqlDatabase());
-            QVariantMap v = query.selectMap(sql, QVariantMap());
-            if (query.lastError().isValid()) {
-                err = query.lastError();
-                return QVariantMap();
-            }
-            return v;
-        }).toMap();
-        if (err.isValid()) {
-            alertError(ttr("Load data failed!"), err.text());
-            return;
-        }
-        mUiLoader->loadValues(data);
-    }
-}
-
-/*!
- * \brief 表单的查询数据库的字段
- */
-QStringList TopTemplateClass2::queryFields() const
-{
-    return TopClassHelper::fetchQueryFieldsFromUi(mUiLoader);
-}
-
-/*!
- * \brief 表单控件
- */
-TUiLoader *TopTemplateClass2::uiLoader()
-{
-    return mUiLoader;
-}
-
-/*!
- * \brief 表单当前的数据
- */
-QVariant TopTemplateClass2::uiLoaderValues() const
-{
-    return mUiLoader->getAllValues(true).toVariant();
-}
-
-/*!
- * \brief 当表单数据发生改变时的槽函数
- */
-void TopTemplateClass2::onDataChanged()
-{
-    setDataModified(true);
-}
-
-/*!
- * \brief 初始化界面
- */
-void TopTemplateClass2::initUi()
-{
-    QWidget *bodyWgt = new QWidget(this);
-    setCentralWidget(bodyWgt);
-
-    QVBoxLayout *bodyLayout = new QVBoxLayout(bodyWgt);
-    bodyLayout->setSpacing(0);
-    bodyLayout->setMargin(0);
-
-    if (QToolBar *toolbar = qobject_cast<QToolBar*>(uim()->getWidget("MAIN_TOOLBAR"))) {
-        bodyLayout->addWidget(toolbar, 0);
-    }
-
-    mUiLoader = new TUiLoader(this);
-    const QStringList typePlugins = config("uiloader_plugins").toStringList();
-    if (typePlugins.size() > 0) {
-        TopClassHelper::setUiLoaderPluginCallback(mUiLoader,this,typePlugins);
-    }
-    connect(mUiLoader, SIGNAL(dataChanged()), this, SLOT(onDataChanged()));
-    bodyLayout->addWidget(mUiLoader, 1);
-
-    mUiLoader->setScriptEngine(APP->scriptEngine());
-    mUiLoader->setSelf(this);
-
-    QString uiStr = config("uiloader.ui_str").toString();
-    if (uiStr.isEmpty()) {
-        uiStr = ui(config("uiloader.ui_key").toString()).toString();
-    }
-    setUiStr(uiStr);
-}
diff --git a/src/plugin/toptemplateclass2.h b/src/plugin/toptemplateclass2.h
deleted file mode 100644
index 30710ea5298360a8692af699f2ce913ee3ae7f12..0000000000000000000000000000000000000000
--- a/src/plugin/toptemplateclass2.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef TOPTEMPLATECLASS2_H
-#define TOPTEMPLATECLASS2_H
-
-#include <topcore/topclassabs.h>
-
-class TUiLoader;
-
-class TopTemplateClass2 : public TopClassAbs
-{
-    Q_OBJECT
-public:
-    explicit TopTemplateClass2(const QString &iModuleName = QString(""),
-                               const QVariantMap &iUrlPars = QVariantMap(),
-                               QWidget *iParent = nullptr);
-    ~TopTemplateClass2();
-public slots:
-    void setUiKey(const QString &iKey);
-    void setUiStr(const QString &iUi);
-    void refresh();
-    QStringList queryFields() const;
-    TUiLoader *uiLoader();
-    QVariant uiLoaderValues() const;
-private slots:
-    void onDataChanged();
-private:
-    void initUi();
-private:
-    TUiLoader *mUiLoader = nullptr;
-};
-
-#endif // TOPTEMPLATECLASS2_H
diff --git a/src/plugin/toptemplateclass3.h b/src/plugin/toptemplateclass3.h
deleted file mode 100644
index 4ab89c2809c4ba748bd7d5e785e2a558cb7a68ba..0000000000000000000000000000000000000000
--- a/src/plugin/toptemplateclass3.h
+++ /dev/null
@@ -1,65 +0,0 @@
-#ifndef TEMPLATECLASS3_H
-#define TEMPLATECLASS3_H
-
-#include <topcore/topclassabs.h>
-#include <topcore/topclasshelper.h>
-
-class TTableView;
-class TUiLoader;
-class TSearchEntry;
-class TPageTool;
-class TSplitter;
-
-class TopTemplateClass3 : public TopClassAbs
-{
-    Q_OBJECT
-public:
-    explicit TopTemplateClass3(const QString &iModuleName = QString(""),
-                               const QVariantMap &iUrlPars = QVariantMap(),
-                               QWidget *iParent = nullptr);
-    ~TopTemplateClass3();
-public slots:
-    void refresh(bool iResetPage = true);
-    void refreshDetail(const QString &iUid);
-    QString detailUid() const;
-    void setDetailUid(const QString &iUid, bool iForceRefresh = false);
-    bool isDetailModified() const;
-    void setIsDetailModified(bool iIsDetailModified);
-    QVariantList selectedItems() const;
-    QVariantList selectedDataMaps() const;
-    void newItem();
-    void saveItem();
-    void reloadItem();
-    void copyItem();
-    void deleteItems(const QVariantList &iItems);
-    TTableView *tableView() const;
-    TUiLoader *uiLoader() const;
-signals:
-    void isDetailModifiedChanged(bool iIsDetailModified);
-    void detailUidChanged(const QString &iDetailUid);
-    void detailSaved(const QString &iUid);
-    void selectionChanged();
-private slots:
-    void onPageChanged();
-    void onDetailDataChanged();
-    void onDetailSaved(const QString &iUid);
-    void onDetailChanged(bool iIsDetailModified);
-    void onSelectionChanged();
-private:
-    void initUi();
-private:
-    TSplitter *mBodySplitter = nullptr;
-    QWidget *mBodyWgt = nullptr;
-    TTableView *mTableView = nullptr;
-    TSearchEntry *mSearchEntry = nullptr;
-    TPageTool *mPageTool = nullptr;
-    TUiLoader *mDetailView = nullptr;
-    TopClassTableConf mTableConf;
-    bool mIsDetailModified = false;
-    QVariantList mSelectedItems;
-    QString mLastDetailUid;
-    QString mDetailUid;
-    QTimer *mRefreshTimer = nullptr;
-};
-
-#endif // TEMPLATECLASS3_H
diff --git a/src/plugin/toptemplateclass4.cpp b/src/plugin/toptemplateclass4.cpp
deleted file mode 100644
index 6a376108e378560470929760f5995a06e7057a13..0000000000000000000000000000000000000000
--- a/src/plugin/toptemplateclass4.cpp
+++ /dev/null
@@ -1,1372 +0,0 @@
-#include "toptemplateclass4.h"
-#include <QtWidgets>
-#include <tbaseutil/tdataparse.h>
-#include <tbaseutil/tdataresponse.h>
-#include <tbaseutil/tenumlist.h>
-#include <tbaseutil/tfileio.h>
-#include <tbaseutil/ttheme.h>
-#include <tbaseutil/tresource.h>
-#include <tdatabaseutil/tsqlqueryv2.h>
-#include <tdatabaseutil/tsqlconnectionpoolv2.h>
-#include <topcore/topcore.h>
-#include <topcore/topclasssqlthread.h>
-#include <topcore/topenummanager.h>
-#include <toputil/t.h>
-#include <twidget/tsplitter.h>
-#include <twidget/ttableview.h>
-#include <twidget/tcategorytreeview.h>
-#include <twidget/tsearchentry.h>
-#include <twidget/tpagetool.h>
-#include <twidget/tuiloader.h>
-#include <twidget/taccordion.h>
-#include <twidget/tadvancedquery.h>
-#include <twidget/tmessagebox.h>
-#include <twidget/tscrollarea.h>
-#include <twidget/ttabwidget.h>
-#include <twidget/ttablechooserdialog.h>
-#include <twidget/tuiloaderdialog.h>
-
-
-
-TopTemplateClass4::TopTemplateClass4(const QString &iModuleName,
-                                     const QVariantMap &iUrlPars,
-                                     QWidget *iParent)
-    : TopClassAbs(iParent)
-{
-    initModule(iModuleName, iUrlPars);
-    QString licenseKey = config("sys_common").toString();
-    if (!licenseKey.isEmpty()) {
-        setLicenseKey(licenseKey);
-    }
-    QStringList langLst = config("lang.conf").toStringList();
-    for (const auto &lang : langLst) {
-        appendLanguage(lang);
-    }
-    if (isHookExists("afterModuleInit")) {
-        callHooks("afterModuleInit");
-    }
-    TopClassHelper::parseTableConf0(this, "view", &mTableConf);
-    initUi();
-    connect(this, SIGNAL(detailSaved(QString)),
-            this, SLOT(onDetailSaved(QString)));
-    connect(this, SIGNAL(isDetailModifiedChanged(bool)),
-            this, SLOT(onDetailChanged(bool)));
-    connect(this, SIGNAL(detailUidChanged(QString)),
-            this, SLOT(refreshDetail(QString)));
-    connect(this, SIGNAL(viewConfChanged()),
-            this, SLOT(onViewConfChanged()));
-    if (isHookExists("afterViewInit")) {
-        callHooks("afterViewInit");
-    }
-    restoreSizeState();
-    restoreObjectState(mBodySplitter);
-    restoreObjectState(mTableView);
-
-    refreshActionState();
-    QTimer::singleShot(0, this, SLOT(refresh()));
-    if (mNaviType == NaviType::CategoryTreeView) {
-        (qobject_cast<TCategoryTreeView *>(mNaviView))->refresh();
-    }
-
-    auto refreshInterval = config("view.timing_refresh_interval", 0).toInt();
-    if (refreshInterval > 0) {
-        mRefreshTimer = new QTimer(this);
-        connect(mRefreshTimer, &QTimer::timeout, [=]() {
-            this->callAction("refresh");
-        });
-        mRefreshTimer->start(refreshInterval * 1000);
-    }
-}
-
-TopTemplateClass4::~TopTemplateClass4()
-{
-    saveSizeState();
-    saveObjectState(mBodySplitter);
-    saveObjectState(mTableView);
-
-    if (isHookExists("onDestroy")) {
-        callHooks("onDestroy");
-    }
-}
-
-/*!
- * \brief 返回详细信息模块是否发生数据改变
- */
-bool TopTemplateClass4::isDetailModified() const
-{
-    return mIsDetailModified;
-}
-
-/*!
- * \brief 刷新数据,\a iResetPage 表示是否要重置分页
- */
-void TopTemplateClass4::refresh(bool iResetPage)
-{
-    TSqlSelectorV2 selector;
-    if (!mTableConf.dbSql.isEmpty()) {
-        selector.setTable(QString("(%1) _TEMP_TABLE_").arg(mTableConf.dbSql));
-    } else if (!mTableConf.dbTableName.isEmpty()) {
-        selector.setTable(mTableConf.dbTableName);
-    } else {
-        // db_sql为空和db_table_name为空时不作处理
-        return;
-    }
-    selector.setField(mTableConf.queryFields);
-    selector.setFieldFormat(mTableConf.fieldFormatMap);
-    selector.setReturnRowCount(true);
-    // 搜索分页
-    TopClassHelper::handleSearchPageOnQuery(mSearchEntry, mPageTool, iResetPage, &selector);
-    // 排序
-    TopClassHelper::handleOrderOnQuery(mTableView, &mTableConf, &selector);
-    // 只获取有效数据
-    if (!mTableConf.dbDelFlagKey.isEmpty()) {
-        selector.addWhere(QString("%1 = 0 OR %1 IS NULL").arg(mTableConf.dbDelFlagKey));
-    }
-    // 过滤项
-    if(!mTableConf.dbFilter.isEmpty()) {
-        selector.addWhere(mTableConf.dbFilter);
-    }
-    // 导航栏过滤项
-    if (mNaviType == NaviType::None) {
-        // do nothing
-    } else if (mNaviType == NaviType::UiLoader) {
-        QString whereStr = uiloaderWhere();
-        if (!whereStr.isEmpty()) {
-            selector.addWhere(whereStr);
-        }
-    } else if (mNaviType == NaviType::AdvancedQuery) {
-        Q_ASSERT_X(false, "TopTemplateClass4", "This feature is not yet supported.");
-    } else if (mNaviType == NaviType::NaviFilter) {
-        Q_ASSERT_X(false, "TopTemplateClass4", "This feature is not yet supported.");
-    } else if (mNaviType == NaviType::CategoryTreeViewAndAdvancedQuery) {
-        if (!mCategoryWhere.isEmpty()) {
-            selector.addWhere(mCategoryWhere.toSql());
-        }
-        TAdvancedQuery *advancedQuery = findAdvancedQuery();
-        if (advancedQuery != nullptr) {
-            if (!advancedQuery->getSql().isEmpty()) {
-                selector.addWhere(advancedQuery->getSql());
-            }
-        }
-    } else {
-        if (!mCategoryWhere.isEmpty()) {
-            selector.addWhere(mCategoryWhere.toSql());
-        }
-    }
-
-    t::loading(this);
-    QVariant data = doThreadWork(new TopClassSqlThread(this), TOPSQLTHREAD_SELECT_ARRAYMAP, QVariant::fromValue(selector));
-    unloading();
-    TDataResponse response(data.toMap());
-    if (response.hasError()) {
-        alertError(ttr("Load data failed!"));
-    } else {
-        if (mPageTool != nullptr) {
-            mPageTool->setRowCount(response.dataCount(), true);
-        }
-        QVariantList tableData = response.data().toList();
-        TopClassHelper::formatTableData(this, &mTableConf, tableData);
-        if (isHookExists("handleTableData")) {
-            tableData = callHooksQuick("handleTableData", QVariantList() << QVariant(tableData)).toVariant().toList();
-        }
-        mTableView->loadData(tableData);
-        mTableView->adjustViewSpan(mTableConf.mergeKeys);
-        mSelectedItems.clear();
-        setDetailUid(QString());
-        alertOk(ttr("Data loaded"));
-    }
-}
-
-/*!
- * \brief 刷新详细信息
- */
-void TopTemplateClass4::refreshDetail(const QString &iUid)
-{
-    if (iUid.isEmpty()) {
-        mDetailView->loadValues(QVariantMap(), true);
-    } else {
-        TSqlSelectorV2 selector;
-        if (!mTableConf.dbSql.isEmpty()) {
-            selector.setTable(QString("(%1) _TEMP_TABLE_").arg(mTableConf.dbSql));
-        } else if (!mTableConf.dbTableName.isEmpty()) {
-            selector.setTable(mTableConf.dbTableName);
-        } else {
-            //db_sql为空和db_table_name为空时不作处理
-            return;
-        }
-        selector.setField(mTableConf.queryFields);
-        selector.setWhere(mTableConf.primaryKey, iUid);
-        selector.setFieldFormat(mTableConf.fieldFormatMap);
-        TError err;
-        QVariant data = runSqlQueryOnThreadSync(TOPSQLTHREAD_SELECT_MAP,
-                                                QVariant::fromValue(selector),
-                                                &err);
-        if (err.isValid()) {
-            alertError(ttr("Load data failed!"), err.text());
-            return;
-        }
-        QVariantMap dataMap = data.toMap();
-        mDetailView->loadValues(dataMap, true);
-    }
-    alertOk(ttr("Data loaded"));
-    setIsDetailModified(false);
-}
-
-/*!
- * \brief 当前的详细信息的UID
- */
-QString TopTemplateClass4::detailUid() const
-{
-    return mDetailUid;
-}
-
-/*!
- * \brief 设置详细信息的UID为 \a iUid,
- * 如果 \a iForceRefresh 为 true, 表示无论UID发生改变,都强制刷新
- */
-void TopTemplateClass4::setDetailUid(const QString &iUid, bool iForceRefresh)
-{
-    if (iForceRefresh || mDetailUid != iUid) {
-        mDetailUid = iUid;
-        emit detailUidChanged(iUid);
-    }
-}
-
-/*!
- * \brief 设置详细信息的数据改变状态
- */
-void TopTemplateClass4::setIsDetailModified(bool iIsDetailModified)
-{
-    if (mIsDetailModified == iIsDetailModified) {
-        return;
-    }
-    mIsDetailModified = iIsDetailModified;
-    emit isDetailModifiedChanged(iIsDetailModified);
-}
-
-/*!
- * \brief 当前选中条目的primaryKey
- */
-QVariantList TopTemplateClass4::selectedItems() const
-{
-    return mSelectedItems;
-}
-
-/*!
- * \brief 当前选中条目的所有数据
- */
-QVariantList TopTemplateClass4::selectedDataMaps() const
-{
-    return mTableView->selectedRowDataMaps(true);
-}
-
-/*!
- * \brief 新建条目
- */
-void TopTemplateClass4::newItem()
-{
-    mLastDetailUid = mDetailUid;
-    setDetailUid(QString());
-    setIsDetailModified(true);
-}
-
-/*!
- * \brief 保存条目
- */
-void TopTemplateClass4::saveItem()
-{
-    QVariantList errLst = mDetailView->validateAll("COMMIT", true, "ERROR");
-    if (!errLst.isEmpty()) {
-        QStringList errStrLst;
-        for (QVariant err : errLst) {
-            errStrLst.append(err.toMap().value("text").toString());
-        }
-        alertError(ttr("Save data failed!"), errStrLst.join("\n"));
-        return;
-    }
-    TSqlInserterV2 inserter;
-    inserter.setTable(mTableConf.dbTableName);
-    QVariantMap saveData;
-    QMap<QString, QString> updatePolicy;
-    TopClassHelper::fetchSaveFieldsFromUi(mDetailView, saveData, updatePolicy);
-    inserter.setUniqueField(mTableConf.primaryKey);
-    inserter.setAutoIncrementField(mTableConf.primaryKey);
-    saveData.insert(mTableConf.primaryKey, mDetailUid);
-    // 添加过滤项数据
-    if (config("view.data_set.db_filter").type() == QVariant::Map) {
-        QVariantMap dbFilterMap = config("view.data_set.db_filter").toMap();
-        QMapIterator<QString, QVariant> i(dbFilterMap);
-        while (i.hasNext()) {
-            i.next();
-            saveData.insert(i.key(), i.value());
-        }
-    }
-    inserter.setData(saveData);
-    QStringList fields = saveData.keys();
-    fields.removeOne(mTableConf.primaryKey);
-    inserter.setField(fields);
-    // 设置更新策略
-    {
-        QMapIterator<QString, QString> i(updatePolicy);
-        while (i.hasNext()) {
-            i.next();
-            inserter.setUpdatePolicy(i.key(), i.value());
-        }
-    }
-    TError err;
-    QVariant result = runSqlQueryOnThreadSync(TOPSQLTHREAD_REPLACE_ROW,
-                                              QVariant::fromValue(inserter),
-                                              &err);
-    if (err.isValid()) {
-        alertError(ttr("Save data failed!"), err.text());
-        return;
-    }
-    emit detailSaved(result.toString());
-    setIsDetailModified(false);
-    alertOk(ttr("Data saved"));
-}
-
-/*!
- * \brief 重新载入条目
- */
-void TopTemplateClass4::reloadItem()
-{
-    setDetailUid(mLastDetailUid.isEmpty() ? mDetailUid : mLastDetailUid, true);
-}
-
-/*!
- * \brief 复制条目
- */
-void TopTemplateClass4::copyItem()
-{
-    mLastDetailUid = mDetailUid;
-    mDetailUid = "";
-    setIsDetailModified(true);
-}
-
-/*!
- * \brief 删除条目
- */
-void TopTemplateClass4::deleteItems(const QVariantList &iItems)
-{
-    if (mTableConf.dbDelFlagKey.isEmpty()) {
-        // 物理删除
-        TSqlDeleterV2 deleter;
-        deleter.setTable(mTableConf.dbTableName);
-        deleter.setWhere(mTableConf.primaryKey, iItems);
-        TError err;
-        runSqlQueryOnThreadSync(TOPSQLTHREAD_DELETE_ROW,
-                                QVariant::fromValue(deleter),
-                                &err);
-        if (err.isValid()) {
-            alertError(ttr("Delete data failed!"), err.text());
-        } else {
-            refresh(true);
-            alertOk(ttr("Data deleted"));
-        }
-    } else {
-        // 逻辑删除
-        TSqlUpdaterV2 updater;
-        updater.setTable(mTableConf.dbTableName);
-        updater.setWhere(mTableConf.primaryKey, iItems);
-        updater.setData(QVariantMap {{mTableConf.dbDelFlagKey, 1}});
-        TError err;
-        runSqlQueryOnThreadSync(TOPSQLTHREAD_UPDATE_ROW,
-                                QVariant::fromValue(updater),
-                                &err);
-        if (err.isValid()) {
-            alertError(ttr("Delete data failed!"), err.text());
-        } else {
-            refresh(true);
-            alertOk(ttr("Moved to recycle bin"));
-        }
-    }
-}
-
-/*!
- * \brief 表格控件对象
- */
-TTableView *TopTemplateClass4::tableView() const
-{
-    return mTableView;
-}
-
-/*!
- * \brief 详细信息的表单对象
- */
-TUiLoader *TopTemplateClass4::uiLoader() const
-{
-    return mDetailView;
-}
-
-/*!
- * \brief 导航控件
- */
-QWidget *TopTemplateClass4::naviView() const
-{
-    return mNaviView;
-}
-
-/*!
- * \brief 当选中发生改变时的槽函数
- */
-void TopTemplateClass4::onSelectionChanged()
-{
-    mSelectedItems = mTableView->selectedPrimaryKeys();
-    QString curId;
-    if (!mSelectedItems.isEmpty()) {
-        curId = mSelectedItems.first().toString();
-    }
-    if (mDetailUid != curId) {
-        mLastDetailUid = curId;
-        if (!mIsDetailModified) {
-            setDetailUid(curId);
-        }
-    }
-    refreshActionState();
-}
-
-/*!
- * \brief 当分页发生改变时的槽函数
- */
-void TopTemplateClass4::onPageChanged()
-{
-    refresh(false);
-}
-
-/*!
- * \brief 当导航栏过滤选项发生改变时的槽函数
- */
-void TopTemplateClass4::onCategoryViewDataChanged(const QVariantList iDataLst)
-{
-    mCategoryWhere.clear();
-    QString format = config("navi.format", "filter_by_enum").toString();
-    if (!iDataLst.isEmpty()) {
-        if (format.compare("filter_by_enum") == 0) {
-            QVariantMap cateMap;
-            for (QVariant item: iDataLst) {
-                QVariantMap itemMap = item.toMap();
-                QString data = itemMap.value("data").toString();
-                QString name = itemMap.value("name").toString();
-                if (data.isEmpty()) {
-                    continue;
-                }
-                cateMap.insertMulti(data,name);
-            }
-            for (QString field: cateMap.uniqueKeys()) {
-                QString dbField = field;
-                TSqlWhereCompsiteV2 childWhere;
-                childWhere.setLogic(TSqlWhereCompsiteV2::Logic_Or);
-                for (QVariant ele: cateMap.values(field)) {
-                    QString value = ele.toString();
-                    if (mTableConf.fieldFormatMap.contains(dbField)) {
-                        QString fieldValue = mTableConf.fieldFormatMap.value(dbField).toString();
-                        if (fieldValue.compare("array") == 0) {
-                            QString sqlStr = QString("%1 @> '{%2}' ").arg(dbField).arg(value);
-                            childWhere.append(sqlStr);
-                        }
-                    } else {
-                        childWhere.append(dbField, value);
-                    }
-                }
-                mCategoryWhere.append(childWhere);
-            }
-        } else if (format.compare("filter_by_sql_where") == 0) {
-            QVariantMap item = iDataLst.at(0).toMap();
-            QString sqlWhere = item.value("data").toString();
-            if (!sqlWhere.isEmpty()) {
-                mCategoryWhere.append(sqlWhere);
-            }
-        }
-    }
-    refresh();
-}
-
-/*!
- * \brief 当详细信息表单数据发生改变时的槽函数
- */
-void TopTemplateClass4::onDetailDataChanged()
-{
-    setIsDetailModified(true);
-}
-
-/*!
- * \brief 当详细信息表单保存成功时的槽函数
- */
-void TopTemplateClass4::onDetailSaved(const QString &iUid)
-{
-    refresh(false);
-    mTableView->selectRow(iUid);
-    mDetailUid = iUid;
-}
-
-/*!
- * \brief 当详细信息表单数据改变状态发生变化时的槽函数
- */
-void TopTemplateClass4::onDetailChanged(bool iIsDetailModified)
-{
-    mTableView->setEnabled(!iIsDetailModified);
-    if (iIsDetailModified) {
-        showMaskFrame(mMgtSplitter);
-    } else {
-        hideMaskFrame();
-    }
-    refreshActionState();
-}
-
-/*!
- * \brief 当module中view配置改变时的槽函数
- */
-void TopTemplateClass4::onViewConfChanged()
-{
-    TopClassHelper::parseTableConf0(this, "view", &mTableConf);
-}
-
-/**
-* \brief 当高级查询界面的添加按钮触发时的槽函数
-*/
-void TopTemplateClass4::onAddActionTriggered()
-{
-    TAdvancedQuery *advancedQuery = findAdvancedQuery();
-    if (advancedQuery == nullptr) {
-        return;
-    }
-
-    TTableChooserDialog *dialog = new TTableChooserDialog(this);
-    dialog->setTitle(tr("Please select field:"));
-    dialog->setButtons(QStringList()
-                       << ttr("Ok") + ":Ok:Yes"
-                       << ttr("Cancel") + ":Cancel:Cancel"
-                       << QString("%1:UnselectAll:ResetRole").arg(tr("Clear selection")));
-    QVariantList headeritems;
-    headeritems << QVariant() << TDataParse::stringList2VariantMap(
-                       QStringList() << "name" << "title" << "display" << tr("Field") << "displayRole" << "$title"<<"resizeMode" << "Stretch");
-    dialog->setHeaderItem(headeritems);
-    dialog->setDataKeyList(QStringList() << "title" << "name");
-    dialog->setPrimaryKey("name");
-    dialog->setSearchKeys(QStringList() << "title");
-    dialog->setLeftTableSelectionMode(QAbstractItemView::ExtendedSelection);
-    dialog->setRightTableSelectionMode(QAbstractItemView::ExtendedSelection);
-    dialog->tableView()->verticalHeader()->setVisible(false);
-    dialog->selectedTableView()->verticalHeader()->setVisible(false);
-    dialog->loadAllData(getAdvancedQueryFieldList());
-    dialog->loadSelectedData(advancedQuery->getQueryData().value("value").toList());
-
-    QVariantList ret = dialog->run();
-    if (ret.isEmpty()) {
-        return;
-    }
-
-    QStringList conditionLst;
-    for (QVariant var : ret) {
-        QString fieldName = var.toMap().value("name").toString();
-        conditionLst << fieldName;
-    }
-    advancedQuery->clearSearchCondition();
-    advancedQuery->addSearchCondition(conditionLst);
-}
-
-/**
-* \brief 当高级查询界面的清除按钮触发时的槽函数
-*/
-void TopTemplateClass4::onClearActionTriggered()
-{
-    TAdvancedQuery *advancedQuery = findAdvancedQuery();
-    if (advancedQuery == nullptr) {
-        return;
-    }
-    advancedQuery->clearSearchCondition();
-}
-
-/**
-* \brief 当高级查询界面的另存为按钮触发时的槽函数
-*/
-void TopTemplateClass4::onSaveAsActionTriggered()
-{
-    TAdvancedQuery *advancedQuery = findAdvancedQuery();
-    if (advancedQuery == nullptr) {
-        return;
-    }
-
-    QString fileName = QFileDialog::getSaveFileName(this,
-                                                    tr("Save query criteria as file"),
-                                                    QString(),
-                                                    QString("*.cond"));
-    if (fileName.isEmpty()) {
-        return;
-    }
-
-    QVariantMap newConditionMap;
-    newConditionMap.insert("condition", advancedQuery->getQueryData());
-    QString conditionStr = TDataParse::variant2JsonStr(newConditionMap);
-    TFileIo::writeFileString(conditionStr , fileName);
-}
-
-/**
-* \brief 当高级查询界面的打开按钮触发时的槽函数
-*/
-void TopTemplateClass4::onOpenActtionTriggered()
-{
-    TAdvancedQuery *advancedQuery = findAdvancedQuery();
-    if (advancedQuery == nullptr) {
-        return;
-    }
-
-    QString fileName = QFileDialog::getOpenFileName(this,
-                                                    tr("Open query criteria from file"),
-                                                    ".",
-                                                    tr("Condition file(*.cond)"));
-    if (fileName.isEmpty()) {
-        return;
-    }
-    QString conditionStr = TFileIo::readFileString(fileName);
-    QVariantMap dataMap = TDataParse::jsonStr2Variant(conditionStr).toMap();
-    QVariantMap conditionMap = dataMap.value("condition").toMap();
-    advancedQuery->setData(conditionMap);
-}
-
-/**
-* \brief 当高级查询界面的保存按钮触发时的槽函数
-*/
-void TopTemplateClass4::onSaveAsCommonQueryActionTriggered()
-{
-    TAdvancedQuery *advancedQuery = findAdvancedQuery();
-    if (advancedQuery == nullptr) {
-        return;
-    }
-
-    TTableView *commonQueryTable = findCommonQueryTable();
-    if (commonQueryTable == nullptr) {
-        return;
-    }
-
-    QString uiStr;
-    uiStr = "function func(self) {"
-                   " return [{"
-                           " name: 'basic_formlayout',"
-                            "type: 'FormLayout',"
-                            "property:{"
-                                    "label_alignment: 'Top | Right',"
-                                    "horizontal_spacing: 20, vertical_spacing: 10, margin: 20"
-                            "},"
-                            "child: [{"
-                                    "name: 'name',"
-                                    "type: 'LineEdit',"
-                                    "title: '" + tr("Query Name") + "',"
-                                    "pack: {"
-                                            "label: '" + tr("Query Name") + "'"
-                                    "},"
-                                    "validate: 'NOTNULL'"
-                                    "}]"
-                            "}]}";
-
-    TUiloaderDialog *dialog = new TUiloaderDialog(this);
-    dialog->setTitle(tr("Save as a common query"));
-    dialog->setSelf(this);
-    dialog->resize(250,100);
-    dialog->setButtons(QStringList() << QString("%1:Ok:AcceptRole").arg(ttr("Ok")) << QString("%1:Cancel::RejectRole").arg(ttr("Cancel")));
-    dialog->setUiStr(uiStr);
-
-    QVariantMap ret = dialog->run(true);
-    if (ret.isEmpty()) {
-        return;
-    }
-
-    // 判断name是否已经存在
-    QString conditionName = ret.value("name").toString();
-    QVariantList conditionList = mAdvancedQueryTableDataMap.value("advance").toList();
-    for (QVariant var: conditionList) {
-        QVariantMap itemMap = var.toMap();
-        if (conditionName == itemMap.value("title")) {
-            TMessageBox::error(this, tr("Save as common condition"), tr("This name already exists!"));
-            return;
-        }
-    }
-
-    // 取新的查询条件
-    QVariantMap conditionMap = advancedQuery->getQueryData();
-    QVariantMap newConditionMap;
-    newConditionMap.insert("title", conditionName);
-    newConditionMap.insert("condition", conditionMap);
-    conditionList << QVariant(newConditionMap);
-
-    commonQueryTable->loadData(conditionList);
-    mAdvancedQueryTableDataMap.insert("advance", conditionList);
-
-    // 生成json格式数据
-    QString newConditionStr = TDataParse::variant2JsonStr(mAdvancedQueryTableDataMap);
-    TSqlInserterV2 inserter;
-    inserter.setTable("sys_conf");
-    QVariantMap saveMap;
-    saveMap.insert("data", newConditionStr);
-    saveMap.insert("path", QStringList() << this->moduleName() << "AdvancedQuery");
-    inserter.setData(saveMap);
-    inserter.setField(saveMap.uniqueKeys());
-    inserter.setAutoIncrementField("id");
-    inserter.uniqueFieldRef() << "path";
-
-    QVariant data = doThreadWork(new TopClassSqlThread(this), TOPSQLTHREAD_REPLACE_ROW, QVariant::fromValue(inserter));
-    TDataResponse dataRes(data.toMap());
-    if (dataRes.hasError()) {
-        alertError(ttr("Load data failed!"), dataRes.errText());
-        return;
-    }
-}
-
-/**
-* \brief 当常用查询界面的表格双击条目时的槽函数
-*/
-void TopTemplateClass4::onCommonQueryTableDoubleClicked(const QModelIndex &index)
-{
-    TAdvancedQuery *advancedQuery = findAdvancedQuery();
-    if (advancedQuery == nullptr) {
-        return;
-    }
-
-    TTableView *commonQueryTable = findCommonQueryTable();
-    if (commonQueryTable == nullptr) {
-        return;
-    }
-
-    TTabWidget *advancedQueryTabWidget = findAdvancedQueryTabWidget();
-    if (advancedQueryTabWidget == nullptr) {
-        return;
-    }
-
-    advancedQuery->clearSearchCondition();
-    TTableModel *tableModel = qobject_cast<TTableModel *>(commonQueryTable->model());
-    QVariantMap rowDataMap = tableModel->rowDataMap(index);
-    QVariantMap conditionMap = rowDataMap.value("condition").toMap();
-    advancedQuery->setData(conditionMap);
-    advancedQueryTabWidget->setCurrentIndex(0);
-}
-
-/**
-* \brief 当常用查询界面的表格删除条目时的槽函数
-*/
-void TopTemplateClass4::onDeleleCommonQueryActtionTriggered()
-{
-    TTableView *commonQueryTable = findCommonQueryTable();
-    if (commonQueryTable == nullptr) {
-        return;
-    }
-
-    QVariantMap selectedConditionMap = commonQueryTable->currentRowDataMap().toMap();
-    if (selectedConditionMap.isEmpty()) {
-        return;
-    }
-
-    QString selectedTitle = selectedConditionMap.value("title").toString();
-    QVariantList conditionList = mAdvancedQueryTableDataMap.value("advance").toList();;
-    QVariantList conditionDataList;
-    for (QVariant var : conditionList){
-        QString title = var.toMap().value("title").toString();
-        // 如果不是选中的项,表示需要保留
-        if (title != selectedTitle) {
-            conditionDataList << QVariant(var.toMap());
-        }
-    }
-    commonQueryTable->loadData(conditionDataList);
-    mAdvancedQueryTableDataMap.insert("advance", conditionDataList);
-
-    //生成json格式数据
-    QString newConditionStr = TDataParse::variant2JsonStr(mAdvancedQueryTableDataMap);
-    TSqlInserterV2 inserter;
-    inserter.setTable("sys_conf");
-    QVariantMap saveMap;
-    saveMap.insert("data", newConditionStr);
-    saveMap.insert("path", QStringList() << this->moduleName() << "AdvancedQuery");
-    inserter.setData(saveMap);
-    inserter.setField(saveMap.uniqueKeys());
-    inserter.setAutoIncrementField("id");
-    inserter.uniqueFieldRef() << "path";
-    QVariant data = doThreadWork(new TopClassSqlThread(this), TOPSQLTHREAD_REPLACE_ROW, QVariant::fromValue(inserter));
-    TDataResponse dataRes(data.toMap());
-    if (dataRes.hasError()) {
-        alertError(ttr("Load data failed!"), dataRes.errText());
-        return;
-    }
-}
-
-/*!
- * \brief 初始化界面
- */
-void TopTemplateClass4::initUi()
-{
-    mBodySplitter = new TSplitter(this);
-    mBodySplitter->setObjectName("mBodySplitter");
-    setCentralWidget(mBodySplitter);
-    mMgtSplitter = new TSplitter(this);
-    mBodySplitter->addWidget(mMgtSplitter);
-
-    mBodyWgt = new QWidget(this);
-    QVBoxLayout *bodyLayout = new QVBoxLayout(mBodyWgt);
-    bodyLayout->setMargin(0);
-    bodyLayout->setSpacing(0);
-    mMgtSplitter->addWidget(mBodyWgt);
-    initNaviView();
-
-    mTableView = new TTableView(this);
-    // 此ObjectName在其他逻辑中是有意义的,请勿删除
-    mTableView->setObjectName("__view__");
-    mTableView->setHeaderPopupEnabled(true);
-    connect(mTableView->horizontalHeader(), SIGNAL(sortIndicatorChanged(int,Qt::SortOrder)),
-            this, SLOT(refresh()));
-    connect(mTableView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
-            this, SLOT(onSelectionChanged()));
-    connect(mTableView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
-            this, SIGNAL(selectionChanged()));
-    mTableView->setDataKeyList(mTableConf.dataKeys);
-    mTableView->setPrimaryKey(mTableConf.primaryKey);
-    QVariantList headerItems = mTableConf.horizontalHeaders;
-    headerItems.prepend(QVariant());
-    mTableView->setHeaderItem(headerItems);
-
-    if (QToolBar *toolbar = qobject_cast<QToolBar*>(uim()->getWidget("MAIN_TOOLBAR"))) {
-        bodyLayout->addWidget(toolbar, 0);
-        mSearchEntry = qobject_cast<TSearchEntry *>(uim()->getWidget("MAIN_TOOLBAR/SEARCH_ENTRY"));
-        if (mSearchEntry != nullptr) {
-            connect(mSearchEntry, SIGNAL(search(QString,QVariant)), this, SLOT(refresh()));
-            mSearchEntry->setOptionList(TDataParse::headerItem2searchList(mTableView->headerItem()));
-            mSearchEntry->setPlaceholderText(ttr("Search %1"));
-        }
-    }
-    if (QMenu *tablePopup = qobject_cast<QMenu *>(uim()->getWidget("TABLEVIEW_POPUP"))) {
-        mTableView->setContextMenu(tablePopup);
-    }
-
-    bodyLayout->addWidget(mTableView, 1);
-
-    if (QToolBar *toolbar = qobject_cast<QToolBar*>(uim()->getWidget("BOTTOM_TOOLBAR"))) {
-        bodyLayout->addWidget(toolbar, 0);
-        mPageTool = qobject_cast<TPageTool *>(uim()->getWidget("BOTTOM_TOOLBAR/PAGE_TOOL"));
-        if (mPageTool != nullptr) {
-            mPageTool->setPageSizeVisible(true);
-            connect(mPageTool, SIGNAL(pageChanged(int,int)), this, SLOT(onPageChanged()));
-        }
-    }
-
-    QWidget *detailWgt = new QWidget(this);
-    QVBoxLayout *detailLayout = new QVBoxLayout(detailWgt);
-    detailLayout->setSpacing(0);
-    detailLayout->setMargin(0);
-
-    if (QToolBar *toolbar = qobject_cast<QToolBar*>(uim()->getWidget("DETAIL_TOOLBAR"))) {
-        detailLayout->addWidget(toolbar, 0);
-    }
-    mDetailView = new TUiLoader(this);
-    // 此ObjectName在其他逻辑中是有意义的,请勿删除
-    mDetailView->setObjectName("__detail__");
-    const QStringList typePlugins = config("uiloader_plugins").toStringList();
-    if (typePlugins.size() > 0) {
-        TopClassHelper::setUiLoaderPluginCallback(mDetailView,this,typePlugins);
-    }
-    connect(mDetailView, SIGNAL(dataChanged()), this, SLOT(onDetailDataChanged()));
-    mDetailView->setProperty("SS_BG", "PANEL");
-    mDetailView->setSelf(this);
-    mDetailView->setScriptEngine(APP->scriptEngine());
-    mDetailView->setUiStr(ui("detail").toString());
-    detailLayout->addWidget(mDetailView);
-
-    if (!ui("detail").isNull()) {
-        mBodySplitter->addWidget(detailWgt);
-        mBodySplitter->setStretchFactor(0, 1);
-        mBodySplitter->setSizes(QList<int>{1, config("detail.perfect_width", 600).toInt()});
-    } else {
-        detailWgt->setVisible(false);
-    }
-}
-
-/*!
- * \brief 初始化导航栏
- */
-void TopTemplateClass4::initNaviView()
-{
-    mNaviType = str2NaviType(config("navi.__type__", "CategoryTreeView").toString());
-    if (mNaviType == NaviType::None) {
-        return;
-    }
-
-    TAccordion *accordion = new TAccordion(this);
-    // 此ObjectName在其他逻辑中是有意义的,请勿删除
-    accordion->setObjectName("__navi__");
-    accordion->setProperty("SS_BG","NAVI");
-    accordion->setMinimumWidth(TTHEME_DP(config("navi.min_width", 150).toInt()));
-    accordion->setMaximumWidth(TTHEME_DP(config("navi.max_width", 300).toInt()));
-    accordion->setAccordionLocation(TAccordion::AccordionLocation::Left);
-    QVBoxLayout *naviLayout = new QVBoxLayout(accordion);
-    naviLayout->setMargin(0);
-    naviLayout->setSpacing(0);
-    QLabel *naviLabel = new QLabel(tr("Navigation"));
-    naviLabel->setProperty("SS_TYPE", "SUBHEADER");
-    naviLayout->addWidget(naviLabel,0);
-    naviLayout->addSpacing(TTHEME_DP(4));
-    accordion->expandButton()->setFixedHeight(TTHEME_DP(40));
-    accordion->expandButton()->setToolTip(tr("Show Navigation"));
-    accordion->collapseButton()->setToolTip(tr("Hide Navigation"));
-    accordion->setIsExpanded(config("navi.is_expanded", false).toBool());
-    mMgtSplitter->insertWidget(0,accordion);
-
-    if (mNaviType == NaviType::UiLoader) {
-        mNaviView = new TUiLoader(this);
-        TUiLoader *filterUi = qobject_cast<TUiLoader*>(mNaviView);
-        filterUi->setSelf(this);
-        filterUi->setScriptEngine(APP->scriptEngine());
-        filterUi->setUiStr(ui("navi").toString());
-
-        QFrame *naviWgt = new QFrame(this);
-        QVBoxLayout *leftLayout = new QVBoxLayout(naviWgt);
-        leftLayout->addWidget(mNaviView);
-        QHBoxLayout *leftBtnsLayout = new QHBoxLayout();
-        leftLayout->addLayout(leftBtnsLayout);
-        QPushButton *resetBtn = new QPushButton(this);
-        connect(resetBtn, SIGNAL(clicked(bool)), filterUi, SLOT(clearValues()));
-        leftBtnsLayout->addWidget(resetBtn);
-        resetBtn->setText(tr("Reset"));
-        resetBtn->setIcon(TRES->icon("rotate-right"));
-        QPushButton *filterBtn = new QPushButton(this);
-        connect(filterBtn, SIGNAL(clicked(bool)), this, SLOT(refresh()));
-        leftBtnsLayout->addWidget(filterBtn);
-        filterBtn->setText(tr("Filter"));
-        filterBtn->setIcon(TRES->icon("filter"));
-        leftLayout->addStretch(1);
-        naviLayout->addWidget(naviWgt);
-    } else if (mNaviType == NaviType::AdvancedQuery) {
-        Q_ASSERT_X(false, "TopTemplateClass4", "This feature is not yet supported.");
-    } else if (mNaviType == NaviType::NaviFilter) {
-        Q_ASSERT_X(false, "TopTemplateClass4", "This feature is not yet supported.");
-    } else if (mNaviType == NaviType::CategoryTreeViewAndAdvancedQuery) {
-        // tab1-CategoryTreeView
-        TCategoryTreeView *categoryTreeView = new TCategoryTreeView(this);
-        categoryTreeView->setStyleSheet("TCategoryTreeView{border:NONE;background-color:transparent}");
-        QVariantList rootChildList = parseCategoryConfig();
-        if (rootChildList.isEmpty()) {
-            mNaviView->setVisible(false);
-            return;
-        }
-        categoryTreeView->setItemList(rootChildList);
-        categoryTreeView->setCheckable(config("navi.is_checkable").toBool());
-        connect(categoryTreeView, SIGNAL(selectionChanged(QVariantList)),
-                this, SLOT(onCategoryViewDataChanged(QVariantList)));
-
-        // tab2-tab1-ToolBar
-        QToolBar *toolbar = new QToolBar(this);
-        toolbar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
-        toolbar->setProperty("SS_SIZE", "SMALL");
-        toolbar->setMovable(false);
-
-        QAction *queryAction = toolbar->addAction(APP->getResIcon("search"), tr("Query"));
-        connect(queryAction, SIGNAL(triggered()), this, SLOT(refresh()));
-        toolbar->addSeparator();
-
-        QAction* addAction = toolbar->addAction(APP->getResIcon("addto-circle-o"), tr("Add"));
-        addAction->setToolTip(tr("Add query criteria"));
-        connect(addAction, SIGNAL(triggered()), this, SLOT(onAddActionTriggered()));
-
-        QAction* clearAction = toolbar->addAction(APP->getResIcon("eraser"), tr("Clear"));
-        clearAction->setToolTip(tr("Clear all query criteria"));
-        connect(clearAction, SIGNAL(triggered()), this, SLOT(onClearActionTriggered()));
-
-        QAction* saveAsAction = toolbar->addAction(APP->getResIcon("save"), tr("Save As"));
-        saveAsAction->setToolTip(tr("Save query criteria as file"));
-        connect(saveAsAction, SIGNAL(triggered()), this, SLOT(onSaveAsActionTriggered()));
-
-        QAction* openActtion = toolbar->addAction(APP->getResIcon("folder-open-o"), tr("Open"));
-        openActtion->setToolTip(tr("Open query criteria from file"));
-        connect(openActtion, SIGNAL(triggered()), this, SLOT(onOpenActtionTriggered()));
-
-        QAction* saveAsCommonQueryAction = toolbar->addAction(APP->getResIcon("save-as"), tr("Save"));
-        saveAsCommonQueryAction->setToolTip(tr("Save as a common query"));
-        connect(saveAsCommonQueryAction, SIGNAL(triggered()), this, SLOT(onSaveAsCommonQueryActionTriggered()));
-
-        // tab2-tab1-AdvancedQuery
-        TAdvancedQuery *advancedQuery = new TAdvancedQuery(this);
-        advancedQuery->setObjectName("AdvancedQuery");
-        initAdvanceCfgMap();
-        advancedQuery->setItemList(mAdvancedQueryCfgMap.value("advanced_items").toList());
-        advancedQuery->setData(getDefaultQueryDataFromCfgMap());
-
-        TScrollArea *scrollArea = new TScrollArea(this);
-        scrollArea->setWidgetResizable(true);
-        scrollArea->setWidget(advancedQuery);
-
-        // tab2-tab1
-        QMainWindow *mainWindow = new QMainWindow(this);
-        mainWindow->addToolBar(toolbar);
-        mainWindow->setCentralWidget(scrollArea);
-
-        // tab2-tab2-TableView
-        TTableView *commonQueryTable = new TTableView(this);
-        commonQueryTable->setObjectName("CommonQueryTable");
-        commonQueryTable->setShowGrid(false);
-        commonQueryTable->setSelectionMode(QAbstractItemView::ExtendedSelection);
-        commonQueryTable->verticalHeader()->setVisible(false);
-        QVariantList headerItem;
-        headerItem << QVariant() << TDataParse::variantList2Map(
-                          QVariantList() <<"name" << "title" << "display" << tr("Query Name") << "resizeMode" << "Stretch" << "displayRole" << "$title");
-        commonQueryTable->setHeaderItem(headerItem);
-        commonQueryTable->setDataKeyList(QStringList() << "title" << "condition");
-        commonQueryTable->setPrimaryKey("condition");
-        connect(commonQueryTable, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(onCommonQueryTableDoubleClicked(const QModelIndex &)));
-
-        QAction *deleleCommonQueryActtion = new QAction(APP->getResIcon("remove"), tr("Delete query"), this);
-        connect(deleleCommonQueryActtion, SIGNAL(triggered()), this, SLOT(onDeleleCommonQueryActtionTriggered()));
-        QMenu *contextMenu = new QMenu(this);
-        contextMenu->addAction(deleleCommonQueryActtion);
-        commonQueryTable->setContextMenu(contextMenu);
-
-        // 刷新常用查询表格数据
-        initCommonQueryMap();
-        commonQueryTable->loadData(mAdvancedQueryTableDataMap.value("advance").toList());
-
-        // 高级查询Tab
-        TTabWidget *advancedQueryTabWidget = new TTabWidget(this);
-        advancedQueryTabWidget->setObjectName("AdvancedQueryTabWidget");
-        advancedQueryTabWidget->addTab(mainWindow, tr("Advanced Query"));
-        advancedQueryTabWidget->addTab(commonQueryTable, tr("Common Query"));
-
-        // 导航Tab
-        mNaviView = new TTabWidget(this);
-        TTabWidget *tabWidget = qobject_cast<TTabWidget *>(mNaviView);
-        tabWidget->addTab(categoryTreeView, tr("Category"));
-        tabWidget->addTab(advancedQueryTabWidget, tr("Advanced Query"));
-        naviLayout->addWidget(mNaviView);
-    } else {
-        mNaviView = new TCategoryTreeView(this);
-        mNaviView->setStyleSheet("TCategoryTreeView{border:NONE;background-color:transparent}");
-        QVariantList rootChildList = parseCategoryConfig();
-        if (rootChildList.isEmpty()) {
-            mNaviView->setVisible(false);
-            return;
-        }
-        TCategoryTreeView *categoryTreeView = qobject_cast<TCategoryTreeView *>(mNaviView);
-        categoryTreeView->setItemList(rootChildList);
-        categoryTreeView->setCheckable(config("navi.is_checkable").toBool());
-        connect(categoryTreeView, SIGNAL(selectionChanged(QVariantList)),
-                this, SLOT(onCategoryViewDataChanged(QVariantList)));
-        naviLayout->addWidget(mNaviView);
-    }
-}
-
-/**
-* \brief 初始化高级查询配置数据
-* mAdvancedQueryCfgMap结构如下:
-* \code
-    advance: {
-      "advanced_items" : [
-        {"name" : "attr_data.machine_code", "title" : "Machine Code" , "widgetType" : "LineEdit" , "wgt_prop" : "" , "optionList" : []},
-        {"name" : "attr_data.machine_name", "title" : "Machine Name" , "widgetType" : "LineEdit" , "wgt_prop" : "" , "optionList" : []},
-        {"name" : "title", "title" : "Title" , "widgetType" : "LineEdit" , "wgt_prop" : "" , "optionList" : []},
-        {"name" : "class", "title" : "Class" , "widgetType" : "ComboBox" , "wgt_prop" : "" , "optionList" : "enum(tpm-machine-maintenance-plan-class)"}
-      ],
-      "file_suffix": ".conf"
-      "condition" :{
-        "condition": "1 and 2",
-        "value": [
-            {
-                "ignoreEmpty": false,
-                "name": "attr_data.machine_code",
-                "operator": "LIKE",
-                "title": "Machine Code",
-                "valid": true,
-                "value1": "00"
-            },
-            {
-                "ignoreEmpty": false,
-                "name": "attr_data.machine_name",
-                "operator": "LIKE",
-                "title": "Machine Name",
-                "valid": true,
-                "value1": "4"
-            }
-        ]
-      }
-    }
-* \endcode
-*/
-void TopTemplateClass4::initAdvanceCfgMap()
-{
-    mAdvancedQueryCfgMap = config("advance").toMap();
-    QVariantList queryItems = mAdvancedQueryCfgMap.value("advanced_items").toList();
-    QVariantList newQueryItems;
-    for (QVariant var : queryItems) {
-        QVariantMap m = var.toMap();
-        // 翻译title
-        m.insert("title", ttr(m.value("title").toString()));
-        // 转换枚举
-        QVariantList optionList;
-        QRegExp regExp("enum(.*)");
-        if ((m.value("optionList").type() == QVariant::String) && (regExp.indexIn(m.value("optionList").toString()) != -1)) {
-            if (regExp.capturedTexts().count() > 1) {
-                optionList = TOPENM->enumList(regExp.capturedTexts().value(1).remove("(").remove(")"))->toComboList();
-                m.insert("optionList", optionList);
-            }
-        }
-        newQueryItems << m;
-    }
-    mAdvancedQueryCfgMap.insert("advanced_items", newQueryItems);
-}
-
-/**
-* \brief 获取高级查询控件默认的查询条件
-*/
-QVariantMap TopTemplateClass4::getDefaultQueryDataFromCfgMap()
-{
-    QVariantMap conditionMap = config("advance").toMap().value("condition").toMap();
-    QVariantList valueList = conditionMap.value("value").toList();
-    for (QVariant &var: valueList) {
-        QVariantMap m = var.toMap();
-        m.insert("title", ttr(m.value("title").toString()));
-        var = m;
-    }
-    conditionMap.insert("value", valueList);
-    return conditionMap;
-}
-
-/**
-* \brief 从高级查询配置中获取未使用条目的name和text,添加条目时使用
-*/
-QVariantList TopTemplateClass4::getAdvancedQueryFieldList()
-{
-    TAdvancedQuery *advancedQuery = findAdvancedQuery();
-    if (advancedQuery == nullptr) {
-        return QVariantList();
-    }
-
-    QVariantList selectedFieldDataLst = advancedQuery->getQueryData().value("value").toList();
-    QStringList selectedFieldLst;
-    for (QVariant val : selectedFieldDataLst){
-        selectedFieldLst.append(val.toMap().value("name").toString());
-    }
-
-    QVariantList queryItems = mAdvancedQueryCfgMap.value("advanced_items").toList();
-    QVariantList fieldList;
-    for (QVariant var : queryItems) {
-        QVariantMap m = var.toMap();
-        QVariantMap itemMap;
-        if(!selectedFieldLst.contains(m.value("name").toString())) {
-            itemMap.insert("name", m.value("name").toString());
-            itemMap.insert("title", ttr(m.value("title").toString()));
-            fieldList << QVariant(itemMap);
-        }
-    }
-    return fieldList;
-}
-
-/**
-* \brief 从sys_conf表查找出已保存的常用查询数据
-* 数据结构如下:
-* \code
-{
-  "advance": [
-    {
-      "condition": {
-        "condition": "1 and 2",
-        "value": [
-          {
-            "ignoreEmpty": false,
-            "name": "attr_data.machine_code",
-            "operator": "LIKE",
-            "title": "设备编号",
-            "valid": true,
-            "value1": "00"
-          },
-          {
-            "ignoreEmpty": false,
-            "name": "attr_data.machine_name",
-            "operator": "LIKE",
-            "title": "设备名称",
-            "valid": true,
-            "value1": "4"
-          }
-        ]
-      },
-      "title": "1"
-    }
-  ]
-}
-* \endcode
-*/
-void TopTemplateClass4::initCommonQueryMap()
-{
-    TSqlSelectorV2 selector;
-    selector.setTable("sys_conf");
-    selector.setField(QStringList() << "data");
-    selector.setWhere("path", QStringList() << this->moduleName() << "AdvancedQuery", "@>");
-    TError err;
-    QVariant data = runSqlQueryOnThreadSync(TOPSQLTHREAD_SELECT_MAP,
-                                            QVariant::fromValue(selector),
-                                            &err);
-    if (err.isValid()) {
-        alertError(ttr("Load data failed!"), err.text());
-        return;
-    }
-    mAdvancedQueryTableDataMap = TDataParse::jsonStr2Variant(data.toMap().value("data").toString()).toMap();
-}
-
-/**
-* \brief 根据objname从导航栏中找到高级查询控件
-*/
-TAdvancedQuery *TopTemplateClass4::findAdvancedQuery()
-{
-    return mNaviView->findChild<TAdvancedQuery *>("AdvancedQuery");
-}
-
-/**
-* \brief 根据objname从导航栏中找到常用查询tableView控件
-*/
-TTableView *TopTemplateClass4::findCommonQueryTable()
-{
-    return mNaviView->findChild<TTableView *>("CommonQueryTable");
-}
-
-/**
-* \brief 根据objname从导航栏中找到高级查询TabWidget控件
-*/
-TTabWidget *TopTemplateClass4::findAdvancedQueryTabWidget()
-{
-    return mNaviView->findChild<TTabWidget *>("AdvancedQueryTabWidget");
-}
-
-/*!
- * \brief 解析导航栏配置
- */
-QVariantList TopTemplateClass4::parseCategoryConfig()
-{
-    QVariantList categoryLst;
-
-    QVariantList categoryConfig = config("navi.categories").toList();
-    QString format = config("navi.format", "filter_by_enum").toString();
-    if (format.compare("filter_by_enum") == 0) {
-        for(const QVariant &item: categoryConfig) {
-            QVariantMap itemMap = item.toMap();
-            QString itemName         = itemMap.value("name").toString();
-            QVariantList childrenLst = itemMap.value("children").toList();
-            QString enumCfg          = itemMap.value("enum_children").toString();
-            QStringList enumCheckedLst = itemMap.value("enum_checked").toStringList();
-            QStringList enumInvisibleLst = itemMap.value("enum_invisible").toStringList();
-            if (itemMap.contains("visible")) {
-                itemMap.insert("VISIBLE", itemMap.take("visible"));
-            }
-            if (itemMap.contains("expand")) {
-                itemMap.insert("EXPAND", itemMap.take("expand"));
-            }
-            TSqlWhereCompsiteV2 childWhere;
-            childWhere.setLogic(TSqlWhereCompsiteV2::Logic_Or);
-            QVariantList type = TOPENM->enumList(enumCfg)->toComboList();
-            for (const QVariant &item: type) {
-                QVariantMap enumMap = item.toMap();
-                QString enumName = enumMap.value("name").toString();
-                QVariantMap childMap;
-                childMap.insert("name",enumName);
-                childMap.insert("text",ttr(enumMap.value("text").toString()));
-                childMap.insert("icon",enumMap.value("icon"));
-                childMap.insert("data", itemName);
-                if(enumCheckedLst.contains(enumName)) {
-                    childMap.insert("checked",1);
-                } else {
-                    childMap.insert("checked",0);
-                }
-                if (enumInvisibleLst.contains(enumName)) {
-                    childMap.insert("VISIBLE", 0);
-                } else {
-                    childMap.insert("VISIBLE",1);
-                }
-                childrenLst.append(childMap);
-            }
-            int checkedChildLen = 0;
-            for (QVariant &item : childrenLst) {
-                QVariantMap itemMap = item.toMap();
-                QString name = itemMap.value("name").toString();
-                if(itemMap.value("checked").toInt() == 1) {
-                    childWhere.append(itemName, name);
-                    checkedChildLen++;
-                }
-                item = itemMap;
-            }
-            if (checkedChildLen == childrenLst.length()) {
-                itemMap.insert("checked", 1);
-            } else {
-                itemMap.insert("checked", 0);
-            }
-            mCategoryWhere.append(childWhere);
-
-            itemMap.remove("children");
-            itemMap.remove("enum_children");
-            itemMap.remove("enum_checked");
-            itemMap.remove("enum_invisible");
-            itemMap.insert("text",ttr(itemMap.value("text").toString()));
-            itemMap.insert("CHILDREN",childrenLst);
-
-            categoryLst.append(itemMap);
-        }
-    } else if (format.compare("filter_by_sql_where") == 0) {
-        return categoryConfig;
-    }
-    return categoryLst;
-}
-
-TopTemplateClass4::NaviType TopTemplateClass4::str2NaviType(const QString &iType)
-{
-    const QString type = iType.toUpper();
-    if (type == "UILOADER") {
-        return NaviType::UiLoader;
-    } else if (type == "ADVANCEDQUERY") {
-        return NaviType::AdvancedQuery;
-    } else if (type == "NAVIFILTER") {
-        return NaviType::NaviFilter;
-    } else if (type == "CATEGORYTREEVIEWANDADVANCEDQUERY") {
-        return NaviType::CategoryTreeViewAndAdvancedQuery;
-    } else if (type == "NONE") {
-        return NaviType::None;
-    } else {
-        return NaviType::CategoryTreeView;
-    }
-}
-
-QString TopTemplateClass4::uiloaderWhere() const
-{
-    TUiLoader *filterUi = qobject_cast<TUiLoader*>(mNaviView);
-    if (filterUi == nullptr) {
-        return QString();
-    }
-
-    auto filterDataMap = filterUi->getAllValues().toVariant().toMap();
-
-    QString searchSql;
-    QMapIterator<QString, QVariant> iter(filterDataMap);
-    while (iter.hasNext()) {
-        iter.next();
-        QString key = iter.key();
-        QString value = iter.value().toString();
-        if (value.isEmpty()) {
-            continue;
-        }
-        auto obj = filterUi->getObject(key);
-        if (obj != nullptr) {
-            QVariantMap userData = obj->property("tui_user_data").toMap();
-            if (userData.contains("field_name")) {
-                key = userData.value("field_name").toString();
-            }
-            QString operatorStr = "=";
-            if (userData.contains("operator")) {
-                operatorStr = userData.value("operator").toString();
-            }
-            if (operatorStr.compare("like", Qt::CaseInsensitive) == 0) {
-                value = QString("'%%1%'").arg(value);
-            } else if (operatorStr.compare("in", Qt::CaseInsensitive) == 0) {
-                value = QString("(%1)").arg(value);
-            } else {
-                if (iter.value().type() == QVariant::String) {
-                    value = QString("'%1'").arg(value);
-                }
-            }
-            QString searchStr = QString("%1 %2 %3").arg(key).arg(operatorStr).arg(value);
-            if (!searchSql.isEmpty()) {
-                searchSql.append(" and ");
-            }
-            searchSql.append(searchStr);
-        }
-    }
-    return searchSql;
-}
diff --git a/src/plugin/toptemplateclass4.h b/src/plugin/toptemplateclass4.h
deleted file mode 100644
index 34f4c36cd33147bcb1f745c507f8bac8089f0c52..0000000000000000000000000000000000000000
--- a/src/plugin/toptemplateclass4.h
+++ /dev/null
@@ -1,109 +0,0 @@
-#ifndef TEMPLATECLASS4_H
-#define TEMPLATECLASS4_H
-
-#include <topcore/topclassabs.h>
-#include <topcore/topclasshelper.h>
-#include <tdatabaseutil/tsqlselectorv2.h>
-
-class TTableView;
-class TSplitter;
-class TUiLoader;
-class TSearchEntry;
-class TPageTool;
-class TAdvancedQuery;
-class TTabWidget;
-
-class TopTemplateClass4 : public TopClassAbs
-{
-    Q_OBJECT
-public:
-    explicit TopTemplateClass4(const QString &iModuleName = QString(""),
-                               const QVariantMap &iUrlPars = QVariantMap(),
-                               QWidget *iParent = nullptr);
-    ~TopTemplateClass4();
-
-    enum class NaviType {
-        None,
-        CategoryTreeView,
-        UiLoader,
-        AdvancedQuery,
-        NaviFilter,
-        CategoryTreeViewAndAdvancedQuery
-    };
-
-public slots:
-    void refresh(bool iResetPage = true);
-    void refreshDetail(const QString &iUid);
-    QString detailUid() const;
-    void setDetailUid(const QString &iUid, bool iForceRefresh = false);
-    bool isDetailModified() const;
-    void setIsDetailModified(bool iIsDetailModified);
-    QVariantList selectedItems() const;
-    QVariantList selectedDataMaps() const;
-    void newItem();
-    void saveItem();
-    void reloadItem();
-    void copyItem();
-    void deleteItems(const QVariantList &iItems);
-    TTableView *tableView() const;
-    TUiLoader *uiLoader() const;
-    QWidget *naviView() const;
-signals:
-    void isDetailModifiedChanged(bool iIsDetailModified);
-    void detailUidChanged(const QString &iDetailUid);
-    void detailSaved(const QString &iUid);
-    void selectionChanged();
-    void viewConfChanged();
-private slots:
-    void onSelectionChanged();
-    void onPageChanged();
-    void onCategoryViewDataChanged(const QVariantList iDataLst);
-    void onDetailDataChanged();
-    void onDetailSaved(const QString &iUid);
-    void onDetailChanged(bool iIsDetailModified);
-    void onViewConfChanged();
-    void onAddActionTriggered();
-    void onClearActionTriggered();
-    void onSaveAsActionTriggered();
-    void onOpenActtionTriggered();
-    void onSaveAsCommonQueryActionTriggered();
-    void onCommonQueryTableDoubleClicked(const QModelIndex &index);
-    void onDeleleCommonQueryActtionTriggered();
-private:
-    void initUi();
-    void initNaviView();
-    void initAdvanceCfgMap();
-    QVariantMap getDefaultQueryDataFromCfgMap();
-    QVariantList getAdvancedQueryFieldList();
-    void initCommonQueryMap();
-    TAdvancedQuery *findAdvancedQuery();
-    TTableView *findCommonQueryTable();
-    TTabWidget *findAdvancedQueryTabWidget();
-    QVariantList parseCategoryConfig();
-    NaviType str2NaviType(const QString &iType);
-    QString uiloaderWhere() const;
-private:
-    TSplitter *mBodySplitter = nullptr;
-    QWidget *mBodyWgt = nullptr;
-    TSplitter *mMgtSplitter = nullptr;
-    TTableView *mTableView = nullptr;
-    TSearchEntry *mSearchEntry = nullptr;
-    TPageTool *mPageTool = nullptr;
-    TUiLoader *mDetailView = nullptr;
-
-    NaviType mNaviType = NaviType::CategoryTreeView;
-    QWidget *mNaviView = nullptr;
-    TSqlWhereCompsiteV2 mCategoryWhere;
-    QVariantMap mAdvancedQueryCfgMap;
-    QVariantMap mAdvancedQueryTableDataMap;
-    QString mAdvancedQueryConditionFileSuffix;
-
-    TopClassTableConf mTableConf;
-    bool mIsDetailModified = false;
-    QVariantList mSelectedItems;
-    QString mLastDetailUid;
-    QString mDetailUid;
-    QTimer *mRefreshTimer = nullptr;
-};
-
-#endif // TEMPLATECLASS4_H
diff --git a/src/plugin/toptemplateclass5.cpp b/src/plugin/toptemplateclass5.cpp
deleted file mode 100644
index 5dc4c43716fc2246c895f34bb5307b569d9136ef..0000000000000000000000000000000000000000
--- a/src/plugin/toptemplateclass5.cpp
+++ /dev/null
@@ -1,586 +0,0 @@
-#include "toptemplateclass5.h"
-#include <QtWidgets>
-#include <tbaseutil/tdataparse.h>
-#include <tbaseutil/tdataresponse.h>
-#include <tbaseutil/tenumlist.h>
-#include <tbaseutil/ttheme.h>
-#include <tdatabaseutil/tsqlqueryv2.h>
-#include <tdatabaseutil/tsqlselectorv2.h>
-#include <tdatabaseutil/tsqlconnectionpoolv2.h>
-#include <topcore/topcore.h>
-#include <topcore/topclasssqlthread.h>
-#include <topcore/topenummanager.h>
-#include <twidget/tsplitter.h>
-#include <twidget/ttableview.h>
-#include <twidget/tsearchentry.h>
-#include <twidget/tpagetool.h>
-#include <twidget/tuiloader.h>
-
-#include <QRegularExpression>
-namespace {
-    QString nameWidthTablePrefix(const QString &iPrefix, const QString &iOldName) {
-        QRegularExpression reg{QString(R"(table\(%1\))").arg(iPrefix)};
-        QRegularExpressionMatch match = reg.match(iOldName);
-        if(match.hasMatch()) {
-            const QString matchStr = match.captured();
-            return iOldName;
-        } else {
-            return QString("table(%1).%2").arg(iPrefix).arg(iOldName);
-        }
-    }
-
-    void getPageToolData(TPageTool *iPageTool, const bool iResetPage, int &pageNum, int &pageSize) {
-        if(iPageTool) {
-            pageNum = 1;
-            pageSize = -1;
-            if(iResetPage) {
-                iPageTool->setCurrentPage(1,true);
-            }
-            pageNum = iPageTool->currentPage();
-            pageSize = iPageTool->pageSize();
-        }
-        if(pageNum < 1) { pageNum = 1; }
-        if(pageSize < 1) { pageSize = 100; }
-    }
-}
-
-/*!
- * \class TopTemplateClass5
- * \inmodule templateclass
- * \brief 主从表模板,左右结构,用两个TableView展示。
- */
-
-TopTemplateClass5::TopTemplateClass5(const QString &iModuleName,
-                                     const QVariantMap &iUrlPars,
-                                     QWidget *iParent)
-    : TopClassAbs(iParent)
-{
-    initModule(iModuleName, iUrlPars);
-    QString licenseKey = config("sys_license_key").toString();
-    if (!licenseKey.isEmpty()) {
-        setLicenseKey(licenseKey);
-    }
-    QStringList langLst = config("sys_lang_list").toStringList();
-    for (const auto &lang : langLst) {
-        appendLanguage(lang);
-    }
-    if (isHookExists("afterModuleInit")) {
-        callHooks("afterModuleInit");
-    }
-    TopClassHelper::parseTableConf0(this, "master_view", &mMasterTableConf);
-    TopClassHelper::parseTableConf0(this, "slave_view", &mSlaveTableConf);
-    initUi();
-    connect(this, SIGNAL(isDetailModifiedChanged(bool)),
-            this, SLOT(onDetailChanged(bool)));
-    if (isHookExists("afterViewInit")) {
-        callHooks("afterViewInit");
-    }
-    restoreSizeState();
-    restoreObjectState(mLeftSplitter);
-    restoreObjectState(mBodySplitter);
-    restoreObjectState(mMasterView);
-    restoreObjectState(mSlaveView);
-    refreshActionState();
-    QTimer::singleShot(0, this, SLOT(refreshMaster()));
-}
-
-TopTemplateClass5::~TopTemplateClass5()
-{
-    saveSizeState();
-    saveObjectState(mLeftSplitter);
-    saveObjectState(mBodySplitter);
-    saveObjectState(mMasterView);
-    saveObjectState(mSlaveView);
-    if (isHookExists("onDestroy")) {
-        callHooks("onDestroy");
-    }
-}
-
-/*!
- * \brief 刷新主表的数据,\a iResetPage 为true时表示重置分页
- */
-void TopTemplateClass5::refreshMaster(bool iResetPage)
-{
-    QString sql = config("master_view.data_set.db_sql").toString();
-    if (sql.isEmpty()) {
-        if (!mMasterTableConf.dbTableName.isEmpty()) {
-            TSqlSelectorV2 selector;
-            selector.setTable(mMasterTableConf.dbTableName);
-            selector.setField(mMasterTableConf.queryFields);
-            selector.setReturnRowCount(true);
-            // 搜索分页
-            TopClassHelper::handleSearchPageOnQuery(mMasterSearchEntry, mMasterPageTool, iResetPage, &selector);
-            // 排序
-            TopClassHelper::handleOrderOnQuery(mMasterView, &mMasterTableConf, &selector);
-            loading(ttr("Loading"));
-            QVariant data = doThreadWork(new TopClassSqlThread(this), TOPSQLTHREAD_SELECT_ARRAYMAP, QVariant::fromValue(selector));
-            unloading();
-            TDataResponse response(data.toMap());
-            if (response.hasError()) {
-                alertError(ttr("Load data failed!"));
-            } else {
-                if (mMasterPageTool != nullptr) {
-                    mMasterPageTool->setRowCount(response.dataCount(), true);
-                }
-                QVariantList tableData = response.data().toList();
-                TopClassHelper::formatTableData(this, &mMasterTableConf, tableData);
-                mMasterView->loadData(tableData);
-                alertOk(ttr("Data loaded"));
-            }
-        } else {
-            // sql语句为空,dbname也为空时执行钩子获取master数据
-            if (isHookExists("masterWillUpdate")) {
-                int pageNum = 1;
-                int pageSize = -1;
-                getPageToolData(mMasterPageTool,iResetPage,pageNum,pageSize);
-                QScriptValue argVal = APP->scriptEngine()->newObject();
-                argVal.setProperty("resetPage", iResetPage);
-                argVal.setProperty("pageNum", pageNum);
-                argVal.setProperty("pageSize", pageSize);
-                callHooks("masterWillUpdate", QScriptValueList() << argVal);
-            }
-            TopClassHelper::formatTableData(this, &mMasterTableConf, mMasterData);
-            mMasterView->loadData(mMasterData);
-            alertOk(ttr("Data loaded"));
-        }
-    } else {
-        // @todo
-    }
-}
-
-/*!
- * \brief 刷新从表的数据,\a iResetPage 为true时表示重置分页
- */
-void TopTemplateClass5::refreshSlave(bool iResetPage)
-{
-    if(selectedMasterItems().size() == 0) {
-        mSlaveView->loadData(QVariantList());
-        if (mUiLoader) {
-            mUiLoader->loadValues(QVariant());
-        }
-        return;
-    }
-
-    QString sql = config("slave_view.data_set.db_sql").toString();
-    if (sql.isEmpty()) {
-        if (!mSlaveTableConf.dbTableName.isEmpty()) {
-            QString relationTable = config("master_view.relation.through").toString();
-            QString slaveKey = config("master_view.relation.slave_key").toString();
-            QString slaveForeignKey = config("master_view.relation.slave_foreign_key").toString();
-            QString masterForeignKey = config("master_view.relation.master_foreign_key").toString();
-            QStringList fields = mSlaveTableConf.queryFields;
-            for (auto & f : fields) {
-                f = QString("S.%1 AS %1").arg(f);
-            }
-            TSqlSelectorV2 selector;
-            QString table = QString("%1 AS S LEFT JOIN %2 AS R ON S.%3 = R.%4")
-                    .arg(mSlaveTableConf.dbTableName)
-                    .arg(relationTable)
-                    .arg(slaveKey)
-                    .arg(slaveForeignKey);
-            selector.setTable(table);
-            selector.setField(fields);
-            selector.setWhere("R."+masterForeignKey, mSelectedMasterItems.first());
-            // 搜索分页
-            TopClassHelper::handleSearchPageOnQuery(mSlaveSearchEntry, mSlavePageTool, iResetPage, &selector);
-            // 排序
-            TopClassHelper::handleOrderOnQuery(mSlaveView, &mSlaveTableConf, &selector);
-            loading(ttr("Loading"));
-            QVariant data = doThreadWork(new TopClassSqlThread(this), TOPSQLTHREAD_SELECT_ARRAYMAP, QVariant::fromValue(selector));
-            unloading();
-            TDataResponse response(data.toMap());
-            if (response.hasError()) {
-                alertError(ttr("Load data failed!"));
-            } else {
-                if (mSlavePageTool != nullptr) {
-                    mSlavePageTool->setRowCount(response.dataCount(), true);
-                }
-                QVariantList tableData = response.data().toList();
-                TopClassHelper::formatTableData(this, &mSlaveTableConf, tableData);
-                mSlaveView->loadData(tableData);
-                alertOk(ttr("Data loaded"));
-            }
-        } else {
-            // sql语句为空,dbname也为空时执行钩子获取slave数据
-            QString selectedPrimaryKey = mSelectedMasterItems.first().toString();
-            if (isHookExists("slaveWillUpdate")) {
-                callHooksQuick("slaveWillUpdate", QVariantList() << selectedPrimaryKey);
-            }
-            QVariantList tableData = mMasterSlaveDataMap.value(selectedPrimaryKey).toList();
-            TopClassHelper::formatTableData(this, &mSlaveTableConf, tableData);
-            mSlaveView->loadData(tableData);
-            alertOk(ttr("Data loaded"));
-        }
-    } else {
-        // @todo
-    }
-
-    refreshDetail();
-}
-
-void TopTemplateClass5::refreshDetail()
-{
-    if (mUiLoader != nullptr) {
-        QVariantMap dataMap;
-        const QVariantMap masterMap = selectedMasterDataMaps().value(0).toMap();
-        for(const QString &key: masterMap.keys()) {
-            const QString tKey = ::nameWidthTablePrefix("master",key);
-            dataMap.insert(tKey,masterMap[key]);
-        }
-
-        QVariantMap slaveMap = selectedSlaveDataMaps().value(0).toMap();
-        for(const QString &key: slaveMap.keys()) {
-            const QString tKey = ::nameWidthTablePrefix("slave",key);
-            dataMap.insert(tKey,slaveMap[key]);
-        }
-
-        mUiLoader->loadValues(QVariant(dataMap));
-        mUiLoader->refreshState();
-    }
-    setIsDetailModified(false);
-}
-
-/*!
- * \brief 主表格控件对象
- */
-TTableView *TopTemplateClass5::masterView() const
-{
-    return mMasterView;
-}
-
-/*!
- * \brief 从表格控件对象
- */
-TTableView *TopTemplateClass5::slaveView() const
-{
-    return mSlaveView;
-}
-
-const QStringList TopTemplateClass5::masterQueryFields() const
-{
-    return mMasterTableConf.queryFields;
-}
-
-const QStringList TopTemplateClass5::slaveQueryFields() const
-{
-    return mSlaveTableConf.queryFields;
-}
-
-/*!
- * \brief 主表当前选中条目的primaryKey
- */
-QVariantList TopTemplateClass5::selectedMasterItems() const
-{
-    return mSelectedMasterItems;
-}
-
-/*!
- * \brief 主表当前选中条目的所有数据
- */
-QVariantList TopTemplateClass5::selectedMasterDataMaps() const
-{
-    return mMasterView->selectedRowDataMaps(true);
-}
-
-/*!
- * \brief 从表当前选中条目的primaryKey
- */
-QVariantList TopTemplateClass5::selectedSlaveItems() const
-{
-    return mSelectedSlaveItems;
-}
-
-/*!
- * \brief 从表当前选中条目的所有数据
- */
-QVariantList TopTemplateClass5::selectedSlaveDataMaps() const
-{
-    return mSlaveView->selectedRowDataMaps(true);
-}
-
-/*!
- * \brief 导入树形结构的数据
- * {
- *   "A": {
- *     "master_title": "",
- *     "data": [
- *       {
- *         "slave_id": "",
- *         "slave_name": ""
- *       }
- *     ]
- *   }
- * }
- */
-void TopTemplateClass5::loadTreeData(const QVariantMap &iTreeData,
-                                     const QString &iSlavesKey)
-{
-    mMasterData.clear();
-    mMasterSlaveDataMap.clear();
-    QMapIterator<QString, QVariant> i(iTreeData);
-    while (i.hasNext()) {
-        i.next();
-        QVariantMap item = i.value().toMap();
-        mMasterSlaveDataMap.insert(i.key(), item.value(iSlavesKey));
-        item.remove(iSlavesKey);
-        item.insert("name", i.key());
-        mMasterData.append(item);
-    }
-    refreshMaster();
-}
-
-/*!
- * \brief 导入表格结构的数据
- * \todo 待实现
- */
-void TopTemplateClass5::loadTableData(const QVariantList &iTableData,
-                                      const QString &iSlavesKey)
-{
-    Q_UNUSED(iTableData)
-    Q_UNUSED(iSlavesKey)
-    // @todo
-}
-
-void TopTemplateClass5::loadMasterData(const QVariantList &iMasterData, int iRowCount)
-{
-    mMasterData = iMasterData;
-    if(mMasterPageTool) {
-        mMasterPageTool->setRowCount(iRowCount,true);
-    }
-}
-
-void TopTemplateClass5::insertSlaveData(const QString &iKey, const QVariant &iValue)
-{
-    mMasterSlaveDataMap.insert(iKey, iValue);
-}
-
-TUiLoader *TopTemplateClass5::uiLoader() const
-{
-    return mUiLoader;
-}
-
-void TopTemplateClass5::selectSlaveRow(const QVariant &iKeyVar)
-{
-    mSlaveView->selectRow(iKeyVar);
-}
-
-/*!
- * \brief 返回详细信息模块是否发生数据改变
- */
-bool TopTemplateClass5::isDetailModified() const
-{
-    return mIsDetailModified;
-}
-
-/*!
- * \brief 设置详细信息的数据改变状态
- */
-void TopTemplateClass5::setIsDetailModified(bool iIsDetailModified)
-{
-    if (mIsDetailModified == iIsDetailModified) {
-        return;
-    }
-    mIsDetailModified = iIsDetailModified;
-    emit isDetailModifiedChanged(iIsDetailModified);
-}
-
-/*!
- * \brief 当主表选中发生改变的槽函数
- */
-void TopTemplateClass5::onMasterSelectionChanged()
-{
-    mSelectedMasterItems = mMasterView->selectedPrimaryKeys();
-    refreshSlave();
-    refreshActionState();
-}
-
-/*!
- * \brief 当主表分页发生改变的槽函数
- */
-void TopTemplateClass5::onMasterPageChanged()
-{
-    refreshMaster(false);
-}
-
-/*!
- * \brief 当从表选中发生改变的槽函数
- */
-void TopTemplateClass5::onSlaveSelectionChanged()
-{
-    mSelectedSlaveItems = mSlaveView->selectedPrimaryKeys();
-    refreshDetail();
-    refreshActionState();
-}
-
-/*!
- * \brief 当从表分页发生改变的槽函数
- */
-void TopTemplateClass5::onSlavePageChanged()
-{
-    refreshSlave(false);
-}
-
-void TopTemplateClass5::onDetailChanged(bool iIsDetailModified)
-{
-    if (iIsDetailModified) {
-        showMaskFrame(mLeftSplitter);
-    } else {
-        hideMaskFrame();
-    }
-    refreshActionState();
-}
-
-/*!
- * \brief 初始化界面
- */
-void TopTemplateClass5::initUi()
-{
-    mBodySplitter = new TSplitter(this);
-    mBodySplitter->setObjectName("mBodySplitter");
-    setCentralWidget(mBodySplitter);
-
-    mLeftSplitter = new TSplitter(this);
-    mLeftSplitter->setObjectName("mLeftSplitter");
-    mBodySplitter->addWidget(mLeftSplitter);
-
-    // 主表
-    QFrame *masterWgt = new QFrame(this);
-    mLeftSplitter->addWidget(masterWgt);
-
-    QVBoxLayout *masterLayout = new QVBoxLayout(masterWgt);
-    masterLayout->setMargin(0);
-    masterLayout->setSpacing(0);
-
-    mMasterView = new TTableView(this);
-    mMasterView->setObjectName("mMasterView");
-    connect(mMasterView->horizontalHeader(), SIGNAL(sortIndicatorChanged(int,Qt::SortOrder)),
-            this, SLOT(refreshMaster()));
-    connect(mMasterView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
-            this, SLOT(onMasterSelectionChanged()));
-    mMasterView->setDataKeyList(mMasterTableConf.dataKeys);
-    mMasterView->setPrimaryKey(mMasterTableConf.primaryKey);
-    QVariantList masterHeaderItems = mMasterTableConf.horizontalHeaders;
-    masterHeaderItems.prepend(QVariant());
-    mMasterView->setHeaderItem(masterHeaderItems);
-
-    if (QToolBar *toolbar = qobject_cast<QToolBar*>(uim()->getWidget("MASTER_TOOLBAR"))) {
-        masterLayout->addWidget(toolbar, 0);
-        mMasterSearchEntry = qobject_cast<TSearchEntry *>(uim()->getWidget("MASTER_TOOLBAR/SEARCH_ENTRY"));
-        if (mMasterSearchEntry != nullptr) {
-            connect(mMasterSearchEntry, SIGNAL(search(QString,QVariant)), this, SLOT(refreshMaster()));
-            mMasterSearchEntry->setOptionList(TDataParse::headerItem2searchList(mMasterView->headerItem()));
-            mMasterSearchEntry->setPlaceholderText(ttr("Search %1"));
-        }
-    }
-    if (QMenu *tablePopup = qobject_cast<QMenu *>(uim()->getWidget("MASTER_POPUP"))) {
-        mMasterView->setContextMenu(tablePopup);
-    }
-
-    masterLayout->addWidget(mMasterView, 1);
-
-    if (QToolBar *toolbar = qobject_cast<QToolBar*>(uim()->getWidget("MASTER_BOTTOM_TOOLBAR"))) {
-        masterLayout->addWidget(toolbar, 0);
-        mMasterPageTool = qobject_cast<TPageTool *>(uim()->getWidget("MASTER_BOTTOM_TOOLBAR/PAGE_TOOL"));
-        if (mMasterPageTool != nullptr) {
-            mMasterPageTool->setPageSizeVisible(true);
-            connect(mMasterPageTool, SIGNAL(pageChanged(int,int)), this, SLOT(onMasterPageChanged()));
-        }
-    }
-
-    // 从表
-    QWidget *slaveWgt = new QWidget(this);
-    mLeftSplitter->addWidget(slaveWgt);
-
-    QVBoxLayout *slaveLayout = new QVBoxLayout(slaveWgt);
-    slaveLayout->setMargin(0);
-    slaveLayout->setSpacing(0);
-
-    mSlaveView = new TTableView(this);
-    mSlaveView->setObjectName("mSlaveView");
-    connect(mSlaveView->horizontalHeader(), SIGNAL(sortIndicatorChanged(int,Qt::SortOrder)),
-            this, SLOT(refreshSlave()));
-    connect(mSlaveView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
-            this, SLOT(onSlaveSelectionChanged()));
-    mSlaveView->setDataKeyList(mSlaveTableConf.dataKeys);
-    mSlaveView->setPrimaryKey(mSlaveTableConf.primaryKey);
-    QVariantList slaveHeaderItems = mSlaveTableConf.horizontalHeaders;
-    slaveHeaderItems.prepend(QVariant());
-    mSlaveView->setHeaderItem(slaveHeaderItems);
-
-    if (QToolBar *toolbar = qobject_cast<QToolBar*>(uim()->getWidget("SLAVE_TOOLBAR"))) {
-        slaveLayout->addWidget(toolbar, 0);
-        mSlaveSearchEntry = qobject_cast<TSearchEntry *>(uim()->getWidget("SLAVE_TOOLBAR/SEARCH_ENTRY"));
-        if (mSlaveSearchEntry != nullptr) {
-            connect(mSlaveSearchEntry, SIGNAL(search(QString,QVariant)), this, SLOT(refreshSlave()));
-            mSlaveSearchEntry->setOptionList(TDataParse::headerItem2searchList(mSlaveView->headerItem()));
-            mSlaveSearchEntry->setPlaceholderText(ttr("Search %1"));
-        }
-    }
-    if (QMenu *tablePopup = qobject_cast<QMenu *>(uim()->getWidget("SLAVE_POPUP"))) {
-        mSlaveView->setContextMenu(tablePopup);
-    }
-
-    slaveLayout->addWidget(mSlaveView, 1);
-
-    if (QToolBar *toolbar = qobject_cast<QToolBar*>(uim()->getWidget("SLAVE_BOTTOM_TOOLBAR"))) {
-        slaveLayout->addWidget(toolbar, 0);
-        mSlavePageTool = qobject_cast<TPageTool *>(uim()->getWidget("SLAVE_BOTTOM_TOOLBAR/PAGE_TOOL"));
-        if (mSlavePageTool != nullptr) {
-            mSlavePageTool->setPageSizeVisible(true);
-            connect(mSlavePageTool, SIGNAL(pageChanged(int,int)), this, SLOT(onSlavePageChanged()));
-        }
-    }
-
-    // 详情界面
-    const QString uiStr = ui("detail").toString();
-    if(!uiStr.isEmpty()) {
-        QWidget *detailWgt = new QWidget(this);
-        mBodySplitter->addWidget(detailWgt);
-        QVBoxLayout *detailVLayout = new QVBoxLayout(detailWgt);
-        detailVLayout->setMargin(0);
-        detailVLayout->setSpacing(0);
-
-        if(QToolBar *toolBar = qobject_cast<QToolBar*>(uim()->getWidget("DETAIL_TOOLBAR"))) {
-            detailVLayout->addWidget(toolBar);
-        }
-
-        mUiLoader = new TUiLoader(detailWgt);
-        const QStringList typePlugins = config("uiloader_plugins").toStringList();
-        if (typePlugins.size() > 0) {
-            TopClassHelper::setUiLoaderPluginCallback(mUiLoader,this,typePlugins);
-        }
-        mUiLoader->setProperty("SS_BG","PANEL");
-        mUiLoader->setSelf(this);
-        mUiLoader->setScriptEngine(APP->scriptEngine());
-        mUiLoader->setUiStr(uiStr);
-        connect(mUiLoader, &TUiLoader::dataChanged, [this](){
-            setIsDetailModified(true);
-        });
-        detailVLayout->addWidget(mUiLoader);
-    }
-
-    resizeSplitterByRatio();
-}
-
-void TopTemplateClass5::resizeSplitterByRatio()
-{
-    QString masterSlaveRatio = config("master_slave_ratio", "1:1:1").toString();
-    QRegularExpression regExp("(?<master>\\d+):(?<slave>\\d+):(?<uiloader>\\d+)");
-    QRegularExpressionMatch match = regExp.match(masterSlaveRatio);
-    if (match.hasMatch()) {
-        double m = match.captured("master").toDouble();
-        double s = match.captured("slave").toDouble();
-        double u = match.captured("uiloader").toDouble();
-        if (mUiLoader == nullptr) {
-            u = 0.0;
-        }
-        double leftRatio =  (m + s) / (m + s + u);
-        int width = this->width();
-        int leftWidth =  static_cast<int>(width * leftRatio);
-        mBodySplitter->setSizes(QList<int>{ leftWidth, width-leftWidth });
-
-        double leftRatio1 = m / (m + s);
-        int leftWidth1 = leftWidth * leftRatio1;
-        mLeftSplitter->setSizes(QList<int>{ leftWidth1, leftWidth - leftWidth1 });
-    }
-}
diff --git a/src/plugin/toptemplateclass5.h b/src/plugin/toptemplateclass5.h
deleted file mode 100644
index f7dfa894ceb218bf78d3cd49a4541d6525610efa..0000000000000000000000000000000000000000
--- a/src/plugin/toptemplateclass5.h
+++ /dev/null
@@ -1,74 +0,0 @@
-#ifndef TEMPLATECLASS5_H
-#define TEMPLATECLASS5_H
-
-#include <topcore/topclassabs.h>
-#include <topcore/topclasshelper.h>
-
-class TTableView;
-class TSearchEntry;
-class TPageTool;
-class TTableView;
-class TSplitter;
-
-class TopTemplateClass5 : public TopClassAbs
-{
-    Q_OBJECT
-public:
-    explicit TopTemplateClass5(const QString &iModuleName = QString(""),
-                               const QVariantMap &iUrlPars = QVariantMap(),
-                               QWidget *iParent = nullptr);
-    ~TopTemplateClass5();
-
-public slots:
-    void refreshMaster(bool iResetPage = true);
-    void refreshSlave(bool iResetPage = true);
-    void refreshDetail();
-    TTableView *masterView() const;
-    TTableView *slaveView() const;
-    const QStringList masterQueryFields() const;
-    const QStringList slaveQueryFields() const;
-    QVariantList selectedMasterItems() const;
-    QVariantList selectedMasterDataMaps() const;
-    QVariantList selectedSlaveItems() const;
-    QVariantList selectedSlaveDataMaps() const;
-    void loadTreeData(const QVariantMap &iTreeData,
-                      const QString &iSlavesKey = QString("data"));
-    void loadTableData(const QVariantList &iTableData,
-                       const QString &iSlavesKey = QString("data"));
-    void loadMasterData(const QVariantList &iMasterData, int iRowCount = -1);
-    void insertSlaveData(const QString &iKey, const QVariant &iValue);
-    TUiLoader *uiLoader() const;
-    void selectSlaveRow(const QVariant &iKeyVar);
-    bool isDetailModified() const;
-    void setIsDetailModified(bool iIsDetailModified);
-signals:
-    void isDetailModifiedChanged(bool iIsDetailModified);
-private slots:
-    void onMasterSelectionChanged();
-    void onMasterPageChanged();
-    void onSlaveSelectionChanged();
-    void onSlavePageChanged();
-    void onDetailChanged(bool iIsDetailModified);
-private:
-    void initUi();
-    void resizeSplitterByRatio();
-private:
-    TSplitter *mBodySplitter = nullptr;
-    TSplitter *mLeftSplitter = nullptr;
-    TTableView *mMasterView = nullptr;
-    TTableView *mSlaveView = nullptr;
-    TSearchEntry *mMasterSearchEntry = nullptr;
-    TPageTool *mMasterPageTool = nullptr;
-    TSearchEntry *mSlaveSearchEntry = nullptr;
-    TPageTool *mSlavePageTool = nullptr;
-    TUiLoader *mUiLoader = nullptr;
-    TopClassTableConf mMasterTableConf;
-    TopClassTableConf mSlaveTableConf;
-    QVariantList mSelectedMasterItems;
-    QVariantList mSelectedSlaveItems;
-    QVariantList mMasterData;
-    QVariantMap mMasterSlaveDataMap;
-    bool mIsDetailModified = false;
-};
-
-#endif // TEMPLATECLASS5_H
diff --git a/src/plugin/toptemplateclass6.cpp b/src/plugin/toptemplateclass6.cpp
deleted file mode 100644
index e265428fc3741d6db822d52384d33a9d1ffa63af..0000000000000000000000000000000000000000
--- a/src/plugin/toptemplateclass6.cpp
+++ /dev/null
@@ -1,529 +0,0 @@
-#include "toptemplateclass6.h"
-#include <functional>
-#include <QList>
-#include <QWidget>
-#include <QResizeEvent>
-#include <QTabWidget>
-#include <QToolBar>
-#include <QVariantMap>
-#include <QVBoxLayout>
-#include <tbaseutil/tdataparse.h>
-#include <tbaseutil/tdataresponse.h>
-#include <tdatabaseutil/tsqlselectorv2.h>
-#ifdef Q_OS_WIN
-#include <tole/texcel.h>
-#endif
-#include <topcore/topcore.h>
-#include <topcore/topclassabs.h>
-#include <topcore/topclasshelper.h>
-#include <topcore/topclasssqlthread.h>
-#include <twidget/tfiledialog.h>
-#include <twidget/tsplitter.h>
-#include <twidget/ttreeview.h>
-#include <twidget/tuidesigner.h>
-#include <twidget/tuiloader.h>
-#include <twidget/twidget.h>
-#include <twidget/ttablechooserdialog.h>
-
-/*!
- * \class TopTemplateClass6
- * \inmodule templateclass
- * \brief 树形报表模板,左右结构。
- */
-
-TopTemplateClass6::TopTemplateClass6(const QString &iModuleNameStr, const QVariantMap &iUrlPars, QWidget *iParent)
-    : TopClassAbs(iParent)
-{
-    initModule(iModuleNameStr, iUrlPars);
-    QString licenseKey = config("sys_license_key").toString();
-    if (!licenseKey.isEmpty()) {
-        setLicenseKey(licenseKey);
-    }
-    QStringList langLst = config("sys_lang_list").toStringList();
-    for (const auto &lang : langLst) {
-        appendLanguage(lang);
-    }
-    if (isHookExists("afterModuleInit")) {
-        callHooks("afterModuleInit");
-    }
-    initUi();
-    if (isHookExists("afterViewInit")) {
-        callHooks("afterViewInit");
-    }
-    restoreSizeState();
-    restoreObjectState(mBodySplitter);
-    refreshActionState();
-}
-
-TopTemplateClass6::~TopTemplateClass6()
-{
-    saveSizeState();
-    saveObjectState(mBodySplitter);
-    if (isHookExists("onDestroy")) {
-        callHooks("onDestroy");
-    }
-}
-
-TUiLoader *TopTemplateClass6::uiLoader()
-{
-    return mUiLoader;
-}
-
-/*!
- * \brief TopTemplateClass6::uiLoaderValues
- * \return 返回uiLoader的值
- */
-QVariantMap TopTemplateClass6::uiLoaderValues()
-{
-    if (mUiLoader == nullptr) {
-        return QVariantMap();
-    }
-    return mUiLoader->getAllValues().toVariant().toMap();
-}
-
-/*!
- * \brief TopTemplateClass6::onSetUiClicked
- * 编辑左侧ui界面
- */
-void TopTemplateClass6::onSetUiClicked()
-{
-    QVariantMap langArgMap;
-    QVariantMap langMap;
-    langMap.insert("language_define",APP->languageDefine());
-    langMap.insert("language",APP->language());
-    langArgMap.insert("language_args",langMap);
-    TUiDesigner *uiDesigner = new TUiDesigner(nullptr,langArgMap);
-    uiDesigner->setScriptEngine(APP->scriptEngine());
-    uiDesigner->setUiString(getUiStr());// 加载之前保存的Ui
-    connect(uiDesigner, SIGNAL(dataApplied(QString)), this, SLOT(onUiTemplateApplied(QString)));
-    uiDesigner->show();
-}
-
-/*!
- * \brief TopTemplateClass6::onUiTemplateApplied
- * \param iUiStr
- * 保存左侧ui到数据库
- */
-void TopTemplateClass6::onUiTemplateApplied(const QString &iUiStr)
-{
-    QString tableName = config("condition_ui.table_name").toString();
-    QString pathName = config("condition_ui.path_name").toString();
-    QString pathValue = config("condition_ui.path_value").toString();
-    QString field = config("condition_ui.field").toString();
-    if (tableName.isEmpty() || pathName.isEmpty() || pathValue.isEmpty() || field.isEmpty()) {
-        alertError(ttr("condition_ui config value is empty!"), "Error");
-        return;
-    }
-    QVariantMap saveData;
-    saveData.insert(field, QVariantMap{{"ui_str", iUiStr}});
-    saveData.insert(pathName, pathValue);
-    TSqlInserterV2 inserter;
-    inserter.setTable(tableName);
-    inserter.setField(QStringList() << field << pathName);
-    inserter.setData(saveData);
-    inserter.setUniqueField(pathName);
-    inserter.setAutoIncrementField("id");
-    QVariant data = doThreadWork(new TopClassSqlThread(this), TOPSQLTHREAD_REPLACE_ROW, QVariant::fromValue(inserter));
-    TDataResponse dataRes(data.toMap());
-    if (dataRes.hasError()) {
-        alertError(dataRes.errText(), "Error");
-        return;
-    }
-    mUiLoader->setUiStr(iUiStr);
-}
-
-/*!
- * \brief TopTemplateClass6::reopenTotalTab
- * \param iTotalData
- * 关闭tab所有页,重新打开新的总表
- */
-void TopTemplateClass6::reopenTotalTab(const QVariantMap &iTotalData)
-{
-    try {
-        //关闭所有tab页
-        mTabWidget->clear();
-        clearTabLst();
-        //新建总表tab页
-        TTreeView *totalTree = getSubTab(iTotalData);
-        if (QMenu *menu = qobject_cast<QMenu *>(uim()->getWidget("TREEVIEW_POPUP"))) {
-            totalTree->setContextMenu(menu);
-        }
-        totalTree->setSelectionBehavior(QAbstractItemView::SelectItems);
-        totalTree->setSelectionMode(QAbstractItemView::ExtendedSelection);
-        connect(totalTree, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(onTreeViewItemDoubleClicked(QModelIndex)));
-        mTabWidget->addTab(totalTree, iTotalData["name"].toString());
-    } catch (const TError &e) {
-        alertError(ttr("ERROR"), e.text());
-    } catch (...) {
-        alertError(ttr("ERROR"), ttr("Unkown Error!"));
-    }
-}
-
-/*!
- * \brief TopTemplateClass6::getSubTab
- * \param iSubData
- * {
-    "name":"test",
-    "view":{
-        "data_keys":[
-
-        ],
-        "horizontal_header":[
-            {
-                "name":"zone",
-                "display":"Zone",
-                "displayRole":"$zone"
-            }
-        ]
-    },
-    "data":[
-
-    ]
-}
- * \return 根据iSubData配置,创建新的树形控件
- */
-TTreeView *TopTemplateClass6::getSubTab(const QVariantMap &iSubData)
-{
-    TTreeView *treeView = new TTreeView(this);
-    TopClassTableConf treeConf;
-    if (!iSubData.contains("view")) {
-        throw TError(ttr("view doesn't exist!"), "ERROR");
-    }
-    if (iSubData.value("view").type() != QVariant::Map) {
-        throw TError(ttr("view type != map"), "ERROR");
-    }
-    TopClassHelper::parseTableConf0(this, iSubData["view"].toMap(), &treeConf);
-    treeView->setHeaderItem(treeConf.horizontalHeaders);
-    treeView->setDataKeyList(treeConf.dataKeys);
-    QVariantList treeData = iSubData["data"].toList();
-    TopClassHelper::formatTableData(this, &treeConf, treeData);
-    treeView->loadTreeData(treeData);
-    treeView->collapseAll();
-    return treeView;
-}
-
-/*!
- * \brief TopTemplateClass6::expandAll
- * 展开当前页的树形控件
- */
-void TopTemplateClass6::expandAll()
-{
-    if (TTreeView *treeview = qobject_cast<TTreeView *>(mTabWidget->currentWidget())) {
-        treeview->expandAll();
-    }
-}
-
-/*!
- * \brief TopTemplateClass6::collapseAll
- * 折叠当前页的树形控件
- */
-void TopTemplateClass6::collapseAll()
-{
-    if (TTreeView *treeview = qobject_cast<TTreeView *>(mTabWidget->currentWidget())) {
-        treeview->collapseAll();
-    }
-}
-
-/*!
- * \brief TopTemplateClass6::exportExcel
- * 列出所有tab页,选择需要的tab页,导出到一个excel文件
- */
-void TopTemplateClass6::exportExcel()
-{
-#ifdef Q_OS_WIN
-    TTableChooserDialog *chooseDlg = new TTableChooserDialog(this);
-    chooseDlg->setTitle(ttr("Select Export Tab"));
-    QVariantList headerItems;
-    headerItems << QVariant();
-    headerItems << TDataParse::stringList2VariantMap(
-                       QStringList() << "name" << "name" << "display" << ttr("Name")
-                       << "displayRole" << "$name"<<"resizeMode" << "Stretch");
-    chooseDlg->setHeaderItem(headerItems);
-    chooseDlg->setPrimaryKey("index");
-    chooseDlg->setDataKeyList(QStringList() << "index" << "name");
-    chooseDlg->loadAllData(allTabInfo());
-    QVariantList selectedTabData = chooseDlg->run();
-    if (selectedTabData.length() == 0) {
-        return;
-    }
-
-    QString fileName = QString("%1 %2.xlsx").arg(moduleName().replace("-", " ")).arg(QDateTime::currentDateTime().toString("yyyyMMddhhmmss"));
-    TFileDialog *fileDlg = new TFileDialog(ttr("Please select save file"), fileName);
-    fileDlg->setAcceptMode("AcceptSave");
-    QStringList strLst = fileDlg->run();
-    if (strLst.length() == 0 ) {
-        return;
-    }
-    QString absoluteFileName = strLst.first();
-
-    TExcel *excel = new TExcel(this);
-    QAxObject *obj = excel->addBook();
-    if (obj == nullptr) {
-        excel->quitExcel();
-        alertError(ttr("Export failed!"));
-        return;
-    }
-
-    std::function<QVariantList(const QVariantList, const QString)> transformTreeData;
-    transformTreeData = [&transformTreeData](const QVariantList &iDataLst, const QString &iChildrenKey){
-        QVariantList allDataLst;
-        for (QVariant item : iDataLst) {
-            QVariantMap itemMap = item.toMap();
-            QVariantList childDataLst = itemMap.take(iChildrenKey).toList();
-            allDataLst.append(itemMap);
-            if (childDataLst.length() > 0) {
-                 allDataLst.append(transformTreeData(childDataLst, iChildrenKey));
-            }
-        }
-        return allDataLst;
-    };
-
-    std::function<void(TTreeView*)> exportToSheet = [&excel, &transformTreeData](TTreeView* iTreeView){
-        if (iTreeView == nullptr) {
-            return;
-        }
-        QVariantList allDataLst = iTreeView->allDataMap();
-        allDataLst = transformTreeData(allDataLst, "CHILDREN");
-        QVariantList headerItems = iTreeView->headerItem();
-        if (allDataLst.length() == 0) {
-            return;
-        }
-
-        int rowInt = 1;
-        // 表头字段
-        for (int i = 0; i < headerItems.length(); i++) {
-            QVariantMap itemMap = headerItems[i].toMap();
-            QString colName = itemMap.value("display").toString();
-            QString colRange = QString("%1%2").arg(QChar('A' + i)).arg(QString::number(rowInt));
-            QVariantMap font_map = QVariantMap({{"Size", 12},
-                                                {"Bold", true},
-                                                {"Color", QColor("black")}});
-            excel->setRangeValue(colRange, colName);
-            excel->setRangeFont(colRange, font_map);
-            excel->autoFitColumns(QChar('A' + i));
-            excel->setRangeHorizontalAlignment(colRange, -4108);
-        }
-        rowInt++;
-
-        // 写值
-        for (QVariant dataVar: allDataLst) {
-            QVariantMap dataVarMap = dataVar.toMap();
-            int colInt = 0;
-            for (QVariant item: headerItems) {
-                QVariantMap itemMap = item.toMap();
-                QString keyStr = itemMap.value("displayRole").toString().mid(1);
-                QString cellRange = QString("%1%2").arg(QChar('A' + colInt)).arg(QString::number(rowInt));
-                excel->setRangeValue(cellRange, dataVarMap.value(keyStr));
-                excel->setRangeHorizontalAlignment(cellRange, -4108);
-                excel->autoFitColumns(QChar('A' + colInt));
-                colInt++;
-            }
-            rowInt++;
-        }
-
-        // 边框
-        int row = excel->getUsedRows();
-        int column = excel->getUsedColumns();
-        QString rangecolunmn = QString(65 + column - 1);
-        QString used_range = QString("A1:%1%2").arg(rangecolunmn).arg(row);
-        QVariantMap border = QVariantMap({{"Color", -4165632},
-                                          {"LineStyle", 1},
-                                          {"TintAndShader", 0},
-                                          {"Weight", 2}}) ;
-        excel->setRangeBorder(used_range, border);
-    };
-
-    excel->setExcelDisplayAlerts(true);
-    excel->setExcelVisible(true);
-    for (int i = 0; i < selectedTabData.length(); i++) {
-        QVariantMap itemMap = selectedTabData[i].toMap();
-        int index = itemMap.value("index").toInt();
-        QString tabName = itemMap.value("name").toString();
-        if ((i + 1) > excel->getSheetsCount()) {
-            excel->appendSheet(tabName);
-        }
-        excel->selectSheet(i + 1);
-        excel->setSheetName(tabName);
-
-        TTreeView *treeView = qobject_cast<TTreeView *>(mTabWidget->widget(index));
-        exportToSheet(treeView);
-    }
-
-    excel->saveAsBook(absoluteFileName.replace("/", "\\"));
-    excel->closeBook();
-    excel->quitExcel();
-    alertOk(ttr("Export success!"));
-#endif
-}
-
-QVariantList TopTemplateClass6::allTabInfo()
-{
-    QVariantList tabDataLst;
-    for (int i = 0; i < mTabWidget->count(); i++) {
-        QVariantMap tabInfo;
-        tabInfo.insert("index", i);
-        tabInfo.insert("name", mTabWidget->tabText(i));
-        tabDataLst.append(tabInfo);
-    }
-    return tabDataLst;
-}
-
-TTreeView *TopTemplateClass6::getTreeView(int iIndex)
-{
-    return qobject_cast<TTreeView *>(mTabWidget->widget(iIndex));
-}
-
-QVariantList TopTemplateClass6::getTreeDataLst(int iIndex)
-{
-    TTreeView *treeView = qobject_cast<TTreeView *>(mTabWidget->widget(iIndex));
-    if (treeView) {
-        return treeView->allDataMap();
-    }
-    return QVariantList();
-}
-
-/*!
- * \brief TopTemplateClass6::onTreeViewItemDoubleClicked
- * \param iIndex
- * 双击总表的单元格后打开子表
- */
-void TopTemplateClass6::onTreeViewItemDoubleClicked(const QModelIndex &iIndex)
-{
-    if (mSubTabMap.contains(iIndex)) {
-        mTabWidget->setCurrentWidget(mSubTabMap.value(iIndex));
-    } else {
-        TTreeView *totalTree = qobject_cast<TTreeView *>(mTabWidget->widget(0));
-        if (totalTree->currentRowDataMap().isNull()) {
-            return;
-        }
-        QVariantMap cellData;
-        cellData.insert("row", totalTree->currentRowDataMap().toMap());
-        cellData.insert("column", totalTree->headerItem().at(iIndex.column()).toMap().value("name"));
-        QVariantMap subData = callHooksQuick("getSubData", QVariantList() << cellData).toVariant().toMap();
-        TTreeView *subTree = getSubTab(subData);
-        subTree->setSelectionBehavior(QAbstractItemView::SelectRows);
-        subTree->setSelectionMode(QAbstractItemView::ExtendedSelection);
-        if (QMenu *menu = qobject_cast<QMenu *>(uim()->getWidget("TREEVIEW_POPUP"))) {
-            subTree->setContextMenu(menu);
-        }
-        mTabWidget->addTab(subTree, subData["name"].toString());
-        mTabWidget->setCurrentWidget(subTree);
-        mSubTabMap.insert(iIndex, subTree);
-    }
-}
-
-/*!
- * \brief TopTemplateClass6::onTabClosedButtomClicked
- * \param index
- * 关闭tab页
- */
-void TopTemplateClass6::onTabClosedButtomClicked(int index)
-{
-    TTreeView *closingView = qobject_cast<TTreeView *>(mTabWidget->widget(index));
-    if(closingView->close()) {
-        mTabWidget->removeTab(index);
-        QMap<QModelIndex, TTreeView*>::iterator iter;
-        for (iter = mSubTabMap.begin(); iter != mSubTabMap.end();) {
-            TTreeView *treeView = iter.value();
-            if (treeView == closingView) {
-                delete treeView;
-                treeView = nullptr;
-                mSubTabMap.erase(iter++);
-            } else {
-                iter++;
-            }
-        }
-    }
-}
-
-/*!
- * \brief TopTemplateClass6::initUi
- * 初始化界面
- */
-void TopTemplateClass6::initUi()
-{
-    mBodySplitter = new TSplitter(this);
-    mBodySplitter->setObjectName("mBodySplitter");
-    setCentralWidget(mBodySplitter);
-    //left
-    TWidget *leftWidget = new TWidget(mBodySplitter);
-    QVBoxLayout *leftLayout = new QVBoxLayout(leftWidget);
-    leftLayout->setMargin(0);
-    leftLayout->setSpacing(0);
-    mBodySplitter->addWidget(leftWidget);
-    if (QToolBar *toolbar = qobject_cast<QToolBar*>(uim()->getWidget("CONDITION_TOOLBAR"))) {
-        leftLayout->addWidget(toolbar, 0);
-    }
-    mUiLoader = new TUiLoader(this);
-    const QStringList typePlugins = config("uiloader_plugins").toStringList();
-    if (typePlugins.size() > 0) {
-        TopClassHelper::setUiLoaderPluginCallback(mUiLoader,this,typePlugins);
-    }
-    mUiLoader->setScriptEngine(APP->scriptEngine());
-    mUiLoader->setSelf(this);
-    mUiLoader->setUiStr(getUiStr());
-    leftLayout->addWidget(mUiLoader, 1);
-    // right
-    TWidget *rightWidget = new TWidget(mBodySplitter);
-    QVBoxLayout *rightLayout = new QVBoxLayout(rightWidget);
-    rightLayout->setMargin(0);
-    rightLayout->setSpacing(0);
-    mBodySplitter->addWidget(rightWidget);
-    mTabWidget = new QTabWidget(rightWidget);
-    mTabWidget->setStyleSheet("QTabBar {qproperty-tabsClosable: 1;}");
-    mTabWidget->setTabsClosable(true);
-    connect(mTabWidget, SIGNAL(tabCloseRequested(int)), this, SLOT(onTabClosedButtomClicked(int)));
-    if (QToolBar *toolbar = qobject_cast<QToolBar *>(uim()->getWidget("MAIN_TOOLBAR"))) {
-        rightLayout->addWidget(toolbar, 0);
-    }
-    rightLayout->addWidget(mTabWidget);
-
-    int width = this->width();
-    int tableWidth = width * config("width_ratio").toDouble();
-    mBodySplitter->setSizes(QList<int>{tableWidth, width - tableWidth});
-}
-
-/*!
- * \brief TopTemplateClass6::getUiStr
- * \return 根据module中左侧ui配置,从表中查找左侧ui的界面数据
- */
-QString TopTemplateClass6::getUiStr()
-{
-    QString tableName = config("condition_ui.table_name").toString();
-    QString pathName = config("condition_ui.path_name").toString();
-    QString pathValue = config("condition_ui.path_value").toString();
-    QString field = config("condition_ui.field").toString();
-    QVariantMap fieldFormat = config("condition_ui.field_format").toMap();
-    if (tableName.isEmpty() || pathName.isEmpty() || pathValue.isEmpty() || field.isEmpty()) {
-        return QString();
-    }
-    TSqlSelectorV2 selector;
-    selector.setTable(tableName);
-    if (!field.isEmpty()) {
-        selector.setField(field);
-    }
-    selector.setFieldFormat(fieldFormat);
-    selector.setWhere(pathName, pathValue);
-    QVariant data = doThreadWork(new TopClassSqlThread(this), TOPSQLTHREAD_SELECT_VALUE, QVariant::fromValue(selector));
-    TDataResponse dataRes(data.toMap());
-    if (dataRes.hasError()) {
-        alertError(dataRes.errText(), "Error");
-        return QString();
-    }
-    return dataRes.data().toMap().value("ui_str").toString();
-}
-
-/*!
- * \brief TopTemplateClass6::clearTabLst
- * 清理所有打开的tab页控件
- */
-void TopTemplateClass6::clearTabLst()
-{
-    QMap<QModelIndex, TTreeView*>::iterator iter;
-    for (iter = mSubTabMap.begin(); iter != mSubTabMap.end();) {
-        TTreeView* treeView = iter.value();
-        delete treeView;
-        treeView = nullptr;
-        mSubTabMap.erase(iter++);
-    }
-}
diff --git a/src/plugin/toptemplateclass6.h b/src/plugin/toptemplateclass6.h
deleted file mode 100644
index 45f6c5bc06cb29bb40b6b9a852a4d5f4bb62967b..0000000000000000000000000000000000000000
--- a/src/plugin/toptemplateclass6.h
+++ /dev/null
@@ -1,46 +0,0 @@
-#ifndef TOPTEMPLATECLASS6_H
-#define TOPTEMPLATECLASS6_H
-
-#include <topcore/topclassabs.h>
-
-class QWidget;
-class QTabWidget;
-class TopClassAbs;
-class TSplitter;
-class TTreeView;
-class TUiLoader;
-class TopTemplateClass6 : public TopClassAbs
-{
-    Q_OBJECT
-public:
-    explicit TopTemplateClass6(const QString &iModuleNameStr = QString(""),
-                               const QVariantMap &iUrlPars = QVariantMap(),
-                               QWidget *iParent = nullptr);
-    ~TopTemplateClass6();
-public slots:
-    TUiLoader *uiLoader();
-    QVariantMap uiLoaderValues();
-    void onSetUiClicked();
-    void onUiTemplateApplied(const QString &iUiStr);
-    void reopenTotalTab(const QVariantMap &iTotalData);
-    TTreeView* getSubTab(const QVariantMap &iSubData);
-    void expandAll();
-    void collapseAll();
-    void exportExcel();
-    QVariantList allTabInfo();
-    TTreeView *getTreeView(int iIndex);
-    QVariantList getTreeDataLst(int iIndex);
-private slots:
-    void onTreeViewItemDoubleClicked(const QModelIndex &iIndex);
-    void onTabClosedButtomClicked(int index);
-private:
-    void initUi();
-    QString getUiStr();
-    void clearTabLst();
-private:
-    TSplitter *mBodySplitter = nullptr;
-    QTabWidget *mTabWidget = nullptr;
-    TUiLoader *mUiLoader = nullptr;
-    QMap<QModelIndex, TTreeView *> mSubTabMap;
-};
-#endif // TOPTEMPLATECLASS6_H
diff --git a/src/plugin/toptemplateclass7.cpp b/src/plugin/toptemplateclass7.cpp
deleted file mode 100644
index f3c4d7e36eb65c629815f49846e03b9f8f4fd5cd..0000000000000000000000000000000000000000
--- a/src/plugin/toptemplateclass7.cpp
+++ /dev/null
@@ -1,442 +0,0 @@
-#include "toptemplateclass7.h"
-#include <QHBoxLayout>
-#include <QLabel>
-#include <QMenu>
-#include <QPushButton>
-#include <QTimer>
-#include <QToolBar>
-#include <QVBoxLayout>
-#include <QWidget>
-#include <tbaseutil/tdataresponse.h>
-#include <tbaseutil/ttheme.h>
-#include <tdatabaseutil/tsqlqueryv2.h>
-#include <tdatabaseutil/tsqlconnectionpoolv2.h>
-#include <topcore/topclasshelper.h>
-#include <topcore/topclasssqlthread.h>
-#include <topcore/topcore.h>
-#include <twidget/taccordion.h>
-#include <twidget/tpagetool.h>
-#include <twidget/tsplitter.h>
-#include <twidget/ttableview.h>
-#include <twidget/tuiloader.h>
-#include <twidget/taccordion.h>
-
-/*!
- * \class TopTemplateClass7
- * \inmodule templateclass
- * \brief 带筛选条件,详细信息的报表展示。支持搜索,展示详情
- */
-
-TopTemplateClass7::TopTemplateClass7(const QString &iModuleNameStr,
-                                     const QVariantMap &iUrlPars,
-                                     QWidget *iParent)
-    : TopClassAbs(iParent)
-{
-    initModule(iModuleNameStr, iUrlPars);
-    QString licenseKey = config("sys_license_key").toString();
-    if (!licenseKey.isEmpty()) {
-        setLicenseKey(licenseKey);
-    }
-    QStringList langLst = config("sys_lang_list").toStringList();
-    for (const auto &lang : langLst) {
-        appendLanguage(lang);
-    }
-    if (isHookExists("afterModuleInit")) {
-        callHooks("afterModuleInit");
-    }
-    TopClassHelper::parseTableConf0(this, "view", &mTableConf);
-    initUi();
-    connect(this, SIGNAL(viewConfChanged()),
-            this, SLOT(onViewConfChanged()));
-    if (isHookExists("afterViewInit")) {
-        callHooks("afterViewInit");
-    }
-    restoreSizeState();
-    restoreObjectState(mBodySplitter);
-    restoreObjectState(mTableView);
-    refreshActionState();
-    QTimer::singleShot(0, this, SLOT(refresh()));
-}
-
-TopTemplateClass7::~TopTemplateClass7()
-{
-    saveSizeState();
-    saveObjectState(mBodySplitter);
-    saveObjectState(mTableView);
-    if (isHookExists("onDestroy")) {
-        callHooks("onDestroy");
-    }
-}
-
-QString TopTemplateClass7::detailUid() const
-{
-    return mDetailUid;
-}
-
-void TopTemplateClass7::setDetailUid(const QString &iUid, bool iForceRefresh)
-{
-    if (iForceRefresh || mDetailUid != iUid) {
-        mDetailUid = iUid;
-        emit detailUidChanged(iUid);
-    }
-}
-
-QVariantList TopTemplateClass7::selectedItems() const
-{
-    return mSelectedItems;
-}
-
-QVariantList TopTemplateClass7::selectedDataMaps() const
-{
-    return mTableView->selectedRowDataMaps(true);
-}
-
-TTableView *TopTemplateClass7::tableView()
-{
-    return mTableView;
-}
-
-/*!
- * \brief TopTemplateClass7::refresh 刷新数据
- * \param iResetPage 表示是否要重置分页
- */
-void TopTemplateClass7::refresh(bool iResetPage)
-{
-    TSqlSelectorV2 selector;
-    if (!mTableConf.dbSql.isEmpty()) {
-        selector.setTable(QString("(%1) _TEMP_TABLE_").arg(mTableConf.dbSql));
-    } else if (!mTableConf.dbTableName.isEmpty()) {
-        selector.setTable(mTableConf.dbTableName);
-        // 搜索栏
-        QString searchSql = searchWhere(searchUiValues());
-        if (!searchSql.isEmpty()) {
-            selector.addWhere(searchSql);
-        }
-    } else {
-        //db_sql为空和db_table_name为空时不作处理
-        return;
-    }
-    selector.setField(mTableConf.queryFields);
-    selector.setFieldFormat(mTableConf.fieldFormatMap);
-    selector.setReturnRowCount(true);
-    // 分页
-    TopClassHelper::handleSearchPageOnQuery(nullptr, mPageTool, iResetPage, &selector);
-    // 排序
-    TopClassHelper::handleOrderOnQuery(mTableView, &mTableConf, &selector);
-    // 只获取有效数据
-    if (!mTableConf.dbDelFlagKey.isEmpty()) {
-        selector.addWhere(QString("%1 = 0 OR %1 IS NULL").arg(mTableConf.dbDelFlagKey));
-    }
-    // 过滤项
-    if(!mTableConf.dbFilter.isEmpty()) {
-        selector.addWhere(mTableConf.dbFilter);
-    }
-
-    loading(ttr("Loading"));
-    QVariant data = doThreadWork(new TopClassSqlThread(this), TOPSQLTHREAD_SELECT_ARRAYMAP, QVariant::fromValue(selector));
-    unloading();
-    TDataResponse response(data.toMap());
-    if (response.hasError()) {
-        alertError(ttr("Load data failed!"));
-    } else {
-        if (mPageTool != nullptr) {
-            mPageTool->setRowCount(response.dataCount(), true);
-        }
-        QVariantList tableData = response.data().toList();
-        TopClassHelper::formatTableData(this, &mTableConf, tableData);
-        if (isHookExists("handleTableData")) {
-            tableData = callHooksQuick("handleTableData", QVariantList() << QVariant(tableData)).toVariant().toList();
-        }
-        mTableView->loadData(tableData);
-        mSelectedItems.clear();
-        setDetailUid(QString());
-        alertOk(ttr("Data loaded"));
-    }
-}
-
-/*!
- * \brief TopTemplateClass7::refreshDetail 刷新详情数据
- * \param iUid 详情id
- */
-void TopTemplateClass7::refreshDetail(const QString &iUid)
-{
-    if (iUid.isEmpty()) {
-        mDetailUiLoader->loadValues(QVariantMap(), true);
-        return;
-    }
-
-    TSqlSelectorV2 selector;
-    if (!mTableConf.dbSql.isEmpty()) {
-        selector.setTable(QString("(%1) _TEMP_TABLE_").arg(mTableConf.dbSql));
-    } else {
-        selector.setTable(mTableConf.dbTableName);
-    }
-    selector.setWhere(mTableConf.primaryKey, iUid);
-    selector.setField(mTableConf.queryFields);
-    selector.setFieldFormat(mTableConf.fieldFormatMap);
-    TError err;
-    QVariant data = runSqlQueryOnThreadSync(TOPSQLTHREAD_SELECT_MAP,
-                                            QVariant::fromValue(selector),
-                                            &err);
-    if (err.isValid()) {
-        alertError(ttr("Load data failed!"), err.text());
-        return;
-    }
-    QVariantMap dataMap = data.toMap();
-    mDetailUiLoader->loadValues(dataMap, true);
-}
-
-/*!
- * \brief TopTemplateClass7::searchUiLoader
- * \return 搜索ui控件
- */
-TUiLoader *TopTemplateClass7::searchUiLoader()
-{
-    return mSearchUiLoader;
-}
-
-/*!
- * \brief TopTemplateClass7::searchUiValues
- * \return 搜索ui的数据
- */
-QVariantMap TopTemplateClass7::searchUiValues()
-{
-    return mSearchUiLoader->getAllValues().toVariant().toMap();
-}
-
-/*!
- * \brief TopTemplateClass7::resetSearchUiLoader 清除搜索ui的数据
- */
-void TopTemplateClass7::resetSearchUiLoader()
-{
-    mSearchUiLoader->clearValues();
-}
-
-/*!
- * \brief TopTemplateClass7::detailUiLoader
- * \return 详情ui控件
- */
-TUiLoader *TopTemplateClass7::detailUiLoader()
-{
-    return mDetailUiLoader;
-}
-
-/*!
- * \brief TopTemplateClass7::searchWhere
- * \param iSearchMap
- * \return 根据iSearchMap组装搜索sql语句
- */
-QString TopTemplateClass7::searchWhere(const QVariantMap &iSearchMap)
-{
-    QString searchSql;
-    QMapIterator<QString, QVariant> iter(iSearchMap);
-    while (iter.hasNext()) {
-        iter.next();
-        QString key = iter.key();
-        QString value = iter.value().toString();
-        if (value.isEmpty()) {
-            continue;
-        }
-        auto obj = mSearchUiLoader->getObject(key);
-        if (obj != nullptr) {
-            QVariantMap userData = obj->property("tui_user_data").toMap();
-            if (userData.contains("field_name")) {
-                key = userData.value("field_name").toString();
-            }
-            QString operatorStr = "=";
-            if (userData.contains("operator")) {
-                operatorStr = userData.value("operator").toString();
-            }
-            if (operatorStr.compare("like", Qt::CaseInsensitive) == 0) {
-                value = QString("'%%1%'").arg(value);
-            } else if (operatorStr.compare("in", Qt::CaseInsensitive) == 0) {
-                value = QString("(%1)").arg(value);
-            } else {
-                if (iter.value().type() == QVariant::String) {
-                    value = QString("'%1'").arg(value);
-                }
-            }
-            QString searchStr = QString("%1 %2 %3").arg(key).arg(operatorStr).arg(value);
-            if (!searchSql.isEmpty()) {
-                searchSql.append(" and ");
-            }
-            searchSql.append(searchStr);
-        }
-    }
-    return searchSql;
-}
-
-void TopTemplateClass7::selectRow(const QString &iId)
-{
-    mTableView->selectRow(iId);
-}
-
-/*!
- * \brief TopTemplateClass7::onSelectionChanged 选中一条表格数据,详情id改变
- */
-void TopTemplateClass7::onSelectionChanged()
-{
-    mSelectedItems = mTableView->selectedPrimaryKeys();
-    QString curId;
-    if (!mSelectedItems.isEmpty()) {
-        curId = mSelectedItems.first().toString();
-    }
-    if (mDetailUid != curId) {
-        setDetailUid(curId);
-    }
-    refreshActionState();
-}
-
-/*!
- * \brief TopTemplateClass7::onPageChanged 响应翻页控件的页面改变
- */
-void TopTemplateClass7::onPageChanged()
-{
-    refresh(false);
-}
-
-void TopTemplateClass7::onViewConfChanged()
-{
-    TopClassHelper::parseTableConf0(this, "view", &mTableConf);
-}
-
-/*!
- * \brief TopTemplateClass7::initUi 初始化界面
- */
-void TopTemplateClass7::initUi()
-{
-    mBodySplitter = new TSplitter(this);
-    mBodySplitter->setObjectName("mBodySplitter");
-    setCentralWidget(mBodySplitter);
-    initSearchUiLoader();
-    initTableView();
-    initDetailUiLoader();
-
-    QString viewRatio = config("view_ratio").toString();
-    QRegularExpression regExp("(?<search>\\d+):(?<tableview>\\d+):(?<detail>\\d+)");
-    QRegularExpressionMatch match = regExp.match(viewRatio);
-    if (match.hasMatch()) {
-        double detailRatio =  match.captured("search").toDouble() /
-                (match.captured("search").toDouble() + match.captured("tableview").toDouble() + match.captured("detail").toDouble());
-        double tableviewRation =  match.captured("tableview").toDouble() /
-                (match.captured("search").toDouble() + match.captured("tableview").toDouble() + match.captured("detail").toDouble());
-        int width = this->width();
-        int searchWidth = static_cast<int>(width * detailRatio);
-        int tableviewWidth = static_cast<int>(width * tableviewRation);
-        mBodySplitter->setSizes(QList<int>{ searchWidth, tableviewWidth , width-searchWidth-tableviewWidth});
-    }
-}
-
-void TopTemplateClass7::initSearchUiLoader()
-{
-    mSearchUiLoader = new TUiLoader(this);
-    mSearchUiLoader->setProperty("SS_BG", "PANEL");
-    mSearchUiLoader->setSelf(this);
-    mSearchUiLoader->setScriptEngine(APP->scriptEngine());
-    mSearchUiLoader->setUiStr(ui("search").toString());
-
-    QWidget *searchWidget = new QWidget(this);
-    searchWidget->setObjectName("__navi__");
-    searchWidget->setMinimumWidth(TTHEME_DP(config("search.min_width", 150).toInt()));
-    searchWidget->setMaximumWidth(TTHEME_DP(config("search.max_width", 300).toInt()));
-    QVBoxLayout *searchLayout = new QVBoxLayout(searchWidget);
-    searchLayout->setMargin(0);
-    searchLayout->setSpacing(0);
-    QLabel *naviLabel = new QLabel(ttr("Navigation"));
-    naviLabel->setProperty("SS_TYPE", "SUBHEADER");
-    if (QToolBar *toolbar = qobject_cast<QToolBar*>(uim()->getWidget("SEARCH_TOOLBAR"))) {
-        searchLayout->addWidget(toolbar, 0);
-        searchLayout->addSpacing(TTHEME_DP(4));
-    }
-    searchLayout->addWidget(mSearchUiLoader, 1);
-    searchLayout->addStretch(1);
-
-    if (config("search_ui_set.is_navi", 1).toBool()) {
-        TAccordion *accordion = new TAccordion(this);
-        accordion->setProperty("SS_BG","NAVI");
-        accordion->setMinimumWidth(TTHEME_DP(config("navi.min_width", 150).toInt()));
-        accordion->setMaximumWidth(TTHEME_DP(config("navi.max_width", 300).toInt()));
-        accordion->setAccordionLocation(TAccordion::AccordionLocation::Left);
-        QVBoxLayout *naviLayout = new QVBoxLayout(accordion);
-        naviLayout->setMargin(0);
-        naviLayout->setSpacing(0);
-        naviLayout->addWidget(naviLabel, 0);
-        naviLayout->addSpacing(TTHEME_DP(4));
-        naviLayout->addWidget(searchWidget);
-        accordion->expandButton()->setFixedHeight(TTHEME_DP(40));
-        accordion->expandButton()->setToolTip(ttr("Show Navigation"));
-        accordion->collapseButton()->setToolTip(ttr("Hide Navigation"));
-        accordion->setIsExpanded(config("search_ui_set.navi_is_expand").toBool());
-        mBodySplitter->insertWidget(0,accordion);
-    } else {
-        searchLayout->insertWidget(0, naviLabel);
-        searchLayout->addSpacing(TTHEME_DP(4));
-        mBodySplitter->insertWidget(0, searchWidget);
-    }
-}
-
-/*!
- * \brief TopTemplateClass7::initDetailUiLoader 初始化详情ui
- */
-void TopTemplateClass7::initDetailUiLoader()
-{
-    if (!ui("detail").toString().isEmpty()) {
-        QWidget *detailWidget = new QWidget(this);
-        QVBoxLayout *detailLayout = new QVBoxLayout(detailWidget);
-        detailLayout->setSpacing(0);
-        detailLayout->setMargin(0);
-
-        if (QToolBar *toolbar = qobject_cast<QToolBar*>(uim()->getWidget("DETAIL_TOOLBAR"))) {
-            detailLayout->addWidget(toolbar, 0);
-        }
-        mDetailUiLoader = new TUiLoader(this);
-        mDetailUiLoader->setProperty("SS_BG", "PANEL");
-        mDetailUiLoader->setSelf(this);
-        mDetailUiLoader->setScriptEngine(APP->scriptEngine());
-        mDetailUiLoader->setUiStr(ui("detail").toString());
-        detailLayout->addWidget(mDetailUiLoader);
-        mBodySplitter->addWidget(detailWidget);
-        connect(this, SIGNAL(detailUidChanged(QString)),
-                this, SLOT(refreshDetail(QString)));
-    }
-}
-
-/*!
- * \brief TopTemplateClass7::initTableView
- */
-void TopTemplateClass7::initTableView()
-{
-    QWidget *centerWidget = new QWidget(this);
-    QVBoxLayout *centerLayout = new QVBoxLayout(centerWidget);
-    centerLayout->setMargin(0);
-    centerLayout->setSpacing(0);
-    mTableView = new TTableView(this);
-    mTableView->setObjectName("mTableView");
-    mTableView->setDataKeyList(mTableConf.dataKeys);
-    mTableView->setPrimaryKey(mTableConf.primaryKey);
-    QVariantList headerItems = mTableConf.horizontalHeaders;
-    headerItems.prepend(QVariant());
-    mTableView->setHeaderItem(headerItems);
-
-    connect(mTableView->horizontalHeader(), SIGNAL(sortIndicatorChanged(int,Qt::SortOrder)),
-            this, SLOT(refresh()));
-    connect(mTableView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
-            this, SLOT(onSelectionChanged()));
-    if (QToolBar *toolbar = qobject_cast<QToolBar *>(uim()->getWidget("MAIN_TOOLBAR"))) {
-        centerLayout->addWidget(toolbar, 0);
-    }
-    centerLayout->addWidget(mTableView);
-    if (QMenu *menu = qobject_cast<QMenu *>(uim()->getWidget("TABLEVIEW_POPUP"))) {
-        mTableView->setContextMenu(menu);
-    }
-
-    if (QToolBar *toolbar = qobject_cast<QToolBar*>(uim()->getWidget("BOTTOM_TOOLBAR"))) {
-        centerLayout->addWidget(toolbar, 0);
-        mPageTool = qobject_cast<TPageTool *>(uim()->getWidget("BOTTOM_TOOLBAR/PAGE_TOOL"));
-        if (mPageTool != nullptr) {
-            mPageTool->setPageSizeVisible(true);
-            connect(mPageTool, SIGNAL(pageChanged(int,int)), this, SLOT(onPageChanged()));
-        }
-    }
-    mBodySplitter->addWidget(centerWidget);
-}
diff --git a/src/plugin/toptemplateclass7.h b/src/plugin/toptemplateclass7.h
deleted file mode 100644
index 96895967ca7282e8f5a7cbfb8a507e9652a8df0f..0000000000000000000000000000000000000000
--- a/src/plugin/toptemplateclass7.h
+++ /dev/null
@@ -1,56 +0,0 @@
-#ifndef TOPTEMPLATECLASS7_H
-#define TOPTEMPLATECLASS7_H
-
-#include <topcore/topclassabs.h>
-#include <topcore/topclasshelper.h>
-#include <tdatabaseutil/tsqlselectorv2.h>
-
-class TSplitter;
-class TTableView;
-class TUiLoader;
-class TPageTool;
-class TopTemplateClass7 : public TopClassAbs
-{
-    Q_OBJECT
-public:
-    explicit TopTemplateClass7(const QString &iModuleNameStr = QString(""),
-                               const QVariantMap &iUrlPars = QVariantMap(),
-                               QWidget *iParent = nullptr);
-    ~TopTemplateClass7();
-public slots:
-    QString detailUid() const;
-    void setDetailUid(const QString &iUid, bool iForceRefresh = false);
-    QVariantList selectedItems() const;
-    QVariantList selectedDataMaps() const;
-    TTableView *tableView();
-    void refresh(bool iResetPage = true);
-    void refreshDetail(const QString &iUid);
-    TUiLoader *searchUiLoader();
-    QVariantMap searchUiValues();
-    void resetSearchUiLoader();
-    TUiLoader *detailUiLoader();
-    QString searchWhere(const QVariantMap &iSearchMap);
-    void selectRow(const QString &iId);
-signals:
-    void detailUidChanged(const QString &iDetailUid);
-    void viewConfChanged();
-private slots:
-    void onSelectionChanged();
-    void onPageChanged();
-    void onViewConfChanged();
-private:
-    void initUi();
-    void initSearchUiLoader();
-    void initDetailUiLoader();
-    void initTableView();
-private:
-    TSplitter *mBodySplitter = nullptr;
-    TUiLoader *mSearchUiLoader = nullptr;
-    TTableView *mTableView = nullptr;
-    TUiLoader *mDetailUiLoader = nullptr;
-    TPageTool *mPageTool = nullptr;
-    TopClassTableConf mTableConf;
-    QString mDetailUid;
-    QVariantList mSelectedItems;
-};
-#endif // TOPTEMPLATECLASS7_H
diff --git a/src/plugin/toptemplateclass_en.qm b/src/plugin/toptemplateclass_en.qm
deleted file mode 100644
index ff327eff5f46d4140bebc9d1e409cd71a53692fb..0000000000000000000000000000000000000000
Binary files a/src/plugin/toptemplateclass_en.qm and /dev/null differ
diff --git a/src/plugin/toptemplateclass_en.ts b/src/plugin/toptemplateclass_en.ts
deleted file mode 100644
index cc3d187d1991135c5dc89cc09e43810a02b696ad..0000000000000000000000000000000000000000
--- a/src/plugin/toptemplateclass_en.ts
+++ /dev/null
@@ -1,147 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.1" language="en_US">
-<context>
-    <name>TopTemplateClass4</name>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="555"/>
-        <source>Please select field:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="559"/>
-        <source>Clear selection</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="562"/>
-        <source>Field</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="611"/>
-        <location filename="toptemplateclass4.cpp" line="989"/>
-        <source>Save query criteria as file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="635"/>
-        <location filename="toptemplateclass4.cpp" line="993"/>
-        <source>Open query criteria from file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="637"/>
-        <source>Condition file(*%1)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="684"/>
-        <location filename="toptemplateclass4.cpp" line="997"/>
-        <source>Save as a common query</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="701"/>
-        <source>Save as common condition</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="701"/>
-        <source>This name already exists!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="918"/>
-        <source>Navigation</source>
-        <translation></translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="923"/>
-        <source>Show Navigation</source>
-        <oldsource>Display Navigation</oldsource>
-        <translation></translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="924"/>
-        <source>Hide Navigation</source>
-        <translation></translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="943"/>
-        <source>Reset</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="948"/>
-        <source>Filter</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="976"/>
-        <source>Query</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="980"/>
-        <source>Add</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="981"/>
-        <source>Add query criteria</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="984"/>
-        <source>Clear</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="985"/>
-        <source>Clear all query criteria</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="988"/>
-        <source>Save As</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="992"/>
-        <source>Open</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="996"/>
-        <source>Save</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="1024"/>
-        <source>Query Name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="1030"/>
-        <source>Delete query</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="1043"/>
-        <location filename="toptemplateclass4.cpp" line="1050"/>
-        <source>Advanced Query</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="1044"/>
-        <source>Common Query</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="1049"/>
-        <source>Category</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-</TS>
diff --git a/src/plugin/toptemplateclass_zhcn.qm b/src/plugin/toptemplateclass_zhcn.qm
deleted file mode 100644
index e9b44038c795c484feda130816245ed179d6e1c1..0000000000000000000000000000000000000000
Binary files a/src/plugin/toptemplateclass_zhcn.qm and /dev/null differ
diff --git a/src/plugin/toptemplateclass_zhcn.ts b/src/plugin/toptemplateclass_zhcn.ts
deleted file mode 100644
index 3883c483854b78c275229ea4a187111afb5c9d87..0000000000000000000000000000000000000000
--- a/src/plugin/toptemplateclass_zhcn.ts
+++ /dev/null
@@ -1,147 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.1" language="zh_CN">
-<context>
-    <name>TopTemplateClass4</name>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="555"/>
-        <source>Please select field:</source>
-        <translation>请选择条件字段:</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="559"/>
-        <source>Clear selection</source>
-        <translation>清除选择</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="562"/>
-        <source>Field</source>
-        <translation>字段</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="611"/>
-        <location filename="toptemplateclass4.cpp" line="989"/>
-        <source>Save query criteria as file</source>
-        <translation>将查询条件保存为文件</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="635"/>
-        <location filename="toptemplateclass4.cpp" line="993"/>
-        <source>Open query criteria from file</source>
-        <translation>打开查询条件</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="637"/>
-        <source>Condition file(*%1)</source>
-        <translation>高级查询文件(*%1)</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="684"/>
-        <location filename="toptemplateclass4.cpp" line="997"/>
-        <source>Save as a common query</source>
-        <translation>保存为常用查询</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="701"/>
-        <source>Save as common condition</source>
-        <translation>保存为常用查询</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="701"/>
-        <source>This name already exists!</source>
-        <translation>名称已存在!</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="918"/>
-        <source>Navigation</source>
-        <translation>分类导航</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="923"/>
-        <source>Show Navigation</source>
-        <oldsource>Display Navigation</oldsource>
-        <translation>显示导航栏</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="924"/>
-        <source>Hide Navigation</source>
-        <translation>隐藏导航栏</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="943"/>
-        <source>Reset</source>
-        <translation>重置</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="948"/>
-        <source>Filter</source>
-        <translation>搜索</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="976"/>
-        <source>Query</source>
-        <translation>查询</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="980"/>
-        <source>Add</source>
-        <translation>添加</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="981"/>
-        <source>Add query criteria</source>
-        <translation>添加查询条件</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="984"/>
-        <source>Clear</source>
-        <translation>清除</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="985"/>
-        <source>Clear all query criteria</source>
-        <translation>清除全部查询条件</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="988"/>
-        <source>Save As</source>
-        <translation>另存为</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="992"/>
-        <source>Open</source>
-        <translation>打开</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="996"/>
-        <source>Save</source>
-        <translation>保存</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="1024"/>
-        <source>Query Name</source>
-        <translation>查询名称</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="1030"/>
-        <source>Delete query</source>
-        <translation>删除常用查询</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="1043"/>
-        <location filename="toptemplateclass4.cpp" line="1050"/>
-        <source>Advanced Query</source>
-        <translation>高级查询</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="1044"/>
-        <source>Common Query</source>
-        <translation>常用查询</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="1049"/>
-        <source>Category</source>
-        <translation>分类</translation>
-    </message>
-</context>
-</TS>
diff --git a/src/plugin/toptemplateclass_zhtw.qm b/src/plugin/toptemplateclass_zhtw.qm
deleted file mode 100644
index e60ec0f719113fb23005a431078f9d4252c8d952..0000000000000000000000000000000000000000
Binary files a/src/plugin/toptemplateclass_zhtw.qm and /dev/null differ
diff --git a/src/plugin/toptemplateclass_zhtw.ts b/src/plugin/toptemplateclass_zhtw.ts
deleted file mode 100644
index 24ad43a37bd0f87fb7e5d7865ca2b70ab5804768..0000000000000000000000000000000000000000
--- a/src/plugin/toptemplateclass_zhtw.ts
+++ /dev/null
@@ -1,147 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.1" language="zh_CN">
-<context>
-    <name>TopTemplateClass4</name>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="555"/>
-        <source>Please select field:</source>
-        <translation>請選擇條件字段:</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="559"/>
-        <source>Clear selection</source>
-        <translation>清除選擇</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="562"/>
-        <source>Field</source>
-        <translation>字段</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="611"/>
-        <location filename="toptemplateclass4.cpp" line="989"/>
-        <source>Save query criteria as file</source>
-        <translation>將查詢條件保存為文件</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="635"/>
-        <location filename="toptemplateclass4.cpp" line="993"/>
-        <source>Open query criteria from file</source>
-        <translation>打開查詢條件</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="637"/>
-        <source>Condition file(*%1)</source>
-        <translation>高級查詢文件(*%1)</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="684"/>
-        <location filename="toptemplateclass4.cpp" line="997"/>
-        <source>Save as a common query</source>
-        <translation>保存為常用查詢</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="701"/>
-        <source>Save as common condition</source>
-        <translation>保存為常用查詢</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="701"/>
-        <source>This name already exists!</source>
-        <translation>名稱已存在!</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="918"/>
-        <source>Navigation</source>
-        <translation>分類導航</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="923"/>
-        <source>Show Navigation</source>
-        <oldsource>Display Navigation</oldsource>
-        <translation>顯示導航欄</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="924"/>
-        <source>Hide Navigation</source>
-        <translation>隱藏導航欄</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="943"/>
-        <source>Reset</source>
-        <translation>重置</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="948"/>
-        <source>Filter</source>
-        <translation>搜索</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="976"/>
-        <source>Query</source>
-        <translation>查詢</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="980"/>
-        <source>Add</source>
-        <translation>添加</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="981"/>
-        <source>Add query criteria</source>
-        <translation>添加查詢條件</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="984"/>
-        <source>Clear</source>
-        <translation>清除</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="985"/>
-        <source>Clear all query criteria</source>
-        <translation>清除全部查詢條件</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="988"/>
-        <source>Save As</source>
-        <translation>另存為</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="992"/>
-        <source>Open</source>
-        <translation>打開</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="996"/>
-        <source>Save</source>
-        <translation>保存</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="1024"/>
-        <source>Query Name</source>
-        <translation>查詢名稱</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="1030"/>
-        <source>Delete query</source>
-        <translation>刪除常用查詢</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="1043"/>
-        <location filename="toptemplateclass4.cpp" line="1050"/>
-        <source>Advanced Query</source>
-        <translation>高級查詢</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="1044"/>
-        <source>Common Query</source>
-        <translation>常用查詢</translation>
-    </message>
-    <message>
-        <location filename="toptemplateclass4.cpp" line="1049"/>
-        <source>Category</source>
-        <translation>分類</translation>
-    </message>
-</context>
-</TS>
diff --git a/src/plugin/toptemplateclassplugin.cpp b/src/plugin/toptemplateclassplugin.cpp
deleted file mode 100644
index eb0a08cdd980ea18be275080e2cbe18839d6aa4b..0000000000000000000000000000000000000000
--- a/src/plugin/toptemplateclassplugin.cpp
+++ /dev/null
@@ -1,22 +0,0 @@
-#include "toptemplateclassplugin.h"
-#include "toptemplateclass4.h"
-QStringList TemplatePlugin::getClassList()
-{
-    QStringList classes{
-        "TopTemplateClass4",
-    };
-    return classes;
-}
-
-TopClassAbs *TemplatePlugin::newClass(const QString &iClassName,
-                                      const QString &iModuleName,
-                                      const QVariantMap &iUrlPars)
-{
-    if (iClassName == QStringLiteral("TopTemplateClass4")) {
-        return new TopTemplateClass4(iModuleName, iUrlPars, nullptr);
-    }
-    else {
-        return nullptr;
-    }
-
-}
diff --git a/test/.gitkeep b/test/.gitkeep
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000