Commit ad302cfe authored by Qiu Chuntao's avatar Qiu Chuntao

add files

parent 4c6a80d1
Pipeline #11698 failed with stage
in 1 minute and 11 seconds
...@@ -75,12 +75,7 @@ Thumbs.db ...@@ -75,12 +75,7 @@ Thumbs.db
**/dist/ **/dist/
!src/plugin/*.qm !src/class/plugin/*.qm
# SINCPM # SINCPM
sincpm-lock.json sincpm-lock.json
\ No newline at end of file
# qdoc
qdoc/html/
*.qch
doc.tags
\ No newline at end of file
...@@ -20,7 +20,7 @@ windows_develop: ...@@ -20,7 +20,7 @@ windows_develop:
QT_BIN: C:/DevTools/Qt5.6.3/5.6.3/msvc2015/bin QT_BIN: C:/DevTools/Qt5.6.3/5.6.3/msvc2015/bin
QTCREATOR_BIN: C:/DevTools/Qt5.6.3/Tools/QtCreator/bin QTCREATOR_BIN: C:/DevTools/Qt5.6.3/Tools/QtCreator/bin
script: 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: linux_develop:
stage: build stage: build
...@@ -31,11 +31,8 @@ linux_develop: ...@@ -31,11 +31,8 @@ linux_develop:
variables: variables:
QT_BIN: /opt/Qt5.6.3/5.6.3/gcc_64/bin QT_BIN: /opt/Qt5.6.3/5.6.3/gcc_64/bin
script: 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
- 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/
windows_master: windows_master:
stage: build stage: build
only: only:
...@@ -46,10 +43,12 @@ windows_master: ...@@ -46,10 +43,12 @@ windows_master:
QT_BIN: C:/DevTools/Qt5.6.3/5.6.3/msvc2015/bin QT_BIN: C:/DevTools/Qt5.6.3/5.6.3/msvc2015/bin
QTCREATOR_BIN: C:/DevTools/Qt5.6.3/Tools/QtCreator/bin QTCREATOR_BIN: C:/DevTools/Qt5.6.3/Tools/QtCreator/bin
script: 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
- 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/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-templateclass - python ci/publish.py -p topikm6-topsys
- python ci/publish.py -p topikm6-templateclass-debug - python ci/publish.py -p topikm6-topsys-debug
- python ci/publish_module.py
- python ci/update_yuque_releasenotes.py
linux_master: linux_master:
stage: build stage: build
...@@ -60,5 +59,5 @@ linux_master: ...@@ -60,5 +59,5 @@ linux_master:
variables: variables:
QT_BIN: /opt/Qt5.6.3/5.6.3/gcc_64/bin QT_BIN: /opt/Qt5.6.3/5.6.3/gcc_64/bin
script: 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
- python ci/publish.py -p topikm6-templateclass - python ci/publish.py -p topikm6-topsys
\ No newline at end of file
{
"hook": "http://139.196.104.13:9181/api/_/ci/getMailConfig"
}
\ No newline at end of file
...@@ -59,8 +59,8 @@ def sincpm_publish(pkg_name): ...@@ -59,8 +59,8 @@ def sincpm_publish(pkg_name):
os.chdir(local_dir) os.chdir(local_dir)
pinfo = subprocess.run([sincpm_bin('sincpm'), 'upload', pkg_dir], pinfo = subprocess.run([sincpm_bin('sincpm'), 'upload', pkg_dir],
stdout=subprocess.PIPE, stderr=subprocess.STDOUT) stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
if pinfo.returncode != 0: # if pinfo.returncode != 0:
raise qtciutil.QtCiUtilError("sincpm upload failed.") # raise qtciutil.QtCiUtilError("sincpm upload failed.")
m = re.search(r'error: ', pinfo.stdout.decode('utf-8'), re.IGNORECASE) m = re.search(r'error: ', pinfo.stdout.decode('utf-8'), re.IGNORECASE)
if m: if m:
raise qtciutil.QtCiUtilError("The upload result contains an error message.") raise qtciutil.QtCiUtilError("The upload result contains an error message.")
......
'''
@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
'''
@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
{
"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
{
"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
TEMPLATE = subdirs
SUBDIRS += templatemain
CONFIG += ordered
# 枚举类信息
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
# 枚举类信息
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
# 枚举类信息
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
# 枚举类信息
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
# 枚举类信息
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
# 枚举类信息
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
# 枚举类信息
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
# 枚举类信息
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
# 枚举类信息
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
# 枚举类信息
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
# 枚举类信息
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
# 枚举类信息
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
# 枚举类信息
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
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
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
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
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
# 模块标题
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"
}
]
}
]
}
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);
};
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
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
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
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
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
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
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
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();
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
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
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
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
"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: "選項名稱已存在!"}
# 模块标题
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
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
# 表格的右键菜单
"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"}
]
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
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
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
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
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
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
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
"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
# 模块标题
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"}
]
}
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' }
}
}
]
};
}
# 工具栏
"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
//获取总表数据
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;
}
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
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
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
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
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---*/
# 模块标题
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"
}
}
# 左侧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
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
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
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
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
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
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
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
"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
# 模块标题
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: ""
}
}
# 工具栏
"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
# 模块标题
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
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
# 模块标题
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
# 主表工具栏
"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
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
# 模块标题
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
# 主表工具栏
"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
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
# 模块标题
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
# 主表工具栏
"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
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
[
{
name: "nothing",
type: "VBoxLayout",
child: [
{
name: "table(master).id",
type: "IntLineEdit"
},
{
name: "table(slave).id",
type: "IntLineEdit"
}
]
}
]
# 主表工具栏
"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
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
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
"Layer Count": {en: "", zhcn: "板层数"}
"Job Name": {en: "", zhcn: "料号名"}
"Job Status": {en: "", zhcn: "状态"}
\ No newline at end of file
# 表格的右键菜单
"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
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment