Browse Source

表单编辑器

x-emr
bianyaqi 2 years ago
parent
commit
7d63a7b123
  1. 70
      public/editor.html
  2. 1
      public/js/editor.js
  3. 3670
      public/vender/JsBarcode.all.js
  4. 1
      public/vender/codemirror.js
  5. 66
      public/vender/date97/My97DatePicker.htm
  6. 678
      public/vender/date97/WdatePicker.js
  7. 5
      public/vender/date97/calendar.js
  8. 14
      public/vender/date97/lang/en.js
  9. 14
      public/vender/date97/lang/zh-cn.js
  10. 14
      public/vender/date97/lang/zh-tw.js
  11. 11
      public/vender/date97/skin/WdatePicker.css
  12. BIN
      public/vender/date97/skin/datePicker.gif
  13. 328
      public/vender/date97/skin/default/datepicker.css
  14. BIN
      public/vender/date97/skin/default/img.gif
  15. 309
      public/vender/date97/skin/ext/datepicker.css
  16. BIN
      public/vender/date97/skin/ext/dateselect.gif
  17. BIN
      public/vender/date97/skin/ext/glass-bg.gif
  18. BIN
      public/vender/date97/skin/ext/hd-sprite.gif
  19. BIN
      public/vender/date97/skin/ext/img.gif
  20. BIN
      public/vender/date97/skin/ext/left-btn.gif
  21. BIN
      public/vender/date97/skin/ext/left-btn2.gif
  22. BIN
      public/vender/date97/skin/ext/right-btn.gif
  23. BIN
      public/vender/date97/skin/ext/right-btn2.gif
  24. BIN
      public/vender/date97/skin/whyGreen/bg.jpg
  25. 256
      public/vender/date97/skin/whyGreen/datepicker.css
  26. BIN
      public/vender/date97/skin/whyGreen/img.gif
  27. 1627
      public/vender/diff.js
  28. 31187
      public/vender/fabric.js
  29. BIN
      public/vender/fonts/mui.ttf
  30. 190
      public/vender/jquery/jquery.base64.js
  31. 10872
      public/vender/jquery/jquery.js
  32. 255
      public/vender/jquery/jquery.print.js
  33. 1
      public/vender/jquery/jquery.ztree.core.min.js
  34. 1
      public/vender/jquery/jquery.ztree.exedit.min.js
  35. 1
      public/vender/jquery/jquery.ztree.exhide.min.js
  36. BIN
      public/vender/jquery/zTreeStyle/img/diy/1_close.png
  37. BIN
      public/vender/jquery/zTreeStyle/img/diy/1_open.png
  38. BIN
      public/vender/jquery/zTreeStyle/img/diy/2.png
  39. BIN
      public/vender/jquery/zTreeStyle/img/diy/3.png
  40. BIN
      public/vender/jquery/zTreeStyle/img/diy/4.png
  41. BIN
      public/vender/jquery/zTreeStyle/img/diy/5.png
  42. BIN
      public/vender/jquery/zTreeStyle/img/diy/6.png
  43. BIN
      public/vender/jquery/zTreeStyle/img/diy/7.png
  44. BIN
      public/vender/jquery/zTreeStyle/img/diy/8.png
  45. BIN
      public/vender/jquery/zTreeStyle/img/diy/9.png
  46. BIN
      public/vender/jquery/zTreeStyle/img/line_conn.gif
  47. BIN
      public/vender/jquery/zTreeStyle/img/loading.gif
  48. BIN
      public/vender/jquery/zTreeStyle/img/zTreeStandard.gif
  49. BIN
      public/vender/jquery/zTreeStyle/img/zTreeStandard.png
  50. BIN
      public/vender/jquery/zTreeStyle/img/zTreeStandard.psd
  51. 97
      public/vender/jquery/zTreeStyle/zTreeStyle.css
  52. 5
      public/vender/mui/mui.min.css
  53. 6
      public/vender/mui/mui.min.js
  54. 7
      public/vender/mui/mui.picker.min.css
  55. 7
      public/vender/mui/mui.picker.min.js
  56. 7
      public/vender/qrcode.js
  57. 2145
      public/vender/requirejs/require.js
  58. 519
      public/vender/signature/jSignature.CompressorSVG.js
  59. 165
      public/vender/signature/jSignature.UndoButton.js
  60. 1486
      public/vender/signature/jSignature.js
  61. 5094
      public/vender/validator.js
  62. 5659
      public/vender/weui/weui.css
  63. 5
      public/vender/weui/weui.min.css
  64. 12
      public/vender/weui/weui.min.js
  65. 15
      src/assets/scss/common.scss
  66. 17
      src/components/formEditor/Editor.vue
  67. 53
      src/page-subspecialty/views/modules/template/formManage/index.vue

70
public/editor.html

@ -0,0 +1,70 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<link rel="shortcut icon" href="./favicon.svg" type="image/svg+xml"/>
<link rel="stylesheet" href="./vender/jquery/zTreeStyle/zTreeStyle.css" type="text/css">
<script src = "./vender/jquery/jquery.js"></script>
<script src = "./vender/jquery/jquery.ztree.core.min.js"></script>
<script src = "./vender/jquery/jquery.ztree.exedit.min.js"></script>
<script src = "./vender/jquery/jquery.ztree.exhide.min.js"></script>
<script src = "./vender/codemirror.js"></script>
<script src = "./vender/fabric.js"></script>
<!-- 局域网环境, 请去 https://www.x-emr.cn/download.html 下载 editor.js替换以下路径 -->
<script src="./js/editor.js"></script>
<script>
$(function() {
//配置项可以不设置,会使用默认设置
let option = {
license:'WQ7peJQ3Kov4+1UWJXy8anvGMs9q9Krx1RVy/0b1Cu2NsyX+AAHehvZTkM9MfZ4U05PB87yFuHfWTM7F7EL4FQplorJA7Qm6naoINcGznSdFEEdN+EiwMNdPCFulVg3mu65at1ldCyqYtg3rmPhtUOwAc5oIYmi05xlXlRJnzvw=',
mode:'form', //默认模式 form:表单模式,design:设计模式
pdfUrl:'https://www.x-emr.cn/pdf/post', //pdf生成服务
dictionary: [ //知识库
{type:'symptoms', title: '体征', isParent:true, treeUrl:'https://www.x-emr.cn/dict', itemUrl:'https://www.x-emr.cn/dictitem'},
{type:'signs', title: '症状', isParent:true, treeUrl:'https://www.x-emr.cn/dict', itemUrl:'https://www.x-emr.cn/dictitem'},
{type:'meta', title: '卫生信息数据元', isParent:true, treeUrl:'https://www.x-emr.cn/dict', itemUrl:'https://www.x-emr.cn/dictitem'},
{type:'stand', title: '电子病历数据集', isParent:true, treeUrl:'https://www.x-emr.cn/dict', itemUrl:'https://www.x-emr.cn/dictitem'},
{type:'insutance', title: '国家医保标准', isParent:true, treeUrl:'https://www.x-emr.cn/insutance', itemUrl:'https://www.x-emr.cn/institem'},
{type:'province', title: 'A省数据平台标准', isParent:true, treeUrl:'https://www.x-emr.cn/province', itemUrl:'https://www.x-emr.cn/provitem'},
]
}
//用于父页面调用
if(window.frameElement){
//1.初始化前
let e1 = new Event('before-init')
e1.editor = editor
e1.option = option
window.frameElement.dispatchEvent(e1)
if(window.frameElement.getAttribute('mode')) {
option.mode = window.frameElement.getAttribute('mode')
}
//2.编辑器初始化
editor.init(option)
//如果有组件有doc属性
if(window.frameElement.getAttribute('doc')) {
editor.loadUrl(window.frameElement.getAttribute('doc'), '1').then(function(){
let e3 = new Event('doc-loaded')
e3.editor = editor
window.frameElement.dispatchEvent(e3)
})
}
//3.初始化后
let e2 = new Event('after-init')
e2.editor = editor
window.frameElement.dispatchEvent(e2)
}else{
editor.init(option)
editor.loadUrl('https://www.x-emr.cn/doc/999.html')
}
})
</script>
</head>
<body>
<!-- 默认id 为editor -->
<div id="editor" style="width:100%; height:100%;"></div>
</body>
</html>

1
public/js/editor.js

File diff suppressed because one or more lines are too long

3670
public/vender/JsBarcode.all.js

File diff suppressed because it is too large

1
public/vender/codemirror.js

File diff suppressed because one or more lines are too long

66
public/vender/date97/My97DatePicker.htm

@ -0,0 +1,66 @@
<html>
<head>
<meta http-equiv="content-type" content="text/xml; charset=gb2312" />
<title>My97DatePicker</title>
<script type="text/javascript" src="config.js" charset=gb2312></script>
<script>
//var l = location;
if(parent==window)
location.href = 'http://www.my97.net';
/*
else{
var start=l.href.indexOf('#')+1;
if(start>0){
document.domain = l.href.substr(start);
}
}
*/
var $d, $dp, $pdp = parent.$dp, $dt, $tdt, $sdt, $lastInput, $IE=$pdp.ie, $FF = $pdp.ff,$OPERA=$pdp.opera, $ny, $cMark = false;
//说明是flat此时,拷贝一份$dp
if ($pdp.eCont) {
$dp = {};
for (var p in $pdp) {
$dp[p] = $pdp[p];
}
}
else{
$dp = $pdp;
}
$dp.getLangIndex = function(name){
var arr = langList;
for (var i = 0; i < arr.length; i++) {
if (arr[i].name == name) {
return i;
}
}
return -1;
}
$dp.getLang = function(name){
var index = $dp.getLangIndex(name);
if (index == -1) {
index = 0;
}
return langList[index];
}
//根据语言设置选择语言
$dp.realLang = $dp.getLang($dp.lang);
document.write("<script src='lang/" + $dp.realLang.name + ".js' charset='" + $dp.realLang.charset + "'><\/script>");
//导入皮肤列表文件
for (var i = 0; i < skinList.length; i++) {
document.write('<link rel="stylesheet" type="text/css" href="skin/' + skinList[i].name + '/datepicker.css" title="' + skinList[i].name + '" charset="' + skinList[i].charset + '" disabled="true"/>');
}
</script>
<script type="text/javascript" src="calendar.js" charset="gb2312"></script>
</head>
<body leftmargin="0" topmargin="0" onLoad="$c.autoSize()" tabindex=0>
</body>
</html>
<script>
new My97DP();
</script>

678
public/vender/date97/WdatePicker.js

@ -0,0 +1,678 @@
/*
* My97 DatePicker 4.8.5
* License: http://www.my97.net/license.asp
*/
var $dp, WdatePicker;
(function () {
var Config = {
$langList: [{
name: 'en',
charset: 'UTF-8'
},
{
name: 'zh-cn',
charset: 'gb2312'
},
{
name: 'zh-tw',
charset: 'GBK'
}
],
$skinList: [{
name: 'default',
charset: 'gb2312'
},
{
name: 'whyGreen',
charset: 'gb2312'
},
{
name: 'blue',
charset: 'gb2312'
},
{
name: 'green',
charset: 'gb2312'
},
{
name: 'simple',
charset: 'gb2312'
},
{
name: 'ext',
charset: 'gb2312'
},
{
name: 'blueFresh',
charset: 'gb2312'
},
{
name: 'twoer',
charset: 'gb2312'
},
{
name: 'YcloudRed',
charset: 'gb2312'
},
{
name: 'thinkpap',
charset: 'gb2312'
}
],
$wdate: false,
$crossFrame: false,
$preLoad: false,
$dpPath: '',
doubleCalendar: false,
enableKeyboard: true,
enableInputMask: true,
autoUpdateOnChanged: null,
weekMethod: 'MSExcel',
position: {},
lang: 'auto',
skin: 'default',
dateFmt: 'yyyy年MM月dd日 HH时mm分',
realDateFmt: 'yyyy-MM-dd',
realTimeFmt: 'HH:mm:ss',
realFullFmt: '%Date %Time',
minDate: '0001-01-01 00:00:00',
maxDate: '9999-12-31 23:59:59',
minTime: '00:00:00',
maxTime: '23:59:59',
startDate: '',
alwaysUseStartDate: false,
yearOffset: 1911,
firstDayOfWeek: 0,
isShowWeek: false,
highLineWeekDay: true,
isShowClear: true,
isShowToday: true,
isShowOK: true,
isShowOthers: true,
readOnly: false,
errDealMode: 0,
autoPickDate: null,
qsEnabled: true,
autoShowQS: false,
hmsMenuCfg: {
H: [1, 6],
m: [5, 6],
s: [15, 4]
},
opposite: false,
specialDates: null,
specialDays: null,
disabledDates: null,
disabledDays: null,
onpicking: null,
onpicked: null,
onclearing: null,
oncleared: null,
ychanging: null,
ychanged: null,
Mchanging: null,
Mchanged: null,
dchanging: null,
dchanged: null,
Hchanging: null,
Hchanged: null,
mchanging: null,
mchanged: null,
schanging: null,
schanged: null,
eCont: null,
vel: null,
elProp: '',
errMsg: '',
quickSel: [],
has: {},
getRealLang: function () {
var arr = Config.$langList;
for (var i = 0; i < arr.length; i++) {
if (arr[i].name == this.lang) {
return arr[i]
}
}
return arr[0]
}
};
WdatePicker = main;
var w = window,
emptyEl = {
innerHTML: ''
},
d = 'document',
de = 'documentElement',
tag = 'getElementsByTagName',
dptop, jsPath, $IE, $FF, $OPERA;
var ua = navigator.userAgent,
isTablet = /(?:iPad|PlayBook)/.test(ua) || (/(?:Android)/.test(ua) && !/(?:Mobile)/.test(ua)),
isPhone = /(?:iPhone)/.test(ua) || /(?:Android)/.test(ua) && /(?:Mobile)/.test(ua);
var appName = navigator.appName;
if (appName == 'Microsoft Internet Explorer') $IE = true;
else if (appName == 'Opera') $OPERA = true;
else $FF = true;
jsPath = Config.$dpPath || getJsPath();
if (Config.$wdate) {
loadCSS(jsPath + 'skin/WdatePicker.css')
}
dptop = w;
if (Config.$crossFrame) {
try {
while (dptop.parent != dptop && dptop.parent[d][tag]('frameset').length == 0) {
dptop = dptop.parent
}
} catch (e) {}
}
if (!dptop.$dp) {
dptop.$dp = {
ff: $FF,
ie: $IE,
opera: $OPERA,
status: 0,
defMinDate: Config.minDate,
defMaxDate: Config.maxDate,
isTablet: isTablet,
isPhone: isPhone,
isTouch: isTablet || isPhone
}
}
initTopDP();
if (Config.$preLoad && $dp.status == 0) {
dpAttachEvent(w, 'onload', function () {
main(null, true)
})
}
var docEventName = $dp.isTouch ? 'ontouchstart' : 'onmousedown';
if (!w[d].docMD) {
dpAttachEvent(w[d], docEventName, disposeDP, true);
w[d].docMD = true
}
if (!dptop[d].docMD) {
dpAttachEvent(dptop[d], docEventName, disposeDP, true);
dptop[d].docMD = true
}
dpAttachEvent(w, 'onunload', function () {
if ($dp.dd) {
display($dp.dd, "none")
}
});
function initTopDP() {
try {
dptop[d], dptop.$dp = dptop.$dp || {}
} catch (e) {
dptop = w;
$dp = $dp || {}
}
var obj = {
win: w,
$: function (el) {
return (typeof el == 'string') ? w[d].getElementById(el) : el
},
$D: function (id, arg) {
return this.$DV(this.$(id).value, arg)
},
$DV: function (v, arg) {
if (v != '') {
this.dt = $dp.cal.splitDate(v, $dp.cal.dateFmt);
if (arg) {
for (var p in arg) {
if (this.dt[p] === undefined) {
this.errMsg = 'invalid property:' + p
} else {
this.dt[p] += arg[p];
if (p == 'M') {
var offset = arg['M'] > 0 ? 1 : 0;
var tmpday = new Date(this.dt['y'], this.dt['M'], 0).getDate();
this.dt['d'] = Math.min(tmpday + offset, this.dt['d'])
}
}
}
}
if (this.dt.refresh()) {
return this.dt
}
}
return ''
},
show: function () {
var divs = dptop[d].getElementsByTagName('div'),
maxZIndex = 1e5;
for (var i = 0; i < divs.length; i++) {
var curZ = parseInt(divs[i].style.zIndex);
if (curZ > maxZIndex) {
maxZIndex = curZ
}
}
this.dd.style.zIndex = maxZIndex + 2;
display(this.dd, "block");
display(this.dd.firstChild, "")
},
unbind: function (el) {
el = this.$(el);
if (el.initcfg) {
dpDetachEvent(el, 'onclick', function () {
main(el.initcfg)
});
dpDetachEvent(el, 'onfocus', function () {
main(el.initcfg)
})
}
},
hide: function () {
display(this.dd, "none")
},
attachEvent: dpAttachEvent
};
for (var p in obj) {
dptop.$dp[p] = obj[p];
}
$dp = dptop.$dp
}
function dpAttachEvent(o, sType, fHandler, useCapture) {
if (o.addEventListener) {
var shortTypeName = sType.replace(/on/, "");
fHandler._ieEmuEventHandler = function (e) {
return fHandler(e)
};
o.addEventListener(shortTypeName, fHandler._ieEmuEventHandler, useCapture)
} else {
o.attachEvent(sType, fHandler)
}
}
function dpDetachEvent(o, sType, fHandler) {
if (o.removeEventListener) {
var shortTypeName = sType.replace(/on/, "");
fHandler._ieEmuEventHandler = function (e) {
return fHandler(e)
};
o.removeEventListener(shortTypeName, fHandler._ieEmuEventHandler, false)
} else {
o.detachEvent(sType, fHandler)
}
}
function compareCfg(o1, o2, issub) {
if (typeof o1 != typeof o2) return false;
if (typeof o1 == 'object') {
if (!issub) {
for (var o in o1) {
if (typeof o2[o] == 'undefined') return false;
if (!compareCfg(o1[o], o2[o], true)) return false
}
}
return true
} else if (typeof o1 == 'function' && typeof o2 == 'function') {
return o1.toString() == o2.toString()
} else {
return o1 == o2
}
}
function getJsPath() {
var path, tmp, scripts = w[d][tag]("script");
for (var i = 0; i < scripts.length; i++) {
path = scripts[i].getAttribute('src') || '';
path = path.substr(0, path.toLowerCase().indexOf('wdatepicker.js'));
var tmp = path.lastIndexOf("/");
if (tmp > 0) path = path.substring(0, tmp + 1);
if (path) break
}
return path
}
function loadCSS(path, title, charset) {
var head = w[d][tag]('HEAD').item(0),
style = w[d].createElement('link');
if (head) {
style.href = path;
style.rel = 'stylesheet';
style.type = 'text/css';
if (title) style.title = title;
if (charset) style.charset = charset;
head.appendChild(style)
}
}
function getAbsM(w) {
w = w || dptop;
var lm = 0,
tm = 0;
while (w != dptop) {
var ifs = w.parent[d][tag]('iframe');
for (var i = 0; i < ifs.length; i++) {
try {
if (ifs[i].contentWindow == w) {
var rc = getBound(ifs[i]);
lm += rc.left;
tm += rc.top;
break
}
} catch (e) {}
}
w = w.parent
}
return {
'leftM': lm,
'topM': tm
}
}
function getBound(o, ignoreScr) {
if (o.getBoundingClientRect) {
return o.getBoundingClientRect()
} else {
var patterns = {
ROOT_TAG: /^body|html$/i,
OP_SCROLL: /^(?:inline|table-row)$/i
};
var hssFixed = false,
win = null,
t = o.offsetTop,
l = o.offsetLeft,
r = o.offsetWidth,
b = o.offsetHeight;
var parentNode = o.offsetParent;
if (parentNode != o) {
while (parentNode) {
l += parentNode.offsetLeft;
t += parentNode.offsetTop;
if (getStyle(parentNode, 'position').toLowerCase() == 'fixed') hssFixed = true;
else if (parentNode.tagName.toLowerCase() == "body") win = parentNode.ownerDocument.defaultView;
parentNode = parentNode.offsetParent
}
}
parentNode = o.parentNode;
while (parentNode.tagName && !patterns.ROOT_TAG.test(parentNode.tagName)) {
if (parentNode.scrollTop || parentNode.scrollLeft) {
if (!patterns.OP_SCROLL.test(display(parentNode))) {
if (!$OPERA || parentNode.style.overflow !== 'visible') {
l -= parentNode.scrollLeft;
t -= parentNode.scrollTop
}
}
}
parentNode = parentNode.parentNode
}
if (!hssFixed) {
var scr = getScroll(win);
l -= scr.left;
t -= scr.top
}
r += l;
b += t;
return {
'left': l,
'top': t,
'right': r,
'bottom': b
}
}
}
function getWH(w) {
w = w || dptop;
var doc = w[d],
width = (w.innerWidth) ? w.innerWidth : (doc[de] && doc[de].clientWidth) ? doc[de].clientWidth : doc.body.offsetWidth,
height = (w.innerHeight) ? w.innerHeight : (doc[de] && doc[de].clientHeight) ? doc[de].clientHeight : doc.body.offsetHeight;
return {
'width': width,
'height': height
}
}
function getScroll(w) {
w = w || dptop;
var doc = w[d],
doce = doc[de],
db = doc.body;
doc = (doce && doce.scrollTop != null && (doce.scrollTop > db.scrollTop || doce.scrollLeft > db.scrollLeft)) ? doce : db;
return {
'top': doc.scrollTop,
'left': doc.scrollLeft
}
}
function disposeDP(e) {
try {
var src = e ? (e.srcElement || e.target) : null;
if ($dp.cal && !$dp.eCont && $dp.dd && src != $dp.el && $dp.dd.style.display == 'block') {
$dp.cal.close()
}
} catch (e) {}
}
function dpLoaded() {
$dp.status = 2
}
var isDptopReady, dptopInterval;
function main(initcfg, preLoad) {
if (!$dp) return;
initcfg.el = initcfg.el || w[d].activeElement;
if ($dp.isTouch) {
try {
initcfg.el.readOnly = true;
initcfg.el.blur()
} catch (e) {}
}
initTopDP();
var cfg = {};
for (var p in initcfg) {
cfg[p] = initcfg[p]
}
for (var p in Config) {
if (p.substring(0, 1) != '$' && cfg[p] === undefined) {
cfg[p] = Config[p]
}
}
if (preLoad) {
if (!dptopReady()) {
dptopInterval = dptopInterval || setInterval(function () {
if (dptop[d].readyState == 'complete') {
clearInterval(dptopInterval);
}
main(null, true)
}, 50);
return
}
if ($dp.status == 0) {
$dp.status = 1;
cfg.el = emptyEl;
showPicker(cfg, true)
} else {
return
}
} else if (cfg.eCont) {
cfg.eCont = $dp.$(cfg.eCont);
cfg.el = emptyEl;
cfg.autoPickDate = true;
cfg.qsEnabled = false;
showPicker(cfg)
} else {
if (Config.$preLoad && $dp.status != 2) return;
if (!cfg.el) {
var evt = SearchEvent();
if (w.event === evt || evt) {
cfg.srcEl = evt.srcElement || evt.target;
evt.cancelBubble = true
}
}
cfg.el = cfg.el = $dp.$(cfg.el || cfg.srcEl);
if (cfg.el == null) {
alert('WdatePicker:el is null!\nexample:onclick="WdatePicker({el:this})"');
return
}
try {
if (!cfg.el || cfg.el['My97Mark'] === true || cfg.el.disabled || ($dp.dd && display($dp.dd) != 'none' && $dp.dd.style.left != '-970px')) {
if (cfg.el['My97Mark']) cfg.el['My97Mark'] = false;
return
}
} catch (e) {}
if (evt && cfg.el.nodeType == 1 && !compareCfg(cfg.el.initcfg, initcfg)) {
$dp.unbind(cfg.el);
dpAttachEvent(cfg.el, evt.type == 'focus' ? 'onclick' : 'onfocus', function () {
main(initcfg)
});
cfg.el.initcfg = initcfg;
}
showPicker(cfg)
}
function dptopReady() {
if ($IE && dptop != w && dptop[d].readyState != 'complete') return false;
return true
}
function SearchEvent() {
if ($FF) {
try {
var count = 0;
func = SearchEvent.caller;
while (func != null) {
var arg0 = func.arguments[0];
if (arg0 && (arg0 + '').indexOf('Event') >= 0 || (count++) > 97) {
return arg0
}
func = func.caller
}
} catch (e) {}
return null
}
return event
}
}
function getStyle(obj, attribute) {
return obj.currentStyle ? obj.currentStyle[attribute] : document.defaultView.getComputedStyle(obj, false)[attribute]
}
function display(obj, value) {
if (obj) {
if (value != null) obj.style.display = value;
else return getStyle(obj, 'display')
}
}
function showPicker(cfg, preLoad) {
var nodeName = cfg.el ? cfg.el.nodeName : 'INPUT';
if (preLoad || cfg.eCont || new RegExp(/input|textarea|div|field|span|p|a/ig).test(nodeName)) {
cfg.elProp = cfg.elProp || nodeName == 'INPUT' ? 'value' : 'innerHTML'
} else {
return
}
if (cfg.lang == 'auto') {
cfg.lang = $IE ? navigator.browserLanguage.toLowerCase() : navigator.language.toLowerCase()
}
if (!cfg.eCont) {
for (var p in cfg) {
$dp[p] = cfg[p]
}
}
if (!$dp.dd || cfg.eCont || ($dp.dd && (cfg.getRealLang().name != $dp.dd.lang || cfg.skin != $dp.dd.skin))) {
if (cfg.eCont) {
ddInit(cfg.eCont, cfg)
} else {
$dp.dd = dptop[d].createElement("DIV");
$dp.dd.style.cssText = 'position:absolute';
dptop[d].body.appendChild($dp.dd);
ddInit($dp.dd, cfg);
if (preLoad) {
$dp.dd.style.left = $dp.dd.style.top = '-970px'
} else {
$dp.show();
setPos($dp)
}
}
} else if ($dp.cal) {
$dp.show();
$dp.cal.init();
if (!$dp.eCont) setPos($dp)
}
function ddInit(cont, cfg) {
var dm = dptop[d].domain,
isCross = false,
defHtml = '<iframe hideFocus=true width=9 height=7 frameborder=0 border=0 scrolling=no src="about:blank"></iframe>';
cont.innerHTML = defHtml;
var langList = Config.$langList,
skinList = Config.$skinList,
doc;
try {
doc = cont.lastChild.contentWindow[d]
} catch (e) {
isCross = true;
cont.removeChild(cont.lastChild);
var ifr = dptop[d].createElement("iframe");
ifr.hideFocus = true;
ifr.frameBorder = 0;
ifr.scrolling = 'no';
ifr.src = "javascript:(function(){var d=document;d.open();d.domain='" + dm + "';})()";
cont.appendChild(ifr);
setTimeout(function () {
doc = cont.lastChild.contentWindow[d];
ddWrite()
}, 97);
return
}
ddWrite();
function ddWrite() {
var realLang = cfg.getRealLang(),
ver = '4.9.0b3';
cont.lang = realLang.name;
cont.skin = cfg.skin;
var h = ['<head><script>', '', 'var doc=document, $d, $dp, $cfg=doc.cfg, $pdp = parent.$dp, $dt, $tdt, $sdt, $lastInput, $IE=$pdp.ie, $FF = $pdp.ff,$OPERA=$pdp.opera, $ny, $cMark = false;', 'if($cfg.eCont){$dp = {};for(var p in $pdp)$dp[p]=$pdp[p];}else{$dp=$pdp;};for(var p in $cfg){$dp[p]=$cfg[p];}', 'if(!$dp.isTouch)doc.oncontextmenu=function(){try{$c._fillQS(!$dp.has.d,1);showB($d.qsDivSel);}catch(e){};return false;};', '</script><script src=', jsPath, 'lang/', realLang.name, '.js?' + ver + ' charset=', realLang.charset, '></script>'];
if (isCross) h[1] = 'document.domain="' + dm + '";';
for (var i = 0; i < skinList.length; i++) {
if (skinList[i].name == cfg.skin) {
h.push('<link rel="stylesheet" type="text/css" href="' + jsPath + 'skin/' + skinList[i].name + '/datepicker.css?');
h.push(ver);
h.push('" charset="' + skinList[i].charset + '"/>')
}
}
h.push('<script src="' + jsPath + 'calendar.js?');
h.push(ver);
h.push('"></script>');
h.push('</head><body leftmargin="0" topmargin="0" tabindex=0></body></html>');
h.push('<script>var t;t=t||setInterval(function(){if((typeof(doc.ready)=="boolean"&&doc.ready)||doc.readyState=="complete"){new My97DP();$cfg.onload();$c.autoSize();$cfg.setPos($dp);clearInterval(t);}},20);</script>');
cfg.setPos = setPos;
cfg.onload = dpLoaded;
doc.write('<html>');
doc.cfg = cfg;
doc.write(h.join(''));
doc.close()
}
}
function setPos(dp) {
var l = dp.position.left,
t = dp.position.top,
el = dp.el;
if (el == emptyEl) return;
if (el != dp.srcEl && (display(el) == 'none' || el.type == 'hidden')) el = dp.srcEl;
var objxy = getBound(el),
mm = getAbsM(w),
currWH = getWH(dptop),
scr = getScroll(dptop),
ddHeight = $dp.dd.offsetHeight,
ddWidth = $dp.dd.offsetWidth;
if (isNaN(t)) t = 0;
if ((mm.topM + objxy.bottom + ddHeight > currWH.height) && (mm.topM + objxy.top - ddHeight > 0)) {
t += scr.top + mm.topM + objxy.top - ddHeight - 2
} else {
t += scr.top + mm.topM + objxy.bottom;
var offsetT = t - scr.top + ddHeight - currWH.height;
if (offsetT > 0) t -= offsetT
}
if (isNaN(l)) l = 0;
l += scr.left + Math.min(mm.leftM + objxy.left, currWH.width - ddWidth - 5) - ($IE ? 2 : 0);
dp.dd.style.top = (t + 2) + 'px';
dp.dd.style.left = l + 'px'
}
}
})();

5
public/vender/date97/calendar.js

File diff suppressed because one or more lines are too long

14
public/vender/date97/lang/en.js

@ -0,0 +1,14 @@
var $lang={
errAlertMsg: "Invalid date or the date out of range,redo or not?",
aWeekStr: ["wk", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
aLongWeekStr:["wk","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],
aMonStr: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
aLongMonStr: ["January","February","March","April","May","June","July","August","September","October","November","December"],
clearStr: "Clear",
todayStr: "Today",
okStr: "OK",
updateStr: "OK",
timeStr: "Time",
quickStr: "Quick Selection",
err_1: 'MinDate Cannot be bigger than MaxDate!'
}

14
public/vender/date97/lang/zh-cn.js

@ -0,0 +1,14 @@
var $lang={
errAlertMsg: "\u4E0D\u5408\u6CD5\u7684\u65E5\u671F\u683C\u5F0F\u6216\u8005\u65E5\u671F\u8D85\u51FA\u9650\u5B9A\u8303\u56F4,\u9700\u8981\u64A4\u9500\u5417?",
aWeekStr: ["\u5468","\u65E5","\u4E00","\u4E8C","\u4E09","\u56DB","\u4E94","\u516D"],
aLongWeekStr:["\u5468","\u661F\u671F\u65E5","\u661F\u671F\u4E00","\u661F\u671F\u4E8C","\u661F\u671F\u4E09","\u661F\u671F\u56DB","\u661F\u671F\u4E94","\u661F\u671F\u516D"],
aMonStr: ["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00","\u5341\u4E8C"],
aLongMonStr: ["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00\u6708","\u5341\u4E8C\u6708"],
clearStr: "\u6E05\u7A7A",
todayStr: "\u4ECA\u5929",
okStr: "\u786E\u5B9A",
updateStr: "\u786E\u5B9A",
timeStr: "\u65F6\u95F4",
quickStr: "\u5FEB\u901F\u9009\u62E9",
err_1: '\u6700\u5C0F\u65E5\u671F\u4E0D\u80FD\u5927\u4E8E\u6700\u5927\u65E5\u671F!'
}

14
public/vender/date97/lang/zh-tw.js

@ -0,0 +1,14 @@
var $lang={
errAlertMsg: "\u4E0D\u5408\u6CD5\u7684\u65E5\u671F\u683C\u5F0F\u6216\u8005\u65E5\u671F\u8D85\u51FA\u9650\u5B9A\u7BC4\u570D,\u9700\u8981\u64A4\u92B7\u55CE?",
aWeekStr: ["\u5468","\u65E5","\u4E00","\u4E8C","\u4E09","\u56DB","\u4E94","\u516D"],
aLongWeekStr:["\u5468","\u661F\u671F\u65E5","\u661F\u671F\u4E00","\u661F\u671F\u4E8C","\u661F\u671F\u4E09","\u661F\u671F\u56DB","\u661F\u671F\u4E94","\u661F\u671F\u516D"],
aMonStr: ["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00","\u5341\u4E8C"],
aLongMonStr: ["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00\u6708","\u5341\u4E8C\u6708"],
clearStr: "\u6E05\u7A7A",
todayStr: "\u4ECA\u5929",
okStr: "\u78BA\u5B9A",
updateStr: "\u78BA\u5B9A",
timeStr: "\u6642\u9593",
quickStr: "\u5FEB\u901F\u9078\u64C7",
err_1: '\u6700\u5C0F\u65E5\u671F\u4E0D\u80FD\u5927\u65BC\u6700\u5927\u65E5\u671F!'
}

11
public/vender/date97/skin/WdatePicker.css

@ -0,0 +1,11 @@
.Wdate{
border:#999 1px solid;
height:20px;
background:#fff url(datePicker.gif) no-repeat right;
}
.Wdate::-ms-clear{display:none;}
.WdateFmtErr{
font-weight:bold;
color:red;
}

BIN
public/vender/date97/skin/datePicker.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

328
public/vender/date97/skin/default/datepicker.css

@ -0,0 +1,328 @@
/**
* yyh & kimi from mb518.com
* 2019-3-25
**/
.WdateDiv {
width: 216px;
background-color: #FFF;
border-radius: 5px;
border: 1px solid #cecece;
}
.WdateDiv2 {
width: 432px;
}
.WdateDiv > div:nth-child(3) {
padding: 0px 0.375em;
}
.WdateDiv .NavImg a {
cursor: pointer;
display: block;
width: 1em;
height: 1em;
margin-top: 0.5em;
}
.WdateDiv .NavImgll a {
float: left;
background: url(img.gif) no-repeat;
background-size: 400%;
}
.WdateDiv .NavImgl a {
float: left;
background: url(img.gif) no-repeat -1em 0;
background-size: 400%;
}
.WdateDiv .NavImgr a {
float: right;
background: url(img.gif) no-repeat -2em 0;
background-size: 400%;
}
.WdateDiv .NavImgrr a {
float: right;
background: url(img.gif) no-repeat -3em 0;
background-size: 400%;
}
.WdateDiv #dpTitle {
height: 1.875em;
padding: 0.1875em 0.3125em;
}
.WdateDiv #dpTitle > div:nth-child(3),
.WdateDiv #dpTitle > div:nth-child(4) {
margin: 0px 0.8125em;
}
.WdateDiv .yminput {
margin-top: 0.375em;
text-align: center;
border: 0px;
height: 1.75em;
width: 3.125em;
color: #333;
background-color: #eefaff;
outline: none;
cursor: pointer;
font-size: 0.8125em;
border-radius: 0;
}
.WdateDiv .yminputfocus {
font-size: 0.8125em;
margin-top: 0.375em;
text-align: center;
border: 0;
color: #333;
height: 1.25em;
width: 3.125em;
outline: none;
background-color: #eefaff;
}
.WdateDiv .menuSel {
z-index: 1;
position: absolute;
background-color: #FFFFFF;
display: none;
padding: 0.3125em;
border-radius: 3px;
box-shadow: rgb(204, 204, 204) 0px 0px 2px 2px;
}
.WdateDiv .menu {
cursor: pointer;
background-color: #fff;
color: #333;
text-align: center;
}
.WdateDiv .menuOn {
cursor: pointer;
text-align: center;
background-color: #d6f2ff;
border-radius: 3px;
}
.WdateDiv .invalidMenu {
color: #aaa;
}
.WdateDiv .YMenu {
margin-top: 1.875em;
}
.WdateDiv .MMenu {
margin-top: 1.875em;
box-shadow: rgb(204, 204, 204) 0px 0px 2px 2px;
padding: 0.3125em;
border-radius: 3px;
*width: 3.875em;
}
.WdateDiv .hhMenu {
margin-top: -5.625em;
margin-left: 1.625em;
}
.WdateDiv .mmMenu {
margin-top: -2.875em;
margin-left: 1.625em;
}
.WdateDiv .ssMenu {
margin-top: -1.5em;
margin-left: 1.625em;
}
.WdateDiv .Wweek {
text-align: center;
background: #DAF3F5;
border-right: #BDEBEE 1px solid;
}
.WdateDiv .MTitle {
background-color: #f3f3f3;
border-radius: 5px;
color: #666;
}
.WdateDiv .WdayTable2 {
border-collapse: collapse;
}
.WdateDiv .WdayTable2 table {
border: 0;
}
.WdateDiv .WdayTable {
font-size: 0.75em;
line-height: 1.5em;
color: #333;
}
.WdateDiv .WdayTable td {
text-align: center;
border-bottom: 1px solid #f3f3f3;
padding: 0.1875em 0;
}
.WdateDiv .Wday {
cursor: pointer;
}
.WdateDiv .WdayOn {
cursor: pointer;
border-radius: 3px;
background-color: #C0EBEF;
}
.WdateDiv .Wwday {
cursor: pointer;
color: #ab1e1e;
}
.WdateDiv .WwdayOn {
cursor: pointer;
border-radius: 3px;
background-color: #C0EBEF;
}
.WdateDiv .Wtoday {
cursor: pointer;
color: blue;
}
.WdateDiv .Wselday {
background-color: #35baf6;
border-radius: 3px;
color: #fff;
}
.WdateDiv .WspecialDay {
background-color: #66F4DF;
}
.WdateDiv .WotherDay {
cursor: pointer;
color: #8585e1;
}
.WdateDiv .WotherDayOn {
cursor: pointer;
background-color: #d6f2ff;
border-radius: 3px;
}
.WdateDiv .WinvalidDay {
color: #aaa;
}
.WdateDiv #dpTime {
margin: 0.1875em 0 0.1875em 0.625em;
}
.WdateDiv #dpTime #dpTimeStr {
margin-left: 0.0625em;
color: #333;
font-size: 0.75em;
}
.WdateDiv #dpTime table:nth-child(4) {
font-size: 100%;
}
.WdateDiv #dpTime table:nth-child(-n+3) {
font-size: 0.75em;
}
.WdateDiv #dpTime input {
-webkit-appearance: none;
font-size: 0.75em;
height: 1.25em;
width: 1.875em;
text-align: center;
color: #333;
border: 0;
background-color: #eefaff;
border-radius: 0;
padding: 0;
}
.WdateDiv #dpTime input:disabled {
background-color: #e7e7e7;
}
.WdateDiv #dpTime .tB {
border-right: 0px;
}
.WdateDiv #dpTime .tE {
border-left: 0;
border-right: 0;
}
.WdateDiv #dpTime .tm {
width: 0.9375em;
border-left: 0;
border-right: 0;
}
/*.WdateDiv #dpTime button {
font-size: 0.75em;
}*/
.WdateDiv #dpTime #dpTimeUp {
height: 0.625em;
width: 0.8125em;
border: 0px;
background: url(img.gif) no-repeat -2em -1em;
background-size: 450%;
overflow: hidden;
}
.WdateDiv #dpTime #dpTimeDown {
height: 0.625em;
width: 0.8125em;
border: 0px;
background: url(img.gif) no-repeat -2em -1.625em;
background-size: 450%;
}
.WdateDiv #dpQS {
float: left;
margin-right: 0.1875em;
margin-top: 0.3125em;
background: url(img.gif) no-repeat 0px -1em;
background-size: 320%;
width: 1.25em;
height: 1.25em;
cursor: pointer;
margin-left: 0.375em;
}
.WdateDiv #dpControl {
text-align: right;
margin-top: 0.1875em;
padding: 0 0.3125em;
padding-bottom: 0.1875em;
}
.WdateDiv .dpButton {
font-size: 0.75em;
-webkit-appearance: none;
padding-top: 0;
height: 1.75em;
width: 2.8125em;
border: 0;
margin-top: 0.1875em;
margin-right: 0.1875em;
background: #35baf6;
color: #fff;
border-radius: 0;
}

BIN
public/vender/date97/skin/default/img.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

309
public/vender/date97/skin/ext/datepicker.css

@ -0,0 +1,309 @@
/*
* My97 DatePicker 4.7
* 皮肤名称:ext
* 皮肤作者:CssRain
* 作者blog:http://www.CssRain.cn
* 作者邮箱:cssrain@gmail.com
*/
/* 日期选择容器 DIV */
.WdateDiv{
width:180px;
background-color:#fff;
border:1px solid #718BB7;
}
/* 双月日历的宽度 */
.WdateDiv2{
width:360px;
}
.WdateDiv *{font-size:9pt;}
/****************************
* 导航图标 全部是A标签
***************************/
.WdateDiv .NavImg a{
margin-top:3px;
cursor:pointer;
display:block;
width:15px;
height:15px;
}
.WdateDiv .NavImgll a{
background:url(left-btn2.gif) no-repeat center center;
float:left;
margin-left:2px;
}
.WdateDiv .NavImgl a{
background:url(left-btn.gif) no-repeat center center;
float:left;
margin-left:2px;
}
.WdateDiv .NavImgr a{
background:url(right-btn.gif) no-repeat center center;
float:right;
margin-right:2px;
}
.WdateDiv .NavImgrr a{
background:url(right-btn2.gif) no-repeat center center;
float:right;
margin-right:2px;
}
/****************************
* 年份月份相关
***************************/
/* 年份月份栏 DIV */
.WdateDiv #dpTitle{
height:22px;
background:transparent url(hd-sprite.gif) repeat-x scroll 0 -83px;
color:#FFFFFF;
font-family:"sans serif",tahoma,verdana,helvetica;
font-size:12px;
font-size-adjust:none;
font-stretch:normal;
font-style:normal;
font-variant:normal;
font-weight:bold;
padding-top:2px;
}
/* 年份月份输入框 INPUT */
.WdateDiv .yminput{
margin-top:2px;
text-align:center;
border:0px;
height:20px;
width:50px;
color:#FFF;
background-color:transparent;
cursor:pointer;
}
/* 年份月份输入框获得焦点时的样式 INPUT */
.WdateDiv .yminputfocus{
margin-top:2px;
text-align:center;
border:#939393 1px solid;
font-weight:bold;
color:#034c50;
height:16px;
width:50px;
}
/* 菜单选择框 DIV */
.WdateDiv .menuSel{
z-index:1;
position:absolute;
background-color:#FFFFFF;
border:1px solid #718BB7;
display:none;
}
/* 菜单的样式 TD */
.WdateDiv .menu{
cursor:pointer;
background-color:#fff;
color:#11777C;
}
/* 菜单的mouseover样式 TD */
.WdateDiv .menuOn{
cursor:pointer;
background-color: #B3CEEF;
}
/* 菜单无效时的样式 TD */
.WdateDiv .invalidMenu{
color:#aaa;
}
/* 年选择框的偏移 DIV */
.WdateDiv .YMenu{
margin-top:16px;
}
/* 月选择框的偏移 DIV */
.WdateDiv .MMenu{
margin-top:16px;
*width:62px;
}
/* 时选择框的位置 DIV */
.WdateDiv .hhMenu{
margin-top:-90px;
margin-left:26px;
}
/* 分选择框的位置 DIV */
.WdateDiv .mmMenu{
margin-top:-46px;
margin-left:26px;
}
/* 秒选择框的位置 DIV */
.WdateDiv .ssMenu{
margin-top:-24px;
margin-left:26px;
}
/****************************
* 周相关
***************************/
.WdateDiv .Wweek {
text-align:center;
background:#DAF3F5;
border-right:#BDEBEE 1px solid;
}
/****************************
* 星期,日期相关
***************************/
/* 星期栏 TR */
.WdateDiv .MTitle{
color:#233D6D;
background:#DFECFB url(glass-bg.gif) repeat-x scroll left top;
color:#233D6D;
cursor:default;
font-size:10px;
padding-top:2px;
}
.WdateDiv .MTitle td{
border-bottom:1px solid #A3BAD9;
}
.WdateDiv .WdayTable2{
border-collapse:collapse;
border:black 1px solid;
}
.WdateDiv .WdayTable2 table{
border:0;
}
/* 日期栏表格 TABLE */
.WdateDiv .WdayTable{
line-height:20px;
color:black;
}
.WdateDiv .WdayTable td{
text-align:center;
}
/* 日期格的样式 TD */
.WdateDiv .Wday{
cursor:pointer;
}
/* 日期格的mouseover样式 TD */
.WdateDiv .WdayOn{
cursor:pointer;
background-color:#B3CEEF;
}
/* 周末日期格的样式 TD */
.WdateDiv .Wwday{
cursor:pointer;
color:#ab1e1e;
}
/* 周末日期格的mouseover样式 TD */
.WdateDiv .WwdayOn{
cursor:pointer;
background-color:#B3CEEF;
}
.WdateDiv .Wtoday{
cursor:pointer;
color:red;
}
.WdateDiv .Wselday{
background-color:#B3CEEF;
}
.WdateDiv .WspecialDay{
background-color:#66F4DF;
}
/* 其他月份的日期 */
.WdateDiv .WotherDay{
cursor:pointer;
color:#AAAAAA;
}
/* 其他月份的日期mouseover样式 */
.WdateDiv .WotherDayOn{
cursor:pointer;
background-color:#B3CEEF;
}
/* 无效日期的样式,即在日期范围以外日期格的样式,不能选择的日期 */
.WdateDiv .WinvalidDay{
color:#aaa;
}
/****************************
* 时间相关
***************************/
/* 时间栏 DIV */
.WdateDiv #dpTime{
width:120px;
text-align:left;
margin-left:32px;
height:20px;
line-height:20px;
padding-top:1px;
}
/* 时间文字 SPAN */
.WdateDiv #dpTime #dpTimeStr{
margin-left:1px;
color:#233D6D;
}
/* 时间输入框 INPUT */
.WdateDiv #dpTime input{
height:16px;
width:18px;
text-align:center;
color:#333;
border:#A3BAD9 1px solid;
}
/* 时间 时 INPUT */
.WdateDiv #dpTime .tB{
border-right:0px;
}
/* 时间 分和间隔符 ':' INPUT */
.WdateDiv #dpTime .tE{
border-left:0;
border-right:0;
}
/* 时间 秒 INPUT */
.WdateDiv #dpTime .tm{
width:7px;
border-left:0;
border-right:0;
}
/* 时间右边的向上按钮 BUTTON */
.WdateDiv #dpTime #dpTimeUp{
height:8px;
width:13px;
border:0px;
background:url(img.gif) no-repeat -32px -16px;
cursor:pointer;
margin-bottom:0;
padding-bottom:0;
}
/* 时间右边的向下按钮 BUTTON */
.WdateDiv #dpTime #dpTimeDown{
height:8px;
width:13px;
border:0px;
background:url(img.gif) no-repeat -48px -16px;
cursor:pointer;
margin-top:0;
padding-top:0;
}
/****************************
* 其他
***************************/
.WdateDiv #dpQS {
float:left;
margin-left:3px;
margin-top:9px;
background:url(dateselect.gif) no-repeat;
width:20px;
height:20px;
cursor:pointer;
}
.WdateDiv #dpControl {
text-align:right;
margin-top:3px;
background:#DFECFB url(glass-bg.gif) repeat-x scroll left top;
border-top:1px solid #A3BAD9;
padding:4px;
}
.WdateDiv .dpButton{
width:44px;
height:22px;
background:#083772 none repeat scroll 0 0;
border-color:#3366CC #000055 #000055 #3366CC;
border-style:solid;
border-width:1px;
color:white;
cursor:pointer;
}

BIN
public/vender/date97/skin/ext/dateselect.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 B

BIN
public/vender/date97/skin/ext/glass-bg.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 873 B

BIN
public/vender/date97/skin/ext/hd-sprite.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
public/vender/date97/skin/ext/img.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
public/vender/date97/skin/ext/left-btn.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 870 B

BIN
public/vender/date97/skin/ext/left-btn2.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 B

BIN
public/vender/date97/skin/ext/right-btn.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 871 B

BIN
public/vender/date97/skin/ext/right-btn2.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 B

BIN
public/vender/date97/skin/whyGreen/bg.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 B

256
public/vender/date97/skin/whyGreen/datepicker.css

@ -0,0 +1,256 @@
/*
* My97 DatePicker 4.8 Skin:whyGreen
*/
.WdateDiv{
width:180px;
background-color:#fff;
border:#C5E1E4 1px solid;
padding:2px;
}
.WdateDiv2{
width:360px;
}
.WdateDiv *{font-size:9pt;}
.WdateDiv .NavImg a{
cursor:pointer;
display:block;
width:16px;
height:16px;
margin-top:1px;
}
.WdateDiv .NavImgll a{
float:left;
background:url(img.gif) no-repeat;
}
.WdateDiv .NavImgl a{
float:left;
background:url(img.gif) no-repeat -16px 0px;
}
.WdateDiv .NavImgr a{
float:right;
background:url(img.gif) no-repeat -32px 0px;
}
.WdateDiv .NavImgrr a{
float:right;
background:url(img.gif) no-repeat -48px 0px;
}
.WdateDiv #dpTitle{
height:24px;
padding:1px;
border:#c5d9e8 1px solid;
background:url(bg.jpg);
margin-bottom:2px;
}
.WdateDiv .yminput{
margin-top:2px;
text-align:center;
border:0px;
height:20px;
width:50px;
color:#034c50;
background-color:transparent;
cursor:pointer;
}
.WdateDiv .yminputfocus{
margin-top:2px;
text-align:center;
border:#939393 1px solid;
font-weight:bold;
color:#034c50;
height:20px;
width:50px;
}
.WdateDiv .menuSel{
z-index:1;
position:absolute;
background-color:#FFFFFF;
border:#A3C6C8 1px solid;
display:none;
}
.WdateDiv .menu{
cursor:pointer;
background-color:#fff;
color:#11777C;
}
.WdateDiv .menuOn{
cursor:pointer;
background-color:#BEEBEE;
}
.WdateDiv .invalidMenu{
color:#aaa;
}
.WdateDiv .YMenu{
margin-top:20px;
}
.WdateDiv .MMenu{
margin-top:20px;
*width:62px;
}
.WdateDiv .hhMenu{
margin-top:-90px;
margin-left:26px;
}
.WdateDiv .mmMenu{
margin-top:-46px;
margin-left:26px;
}
.WdateDiv .ssMenu{
margin-top:-24px;
margin-left:26px;
}
.WdateDiv .Wweek {
text-align:center;
background:#DAF3F5;
border-right:#BDEBEE 1px solid;
}
.WdateDiv .MTitle{
color:#13777e;
background-color:#bdebee;
}
.WdateDiv .WdayTable2{
border-collapse:collapse;
border:#BEE9F0 1px solid;
}
.WdateDiv .WdayTable2 table{
border:0;
}
.WdateDiv .WdayTable{
line-height:20px;
color:#13777e;
background-color:#edfbfb;
border:#BEE9F0 1px solid;
}
.WdateDiv .WdayTable td{
text-align:center;
}
.WdateDiv .Wday{
cursor:pointer;
}
.WdateDiv .WdayOn{
cursor:pointer;
background-color:#74d2d9 ;
}
.WdateDiv .Wwday{
cursor:pointer;
color:#ab1e1e;
}
.WdateDiv .WwdayOn{
cursor:pointer;
background-color:#74d2d9;
}
.WdateDiv .Wtoday{
cursor:pointer;
color:blue;
}
.WdateDiv .Wselday{
background-color:#A7E2E7;
}
.WdateDiv .WspecialDay{
background-color:#66F4DF;
}
.WdateDiv .WotherDay{
cursor:pointer;
color:#0099CC;
}
.WdateDiv .WotherDayOn{
cursor:pointer;
background-color:#C0EBEF;
}
.WdateDiv .WinvalidDay{
color:#aaa;
}
.WdateDiv #dpTime{
float:left;
margin-top:3px;
margin-right:30px;
}
.WdateDiv #dpTime #dpTimeStr{
margin-left:1px;
color:#497F7F;
}
.WdateDiv #dpTime input{
height:20px;
width:18px;
text-align:center;
color:#333;
border:#61CAD0 1px solid;
}
.WdateDiv #dpTime .tB{
border-right:0px;
}
.WdateDiv #dpTime .tE{
border-left:0;
border-right:0;
}
.WdateDiv #dpTime .tm{
width:7px;
border-left:0;
border-right:0;
}
.WdateDiv #dpTime #dpTimeUp{
height:10px;
width:13px;
border:0px;
background:url(img.gif) no-repeat -32px -16px;
}
.WdateDiv #dpTime #dpTimeDown{
height:10px;
width:13px;
border:0px;
background:url(img.gif) no-repeat -48px -16px;
}
.WdateDiv #dpQS {
float:left;
margin-right:3px;
margin-top:3px;
background:url(img.gif) no-repeat 0px -16px;
width:20px;
height:20px;
cursor:pointer;
}
.WdateDiv #dpControl {
text-align:right;
margin-top:3px;
}
.WdateDiv .dpButton{
height:20px;
width:45px;
margin-top:2px;
border:#38B1B9 1px solid;
background-color:#CFEBEE;
color:#08575B;
}

BIN
public/vender/date97/skin/whyGreen/img.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

1627
public/vender/diff.js

File diff suppressed because it is too large

31187
public/vender/fabric.js

File diff suppressed because it is too large

BIN
public/vender/fonts/mui.ttf

Binary file not shown.

190
public/vender/jquery/jquery.base64.js

@ -0,0 +1,190 @@
/*jslint adsafe: false, bitwise: true, browser: true, cap: false, css: false,
debug: false, devel: true, eqeqeq: true, es5: false, evil: false,
forin: false, fragment: false, immed: true, laxbreak: false, newcap: true,
nomen: false, on: false, onevar: true, passfail: false, plusplus: true,
regexp: false, rhino: true, safe: false, strict: false, sub: false,
undef: true, white: false, widget: false, windows: false */
/*global jQuery: false, window: false */
"use strict";
/*
* Original code (c) 2010 Nick Galbreath
* http://code.google.com/p/stringencoders/source/browse/#svn/trunk/javascript
*
* jQuery port (c) 2010 Carlo Zottmann
* http://github.com/carlo/jquery-base64
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
/* base64 encode/decode compatible with window.btoa/atob
*
* window.atob/btoa is a Firefox extension to convert binary data (the "b")
* to base64 (ascii, the "a").
*
* It is also found in Safari and Chrome. It is not available in IE.
*
* if (!window.btoa) window.btoa = $.base64.encode
* if (!window.atob) window.atob = $.base64.decode
*
* The original spec's for atob/btoa are a bit lacking
* https://developer.mozilla.org/en/DOM/window.atob
* https://developer.mozilla.org/en/DOM/window.btoa
*
* window.btoa and $.base64.encode takes a string where charCodeAt is [0,255]
* If any character is not [0,255], then an exception is thrown.
*
* window.atob and $.base64.decode take a base64-encoded string
* If the input length is not a multiple of 4, or contains invalid characters
* then an exception is thrown.
*/
jQuery.base64 = ( function( $ ) {
var _PADCHAR = "=",
_ALPHA = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
_VERSION = "1.0";
function _getbyte64( s, i ) {
// This is oddly fast, except on Chrome/V8.
// Minimal or no improvement in performance by using a
// object with properties mapping chars to value (eg. 'A': 0)
var idx = _ALPHA.indexOf( s.charAt( i ) );
if ( idx === -1 ) {
throw "Cannot decode base64";
}
return idx;
}
function _decode( s ) {
var pads = 0,
i,
b10,
imax = s.length,
x = [];
s = String( s );
if ( imax === 0 ) {
return s;
}
if ( imax % 4 !== 0 ) {
throw "Cannot decode base64";
}
if ( s.charAt( imax - 1 ) === _PADCHAR ) {
pads = 1;
if ( s.charAt( imax - 2 ) === _PADCHAR ) {
pads = 2;
}
// either way, we want to ignore this last block
imax -= 4;
}
for ( i = 0; i < imax; i += 4 ) {
b10 = ( _getbyte64( s, i ) << 18 ) | ( _getbyte64( s, i + 1 ) << 12 ) | ( _getbyte64( s, i + 2 ) << 6 ) | _getbyte64( s, i + 3 );
x.push( String.fromCharCode( b10 >> 16, ( b10 >> 8 ) & 0xff, b10 & 0xff ) );
}
switch ( pads ) {
case 1:
b10 = ( _getbyte64( s, i ) << 18 ) | ( _getbyte64( s, i + 1 ) << 12 ) | ( _getbyte64( s, i + 2 ) << 6 );
x.push( String.fromCharCode( b10 >> 16, ( b10 >> 8 ) & 0xff ) );
break;
case 2:
b10 = ( _getbyte64( s, i ) << 18) | ( _getbyte64( s, i + 1 ) << 12 );
x.push( String.fromCharCode( b10 >> 16 ) );
break;
}
return x.join( "" );
}
function _getbyte( s, i ) {
var x = s.charCodeAt( i );
if ( x > 255 ) {
throw "INVALID_CHARACTER_ERR: DOM Exception 5";
}
return x;
}
function _encode( s ) {
if ( arguments.length !== 1 ) {
throw "SyntaxError: exactly one argument required";
}
s = String( s );
var i,
b10,
x = [],
imax = s.length - s.length % 3;
if ( s.length === 0 ) {
return s;
}
for ( i = 0; i < imax; i += 3 ) {
b10 = ( _getbyte( s, i ) << 16 ) | ( _getbyte( s, i + 1 ) << 8 ) | _getbyte( s, i + 2 );
x.push( _ALPHA.charAt( b10 >> 18 ) );
x.push( _ALPHA.charAt( ( b10 >> 12 ) & 0x3F ) );
x.push( _ALPHA.charAt( ( b10 >> 6 ) & 0x3f ) );
x.push( _ALPHA.charAt( b10 & 0x3f ) );
}
switch ( s.length - imax ) {
case 1:
b10 = _getbyte( s, i ) << 16;
x.push( _ALPHA.charAt( b10 >> 18 ) + _ALPHA.charAt( ( b10 >> 12 ) & 0x3F ) + _PADCHAR + _PADCHAR );
break;
case 2:
b10 = ( _getbyte( s, i ) << 16 ) | ( _getbyte( s, i + 1 ) << 8 );
x.push( _ALPHA.charAt( b10 >> 18 ) + _ALPHA.charAt( ( b10 >> 12 ) & 0x3F ) + _ALPHA.charAt( ( b10 >> 6 ) & 0x3f ) + _PADCHAR );
break;
}
return x.join( "" );
}
return {
decode: _decode,
encode: _encode,
VERSION: _VERSION
};
}( jQuery ) );

10872
public/vender/jquery/jquery.js

File diff suppressed because it is too large

255
public/vender/jquery/jquery.print.js

@ -0,0 +1,255 @@
/* @license
* jQuery.print, version 1.5.1
* (c) Sathvik Ponangi, Doers' Guild
* Licence: CC-By (http://creativecommons.org/licenses/by/3.0/)
*--------------------------------------------------------------------------*/
(function ($) {
"use strict";
// A nice closure for our definitions
function getjQueryObject(string) {
// Make string a vaild jQuery thing
var jqObj = $("");
try {
jqObj = $(string)
.clone();
} catch (e) {
jqObj = $("<span />")
.html(string);
}
return jqObj;
}
function printFrame(frameWindow, content, options) {
// Print the selected window/iframe
var def = $.Deferred();
try {
frameWindow = frameWindow.contentWindow || frameWindow.contentDocument || frameWindow;
var wdoc = frameWindow.document || frameWindow.contentDocument || frameWindow;
if(options.doctype) {
wdoc.write(options.doctype);
}
wdoc.write(content);
wdoc.close();
var printed = false;
var callPrint = function () {
if(printed) {
return;
}
// Fix for IE : Allow it to render the iframe
frameWindow.focus();
try {
// Fix for IE11 - printng the whole page instead of the iframe content
if (!frameWindow.document.execCommand('print', false, null)) {
// document.execCommand returns false if it failed -http://stackoverflow.com/a/21336448/937891
frameWindow.print();
}
// focus body as it is losing focus in iPad and content not getting printed
$('body').focus();
} catch (e) {
frameWindow.print();
}
frameWindow.close();
printed = true;
def.resolve();
}
// Print once the frame window loads - seems to work for the new-window option but unreliable for the iframe
$(frameWindow).on("load", callPrint);
// Fallback to printing directly if the frame doesn't fire the load event for whatever reason
setTimeout(callPrint, options.timeout);
} catch (err) {
def.reject(err);
}
return def;
}
function printContentInIFrame(content, options) {
var $iframe = $(options.iframe + "");
var iframeCount = $iframe.length;
if (iframeCount === 0) {
// Create a new iFrame if none is given
$iframe = $('<iframe height="0" width="0" border="0" wmode="Opaque"/>')
.prependTo('body')
.css({
"position": "absolute",
"top": -999,
"left": -999
});
}
var frameWindow = $iframe.get(0);
return printFrame(frameWindow, content, options)
.done(function () {
// Success
setTimeout(function () {
// Wait for IE
if (iframeCount === 0) {
// Destroy the iframe if created here
$iframe.remove();
}
}, 1000);
})
.fail(function (err) {
// Use the pop-up method if iframe fails for some reason
console.error("Failed to print from iframe", err);
printContentInNewWindow(content, options);
})
.always(function () {
try {
options.deferred.resolve();
} catch (err) {
console.warn('Error notifying deferred', err);
}
});
}
function printContentInNewWindow(content, options) {
// Open a new window and print selected content
var frameWindow = window.open();
return printFrame(frameWindow, content, options)
.always(function () {
try {
options.deferred.resolve();
} catch (err) {
console.warn('Error notifying deferred', err);
}
});
}
function isNode(o) {
/* http://stackoverflow.com/a/384380/937891 */
return !!(typeof Node === "object" ? o instanceof Node : o && typeof o === "object" && typeof o.nodeType === "number" && typeof o.nodeName === "string");
}
$.print = $.fn.print = function () {
// Print a given set of elements
var options, $this, self = this;
// console.log("Printing", this, arguments);
if (self instanceof $) {
// Get the node if it is a jQuery object
self = self.get(0);
}
if (isNode(self)) {
// If `this` is a HTML element, i.e. for
// $(selector).print()
$this = $(self);
if (arguments.length > 0) {
options = arguments[0];
}
} else {
if (arguments.length > 0) {
// $.print(selector,options)
$this = $(arguments[0]);
if (isNode($this[0])) {
if (arguments.length > 1) {
options = arguments[1];
}
} else {
// $.print(options)
options = arguments[0];
$this = $("html");
}
} else {
// $.print()
$this = $("html");
}
}
// Default options
var defaults = {
globalStyles: true,
mediaPrint: false,
stylesheet: null,
noPrintSelector: ".no-print",
iframe: true,
append: null,
prepend: null,
manuallyCopyFormValues: true,
deferred: $.Deferred(),
timeout: 750,
title: null,
doctype: '<!doctype html>'
};
// Merge with user-options
options = $.extend({}, defaults, (options || {}));
var $styles = $("");
if (options.globalStyles) {
// Apply the stlyes from the current sheet to the printed page
$styles = $("style, link, meta, base, title");
} else if (options.mediaPrint) {
// Apply the media-print stylesheet
$styles = $("link[media=print]");
}
if (options.stylesheet) {
// Add a custom stylesheet if given
$styles = $.merge($styles, $('<link rel="stylesheet" href="' + options.stylesheet + '">'));
}
// Create a copy of the element to print
var copy = $this.clone();
// Wrap it in a span to get the HTML markup string
copy = $("<span/>")
.append(copy);
// Remove unwanted elements
copy.find(options.noPrintSelector)
.remove();
// Add in the styles
copy.append($styles.clone());
// Update title
if (options.title) {
var title = $("title", copy);
if (title.length === 0) {
title = $("<title />");
copy.append(title);
}
title.text(options.title);
}
// Appedned content
copy.append(getjQueryObject(options.append));
// Prepended content
copy.prepend(getjQueryObject(options.prepend));
if (options.manuallyCopyFormValues) {
// Manually copy form values into the HTML for printing user-modified input fields
// http://stackoverflow.com/a/26707753
copy.find("input")
.each(function () {
var $field = $(this);
if ($field.is("[type='radio']") || $field.is("[type='checkbox']")) {
if ($field.prop("checked")) {
$field.attr("checked", "checked");
}
} else {
$field.attr("value", $field.val());
}
});
copy.find("select").each(function () {
var $field = $(this);
$field.find(":selected").attr("selected", "selected");
});
copy.find("textarea").each(function () {
// Fix for https://github.com/DoersGuild/jQuery.print/issues/18#issuecomment-96451589
var $field = $(this);
$field.text($field.val());
});
}
// Get the HTML markup string
var content = copy.html();
// Notify with generated markup & cloned elements - useful for logging, etc
try {
options.deferred.notify('generated_markup', content, copy);
} catch (err) {
console.warn('Error notifying deferred', err);
}
// Destroy the copy
copy.remove();
if (options.iframe) {
// Use an iframe for printing
try {
printContentInIFrame(content, options);
} catch (e) {
// Use the pop-up method if iframe fails for some reason
console.error("Failed to print from iframe", e.stack, e.message);
printContentInNewWindow(content, options);
}
} else {
// Use a new window for printing
printContentInNewWindow(content, options);
}
return this;
};
})(jQuery);

1
public/vender/jquery/jquery.ztree.core.min.js

File diff suppressed because one or more lines are too long

1
public/vender/jquery/jquery.ztree.exedit.min.js

File diff suppressed because one or more lines are too long

1
public/vender/jquery/jquery.ztree.exhide.min.js

File diff suppressed because one or more lines are too long

BIN
public/vender/jquery/zTreeStyle/img/diy/1_close.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 601 B

BIN
public/vender/jquery/zTreeStyle/img/diy/1_open.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 580 B

BIN
public/vender/jquery/zTreeStyle/img/diy/2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 570 B

BIN
public/vender/jquery/zTreeStyle/img/diy/3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 762 B

BIN
public/vender/jquery/zTreeStyle/img/diy/4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 B

BIN
public/vender/jquery/zTreeStyle/img/diy/5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 710 B

BIN
public/vender/jquery/zTreeStyle/img/diy/6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 432 B

BIN
public/vender/jquery/zTreeStyle/img/diy/7.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 534 B

BIN
public/vender/jquery/zTreeStyle/img/diy/8.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 529 B

BIN
public/vender/jquery/zTreeStyle/img/diy/9.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 467 B

BIN
public/vender/jquery/zTreeStyle/img/line_conn.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 B

BIN
public/vender/jquery/zTreeStyle/img/loading.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 381 B

BIN
public/vender/jquery/zTreeStyle/img/zTreeStandard.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

BIN
public/vender/jquery/zTreeStyle/img/zTreeStandard.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
public/vender/jquery/zTreeStyle/img/zTreeStandard.psd

Binary file not shown.

97
public/vender/jquery/zTreeStyle/zTreeStyle.css

@ -0,0 +1,97 @@
/*-------------------------------------
zTree Style
version: 3.5.19
author: Hunter.z
email: hunter.z@263.net
website: http://code.google.com/p/jquerytree/
-------------------------------------*/
.ztree * {padding:0; margin:0; font-size:12px; font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif}
.ztree {margin:0; padding:5px; color:#333}
.ztree li{padding:0; margin:0; list-style:none; line-height:14px; text-align:left; white-space:nowrap; outline:0}
.ztree li ul{ margin:0; padding:0 0 0 18px}
.ztree li ul.line{ background:url(./img/line_conn.gif) 0 0 repeat-y;}
.ztree li a {padding:1px 3px 0 0; margin:0; cursor:pointer; height:17px; color:#333; background-color: transparent;
text-decoration:none; vertical-align:top; display: inline-block}
.ztree li a:hover {text-decoration:underline}
.ztree li a.curSelectedNode {padding-top:0px; background-color:#FFE6B0; color:black; height:16px; border:1px #FFB951 solid; opacity:0.8;}
.ztree li a.curSelectedNode_Edit {padding-top:0px; background-color:#FFE6B0; color:black; height:16px; border:1px #FFB951 solid; opacity:0.8;}
.ztree li a.tmpTargetNode_inner {padding-top:0px; background-color:#316AC5; color:white; height:16px; border:1px #316AC5 solid;
opacity:0.8; filter:alpha(opacity=80)}
.ztree li a.tmpTargetNode_prev {}
.ztree li a.tmpTargetNode_next {}
.ztree li a input.rename {height:14px; width:80px; padding:0; margin:0;
font-size:12px; border:1px #7EC4CC solid; *border:0px}
.ztree li span {line-height:16px; margin-right:2px}
.ztree li span.button {line-height:0; margin:0; width:16px; height:16px; display: inline-block; vertical-align:middle;
border:0 none; cursor: pointer;outline:none;
background-color:transparent; background-repeat:no-repeat; background-attachment: scroll;
background-image:url("./img/zTreeStandard.png"); *background-image:url("./img/zTreeStandard.gif")}
.ztree li span.button.chk {width:13px; height:13px; margin:0 3px 0 0; cursor: auto}
.ztree li span.button.chk.checkbox_false_full {background-position:0 0}
.ztree li span.button.chk.checkbox_false_full_focus {background-position:0 -14px}
.ztree li span.button.chk.checkbox_false_part {background-position:0 -28px}
.ztree li span.button.chk.checkbox_false_part_focus {background-position:0 -42px}
.ztree li span.button.chk.checkbox_false_disable {background-position:0 -56px}
.ztree li span.button.chk.checkbox_true_full {background-position:-14px 0}
.ztree li span.button.chk.checkbox_true_full_focus {background-position:-14px -14px}
.ztree li span.button.chk.checkbox_true_part {background-position:-14px -28px}
.ztree li span.button.chk.checkbox_true_part_focus {background-position:-14px -42px}
.ztree li span.button.chk.checkbox_true_disable {background-position:-14px -56px}
.ztree li span.button.chk.radio_false_full {background-position:-28px 0}
.ztree li span.button.chk.radio_false_full_focus {background-position:-28px -14px}
.ztree li span.button.chk.radio_false_part {background-position:-28px -28px}
.ztree li span.button.chk.radio_false_part_focus {background-position:-28px -42px}
.ztree li span.button.chk.radio_false_disable {background-position:-28px -56px}
.ztree li span.button.chk.radio_true_full {background-position:-42px 0}
.ztree li span.button.chk.radio_true_full_focus {background-position:-42px -14px}
.ztree li span.button.chk.radio_true_part {background-position:-42px -28px}
.ztree li span.button.chk.radio_true_part_focus {background-position:-42px -42px}
.ztree li span.button.chk.radio_true_disable {background-position:-42px -56px}
.ztree li span.button.switch {width:18px; height:18px}
.ztree li span.button.root_open{background-position:-92px -54px}
.ztree li span.button.root_close{background-position:-74px -54px}
.ztree li span.button.roots_open{background-position:-92px 0}
.ztree li span.button.roots_close{background-position:-74px 0}
.ztree li span.button.center_open{background-position:-92px -18px}
.ztree li span.button.center_close{background-position:-74px -18px}
.ztree li span.button.bottom_open{background-position:-92px -36px}
.ztree li span.button.bottom_close{background-position:-74px -36px}
.ztree li span.button.noline_open{background-position:-92px -72px}
.ztree li span.button.noline_close{background-position:-74px -72px}
.ztree li span.button.root_docu{ background:none;}
.ztree li span.button.roots_docu{background-position:-56px 0}
.ztree li span.button.center_docu{background-position:-56px -18px}
.ztree li span.button.bottom_docu{background-position:-56px -36px}
.ztree li span.button.noline_docu{ background:none;}
.ztree li span.button.ico_open{margin-right:2px; background-position:-110px -16px; vertical-align:top; *vertical-align:middle}
.ztree li span.button.ico_close{margin-right:2px; background-position:-110px 0; vertical-align:top; *vertical-align:middle}
.ztree li span.button.ico_docu{margin-right:2px; background-position:-110px -32px; vertical-align:top; *vertical-align:middle}
.ztree li span.button.edit {margin-right:2px; background-position:-110px -48px; vertical-align:top; *vertical-align:middle}
.ztree li span.button.remove {margin-right:2px; background-position:-110px -64px; vertical-align:top; *vertical-align:middle}
.ztree li span.button.ico_loading{margin-right:2px; background:url(./img/loading.gif) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}
ul.tmpTargetzTree {background-color:#FFE6B0; opacity:0.8; filter:alpha(opacity=80)}
span.tmpzTreeMove_arrow {width:16px; height:16px; display: inline-block; padding:0; margin:2px 0 0 1px; border:0 none; position:absolute;
background-color:transparent; background-repeat:no-repeat; background-attachment: scroll;
background-position:-110px -80px; background-image:url("./img/zTreeStandard.png"); *background-image:url("./img/zTreeStandard.gif")}
ul.ztree.zTreeDragUL {margin:0; padding:0; position:absolute; width:auto; height:auto;overflow:hidden; background-color:#cfcfcf; border:1px #00B83F dotted; opacity:0.8; filter:alpha(opacity=80)}
.zTreeMask {z-index:10000; background-color:#cfcfcf; opacity:0.0; filter:alpha(opacity=0); position:absolute}
/* level style*/
/*.ztree li span.button.level0 {
display:none;
}
.ztree li ul.level0 {
padding:0;
background:none;
}*/

5
public/vender/mui/mui.min.css

File diff suppressed because one or more lines are too long

6
public/vender/mui/mui.min.js

File diff suppressed because one or more lines are too long

7
public/vender/mui/mui.picker.min.css

@ -0,0 +1,7 @@
/**
* 选择列表插件
* varstion 2.0.0
* by Houfeng
* Houfeng@DCloud.io
**/
.mui-pciker-list li,.mui-picker,.mui-picker-inner{box-sizing:border-box;overflow:hidden}.mui-picker{background-color:#ddd;position:relative;height:200px;border:1px solid rgba(0,0,0,.1);-webkit-user-select:none;user-select:none}.mui-dtpicker,.mui-poppicker{left:0;background-color:#eee;box-shadow:0 -5px 7px 0 rgba(0,0,0,.1);-webkit-transition:.3s;width:100%}.mui-picker-inner{position:relative;width:100%;height:100%;-webkit-mask-box-image:-webkit-linear-gradient(bottom,transparent,transparent 5%,#fff 20%,#fff 80%,transparent 95%,transparent);-webkit-mask-box-image:linear-gradient(top,transparent,transparent 5%,#fff 20%,#fff 80%,transparent 95%,transparent)}.mui-pciker-list,.mui-pciker-rule{box-sizing:border-box;padding:0;margin:-18px 0 0;width:100%;height:36px;line-height:36px;position:absolute;left:0;top:50%}.mui-pciker-rule-bg{z-index:0}.mui-pciker-rule-ft{z-index:2;border-top:solid 1px rgba(0,0,0,.1);border-bottom:solid 1px rgba(0,0,0,.1)}.mui-pciker-list{z-index:1;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transform:perspective(750pt) rotateY(0) rotateX(0);transform:perspective(750pt) rotateY(0) rotateX(0)}.mui-pciker-list li{width:100%;height:100%;position:absolute;text-align:center;vertical-align:middle;-webkit-backface-visibility:hidden;backface-visibility:hidden;font-size:1pc;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;color:#888;padding:0 8px;white-space:nowrap;-webkit-text-overflow:ellipsis;text-overflow:ellipsis;cursor:default;visibility:hidden}.mui-pciker-list li.highlight,.mui-pciker-list li.visible{visibility:visible}.mui-pciker-list li.highlight{color:#222}.mui-poppicker{position:fixed;z-index:999;border-top:solid 1px #ccc;bottom:0;-webkit-transform:translateY(300px)}.mui-poppicker.mui-active{-webkit-transform:translateY(0)}.mui-android-5-1 .mui-poppicker{bottom:-300px;-webkit-transition-property:bottom;-webkit-transform:none}.mui-android-5-1 .mui-poppicker.mui-active{bottom:0;-webkit-transition-property:bottom;-webkit-transform:none}.mui-poppicker-header{padding:6px;font-size:14px;color:#888}.mui-poppicker-header .mui-btn{font-size:9pt;padding:5px 10px}.mui-poppicker-btn-cancel{float:left}.mui-poppicker-btn-ok{float:right}.mui-poppicker-clear{clear:both;height:0;line-height:0;font-size:0;overflow:hidden}.mui-poppicker-body{position:relative;width:100%;height:200px;border-top:solid 1px #ddd}.mui-poppicker-body .mui-picker{width:100%;height:100%;margin:0;border:none;float:left}.mui-dtpicker{position:fixed;z-index:999999;border-top:solid 1px #ccc;bottom:0;-webkit-transform:translateY(300px)}.mui-dtpicker.mui-active{-webkit-transform:translateY(0)}.mui-dtpicker-active-for-page{overflow:hidden!important}.mui-android-5-1 .mui-dtpicker{bottom:-300px;-webkit-transition-property:bottom;-webkit-transform:none}.mui-android-5-1 .mui-dtpicker.mui-active{bottom:0;-webkit-transition-property:bottom;-webkit-transform:none}.mui-dtpicker-header{padding:6px;font-size:14px;color:#888}.mui-dtpicker-header button{font-size:9pt;padding:5px 10px}.mui-dtpicker-header button:last-child{float:right}.mui-dtpicker-body{position:relative;width:100%;height:200px}.mui-ios .mui-dtpicker-body{-webkit-perspective:75pc;perspective:75pc;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.mui-dtpicker-title h5{display:inline-block;width:20%;margin:0;padding:8px;text-align:center;border-top:solid 1px #ddd;background-color:#f0f0f0;border-bottom:solid 1px #ccc}[data-type=hour] [data-id=title-i],[data-type=hour] [data-id=picker-i],[data-type=month] [data-id=title-i],[data-type=month] [data-id=picker-d],[data-type=month] [data-id=title-d],[data-type=month] [data-id=picker-h],[data-type=month] [data-id=title-h],[data-type=month] [data-id=picker-i],[data-type=time] [data-id=picker-y],[data-type=time] [data-id=picker-m],[data-type=time] [data-id=picker-d],[data-type=time] [data-id=title-y],[data-type=time] [data-id=title-m],[data-type=time] [data-id=title-d],[data-type=date] [data-id=title-i],[data-type=date] [data-id=picker-h],[data-type=date] [data-id=title-h],[data-type=date] [data-id=picker-i]{display:none}.mui-dtpicker .mui-picker{width:20%;height:100%;margin:0;float:left;border:none}[data-type=hour] [data-id=picker-h],[data-type=hour] [data-id=title-h],[data-type=datetime] [data-id=picker-h],[data-type=datetime] [data-id=title-h]{border-left:dotted 1px #ccc}[data-type=datetime] .mui-picker,[data-type=time] .mui-dtpicker-title h5{width:20%}[data-type=date] .mui-dtpicker-title h5,[data-type=date] .mui-picker{width:33.3%}[data-type=hour] .mui-dtpicker-title h5,[data-type=hour] .mui-picker{width:25%}[data-type=month] .mui-dtpicker-title h5,[data-type=month] .mui-picker,[data-type=time] .mui-dtpicker-title h5,[data-type=time] .mui-picker{width:50%}

7
public/vender/mui/mui.picker.min.js

File diff suppressed because one or more lines are too long

7
public/vender/qrcode.js

File diff suppressed because one or more lines are too long

2145
public/vender/requirejs/require.js

File diff suppressed because it is too large

519
public/vender/signature/jSignature.CompressorSVG.js

@ -0,0 +1,519 @@
/** @license
jSignature v2 SVG export plugin.
*/
/**
Copyright (c) 2012 Willow Systems Corp http://willow-systems.com
MIT License <http://www.opensource.org/licenses/mit-license.php>
*/
;(function(){
'use strict'
/** @preserve
Simplify.js BSD
(c) 2012, Vladimir Agafonkin
mourner.github.com/simplify-js
*/
;(function(a,b){function c(a,b){var c=a.x-b.x,d=a.y-b.y;return c*c+d*d}function d(a,b,c){var d=b.x,e=b.y,f=c.x-d,g=c.y-e,h;if(f!==0||g!==0)h=((a.x-d)*f+(a.y-e)*g)/(f*f+g*g),h>1?(d=c.x,e=c.y):h>0&&(d+=f*h,e+=g*h);return f=a.x-d,g=a.y-e,f*f+g*g}function e(a,b){var d,e=a.length,f,g=a[0],h=[g];for(d=1;d<e;d++)f=a[d],c(f,g)>b&&(h.push(f),g=f);return g!==f&&h.push(f),h}function f(a,c){var e=a.length,f=typeof Uint8Array!=b+""?Uint8Array:Array,g=new f(e),h=0,i=e-1,j,k,l,m,n=[],o=[],p=[];g[h]=g[i]=1;while(i){k=0;for(j=h+1;j<i;j++)l=d(a[j],a[h],a[i]),l>k&&(m=j,k=l);k>c&&(g[m]=1,n.push(h),o.push(m),n.push(m),o.push(i)),h=n.pop(),i=o.pop()}for(j=0;j<e;j++)g[j]&&p.push(a[j]);return p}"use strict";var g=a;g.simplify=function(a,c,d){var g=c!==b?c*c:1;return d||(a=e(a,g)),a=f(a,g),a}})(window);
/**
Vector class. Allows us to simplify representation and manipulation of coordinate-pair
representing shift against (0, 0)
@public
@class
@param
@returns {Type}
*/
function Vector(x,y){
this.x = x
this.y = y
this.reverse = function(){
return new this.constructor(
this.x * -1
, this.y * -1
)
}
this._length = null
this.getLength = function(){
if (!this._length){
this._length = Math.sqrt( Math.pow(this.x, 2) + Math.pow(this.y, 2) )
}
return this._length
}
var polarity = function (e){
return Math.round(e / Math.abs(e))
}
this.resizeTo = function(length){
// proportionally changes x,y such that the hypotenuse (vector length) is = new length
if (this.x === 0 && this.y === 0){
this._length = 0
} else if (this.x === 0){
this._length = length
this.y = length * polarity(this.y)
} else if(this.y === 0){
this._length = length
this.x = length * polarity(this.x)
} else {
var proportion = Math.abs(this.y / this.x)
, x = Math.sqrt(Math.pow(length, 2) / (1 + Math.pow(proportion, 2)))
, y = proportion * x
this._length = length
this.x = x * polarity(this.x)
this.y = y * polarity(this.y)
}
return this
}
/**
* Calculates the angle between 'this' vector and another.
* @public
* @function
* @returns {Number} The angle between the two vectors as measured in PI.
*/
this.angleTo = function(vectorB) {
var divisor = this.getLength() * vectorB.getLength()
if (divisor === 0) {
return 0
} else {
// JavaScript floating point math is screwed up.
// because of it, the core of the formula can, on occasion, have values
// over 1.0 and below -1.0.
return Math.acos(
Math.min(
Math.max(
( this.x * vectorB.x + this.y * vectorB.y ) / divisor
, -1.0
)
, 1.0
)
) / Math.PI
}
}
}
function Point(x,y){
this.x = x
this.y = y
this.getVectorToCoordinates = function (x, y) {
return new Vector(x - this.x, y - this.y)
}
this.getVectorFromCoordinates = function (x, y) {
return this.getVectorToCoordinates(x, y).reverse()
}
this.getVectorToPoint = function (point) {
return new Vector(point.x - this.x, point.y - this.y)
}
this.getVectorFromPoint = function (point) {
return this.getVectorToPoint(point).reverse()
}
}
/**
Allows one to round a number to arbitrary precision.
Math.round() rounds to whole only.
Number.toFixed(precision) returns a string.
I need float to float, but with arbitrary precision, hence:
@public
@function
@param number {Number}
@param position {Number} number of digits right of decimal point to keep. If negative, rounding to the left of decimal.
@returns {Type}
*/
function round (number, position){
var tmp = Math.pow(10, position)
return Math.round( number * tmp ) / tmp
}
// /**
// * This is a simple, points-to-lines (not curves) renderer.
// * Keeping it around so we can activate it from time to time and see
// * if smoothing logic is off much.
// * @public
// * @function
// * @returns {String} Like so "l 1 2 3 5' with stroke as long line chain.
// */
// function compressstroke(stroke, shiftx, shifty){
// // we combine strokes data into string like this:
// // 'M 53 7 l 1 2 3 4 -5 -6 5 -6'
// // see SVG documentation for Path element's 'd' argument.
// var lastx = stroke.x[0]
// , lasty = stroke.y[0]
// , i
// , l = stroke.x.length
// , answer = ['M', lastx - shiftx, lasty - shifty, 'l']
//
// if (l === 1){
// // meaning this was just a DOT, not a stroke.
// // instead of creating a circle, we just create a short line
// answer.concat(1, -1)
// } else {
// for(i = 1; i < l; i++){
// answer = answer.concat(stroke.x[i] - lastx, stroke.y[i] - lasty)
// lastx = stroke.x[i]
// lasty = stroke.y[i]
// }
// }
// return answer.join(' ')
// }
function segmentToCurve(stroke, positionInStroke, lineCurveThreshold){
'use strict'
// long lines (ones with many pixels between them) do not look good when they are part of a large curvy stroke.
// You know, the jaggedy crocodile spine instead of a pretty, smooth curve. Yuck!
// We want to approximate pretty curves in-place of those ugly lines.
// To approximate a very nice curve we need to know the direction of line before and after.
// Hence, on long lines we actually wait for another point beyond it to come back from
// mousemoved before we draw this curve.
// So for "prior curve" to be calc'ed we need 4 points
// A, B, C, D (we are on D now, A is 3 points in the past.)
// and 3 lines:
// pre-line (from points A to B),
// this line (from points B to C), (we call it "this" because if it was not yet, it's the only one we can draw for sure.)
// post-line (from points C to D) (even through D point is 'current' we don't know how we can draw it yet)
//
// Well, actually, we don't need to *know* the point A, just the vector A->B
// Again, we can only derive curve between points positionInStroke-1 and positionInStroke
// Thus, since we can only draw a line if we know one point ahead of it, we need to shift our focus one point ahead.
positionInStroke += 1
// Let's hope the code that calls us knows we do that and does not call us with positionInStroke = index of last point.
var Cpoint = new Point(stroke.x[positionInStroke-1], stroke.y[positionInStroke-1])
, Dpoint = new Point(stroke.x[positionInStroke], stroke.y[positionInStroke])
, CDvector = Cpoint.getVectorToPoint(Dpoint)
// Again, we have a chance here to draw only PREVIOUS line segment - BC
// So, let's start with BC curve.
// if there is only 2 points in stroke array (C, D), we don't have "history" long enough to have point B, let alone point A.
// so positionInStroke should start with 2, ie
// we are here when there are at least 3 points in stroke array.
var Bpoint = new Point(stroke.x[positionInStroke-2], stroke.y[positionInStroke-2])
, BCvector = Bpoint.getVectorToPoint(Cpoint)
, ABvector
, rounding = 2
if ( BCvector.getLength() > lineCurveThreshold ){
// Yey! Pretty curves, here we come!
if(positionInStroke > 2) {
ABvector = (new Point(stroke.x[positionInStroke-3], stroke.y[positionInStroke-3])).getVectorToPoint(Bpoint)
} else {
ABvector = new Vector(0,0)
}
var minlenfraction = 0.05
, maxlen = BCvector.getLength() * 0.35
, ABCangle = BCvector.angleTo(ABvector.reverse())
, BCDangle = CDvector.angleTo(BCvector.reverse())
, BtoCP1vector = new Vector(ABvector.x + BCvector.x, ABvector.y + BCvector.y).resizeTo(
Math.max(minlenfraction, ABCangle) * maxlen
)
, CtoCP2vector = (new Vector(BCvector.x + CDvector.x, BCvector.y + CDvector.y)).reverse().resizeTo(
Math.max(minlenfraction, BCDangle) * maxlen
)
, BtoCP2vector = new Vector(BCvector.x + CtoCP2vector.x, BCvector.y + CtoCP2vector.y)
// returing curve for BC segment
// all coords are vectors against Bpoint
return [
'c' // bezier curve
, round( BtoCP1vector.x, rounding )
, round( BtoCP1vector.y, rounding )
, round( BtoCP2vector.x, rounding )
, round( BtoCP2vector.y, rounding )
, round( BCvector.x, rounding )
, round( BCvector.y, rounding )
]
} else {
return [
'l' // line
, round( BCvector.x, rounding )
, round( BCvector.y, rounding )
]
}
}
function lastSegmentToCurve(stroke, lineCurveThreshold){
'use strict'
// Here we tidy up things left unfinished
// What's left unfinished there is the curve between the last points
// in the stroke
// We can also be called when there is only one point in the stroke (meaning, the
// stroke was just a dot), in which case there is nothing for us to do.
// So for "this curve" to be calc'ed we need 3 points
// A, B, C
// and 2 lines:
// pre-line (from points A to B),
// this line (from points B to C)
// Well, actually, we don't need to *know* the point A, just the vector A->B
// so, we really need points B, C and AB vector.
var positionInStroke = stroke.x.length - 1
// there must be at least 2 points in the stroke.for us to work. Hope calling code checks for that.
var Cpoint = new Point(stroke.x[positionInStroke], stroke.y[positionInStroke])
, Bpoint = new Point(stroke.x[positionInStroke-1], stroke.y[positionInStroke-1])
, BCvector = Bpoint.getVectorToPoint(Cpoint)
, rounding = 2
if (positionInStroke > 1 && BCvector.getLength() > lineCurveThreshold){
// we have at least 3 elems in stroke
var ABvector = (new Point(stroke.x[positionInStroke-2], stroke.y[positionInStroke-2])).getVectorToPoint(Bpoint)
, ABCangle = BCvector.angleTo(ABvector.reverse())
, minlenfraction = 0.05
, maxlen = BCvector.getLength() * 0.35
, BtoCP1vector = new Vector(ABvector.x + BCvector.x, ABvector.y + BCvector.y).resizeTo(
Math.max(minlenfraction, ABCangle) * maxlen
)
return [
'c' // bezier curve
, round( BtoCP1vector.x, rounding )
, round( BtoCP1vector.y, rounding )
, round( BCvector.x, rounding ) // CP2 is same as Cpoint
, round( BCvector.y, rounding ) // CP2 is same as Cpoint
, round( BCvector.x, rounding )
, round( BCvector.y, rounding )
]
} else {
// Since there is no AB leg, there is no curve to draw. This is just line
return [
'l' // simple line
, round( BCvector.x, rounding )
, round( BCvector.y, rounding )
]
}
}
function addstroke(stroke, shiftx, shifty){
'use strict'
// we combine strokes data into string like this:
// 'M 53 7 l 1 2 c 3 4 -5 -6 5 -6'
// see SVG documentation for Path element's 'd' argument.
var lines = [
'M' // move to
, round( (stroke.x[0] - shiftx), 2)
, round( (stroke.y[0] - shifty), 2)
]
// processing all points but first and last.
, i = 1 // index zero item in there is STARTING point. we already extracted it.
, l = stroke.x.length - 1 // this is a trick. We are leaving last point coordinates for separate processing.
, lineCurveThreshold = 1
for(; i < l; i++){
lines.push.apply(lines, segmentToCurve(stroke, i, lineCurveThreshold))
}
if (l > 0 /* effectively more than 1, since we "-1" above */){
lines.push.apply(lines, lastSegmentToCurve(stroke, i, lineCurveThreshold))
} else if (l === 0){
// meaning we only have ONE point in the stroke (and otherwise refer to the stroke as "dot")
lines.push.apply(lines, ['l' , 1, 1])
}
return lines.join(' ')
}
function simplifystroke(stroke){
var d = []
, newstroke = {'x':[], 'y':[]}
, i, l
for (i = 0, l = stroke.x.length; i < l; i++){
d.push({'x':stroke.x[i], 'y':stroke.y[i]})
}
d = simplify(d, 0.7, true)
for (i = 0, l = d.length; i < l; i++){
newstroke.x.push(d[i].x)
newstroke.y.push(d[i].y)
}
return newstroke
}
// generate SVG style from settings
function styleFromSettings(settings){
var styles = [];
var meta = [
// ["style attr", "key in settings", "default value"]
["fill", undefined, "none"],
["stroke", "color", "#000000"],
["stroke-width", "lineWidth", 2],
["stroke-linecap", undefined, "round"],
["stroke-linejoin", undefined, "round"]
];
for (var i = meta.length - 1; i >= 0; i--){
var attr = meta[i][0]
, key = meta[i][1]
, defaultVal = meta[i][2];
styles.push(attr + '="' + (key in settings && settings[key] ? settings[key] : defaultVal) + '"');
}
return styles.join(' ');
}
function compressstrokes(data, settings){
'use strict'
var answer = [
'<?xml version="1.0" encoding="UTF-8" standalone="no"?>'
, '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">'
]
, i , l = data.length
, stroke
, xlimits = []
, ylimits = []
, sizex = 0
, sizey = 0
, shiftx = 0
, shifty = 0
, minx, maxx, miny, maxy, padding = 1
, simplifieddata = []
if(l !== 0){
for(i = 0; i < l; i++){
stroke = simplifystroke( data[i] )
simplifieddata.push(stroke)
xlimits = xlimits.concat(stroke.x)
ylimits = ylimits.concat(stroke.y)
}
minx = Math.min.apply(null, xlimits) - padding
maxx = Math.max.apply(null, xlimits) + padding
miny = Math.min.apply(null, ylimits) - padding
maxy = Math.max.apply(null, ylimits) + padding
shiftx = minx < 0? 0 : minx
shifty = miny < 0? 0 : miny
sizex = maxx - minx
sizey = maxy - miny
}
answer.push(
'<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="'+
sizex.toString() +
'" height="'+
sizey.toString() +
'">'
)
// // This is a nice idea: use style declaration on top, and mark the lines with 'class="f"'
// // thus saving space in svg...
// // alas, many SVG renderers don't understand "class" and render the strokes in default "fill = black, no stroke" style. Ugh!!!
// // TODO: Rewrite ImageMagic / GraphicsMagic, InkScape, http://svg.codeplex.com/ to support style + class. until then, we hardcode the stroke style within the path.
// answer.push(
// '<style type="text/css"><![CDATA[.f {fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}]]></style>'
// )
// // This set is accompaniment to "simple line renderer" - compressstroke
// answer.push(
// '<style type="text/css"><![CDATA[.t {fill:none;stroke:#FF0000;stroke-width:2}]]></style>'
// )
// for(i = 0; i < l; i++){
// stroke = data[i]
// // This one is accompaniment to "simple line renderer"
// answer.push('<path class="t" d="'+ compressstroke(stroke, shiftx, shifty) +'"/>')
// }
for(i = 0, l = simplifieddata.length; i < l; i++){
stroke = simplifieddata[i]
answer.push('<path ' + styleFromSettings(settings) + ' d="'+ addstroke(stroke, shiftx, shifty) + '"/>')
}
answer.push('</svg>')
return answer.join('')
}
if (typeof btoa !== 'function')
{
var btoa = function(data) {
/** @preserve
base64 encoder
MIT, GPL
http://phpjs.org/functions/base64_encode
+ original by: Tyler Akins (http://rumkin.com)
+ improved by: Bayron Guevara
+ improved by: Thunder.m
+ improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ bugfixed by: Pellentesque Malesuada
+ improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ improved by: Rafal Kukawski (http://kukawski.pl)
*/
var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
, b64a = b64.split('')
, o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
ac = 0,
enc = "",
tmp_arr = [];
do { // pack three octets into four hexets
o1 = data.charCodeAt(i++);
o2 = data.charCodeAt(i++);
o3 = data.charCodeAt(i++);
bits = o1 << 16 | o2 << 8 | o3;
h1 = bits >> 18 & 0x3f;
h2 = bits >> 12 & 0x3f;
h3 = bits >> 6 & 0x3f;
h4 = bits & 0x3f;
// use hexets to index into b64, and append result to encoded string
tmp_arr[ac++] = b64a[h1] + b64a[h2] + b64a[h3] + b64a[h4];
} while (i < data.length);
enc = tmp_arr.join('');
var r = data.length % 3;
return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3);
// end of base64 encoder MIT, GPL
}
}
var unencodedmime = 'image/svg+xml'
function getUnencodedSVG(data, settings){
return [unencodedmime , compressstrokes(data, settings)];
}
var base64encodedmime = 'image/svg+xml;base64'
function getBase64encodedSVG(data, settings){
return [base64encodedmime , btoa( compressstrokes(data, settings) )];
}
function Initializer($){
var mothership = $.fn['jSignature']
mothership(
'addPlugin'
,'export'
,'svg' // alias
,getUnencodedSVG
)
mothership(
'addPlugin'
,'export'
,unencodedmime // full name
,getUnencodedSVG
)
mothership(
'addPlugin'
,'export'
,'svgbase64' // alias
,getBase64encodedSVG
)
mothership(
'addPlugin'
,'export'
,base64encodedmime // full name
,getBase64encodedSVG
)
}
// //Because plugins are minified together with jSignature, multiple defines per (minified) file blow up and dont make sense
// //Need to revisit this later.
if(typeof $ === 'undefined') {throw new Error("We need jQuery for some of the functionality. jQuery is not detected. Failing to initialize...")}
Initializer($)
})();

165
public/vender/signature/jSignature.UndoButton.js

@ -0,0 +1,165 @@
/** @license
jSignature v2 jSignature's Undo Button and undo functionality plugin
*/
/**
Copyright (c) 2011 Willow Systems Corp http://willow-systems.com
MIT License <http://www.opensource.org/licenses/mit-license.php>
*/
;(function(){
var apinamespace = 'jSignature'
function attachHandlers(buttonRenderer, apinamespace, extensionName) {
var $undoButton = buttonRenderer.call(this)
;(function(jSignatureInstance, $undoButton, apinamespace) {
jSignatureInstance.events.subscribe(
apinamespace + '.change'
, function(){
if (jSignatureInstance.dataEngine.data.length) {
$undoButton.show()
} else {
$undoButton.hide()
}
}
)
})( this, $undoButton, apinamespace )
;(function(jSignatureInstance, $undoButton, apinamespace) {
var eventName = apinamespace + '.undo'
$undoButton.bind('click', function(){
jSignatureInstance.events.publish(eventName)
})
// This one creates new "undo" event listener to jSignature instance
// It handles the actual undo-ing.
jSignatureInstance.events.subscribe(
eventName
, function(){
var data = jSignatureInstance.dataEngine.data
if (data.length) {
data.pop()
jSignatureInstance.resetCanvas(data)
}
}
)
})(
this
, $undoButton
, this.events.topics.hasOwnProperty( apinamespace + '.undo' ) ?
// oops, seems some other plugin or code has already claimed "jSignature.undo" event
// we will use this extension's name for event name prefix
extensionName :
// Great! we will use 'jSignature' for event name prefix.
apinamespace
)
}
function ExtensionInitializer(extensionName){
// we are called very early in instance's life.
// right after the settings are resolved and
// jSignatureInstance.events is created
// and right before first ("jSignature.initializing") event is called.
// You don't really need to manupilate
// jSignatureInstance directly, just attach
// a bunch of events to jSignatureInstance.events
// (look at the source of jSignatureClass to see when these fire)
// and your special pieces of code will attach by themselves.
// this function runs every time a new instance is set up.
// this means every var you create will live only for one instance
// unless you attach it to something outside, like "window."
// and pick it up later from there.
// when globalEvents' events fire, 'this' is globalEvents object
// when jSignatureInstance's events fire, 'this' is jSignatureInstance
// Here,
// this = is new jSignatureClass's instance.
// The way you COULD approch setting this up is:
// if you have multistep set up, attach event to "jSignature.initializing"
// that attaches other events to be fired further lower the init stream.
// Or, if you know for sure you rely on only one jSignatureInstance's event,
// just attach to it directly
var apinamespace = 'jSignature'
this.events.subscribe(
// name of the event
apinamespace + '.attachingEventHandlers'
// event handlers, can pass args too, but in majority of cases,
// 'this' which is jSignatureClass object instance pointer is enough to get by.
, function(){
// hooking up "undo" button to lower edge of Canvas.
// but only when options passed to jSignature('init', options)
// contain "undoButton":renderingFunction pair.
// or "undoButton":true (in which case default, internal rendering fn is used)
if (this.settings[extensionName]) {
var oursettings = this.settings[extensionName]
if (typeof oursettings !== 'function') {
// we make it a function.
// we allow people to override the button rendering code,
// but when developler is OK with default look (and just passes "truthy" value)
// this defines default look for the button:
// centered against canvas, hanging on its lower side.
oursettings = function(){
// this === jSignatureInstance
var undoButtonSytle = 'position:absolute;display:none;margin:0 !important;top:auto'
, $undoButton = $('<input type="button" value="撤销" style="'+undoButtonSytle+'" />')
.appendTo(this.$controlbarLower)
// this centers the button against the canvas.
var buttonWidth = $undoButton.width()
$undoButton.css(
'left'
, Math.round(( this.canvas.width - buttonWidth ) / 2)
)
// IE 7 grows the button. Correcting for that.
if ( buttonWidth !== $undoButton.width() ) {
$undoButton.width(buttonWidth)
}
return $undoButton
}
}
attachHandlers.call(
this
, oursettings
, apinamespace
, extensionName
)
}
}
)
}
var ExtensionAttacher = function(){
$.fn[apinamespace](
'addPlugin'
,'instance' // type of plugin
,'UndoButton' // extension name
,ExtensionInitializer
)
}
// //Because plugins are minified together with jSignature, multiple defines per (minified) file blow up and dont make sense
// //Need to revisit this later.
// if ( typeof define === "function" && define.amd != null) {
// // AMD-loader compatible resource declaration
// // you need to call this one with jQuery as argument.
// define(function(){return Initializer} )
// } else {
ExtensionAttacher()
// }
})();

1486
public/vender/signature/jSignature.js

File diff suppressed because it is too large

5094
public/vender/validator.js

File diff suppressed because it is too large

5659
public/vender/weui/weui.css

File diff suppressed because one or more lines are too long

5
public/vender/weui/weui.min.css

File diff suppressed because one or more lines are too long

12
public/vender/weui/weui.min.js

File diff suppressed because one or more lines are too long

15
src/assets/scss/common.scss

@ -80,6 +80,21 @@ img {
line-height: $base--line-height !important;
}
.flex{
display: flex;
}
.flex1{
flex: 1;
}
.a-c{
align-items: center;
}
.j-c{
justify-content: center;
}
.j-b{
justify-content: space-between;
}
/* Reset element-ui
------------------------------ */

17
src/components/formEditor/Editor.vue

@ -0,0 +1,17 @@
<template>
<iframe src="editor.html" v-bind="objectOfAttrs" />
</template>
<script>
export default {
data() {
return {
objectOfAttrs: {
width: '100%',
height: '90%',
frameborder: 0
}
}
}
}
</script>

53
src/page-subspecialty/views/modules/template/formManage/index.vue

@ -0,0 +1,53 @@
<template>
<div class="flex formManage">
<div class="leftContent">新增表单</div>
<div class="flex1" style="background: #FFFFFF;padding:0 10px">
<div style="padding: 10px 0">
<el-button type="primary" size="mini" @click="saveForm">保存</el-button>
<el-button type="primary" size="mini" @click="setForm">设置</el-button>
</div>
<editor mode="design" @after-init.native="onAfterInit" />
</div>
</div>
</template>
<script>
import Editor from '@/components/formEditor/Editor.vue'
export default {
name: 'Index',
components: { Editor },
data() {
return {
editor: null,
formList: []
}
},
methods: {
onAfterInit(e) {
this.editor = e.editor
this.editor.execCommand('new')
},
saveForm() {
const html = this.editor.getHtml()
console.log(this.editor.getBindObject())
window.sessionStorage.setItem('form', encodeURIComponent(html))
},
setForm() {
const html = decodeURIComponent(window.sessionStorage.getItem('form'))
this.editor.loadHtml(html)
this.editor.execCommand('design')
}
}
}
</script>
<style lang="scss" scoped>
.formManage{
width: 100%;
height: calc(100vh - 50px - 20px);
}
.leftContent{
width: 240px;
background: #fff;
margin-right: 10px;
}
</style>
Loading…
Cancel
Save