1552 lines
62 KiB
JavaScript
1552 lines
62 KiB
JavaScript
/*
|
||
* Author: 众产® https://ciy.cn/code
|
||
* Version: 0.2.8
|
||
*/
|
||
'use strict';
|
||
var ciycmpfunc = {};
|
||
ciyfn.file_uploads = function (maxcount, files, opn, fn) {
|
||
fn = fn || {};
|
||
var upcnt = 0;
|
||
console.log(files, opn);
|
||
for (var fi in files) {
|
||
if (typeof files[fi] != "object")
|
||
continue;
|
||
(function (gfile, tmt) {
|
||
setTimeout(function () {
|
||
upcnt++;
|
||
if (upcnt > maxcount)
|
||
return;
|
||
if (opn.maxkb > 0 && gfile.size > opn.maxkb * 1024)
|
||
return ciyfn.toast('不能上传大于' + opn.maxkb + 'KB 的文件<br/>当前文件大小: ' + toint(gfile.size / 1024) + 'KB');
|
||
var fext = ciyfn.file_ext(gfile.name);
|
||
if (opn.type) {
|
||
if (opn.type.indexOf(fext) == -1)
|
||
return ciyfn.toast('只能上传' + opn.type.join(',') + '文件');
|
||
}
|
||
var fread = new FileReader();
|
||
fread.readAsDataURL(gfile);
|
||
fread.onload = function () {
|
||
if (!ciyfn.isimg(fext))
|
||
return uploadfile(gfile);
|
||
var img = new Image();
|
||
img.src = fread.result;
|
||
img.onload = function () {
|
||
var width = 0;
|
||
var height = 0;
|
||
if (opn.imgwidth > 0) {
|
||
if (opn.imgwidth == opn.imgheight) {
|
||
width = height = Math.min(img.width, img.height, opn.imgwidth);
|
||
} else if (img.width > opn.imgwidth) {
|
||
width = opn.imgwidth;
|
||
if (opn.imgheight > 0)
|
||
height = opn.imgheight;
|
||
else
|
||
height = width * img.height / img.width;
|
||
}
|
||
}
|
||
var zipjpg = opn.zipjpg;
|
||
if (zipjpg > 0 && opn.zipext) {
|
||
if (opn.zipext.indexOf(fext) == -1)
|
||
zipjpg = 0;
|
||
}
|
||
if (width == 0 && zipjpg == 0 && !opn.watertext && !opn.fn_imgdraw)
|
||
return uploadfile(gfile);
|
||
if (width == 0) {
|
||
width = img.width;
|
||
height = img.height;
|
||
}
|
||
|
||
var canvas = document.createElement("canvas");
|
||
var ctx = canvas.getContext("2d");
|
||
var attrw = document.createAttribute("width");
|
||
attrw.nodeValue = width;
|
||
var attrh = document.createAttribute("height");
|
||
attrh.nodeValue = height;
|
||
canvas.setAttributeNode(attrw);
|
||
canvas.setAttributeNode(attrh);
|
||
ctx.drawImage(img, 0, 0, width, height);
|
||
if (typeof (opn.fn_imgdraw) == 'function')
|
||
opn.fn_imgdraw(canvas, ctx, img);
|
||
|
||
if (opn.watertext) {
|
||
ctx.font = opn.waterfont;
|
||
var fontheight = ctx.measureText('啊').width * 1.2;
|
||
var lines = opn.watertext.split('|');
|
||
var y = height - fontheight * lines.length;
|
||
for (var i in lines) {
|
||
ctx.fillStyle = '#000000';
|
||
ctx.fillText(lines[i], fontheight + 1, y + 1);
|
||
ctx.fillText(lines[i], fontheight - 1, y - 1);
|
||
ctx.fillStyle = '#fffdea';
|
||
ctx.fillText(lines[i], fontheight, y);
|
||
y += fontheight;
|
||
}
|
||
}
|
||
var name = gfile.name;
|
||
if (zipjpg > 0) {
|
||
var U = canvas.toDataURL("image/jpeg", zipjpg/100);
|
||
if (fext != 'JPG')
|
||
name = gfile.name + '.jpg';
|
||
}
|
||
else
|
||
var U = canvas.toDataURL();
|
||
var i = U.split(","),
|
||
I = i[0].match(/:(.*?);/)[1],
|
||
F = atob(i[1]),
|
||
J = F.length,
|
||
H = new Uint8Array(J);
|
||
while (J--) {
|
||
H[J] = F.charCodeAt(J)
|
||
}
|
||
uploadfile(new File([new Blob([H], { type: I })], name));
|
||
}
|
||
function uploadfile(gfile) {
|
||
var now = new Date();
|
||
var fext = ciyfn.file_ext(gfile.name);
|
||
var pathfile = opn.path + '/';
|
||
if (opn.fname)
|
||
pathfile += opn.fname + '.' + fext.toLowerCase() + '&rep=true';
|
||
else
|
||
pathfile += ciyfn.topad0(now.getHours()) + ciyfn.topad0(now.getMinutes()) + ciyfn.topad0(now.getSeconds()) + '_' + (1000 + Math.round(Math.random() * 8000)) + '.' + fext.toLowerCase();
|
||
if (opn.stor == '/') {
|
||
var postdata = new FormData();
|
||
postdata.append('file', gfile, gfile.name);
|
||
var xhr = new XMLHttpRequest();
|
||
xhr.open("POST", opn.action + ".upload&pathfile=" + pathfile, true);
|
||
xhr.setRequestHeader('ciyauth', ciyfn.getstorage('_' + ciy_vars.tokenfield));
|
||
xhr.setRequestHeader("X-Custom-Header", "CustomValue");
|
||
xhr.onload = function () {
|
||
var data = xhr.responseText;
|
||
var ind = data.indexOf('{');
|
||
if (ind > 0)
|
||
data = data.substring(ind);
|
||
var json = ciyfn.tojson(data);
|
||
if (json.code != 1) {
|
||
if (typeof (fn.fail) == 'function')
|
||
fn.fail(json, gfile);
|
||
return;
|
||
}
|
||
var newauth = xhr.getResponseHeader(ciy_vars.tokenfield);
|
||
if (newauth)
|
||
ciyfn.setstorage('_' + ciy_vars.tokenfield, newauth);
|
||
if (typeof (fn.success) == 'function')
|
||
fn.success(json.url, gfile);
|
||
};
|
||
xhr.onerror = function () {
|
||
if (typeof (fn.fail) == 'function')
|
||
fn.fail({ errmsg: '上传失败,网络连接异常' }, gfile);
|
||
};
|
||
xhr.upload.onprogress = function (event) {
|
||
if (typeof (fn.progress) != 'function')
|
||
return;
|
||
if (!event.lengthComputable)
|
||
return;
|
||
fn.progress(Math.round(event.loaded * 100 / event.total), gfile);
|
||
};
|
||
xhr.send(postdata);
|
||
} else {
|
||
ciyfn.callfunc(opn.action + ".s3&pathfile=" + pathfile + "&storselect=" + opn.stor, {}, function (json) {
|
||
var xhr = new XMLHttpRequest();
|
||
xhr.upload.addEventListener("progress", function (N) {
|
||
if (N.lengthComputable) {
|
||
var pct = Math.round(N.loaded * 100 / N.total);
|
||
if (typeof (fn.progress) == 'function')
|
||
fn.progress(pct, gfile);
|
||
}
|
||
}, false);
|
||
xhr.open(json.method, json.url, true);
|
||
for (var i in json.headers) {
|
||
xhr.setRequestHeader(i, json.headers[i]);
|
||
}
|
||
xhr.onreadystatechange = function () {
|
||
if (xhr.readyState == 4 && xhr.status == 200) {
|
||
if (typeof (fn.success) == 'function')
|
||
fn.success(opn.stor + pathfile, gfile);
|
||
} else if (xhr.status != 200) {
|
||
if (typeof (fn.fail) == 'function')
|
||
fn.fail({ errmsg: '云存储上传失败:' + xhr.status }, gfile);
|
||
}
|
||
};
|
||
xhr.send(gfile);
|
||
});
|
||
}
|
||
}
|
||
}
|
||
}, tmt);
|
||
})(files[fi], 1 + fi * 1050);
|
||
}
|
||
}
|
||
ciycmpfunc.ciydatetime = function (opn) {
|
||
var thos = this;
|
||
this.onchange = opn.onchange;
|
||
opn.initevent = opn.initevent || opn.dom.hasattr('initevent');
|
||
opn.hasmore = opn.hasmore || opn.dom.hasattr('hasmore');
|
||
opn.placeholder = ciyfn.lang(opn.placeholder || opn.dom.attr('placeholder') || '请选择');
|
||
opn.mindate = tostamp(opn.mindate || opn.dom.attr('mindate') || 0);
|
||
opn.maxdate = tostamp(opn.maxdate || opn.dom.attr('maxdate') || 0);
|
||
opn.type = opn.type || opn.dom.attr('type') || 'date';
|
||
opn.inpwidth = '7em';
|
||
if (opn.type == 'datetime')
|
||
opn.inpwidth = '9.5em';
|
||
else if (opn.type == 'month')
|
||
opn.inpwidth = '5em';
|
||
var csstxt = '';
|
||
csstxt += 'ciy-datetime>._pulldt{user-select: none;position: fixed;top: 0;left: 0;right: 0;bottom: 0;display:none;z-index:100000;}';
|
||
csstxt += 'ciy-datetime>._pulldt.top>._dt{flex-direction: column-reverse;}';
|
||
csstxt += 'ciy-datetime>._pulldt.top>._mainsel{flex-direction: column-reverse;}';
|
||
csstxt += 'ciy-datetime>._pulldt.top>._dt>._timebtn{align-items: flex-end;}';
|
||
csstxt += 'ciy-datetime>._pulldt.top>._dt>._timebtn>._timerit{flex-direction: column-reverse;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt{display: flex;flex-direction: column;width: 25em;padding: 0.5em;position: fixed;background:var(--bg1);box-shadow: rgb(204 204 204) 1px 1px 2px;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel{display: flex;flex-direction: column;height: 19em;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._timebtn{display: flex;text-align:center;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._timebtn>._time{width: 5.5em;border: 1px solid var(--bg4);border-radius: 0.5em;margin: 0 0.2em;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._timebtn>._time.active{border: 1px solid var(--man5);}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._timebtn>._time>div{height:3em;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._timebtn>._timerit{display: flex;flex-direction: column;margin-left:auto;text-align: right;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._timebtn>._timedate>div>._year{font-size:1.3em;padding: 0.4em 0;line-height: 1em;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._timebtn>._time>span{font-size:0.8em;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._timebtn>._time>div>span{font-size: 2em;padding-top: 0.3em;display: block;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel>div>._dateyear{display: flex;flex-wrap: wrap;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel>div>._dateyear>div{width: 33.3%;padding: 0.5em;line-height: 1.3em;text-align: center;font-size: 1.5em;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel>div>._dateyear>div>span{font-size: 0.5em;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel>div>._dateyear>div.active{color:var(--man5);}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel>div>._yeararrow{display: flex;justify-content: space-around;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel>div>._yeararrow>div{font-size:2em;cursor:pointer;letter-spacing: -0.6em;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel>div>._datemonth{display: flex;flex-wrap: wrap;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel>div>._datemonth>div{width: 33.3%;padding: 0.5em;line-height: 1.55em;text-align: center;font-size: 1.5em;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel>div>._datemonth>div>span{font-size: 0.5em;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel>div>._datemonth>div.active{color:var(--man5);}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel>div>.monthme{min-width: 2.5em;text-align: right;white-space: nowrap;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel>._datehour{display: flex;flex-wrap: wrap;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel>._datehour>div{width: 16.66%;padding: 0.5em;line-height: 2em;text-align: center;font-size: 1.5em;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel>._datehour>div.active{color:var(--man5);}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel>._dateminute1{display: flex;flex-wrap: wrap;padding: 2em 0;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel>._dateminute1>div{width: 16.66%;padding: 0.5em;line-height: 1.65em;text-align: center;font-size: 1.5em;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel>._dateminute1>div.active{color:var(--man5);}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel>._dateminute2{display: flex;flex-wrap: wrap;padding-top:2em;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel>._dateminute2>div{width: 20%;padding: 0.5em;line-height: 1.65em;text-align: center;font-size: 1.5em;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel>._dateminute2>div.active{color:var(--man5);}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel>div>._datehead{display: flex;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel>div>._datehead>div{flex:1;text-align:center;font-weight:bold;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel>div>._daterow{display: flex;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel>div>._daterow>div.allow{flex:1;text-align:center;border:1px solid transparent;border-radius: 0.5em;transition: all 0.3s;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel>div>._daterow>div.disable{flex:1;text-align:center;border:1px solid transparent;color:var(--bg5);}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel>div>._daterow>span{flex:1;}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel>div>._daterow>div.allow:hover{border:1px solid var(--man4);}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel>div>._daterow>div.allow.selected{border:1px solid var(--man6);color:var(--man5);}';
|
||
csstxt += 'ciy-datetime>._pulldt>._dt>._mainsel>div>.arrow{font-size:2em;cursor:pointer;}';
|
||
opn.dom.setstyle('ciy_datetime', csstxt);
|
||
var html = '';
|
||
html += '<input name="' + opn.name + '" type="hidden"/>';
|
||
html += '<input ' + (opn.hasmore ? 'name="' + opn.name + '_dt"' : '') + ' type="text" placeholder="' + opn.placeholder + '" autocomplete="off" style="width:' + opn.inpwidth + '"/>';
|
||
html += '<div class="_pulldt"><div class="_dt"><div class="_timebtn"></div><div class="_mainsel"></div></div></div>';
|
||
opn.dom.html(html);
|
||
var valuedom = opn.dom.children(0);
|
||
var valnamedom = opn.dom.children(1);
|
||
var pulldom = opn.dom.children(2);
|
||
var dtdom = pulldom.children(0);
|
||
var timebtndom = dtdom.children(0);
|
||
var mainseldom = dtdom.children(1);
|
||
var lishow = false;
|
||
var dtimeshow = new Date();//界面日期
|
||
var dtimevalue = new Date();//选中时间
|
||
var styear = 0;
|
||
this.setvalue = function (newvalue, from) {
|
||
if (newvalue !== undefined) {
|
||
this.value = tostamp(newvalue);
|
||
}
|
||
var dat = '';
|
||
if (opn.type == 'datetime') {
|
||
dat = ciyfn.todatetime(this.value, 'Y-m-d H:i', '');
|
||
if (dat)
|
||
this.value = tostamp(dat + ':00');
|
||
}
|
||
else if (opn.type == 'month') {
|
||
dat = ciyfn.todatetime(this.value, 'Y-m', '');
|
||
if (dat)
|
||
this.value = tostamp(dat + '-1 00:00:00');
|
||
} else {
|
||
dat = ciyfn.todatetime(this.value, 'Y-m-d', '');
|
||
if (dat)
|
||
this.value = tostamp(dat + ' 00:00:00');
|
||
}
|
||
valuedom.val(this.value);
|
||
valnamedom.val(dat);
|
||
if (this.value != 0) {
|
||
dtimeshow = new Date(this.value * 1000);
|
||
dtimevalue = new Date(this.value * 1000);
|
||
}
|
||
if (from && typeof (this.onchange) == 'function')
|
||
this.onchange({ name: opn.name, dom: opn.dom, from: from, value: this.value });
|
||
}
|
||
this.setvalue(opn.value, opn.initevent ? 'init' : '');
|
||
valnamedom.on('click', function (e) {
|
||
thos.showdt();
|
||
});
|
||
valnamedom.on('keydown', function (e) {
|
||
thos.hidedt();
|
||
});
|
||
valnamedom.on('blur', function (e) {
|
||
var val = tostamp(e.currentTarget.value);
|
||
if (val == thos.value)
|
||
return;
|
||
thos.value = val;
|
||
thos.setvalue(undefined, 'blur');
|
||
});
|
||
pulldom.on('click', function (e) {
|
||
e.stopPropagation();
|
||
thos.hidedt();
|
||
});
|
||
dtdom.on('click', function (e) {
|
||
e.stopPropagation();
|
||
});
|
||
dtdom.on('click', '._daterow>div.allow', function (e) {
|
||
var currdom = $5(e.currentTarget);
|
||
var year = toint(currdom.attr('data-year'));
|
||
if (year == 0)
|
||
return;
|
||
dtimeshow.setFullYear(year);
|
||
dtimeshow.setMonth(currdom.attr('data-month') - 1);
|
||
dtimeshow.setDate(currdom.attr('data-date'));
|
||
dtimevalue.setFullYear(year);
|
||
dtimevalue.setMonth(currdom.attr('data-month') - 1);
|
||
dtimevalue.setDate(currdom.attr('data-date'));
|
||
|
||
if (opn.type == 'datetime') {
|
||
$5('._daterow>div', dtdom).removeClass('selected');
|
||
currdom.addClass('selected');
|
||
}
|
||
else {
|
||
thos.value = tostamp(dtimevalue);
|
||
thos.hidedt();
|
||
thos.setvalue(undefined, 'click');
|
||
}
|
||
});
|
||
dtdom.on('click', '.yearprev', function (e) {
|
||
dtimeshow.setFullYear(dtimeshow.getFullYear() - 1);
|
||
showdate();
|
||
});
|
||
dtdom.on('click', '.yearnext', function (e) {
|
||
dtimeshow.setFullYear(dtimeshow.getFullYear() + 1);
|
||
showdate();
|
||
});
|
||
dtdom.on('click', '.yearme', function (e) {
|
||
styear = Math.floor(dtimeshow.getFullYear() / 10) * 10;
|
||
showdate('year');
|
||
});
|
||
dtdom.on('click', '.yprev', function (e) {
|
||
styear -= 10;
|
||
showdate('year');
|
||
});
|
||
dtdom.on('click', '.ynext', function (e) {
|
||
styear += 10;
|
||
showdate('year');
|
||
});
|
||
dtdom.on('click', '._dateyear>div', function (e) {
|
||
var year = toint(e.currentTarget.getAttribute('data-year'));
|
||
dtimeshow.setFullYear(year);
|
||
dtimevalue.setFullYear(year);
|
||
if (opn.type == 'month')
|
||
showdate('month');
|
||
else
|
||
showdate();
|
||
});
|
||
dtdom.on('click', '.monthprev', function (e) {
|
||
dtimeshow.setMonth(dtimeshow.getMonth() - 1);
|
||
showdate();
|
||
});
|
||
dtdom.on('click', '.monthnext', function (e) {
|
||
dtimeshow.setMonth(dtimeshow.getMonth() + 1);
|
||
showdate();
|
||
});
|
||
dtdom.on('click', '.monthme', function (e) {
|
||
showdate('month');
|
||
});
|
||
dtdom.on('click', '._datemonth>div', function (e) {
|
||
var month = toint(e.currentTarget.getAttribute('data-month'));
|
||
if (opn.type == 'month') {
|
||
dtimevalue.setDate(1);
|
||
dtimevalue.setMonth(month - 1);
|
||
thos.value = tostamp(dtimevalue);
|
||
thos.hidedt();
|
||
thos.setvalue(undefined, 'done');
|
||
return;
|
||
}
|
||
dtimeshow.setMonth(month - 1);
|
||
dtimevalue.setMonth(month - 1);
|
||
if (dtimevalue.getMonth() == month) {
|
||
dtimevalue.setDate(1);
|
||
dtimevalue.setMonth(month - 1);
|
||
dtimeshow.setDate(1);
|
||
dtimeshow.setMonth(month - 1);
|
||
}
|
||
showdate();
|
||
});
|
||
dtdom.on('click', '._timedate', function (e) {
|
||
showdate();
|
||
});
|
||
dtdom.on('click', '._timehour', function (e) {
|
||
showhour();
|
||
});
|
||
dtdom.on('click', '._timeminute', function (e) {
|
||
showminute();
|
||
});
|
||
dtdom.on('click', '._datehour>div', function (e) {
|
||
var hour = toint(e.currentTarget.getAttribute('data-hour'));
|
||
dtimeshow.setHours(hour);
|
||
dtimevalue.setHours(hour);
|
||
showhour();
|
||
});
|
||
dtdom.on('click', '._dateminute1>div', function (e) {
|
||
var minute = toint(e.currentTarget.getAttribute('data-minute1')) + (dtimevalue.getMinutes() % 10);
|
||
dtimeshow.setMinutes(minute);
|
||
dtimevalue.setMinutes(minute);
|
||
showminute();
|
||
});
|
||
dtdom.on('click', '._dateminute2>div', function (e) {
|
||
var minute = toint(e.currentTarget.getAttribute('data-minute2')) + toint(dtimevalue.getMinutes() / 10) * 10;
|
||
dtimeshow.setMinutes(minute);
|
||
dtimevalue.setMinutes(minute);
|
||
showminute();
|
||
});
|
||
dtdom.on('click', '.totime', function (e) {
|
||
dtimeshow = new Date();
|
||
dtimevalue = new Date();
|
||
$5('._timehour>div', dtdom).html('<span>' + ciyfn.todatetime(dtimevalue, 'H') + '</span>');
|
||
$5('._timeminute>div', dtdom).html('<span>' + ciyfn.todatetime(dtimevalue, 'i') + '</span>');
|
||
showdate();
|
||
});
|
||
dtdom.on('click', '.tomonth', function (e) {
|
||
dtimevalue.setFullYear(new Date().getFullYear());
|
||
dtimevalue.setMonth(new Date().getMonth());
|
||
dtimeshow = dtimevalue;
|
||
showdate('month');
|
||
});
|
||
dtdom.on('click', '.today', function (e) {
|
||
dtimeshow = new Date();
|
||
dtimevalue = new Date();
|
||
dtimevalue.setHours(0);
|
||
dtimevalue.setMinutes(0);
|
||
dtimevalue.setSeconds(0);
|
||
showdate();
|
||
});
|
||
dtdom.on('click', '.btn.clear', function (e) {
|
||
thos.value = 0;
|
||
thos.hidedt();
|
||
thos.setvalue(undefined, 'clear');
|
||
});
|
||
dtdom.on('click', '.btn.done', function (e) {
|
||
thos.value = tostamp(dtimevalue);
|
||
thos.hidedt();
|
||
thos.setvalue(undefined, 'done');
|
||
});
|
||
this.hidedt = function () {
|
||
if (!lishow)
|
||
return;
|
||
window.removeEventListener('scroll', thos.hidedt);
|
||
lishow = false;
|
||
pulldom.hide('up', 0.3);
|
||
}
|
||
this.showdt = function () {
|
||
if (opn.type == 'datetime') {
|
||
var html = '';
|
||
html += '<div class="_time _timedate"><div><div class="_year">' + ciyfn.todatetime(dtimevalue, 'Y') + '</div><div style="line-height:1em;">' + ciyfn.todatetime(dtimevalue, 'm-d') + '</div></div><span>' + ciyfn.lang('选择日期') + '</span></div>'
|
||
html += '<div class="_time _timehour"><div><span>' + ciyfn.todatetime(dtimevalue, 'H') + '</span></div><span>' + ciyfn.lang('选择小时') + '</span></div>'
|
||
html += '<div class="_time _timeminute"><div><span>' + ciyfn.todatetime(dtimevalue, 'i') + '</span></div><span>' + ciyfn.lang('选择分钟') + '</span></div>'
|
||
html += '<div class="_timerit"><div><a class="btn sm done">' + ciyfn.lang('完成') + '</a></div><div><a class="btn sm def clear">' + ciyfn.lang('清空') + '</a></div></div>'
|
||
timebtndom.html(html);
|
||
showdate();
|
||
} else if (opn.type == 'month') {
|
||
showdate('month');
|
||
} else {
|
||
showdate();
|
||
}
|
||
if (!lishow) {
|
||
lishow = true;
|
||
window.addEventListener('scroll', thos.hidedt);
|
||
}
|
||
pulldom.css({ display: 'block' });
|
||
var valpos = valnamedom.rect();
|
||
var lef = valpos.left;
|
||
var winwidth = opn.dom.winwidth();
|
||
var winheight = opn.dom.winheight();
|
||
if (lef + dtdom.width() + 20 > winwidth)
|
||
lef = winwidth - dtdom.width() - 20;
|
||
if (lef < 20)
|
||
lef = 20;
|
||
if (winheight < valpos.top + valpos.height + dtdom.height()) {
|
||
pulldom.addClass('top');
|
||
dtdom.css({ top: 'auto', bottom: (winheight - valpos.top) + 'px', left: lef + 'px' });
|
||
} else {
|
||
pulldom.removeClass('top');
|
||
dtdom.css({ bottom: 'auto', top: (valpos.top + valpos.height) + 'px', left: lef + 'px' });
|
||
}
|
||
pulldom.show('up', 0.1);
|
||
}
|
||
function showdate(op) { //op: month,year
|
||
$5('._timedate>div', dtdom).html('<div class="_year">' + ciyfn.todatetime(dtimevalue, 'Y') + '</div><div style="line-height:1em;">' + ciyfn.todatetime(dtimevalue, 'm-d') + '</div>');
|
||
$5('._time', dtdom).removeClass('active');
|
||
$5('._timedate', dtdom).addClass('active');
|
||
var year = dtimeshow.getFullYear();
|
||
var month = dtimeshow.getMonth() + 1;
|
||
var html = '';
|
||
html += '<div style="display:flex;">';
|
||
html += '<div class="arrow yearprev" style="margin-left:0.5em;">﹤</div><div class="yearme">' + year + ' ' + ciyfn.lang('年') + '</div><div class="arrow yearnext">﹥</div>';
|
||
if (opn.type != 'month')
|
||
html += '<div class="arrow monthprev" style="margin-left:1em;">﹤</div><div class="monthme">' + month + ' ' + ciyfn.lang('月') + '</div><div class="arrow monthnext">﹥</div>';
|
||
if (opn.type == 'datetime')
|
||
html += '<div class="totime" style="margin-left:auto;margin-right:1em;">' + ciyfn.lang('此刻') + '</div>';
|
||
else if (opn.type == 'month')
|
||
html += '<div class="tomonth" style="margin-left:auto;">' + ciyfn.lang('本月') + '<a class="btn sm def clear" style="margin-left:1em;">' + ciyfn.lang('清空') + '</a></div>';
|
||
else
|
||
html += '<div class="today" style="margin-left:auto;margin-right:1em;">' + ciyfn.lang('今天') + '</div><a class="btn sm def clear" style="position:absolute;right:0.5em;bottom:0.5em;">' + ciyfn.lang('清空') + '</a>';
|
||
html += '</div>';
|
||
html += '<div>';
|
||
if (op == 'year') {
|
||
html += '<div class="_yeararrow"><div class="yprev">﹤﹤</div><div class="ynext">﹥﹥</div></div>';
|
||
html += '<div class="_dateyear">';
|
||
for (var i = styear; i < styear + 12; i++) {
|
||
if (year == i)
|
||
html += '<div class="active" data-year="' + i + '">' + i + '</div>';
|
||
else
|
||
html += '<div data-year="' + i + '">' + i + '</div>';
|
||
}
|
||
html += '</div>';
|
||
}
|
||
else if (op == 'month') {
|
||
html += '<div class="_datemonth">';
|
||
for (var i = 1; i <= 12; i++) {
|
||
if (month == i)
|
||
html += '<div class="active" data-month="' + i + '">' + i + '<span>' + ciyfn.lang('月') + '</span></div>';
|
||
else
|
||
html += '<div data-month="' + i + '">' + i + '<span>' + ciyfn.lang('月') + '</span></div>';
|
||
}
|
||
html += '</div>';
|
||
} else {
|
||
html += '<div class="_datehead"><div>' + ciyfn.lang('日') + '</div><div>' + ciyfn.lang('一') + '</div><div>' + ciyfn.lang('二') + '</div><div>' + ciyfn.lang('三') + '</div><div>' + ciyfn.lang('四') + '</div><div>' + ciyfn.lang('五') + '</div><div>' + ciyfn.lang('六') + '</div></div>';
|
||
var weekday = new Date(year, month - 1, 1).getDay();
|
||
var days = new Date(year, month, 0).getDate();
|
||
for (var i = 0; i < 6; i++) {
|
||
html += '<div class="_daterow">';
|
||
for (var j = 0; j < 7; j++) {
|
||
var daynum = i * 7 + j - weekday + 1;
|
||
if (daynum >= 1 && daynum <= days) {
|
||
html += '<div data-year="' + year + '" data-month="' + month + '" data-date="' + daynum + '" class="';
|
||
var divday = new Date(year, month - 1, daynum);
|
||
if (opn.mindate > 0 && divday < new Date(opn.mindate * 1000))
|
||
html += 'disable';
|
||
else {
|
||
if (opn.maxdate > 0 && divday > new Date(opn.maxdate * 1000))
|
||
html += 'disable';
|
||
else
|
||
html += 'allow';
|
||
}
|
||
if (daynum == dtimevalue.getDate() && dtimeshow.getMonth() == dtimevalue.getMonth() && dtimeshow.getFullYear() == dtimevalue.getFullYear())
|
||
html += ' selected">' + daynum + '</div>';
|
||
else
|
||
html += '">' + daynum + '</div>';
|
||
} else {
|
||
html += '<span> </span>';
|
||
}
|
||
}
|
||
html += '</div>';
|
||
}
|
||
html += '</div>';
|
||
}
|
||
mainseldom.html(html);
|
||
}
|
||
function showhour() {
|
||
$5('._timehour>div>span', dtdom).html(ciyfn.todatetime(dtimevalue, 'H'));
|
||
$5('._time', dtdom).removeClass('active');
|
||
$5('._timehour', dtdom).addClass('active');
|
||
var hour = dtimevalue.getHours();
|
||
var html = '';
|
||
html += '<div class="_datehour">';
|
||
for (var i = 0; i < 24; i++) {
|
||
if (hour == i)
|
||
html += '<div class="active" data-hour="' + i + '">' + i + '</div>';
|
||
else
|
||
html += '<div data-hour="' + i + '">' + i + '</div>';
|
||
}
|
||
html += '</div>';
|
||
mainseldom.html(html);
|
||
}
|
||
function showminute() {
|
||
$5('._timeminute>div>span', dtdom).html(ciyfn.todatetime(dtimevalue, 'i'));
|
||
$5('._time', dtdom).removeClass('active');
|
||
$5('._timeminute', dtdom).addClass('active');
|
||
var minute = dtimevalue.getMinutes();
|
||
var html = '';
|
||
html += '<div class="_dateminute1">';
|
||
for (var i = 0; i < 60; i += 10) {
|
||
if (toint(minute / 10) * 10 == i)
|
||
html += '<div class="active" data-minute1="' + i + '">' + i + '</div>';
|
||
else
|
||
html += '<div data-minute1="' + i + '">' + i + '</div>';
|
||
}
|
||
html += '</div>';
|
||
html += '<div class="ciy-hr"></div>';
|
||
html += '<div class="_dateminute2">';
|
||
for (var i = 0; i < 10; i++) {
|
||
if (minute % 10 == i)
|
||
html += '<div class="active" data-minute2="' + i + '">' + i + '</div>';
|
||
else
|
||
html += '<div data-minute2="' + i + '">' + i + '</div>';
|
||
}
|
||
html += '</div>';
|
||
mainseldom.html(html);
|
||
}
|
||
}
|
||
ciycmpfunc.ciydaterange = function (opn) {
|
||
var thos = this;
|
||
this.onchange = opn.onchange;
|
||
opn.initevent = opn.initevent || opn.dom.hasattr('initevent');
|
||
opn.hasmore = opn.hasmore || opn.dom.hasattr('hasmore');
|
||
opn.type = opn.type || opn.dom.attr('type') || 'date'; //date/datetime
|
||
var html = '';
|
||
html += '<input name="' + opn.name + '" type="hidden"/>';
|
||
html += '<div style="display:flex;">';
|
||
html += '<ciy-datetime ' + (opn.hasmore ? 'com="' + opn.name + '_st" hasmore' : '') + '></ciy-datetime>';
|
||
html += '<div class="noselect" style="padding:0 0.2em;">~</div>';
|
||
html += '<ciy-datetime ' + (opn.hasmore ? 'com="' + opn.name + '_end" hasmore' : '') + '></ciy-datetime>';
|
||
html += '</div>';
|
||
opn.dom.html(html);
|
||
var valuedom = opn.dom.children(0);
|
||
var rangedom = opn.dom.children(1);
|
||
var valname1dom = rangedom.children(0);
|
||
var valname2dom = rangedom.children(2);
|
||
var rangevalue = [0, 0];
|
||
var format = 'Y-m-d';
|
||
if (opn.type == 'datetime')
|
||
format = 'Y-m-d H:i:00';
|
||
this.setvalue = function (newvalue, from) {
|
||
if (newvalue !== undefined) {
|
||
if (newvalue.indexOf('~') >= 0) {
|
||
var arr = newvalue.split('~');
|
||
rangevalue[0] = tostamp(arr[0]);
|
||
rangevalue[1] = tostamp(arr[1]);
|
||
valname1dom.val(rangevalue[0]);
|
||
valname2dom.val(rangevalue[1]);
|
||
}
|
||
}
|
||
if (rangevalue[0] != 0 && rangevalue[1] != 0) {
|
||
if (rangevalue[0] > rangevalue[1]) {
|
||
var tmp = rangevalue[0];
|
||
rangevalue[0] = rangevalue[1];
|
||
rangevalue[1] = tmp;
|
||
valname1dom.val(rangevalue[0]);
|
||
valname2dom.val(rangevalue[1]);
|
||
}
|
||
}
|
||
var val = '';
|
||
if (rangevalue[0] != 0 || rangevalue[1] != 0) {
|
||
if (rangevalue[0] != 0)
|
||
val = ciyfn.todatetime(rangevalue[0], format, '');
|
||
val += '~';
|
||
if (rangevalue[1] != 0)
|
||
val += ciyfn.todatetime(rangevalue[1], format, '');
|
||
}
|
||
this.value = val;
|
||
valuedom.val(this.value);
|
||
if (from && typeof (this.onchange) == 'function')
|
||
this.onchange({ name: opn.name, dom: opn.dom, from: from, value: this.value });
|
||
}
|
||
ciycmp({
|
||
dom: valname1dom, type: opn.type, onchange: function (e) {
|
||
rangevalue[0] = e.value;
|
||
thos.setvalue(undefined, 'selectdt1');
|
||
}
|
||
});
|
||
ciycmp({
|
||
dom: valname2dom, type: opn.type, onchange: function (e) {
|
||
rangevalue[1] = e.value;
|
||
thos.setvalue(undefined, 'selectdt2');
|
||
}
|
||
});
|
||
this.setvalue(opn.value, opn.initevent ? 'init' : '');
|
||
}
|
||
ciycmpfunc.ciyswitch = function (opn) {
|
||
var thos = this;
|
||
this.onchange = opn.onchange;
|
||
opn.initevent = opn.initevent || opn.dom.hasattr('initevent');
|
||
opn.hasmore = opn.hasmore || opn.dom.hasattr('hasmore');
|
||
opn.y = opn.y || opn.dom.attr('y') || '✔';
|
||
opn.n = opn.n || opn.dom.attr('n') || '✘';
|
||
var html = '';
|
||
html += '<input type="hidden" name="' + opn.name + '">';
|
||
html += '<div style="cursor: pointer;position: relative;display: inline-block;height: 2.4em;color: var(--e-switchtxt);background: var(--e-inputbg);border: 0.2em solid var(--e-inputbg);border-radius: 1.2em;box-shadow: var(--e-inputshadow);">';
|
||
html += '<div class="y tran5 noselect txt-nowrap" style="height: 2em;line-height: 2em;padding-right:2.2em;padding-left: 0.5em;">' + ciyfn.lang(opn.y) + '</div>';
|
||
html += '<div class="n tran5 noselect txt-nowrap txt-right" style="height: 2em;line-height: 2em;padding-left:1.6em;padding-right: 0.5em;margin-top: -2em;">' + ciyfn.lang(opn.n) + '</div>';
|
||
html += '<i class="chk tran5" style="opacity:0; position: absolute;left: 0;top: 0.2em;width: 1.2em;height: 1.2em;border-radius: 100%;border: 0.2em solid var(--e-inputbr);box-shadow: var(--e-inputshadow);"></i></div>';
|
||
if (opn.hasmore)
|
||
html += '<input type="hidden" name="' + opn.name + '_name">';
|
||
opn.dom.html(html).css({ verticalAlign: 'middle' });
|
||
var valuedom = opn.dom.children(0);
|
||
var valnamedom = opn.dom.children(2);
|
||
this.setvalue = function (newvalue, from) {
|
||
if (newvalue !== undefined) {
|
||
if (newvalue === 1 || newvalue === '1' || newvalue === true || newvalue === 'true')
|
||
this.value = 1;
|
||
else
|
||
this.value = 2;
|
||
}
|
||
valuedom.val(this.value);
|
||
if (opn.hasmore)
|
||
valnamedom.val(this.value == 1 ? opn.y : opn.n);
|
||
$5('.y', opn.dom).css({ opacity: this.value == 1 ? 1 : 0 });
|
||
$5('.n', opn.dom).css({ opacity: this.value == 1 ? 0 : 1 });
|
||
$5('i', opn.dom).css({ opacity: 1, background: thos.value == 1 ? 'var(--man5)' : 'var(--e-inputbg)', marginLeft: thos.value == 1 ? 'calc(' + opn.dom.width() + 'px - 2.1em)' : '0.2em' });
|
||
if (from && typeof (this.onchange) == 'function')
|
||
this.onchange({ name: opn.name, dom: opn.dom, from: from, value: this.value });
|
||
}
|
||
this.setvalue(opn.value, opn.initevent ? 'init' : '');
|
||
opn.dom.on('click', function () {
|
||
thos.value = (thos.value == 1 ? 2 : 1);
|
||
thos.setvalue(undefined, 'click');
|
||
});
|
||
}
|
||
ciycmpfunc.ciyradio = function (opn) {
|
||
var thos = this;
|
||
this.onchange = opn.onchange;
|
||
opn.initevent = opn.initevent || opn.dom.hasattr('initevent');
|
||
opn.hasmore = opn.hasmore || opn.dom.hasattr('hasmore');
|
||
opn.hasline = opn.hasline || opn.dom.hasattr('hasline');
|
||
opn.chkuse = opn.chkuse || opn.dom.hasattr('chkuse');
|
||
opn.all = opn.all || opn.dom.attr('all') || '';
|
||
opn.minwidth = opn.minwidth || opn.dom.attr('minwidth') || 'auto';
|
||
if (typeof (opn.fn_item) !== 'function')
|
||
opn.fn_item = function (range, thos) { return range.name; };
|
||
//opn.fn_item 定制显示项
|
||
var html = '';
|
||
html += '<input type="hidden" name="' + opn.name + '">';
|
||
html += '<div style="' + (opn.hasline ? '' : 'display:flex;flex-wrap: wrap;') + 'gap: 0.5em;"></div>';
|
||
if (opn.hasmore)
|
||
html += '<input type="hidden" name="' + opn.name + '_name">';
|
||
opn.dom.html(html);
|
||
var valuedom = opn.dom.children(0);
|
||
var showdom = opn.dom.children(1);
|
||
var valnamedom = opn.dom.children(2);
|
||
this.setvalue = function (newvalue, from) {
|
||
if (this.range == null)
|
||
return console.error('ciy_radio range null', opn.name);
|
||
if (newvalue !== undefined) {
|
||
this.value = newvalue;
|
||
}
|
||
|
||
var html = '';
|
||
var selname = '';
|
||
for (var i in this.range) {
|
||
var range = this.range[i];
|
||
if (opn.chkuse && range.isuse == 2)
|
||
continue;
|
||
if (opn.filter && range[opn.filter.field] != opn.filter.value)
|
||
continue;
|
||
html += '<div class="ciy-radio" style="cursor: pointer;min-width: ' + opn.minwidth + ';" data-id="' + range.id + '">';
|
||
if (this.value == range.id) {
|
||
html += '<i class="tran5" style="display: inline-block;margin-right: 0.2em;width: 0.8em;height: 0.8em;border-radius: 100%;box-shadow: var(--e-inputshadow);vertical-align: text-bottom;background: var(--man5);border: 0.2em solid var(--e-inputbr);animation: ciy-scale 0.2s;"></i>';
|
||
selname = range.name;
|
||
}
|
||
else
|
||
html += '<i class="tran5" style="display: inline-block;margin-right: 0.2em;width: 0.8em;height: 0.8em;border-radius: 100%;box-shadow: var(--e-inputshadow);vertical-align: text-bottom;background: var(--e-inputbg);border: 0.2em solid var(--e-inputbg);"></i>';
|
||
html += '<span class="noselect">' + opn.fn_item(range, thos) + '</span>';
|
||
html += '</div>';
|
||
}
|
||
showdom.html(html);
|
||
valuedom.val(this.value);
|
||
if (opn.hasmore)
|
||
valnamedom.val(selname);
|
||
if (from && typeof (this.onchange) == 'function')
|
||
this.onchange({ name: opn.name, dom: opn.dom, from: from, value: this.value });
|
||
}
|
||
this.setrange = function (newrange) {
|
||
this.range = ciyfn.getdictdata(newrange);
|
||
if (this.range == null)
|
||
return console.error('ciy_radio range null', opn.name);
|
||
if (opn.all) {
|
||
this.range.unshift({ id: '', name: opn.all + '', _nofilter: true });
|
||
}
|
||
if (this.value !== undefined)
|
||
this.setvalue();
|
||
}
|
||
this.setrange(opn.range);
|
||
this.setvalue(opn.value, opn.initevent ? 'init' : '');
|
||
showdom.on('click', '.ciy-radio', function (e) {
|
||
thos.value = $5(e.currentTarget).attr('data-id') || '';
|
||
thos.setvalue(undefined, 'click');
|
||
});
|
||
}
|
||
ciycmpfunc.ciycheckbox = function (opn) {
|
||
var thos = this;
|
||
this.onchange = opn.onchange;
|
||
opn.initevent = opn.initevent || opn.dom.hasattr('initevent');
|
||
opn.hasmore = opn.hasmore || opn.dom.hasattr('hasmore');
|
||
opn.hasline = opn.hasline || opn.dom.hasattr('hasline');
|
||
opn.chkuse = opn.chkuse || opn.dom.hasattr('chkuse');
|
||
opn.range = opn.range || opn.dom.attr('range');
|
||
opn.minwidth = opn.minwidth || opn.dom.attr('minwidth') || '';
|
||
if (opn.dom.attr('text')) {
|
||
opn.range = [{ id: 'chk', name: opn.dom.attr('text') }];
|
||
}
|
||
if (typeof (opn.fn_item) !== 'function')
|
||
opn.fn_item = function (range, thos) { return range.name; };
|
||
var html = '';
|
||
html += '<input type="hidden" name="' + opn.name + '">';
|
||
html += '<div style="' + (opn.hasline ? '' : 'display:inline-flex;flex-wrap: wrap;') + 'gap: 0.5em;"></div>';
|
||
if (opn.hasmore) {
|
||
html += '<input type="hidden" name="' + opn.name + '_name">';
|
||
html += '<input type="hidden" name="' + opn.name + '_noid">';
|
||
html += '<input type="hidden" name="' + opn.name + '_noname">';
|
||
}
|
||
opn.dom.html(html);
|
||
var valuedom = opn.dom.children(0);
|
||
var showdom = opn.dom.children(1);
|
||
var nowvalue = [];
|
||
var clkvalue = '';
|
||
this.setvalue = function (newvalue, from) {
|
||
if (this.range == null)
|
||
return console.error('ciy_checkbox range null', opn.name);
|
||
if (newvalue !== undefined) {
|
||
if (newvalue == '__ALL__') {
|
||
for (var i in this.range) {
|
||
nowvalue.push(this.range[i].id);
|
||
}
|
||
} else {
|
||
var vals = (newvalue + '').split(',');
|
||
nowvalue = [];
|
||
for (var i in vals) {
|
||
if (!vals[i])
|
||
continue;
|
||
nowvalue.push(vals[i] + '');
|
||
}
|
||
}
|
||
var html = '';
|
||
var selnames = [];
|
||
for (var i in this.range) {
|
||
var range = this.range[i];
|
||
if (opn.chkuse && range.isuse == 2)
|
||
continue;
|
||
if (opn.filter && range[opn.filter.field] != opn.filter.value)
|
||
continue;
|
||
html += '<div class="ciy-checkbox" style="cursor: pointer;min-width: ' + opn.minwidth + ';" data-id="' + range.id + '">';
|
||
if (nowvalue.indexOf(range.id + '') > -1) {
|
||
html += '<i class="tran5 checked" style="display: inline-block;margin-right: 0.2em;width: 0.8em;height: 0.8em;border-radius: 0.3em;box-shadow: var(--e-inputshadow);vertical-align: text-bottom;background: var(--man5);border: 0.2em solid var(--e-inputbr);' + (clkvalue == range.id ? 'animation: ciy-scale 0.2s;' : '') + '"></i>';
|
||
selnames.push(range.name);
|
||
} else
|
||
html += '<i class="tran5" style="display: inline-block;margin-right: 0.2em;width: 0.8em;height: 0.8em;border-radius: 0.3em;box-shadow: var(--e-inputshadow);vertical-align: text-bottom;background: var(--e-inputbg);border: 0.2em solid var(--e-inputbg);"></i>';
|
||
html += '<span class="noselect">' + opn.fn_item(range, thos) + '</span>';
|
||
html += '</div>';
|
||
}
|
||
showdom.html(html);
|
||
}
|
||
var itemdoms = showdom.children();
|
||
for (var i = 0; i < itemdoms.length; i++) {
|
||
var chkdom = $5(itemdoms[i]);
|
||
var id = chkdom.attr('data-id');
|
||
var idom = $5('i', chkdom);
|
||
if (idom.hasClass('checked')) {
|
||
if (nowvalue.indexOf(id) == -1)
|
||
idom.removeClass('checked').css({ background: 'var(--e-inputbg)', border: '0.2em solid var(--e-inputbg)', animation: null });
|
||
} else {
|
||
if (nowvalue.indexOf(id) > -1)
|
||
idom.addClass('checked').css({ background: 'var(--man5)', border: '0.2em solid var(--e-inputbr)', animation: 'ciy-scale 0.2s' });
|
||
}
|
||
}
|
||
this.value = nowvalue.length > 0 ? ',' + nowvalue.join(',') + ',' : '';
|
||
valuedom.val(this.value); //两边加逗号,便于字符串like检索。但规模化后应避免like检索。
|
||
if (opn.hasmore) {
|
||
var selnames = [];
|
||
var selnoid = [];
|
||
var selnonames = [];
|
||
for (var i = 0; i < itemdoms.length; i++) {
|
||
var id = itemdoms[i].getAttribute('data-id');
|
||
var range = null;
|
||
for (var ri in this.range) {
|
||
if (this.range[ri].id == id)
|
||
range = this.range[ri];
|
||
}
|
||
if (range == null)
|
||
continue;
|
||
if (nowvalue.indexOf(id) > -1)
|
||
selnames.push(range.name);
|
||
else {
|
||
selnoid.push(range.id);
|
||
selnonames.push(range.name);
|
||
}
|
||
}
|
||
opn.dom.children(2).val(selnames.join(','));
|
||
opn.dom.children(3).val(selnoid.join(','));
|
||
opn.dom.children(4).val(selnonames.join(','));
|
||
}
|
||
if (from && typeof (this.onchange) == 'function')
|
||
this.onchange({ name: opn.name, dom: opn.dom, from: from, value: this.value });
|
||
}
|
||
this.setrange = function (newrange) {
|
||
this.range = ciyfn.getdictdata(newrange);
|
||
if (this.range == null)
|
||
return console.error('ciy_checkbox range null', opn.name);
|
||
if (this.value !== undefined)
|
||
this.setvalue();
|
||
}
|
||
this.setrange(opn.range);
|
||
this.setvalue(opn.value, opn.initevent ? 'init' : '');
|
||
showdom.on('click', '.ciy-checkbox', function (e) {
|
||
clkvalue = $5(e.currentTarget).attr('data-id') || '';
|
||
var ind = nowvalue.indexOf(clkvalue);
|
||
if (ind > -1)
|
||
nowvalue.splice(ind, 1);
|
||
else
|
||
nowvalue.push(clkvalue);
|
||
thos.setvalue(undefined, 'click');
|
||
if (typeof (opn.fn_click) == 'function')
|
||
opn.fn_click({ name: opn.name, value: clkvalue });
|
||
});
|
||
}
|
||
ciycmpfunc.ciyselect = function (opn) {
|
||
var thos = this;
|
||
this.onchange = opn.onchange;
|
||
opn.initevent = opn.initevent || opn.dom.hasattr('initevent');
|
||
opn.hasmore = opn.hasmore || opn.dom.hasattr('hasmore');
|
||
opn.chkuse = opn.chkuse || opn.dom.hasattr('chkuse');
|
||
opn.minsearch = toint(opn.minsearch || opn.dom.attr('minsearch') || 0);
|
||
opn.all = opn.all || opn.dom.attr('all') || '';
|
||
opn.range = opn.range || opn.dom.attr('range');
|
||
opn.minwidth = opn.minwidth || opn.dom.attr('minwidth') || '';
|
||
opn.placeholder = ciyfn.lang(opn.placeholder || opn.dom.attr('placeholder') || '请选择');
|
||
if (typeof (opn.fn_li) != 'function')
|
||
opn.fn_li = function (range, thos) { return ciyfn.lang(range.name) };
|
||
var csstxt = '';
|
||
csstxt += 'ciy-select{display: block;user-select:none;}';
|
||
csstxt += 'ciy-select.mini{display: inline-block;}';
|
||
csstxt += 'ciy-select>._show{display: flex;align-items: center;position: relative;height: 2.1em;line-height: 2.1em;vertical-align: top;width: 100%;cursor: pointer;min-height: 2.4em;color: var(--txt8);background-color: var(--bg1);border: 1px solid var(--bg6);border-radius: 4px;}';
|
||
csstxt += 'ciy-select>._show>i{width: 1em;height: 1em;margin-right:0.5em;background-image: url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTExNC4wNDg0OTkgNTk2LjkyNDE4MWwzMzcuNTI2MjkzIDMzNy41MjYyOTNjMzMuMzcwMDE1IDMzLjM3MDAxNSA4Ny40NzkzNzcgMzMuMzcwMDE1IDEyMC44NDkzOTIgMGwzMzcuNTI2MjkzLTMzNy41MjYyOTNMMTE0LjA0ODQ5OSA1OTYuOTI0MTgxek01NzIuNDI0MTg0IDg4LjQ5NzU2N2MtMzMuMzcwMDE1LTMzLjM3MDAxNS04Ny40NzkzNzctMzMuMzcwMDE1LTEyMC44NDkzOTIgMEwxMTQuMDU2Njg2IDQyNi4wMjQ4ODNsNzk1Ljg4NTYwNiAwTDU3Mi40MjQxODQgODguNDk3NTY3eiIgZmlsbD0iIzc3Nzc3NyI+PC9wYXRoPjwvc3ZnPg==");}';
|
||
csstxt += 'ciy-select>._pullul{position: fixed;top: 0;left: 0;right: 0;bottom: 0;display:none;z-index:100000;}';
|
||
csstxt += 'ciy-select>._pullul>ul{display: inline-flex;height: auto;flex-direction: column;position: fixed;overflow: auto;background:var(--bg1);box-shadow: rgb(204 204 204) 1px 1px 2px;border-radius: 5px;}';
|
||
csstxt += 'ciy-select>._pullul input{position: fixed;border-radius: 3px;line-height:1.5em;padding-left:0.5em;border:1px solid var(--bg4);border-radius:0;}';
|
||
csstxt += 'ciy-select>._pullul input:focus{box-shadow:none;border:1px solid var(--bg4);}';
|
||
csstxt += 'ciy-select>._pullul input::placeholder{color:var(--bg4);}';
|
||
csstxt += 'ciy-select>._pullul>ul>li{white-space: nowrap;line-height:1.3em;padding:0.5em 1em;border-left: 4px solid var(--bg1);background:var(--bg1);color:var(--txt9);cursor:pointer;}';
|
||
csstxt += 'ciy-select>._pullul>ul>li.selected{background:var(--bg3);border-left: 4px solid var(--man4);}';
|
||
csstxt += 'ciy-select>._pullul>ul>li:hover{background:var(--bg5);border-left: 4px solid var(--bg4);}';
|
||
opn.dom.setstyle('ciy_select', csstxt);
|
||
var html = '';
|
||
html += '<input name="' + opn.name + '" value="" type="hidden"/>';
|
||
html += '<div class="_show"><div class="flex1 txt-over txt-left" style="padding: 0 0.5em;' + (opn.minwidth ? 'min-width:' + opn.minwidth + ';' : '') + '"></div><i></i></div>';
|
||
html += '<div class="_pullul">';
|
||
html += '<input type="text" act="search" placeholder="' + ciyfn.lang('输入文字或拼音筛选') + '"/>';
|
||
html += '<ul></ul>';
|
||
html += '</div>';
|
||
if (opn.hasmore && opn.name)
|
||
html += '<input name="' + opn.name + '_name" value="" type="hidden"/>';
|
||
opn.dom.html(html);
|
||
if (opn.minwidth)
|
||
opn.dom.addClass('mini');
|
||
var valuedom = opn.dom.children(0);
|
||
var showmaindom = opn.dom.children(1);
|
||
var showdom = showmaindom.children(0);
|
||
var ulpdom = opn.dom.children(2);
|
||
var searchdom = ulpdom.children(0);
|
||
var uldom = ulpdom.children(1);
|
||
var valnamedom = opn.dom.children(3);
|
||
var lishow = false;
|
||
this.setvalue = function (newvalue, from) {
|
||
if (this.range == null)
|
||
return console.error('ciy_select range null', opn.name);
|
||
if (newvalue !== undefined) {
|
||
this.value = newvalue;
|
||
}
|
||
var range = null;
|
||
for (var i in this.range) {
|
||
if (this.value == this.range[i].id) {
|
||
range = this.range[i];
|
||
break;
|
||
}
|
||
}
|
||
if (range != null) {
|
||
showdom.html(range.name);
|
||
showdom.attr('title', range.name);
|
||
valuedom.val(range.id);
|
||
valnamedom.val(range.name);
|
||
} else {
|
||
showdom.html('<span style="color:var(--txt1);">' + opn.placeholder + '</span>');
|
||
showdom.attr('title', '');
|
||
valuedom.val('');
|
||
valnamedom.val('');
|
||
}
|
||
if (from && typeof (this.onchange) == 'function')
|
||
this.onchange({ name: opn.name, dom: opn.dom, from: from, value: this.value });
|
||
}
|
||
this.setrange = function (newrange, badd) {
|
||
var ranges = ciyfn.getdictdata(newrange);
|
||
if (ranges == null)
|
||
return console.error('ciy_select range null', opn.name);
|
||
if (!badd)
|
||
this.range = [];
|
||
for (var i in ranges) {
|
||
if (opn.chkuse && ranges[i].isuse == 2)
|
||
continue;
|
||
if (!ranges[i]._nofilter && opn.filter && ranges[i][opn.filter.field] != opn.filter.value)
|
||
continue;
|
||
ranges[i].name = ranges[i].name + '';
|
||
this.range.push(ranges[i]);
|
||
}
|
||
if (opn.first && typeof (opn.first) == 'object') {
|
||
opn.first._nofilter = true;
|
||
this.range.unshift(opn.first);
|
||
}
|
||
if (opn.all) {
|
||
this.range.unshift({ id: '', name: opn.all + '', _nofilter: true });
|
||
}
|
||
if (ciyfn.topinyin) {
|
||
for (var i in this.range)
|
||
this.range[i]._py = ciyfn.topinyin(this.range[i].name);
|
||
}
|
||
if (this.value !== undefined)
|
||
this.setvalue();
|
||
}
|
||
this.setrange(opn.range);
|
||
this.setvalue(opn.value, opn.initevent ? 'init' : '');
|
||
showmaindom.on('click', function (e) {
|
||
searchdom.val('');
|
||
thos.showoption();
|
||
searchdom[0].focus();
|
||
});
|
||
searchdom.on('keydown', function (e) {
|
||
if (e.keyCode != 13) return;
|
||
e.preventDefault();
|
||
if (uldom.children().length == 1)
|
||
selectli(uldom.children(0));
|
||
return false;
|
||
});
|
||
searchdom.on('keyup', function (e) {
|
||
if (e.keyCode == 13) return;
|
||
thos.showoption();
|
||
});
|
||
uldom.on('click', function (e) {
|
||
if (e.target.tagName !== 'LI') return;
|
||
selectli(e.target);
|
||
});
|
||
ulpdom.on('click', function (e) {
|
||
thos.hideoption();
|
||
});
|
||
function selectli(lidom) {
|
||
thos.value = $5(lidom).attr('data-id') || '';
|
||
thos.hideoption();
|
||
thos.setvalue(undefined, 'select');
|
||
}
|
||
function panelrect() {
|
||
var pos = showmaindom.rect();
|
||
var ulwidth = uldom.rect().width;
|
||
var ulheight = 2;
|
||
for (var i = 0; i < uldom.children().length; i++) {
|
||
ulheight += uldom.children(i).rect().height;
|
||
}
|
||
var twidth = showmaindom.rect().width;
|
||
var gulwidth = Math.max(145, ulwidth, twidth);
|
||
|
||
var lef = pos.left;
|
||
var lefw = $5(opn.dom).winwidth() - lef - 5;
|
||
if (gulwidth > lefw)
|
||
lef -= gulwidth - lefw;
|
||
if (lef <= 0)
|
||
lef = 0;
|
||
uldom.css({ left: lef + 'px', width: gulwidth + 'px' });
|
||
searchdom.css({ left: lef + 'px', width: gulwidth + 'px' });
|
||
var searchheight = 0;
|
||
if (thos.range.length > opn.minsearch) {
|
||
searchheight = searchdom.rect().height;
|
||
searchdom.css({ display: 'block' });
|
||
searchdom[0].focus();
|
||
} else {
|
||
searchdom.css({ display: 'none' });
|
||
}
|
||
if (window.innerHeight * 0.6 > (pos.top)) {
|
||
// 下方显示
|
||
var hei = pos.top + showmaindom.rect().height;
|
||
if (hei < 0)
|
||
hei = 0;
|
||
if (searchheight > 0)
|
||
searchdom.css({ top: hei + 'px' });
|
||
uldom.css({ top: (hei + searchheight) + 'px' });
|
||
hei = window.innerHeight - hei - 20 - searchheight;
|
||
uldom.css({ height: (ulheight > hei ? hei : ulheight) + 'px', flexDirection: 'column' });
|
||
} else {
|
||
// 上方显示
|
||
var hei = pos.top;
|
||
if (searchheight > 0)
|
||
searchdom.css({ top: (hei - searchheight - 3) + 'px' });
|
||
uldom.css({ flexDirection: 'column-reverse' });
|
||
if (ulheight > hei) {
|
||
uldom.css({ top: '3px', height: (hei - searchheight - 6) + 'px' });
|
||
} else {
|
||
uldom.css({ top: (hei - ulheight - searchheight - 3) + 'px', height: ulheight + 'px' });
|
||
}
|
||
}
|
||
ulpdom.css({ display: 'block', opacity: 1 });
|
||
}
|
||
this.hideoption = function () {
|
||
if (!lishow)
|
||
return;
|
||
window.removeEventListener('scroll', thos.hideoption);
|
||
lishow = false;
|
||
ulpdom.aniout('translateY(30px)', 0.2);
|
||
}
|
||
this.showoption = function () {
|
||
var keystr = searchdom.val();
|
||
var html = '';
|
||
var id = valuedom.val();
|
||
for (var i in thos.range) {
|
||
if ((thos.range[i].name.toUpperCase().indexOf(keystr.toUpperCase()) == -1) && (tostr(thos.range[i]._py).indexOf(keystr.toUpperCase()) == -1))
|
||
continue;
|
||
html += '<li class="txt-left';
|
||
if (thos.range[i].id == id)
|
||
html += ' selected';
|
||
html += '" data-id="' + thos.range[i].id + '">';
|
||
html += opn.fn_li(thos.range[i], thos);
|
||
html += '</li>';
|
||
}
|
||
uldom.html(html);
|
||
if (!lishow) {
|
||
lishow = true;
|
||
ulpdom.css({ opacity: 0, display: 'block' });
|
||
window.addEventListener('scroll', thos.hideoption);
|
||
}
|
||
panelrect();
|
||
}
|
||
}
|
||
ciycmpfunc.ciyinputbet = function (opn) {
|
||
var thos = this;
|
||
this.onchange = opn.onchange;
|
||
opn.initevent = opn.initevent || opn.dom.hasattr('initevent');
|
||
opn.hasmore = opn.hasmore || opn.dom.hasattr('hasmore');
|
||
opn.inpstyle = opn.inpstyle || opn.dom.attr('inpstyle') || '';
|
||
opn.bets = ciyfn.split(opn.bet || opn.dom.attr('bet'), '.');
|
||
opn.units = ciyfn.split(opn.unit || opn.dom.attr('unit'), '.');
|
||
if (opn.bets.length < opn.units.length)
|
||
opn.units.splice(opn.bets.length);
|
||
if (opn.bets.length > opn.units.length)
|
||
opn.bets.splice(opn.units.length);
|
||
if (opn.bets.length == 0) {
|
||
opn.bets = [1];
|
||
opn.units = [''];
|
||
}
|
||
opn.betidx = 0;
|
||
for (var i = 0; i < opn.bets.length; i++) {
|
||
opn.bets[i] = toint(opn.bets[i]);
|
||
if (opn.bets[i] < 1)
|
||
opn.bets[i] = 1;
|
||
if (opn.units[i].substring(0, 1) == '*') {
|
||
opn.betidx = i;
|
||
opn.units[i] = opn.units[i].substring(1);
|
||
}
|
||
}
|
||
opn.width = opn.width || opn.dom.attr('width') || '6em';
|
||
opn.align = opn.align || opn.dom.attr('align') || 'right';
|
||
var html = '';
|
||
html += '<input type="hidden" name="' + opn.name + '"/>';
|
||
html += '<input type="text"';
|
||
if (opn.hasmore)
|
||
html += ' name="' + opn.name + '_num"';
|
||
html += ' style="width:' + opn.width + ';text-align:' + opn.align + ';' + opn.inpstyle + '" />';
|
||
if (opn.hasmore)
|
||
html += '<input type="hidden" name="' + opn.name + '_unit" value="' + opn.unit + '"/>';
|
||
if (opn.units.length > 1)
|
||
html += '<ciy-select minsearch="100" style="' + opn.inpstyle + '"></ciy-select>';
|
||
if (opn.units.length == 1)
|
||
html += '<span style="padding-left: 0.3em;">' + opn.units[0] + '</span>';
|
||
opn.dom.html(html).css({ display: 'inline-flex', alignItems: 'center' });
|
||
if (opn.units.length > 1) {
|
||
var ranges = [];
|
||
for (var i = 0; i < opn.units.length; i++)
|
||
ranges.push({ id: i, name: opn.units[i] });
|
||
ciycmp({
|
||
dom: $5('ciy-select', opn.dom), range: ranges, onchange: function (e) {
|
||
opn.betidx = toint(e.value);
|
||
thos.value = tofloat(showinpdom.val()) * opn.bets[opn.betidx];
|
||
thos.setvalue(undefined, 'unit');
|
||
}
|
||
});
|
||
}
|
||
var valuedom = opn.dom.children(0);
|
||
var showinpdom = opn.dom.children(1);
|
||
var showinpunitdom = null;
|
||
if (opn.hasmore)
|
||
showinpunitdom = opn.dom.children(2);
|
||
this.setvalue = function (newvalue, from) {
|
||
if (newvalue !== undefined) {
|
||
this.value = toint(newvalue);
|
||
for (var i = opn.bets.length - 1; i >= 0; i--) {
|
||
if (this.value / opn.bets[i] >= 0.1) {
|
||
if ((opn.bets[i] >= 1000 && this.value % parseInt(opn.bets[i] / 1000) == 0) || i < opn.betidx) {
|
||
opn.betidx = i;
|
||
break;
|
||
}
|
||
}
|
||
if (this.value != 0 && this.value % opn.bets[i] == 0) {
|
||
opn.betidx = i;
|
||
break;
|
||
}
|
||
}
|
||
$5('ciy-select', opn.dom).val(opn.betidx);
|
||
if (newvalue !== '')
|
||
showinpdom.val(this.value * 1.0 / opn.bets[opn.betidx]);
|
||
else
|
||
showinpdom.val('');
|
||
}
|
||
if (showinpunitdom)
|
||
showinpunitdom.val(opn.units[opn.betidx]);
|
||
valuedom.val(this.value);
|
||
if (from && typeof (this.onchange) == 'function')
|
||
this.onchange({ name: opn.name, dom: opn.dom, from: from, value: this.value });
|
||
}
|
||
this.setvalue(opn.value, opn.initevent ? 'init' : '');
|
||
showinpdom.on('keyup', function () {
|
||
thos.value = tofloat(showinpdom.val()) * opn.bets[opn.betidx];
|
||
thos.setvalue(undefined, 'keyup');
|
||
});
|
||
}
|
||
ciycmpfunc.ciyupload = function (opn) { // v2
|
||
var thos = this;
|
||
this.onchange = opn.onchange;
|
||
opn.initevent = opn.initevent || opn.dom.hasattr('initevent');
|
||
opn.hasmore = opn.hasmore || opn.dom.hasattr('hasmore');
|
||
opn.stor = opn.stor || opn.dom.attr('stor') || ciy_vars.storselect;
|
||
opn.num = toint(opn.num || opn.dom.attr('num') || 1);
|
||
if (opn.num < 1)
|
||
opn.num = 1;
|
||
opn.type = opn.type || opn.dom.attr('type');
|
||
if (opn.type)
|
||
opn.type = opn.type.toUpperCase().split(',');
|
||
opn.imgwidth = toint(opn.imgwidth || opn.dom.attr('imgwidth'));
|
||
opn.imgheight = toint(opn.imgheight || opn.dom.attr('imgheight'));
|
||
opn.maxsize = toint(opn.maxsize || opn.dom.attr('maxsize'));
|
||
opn.zipjpg = toint(opn.zipjpg || opn.dom.attr('zipjpg'));
|
||
opn.zipext = opn.zipext || opn.dom.attr('zipext') || 'jpg,png,webp';
|
||
if (opn.zipext)
|
||
opn.zipext = opn.zipext.toUpperCase().split(',');
|
||
opn.waterfont = opn.waterfont || opn.dom.attr('waterfont') || '28px Arial';
|
||
opn.watertext = opn.watertext || opn.dom.attr('watertext') || '';
|
||
//opn.fn_imgdraw 图片绘制回调
|
||
opn.showwh = opn.showwh || opn.dom.attr('showwh') || '100px'; //显示宽高
|
||
opn.action = opn.action || opn.dom.attr('action');
|
||
if (!opn.action) {
|
||
opn.action = "/z/?func=" + ciy_vars.uploadurl;
|
||
}
|
||
var now = new Date();
|
||
opn.path = opn.path || opn.dom.attr('path') || 'nopath';
|
||
opn.path = opn.path.replace('{Y}', now.getFullYear()).replace('{m}', ciyfn.topad0(now.getMonth() + 1)).replace('{d}', ciyfn.topad0(now.getDate()));
|
||
opn.valname = opn.valname || opn.dom.attr('valname') || '';
|
||
var csstxt = '';
|
||
csstxt += 'ciy-upload{display:flex;align-items:center}';
|
||
csstxt += '.ciy-upload>div>.item,.ciy-upload>div>.add{display:flex;justify-content: center;align-items: center;background:var(--bg1);margin: 0 0.3em 0.3em 0;position:relative;border-radius:0.5em;background-size:contain;background-position:center center;background-repeat:no-repeat;border:1px solid var(--bg6);overflow:hidden;}';
|
||
csstxt += '.ciy-upload>div>.add>svg{width: 50%;opacity:0.6;transition:all .3s;}';
|
||
csstxt += '.ciy-upload>div>.add .progress{position: absolute;bottom: 0;right: 0;left: 0;height: 0%;background: #71c0e9;}';
|
||
csstxt += '.ciy-upload>div>.item a{color:#00000055;white-space: nowrap;}';
|
||
csstxt += '.ciy-upload>div>.item i{cursor:pointer;position: absolute;top: 0;right: 0;width: 1.2em;height: 1.2em;background-image: url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTUxMiAwQzIyNy44NCAwIDAgMjI3Ljg0IDAgNTEyczIyNy44NCA1MTIgNTEyIDUxMmMyODQuMDk2IDAgNTEyLTIyNy44NCA1MTItNTEyUzc5Ni4wOTYgMCA1MTIgMEw1MTIgMHpNNzY4IDY5Ni4zMiA2OTYuMjU2IDc2OCA1MTIgNTgzLjY4IDMyNy42MTYgNzY4IDI1NiA2OTYuMzIgNDQwLjI1NiA1MTIgMjU2IDMyNy42OCAzMjcuNjE2IDI1NiA1MTIgNDQwLjMyIDY5Ni4yNTYgMjU2IDc2OCAzMjcuNjggNTgzLjYxNiA1MTIgNzY4IDY5Ni4zMiA3NjggNjk2LjMyek03NjggNjk2LjMyIiBmaWxsPSIjZDgxZTA2Ij48L3BhdGg+PC9zdmc+");}';
|
||
opn.dom.setstyle('ciy_upload', csstxt);
|
||
function upfiles(files) {
|
||
var progressdom = $5('.add .progress', showuploaddom);
|
||
ciyfn.file_uploads(opn.num - nowvalue.length, files, opn, {
|
||
success: function (url, file) {
|
||
progressdom.css({ height: '0%' });
|
||
nowvalue.push(url);
|
||
nowvalname.push(file.name);
|
||
thos.setvalue(undefined, 'add.' + opn.stor);
|
||
}
|
||
, fail: function (err) {
|
||
progressdom.css({ height: '0%' });
|
||
ciyfn.alert(err.errmsg);
|
||
}
|
||
, progress: function (pct) {
|
||
progressdom.css({ height: pct + "%" });
|
||
}
|
||
});
|
||
}
|
||
var html = '';
|
||
html += '<input type="hidden" name="' + opn.name + '"/>';
|
||
html += '<div class="ciy-upload"><div style="display:flex;flex-wrap: wrap;align-items: center;width:100%;height:100%;"></div></div>';
|
||
html += '<input type="file" style="display:none"' + (opn.num > 1 ? ' multiple' : '') + ' />';
|
||
if (opn.hasmore)
|
||
html += '<input type="hidden" name="' + opn.name + '_file"/>';
|
||
opn.dom.html(html);
|
||
var valuedom = opn.dom.children(0);
|
||
var showpdom = opn.dom.children(1);
|
||
var showuploaddom = showpdom.children(0);
|
||
var filedom = opn.dom.children(2);
|
||
var valnamedom = opn.dom.children(3);
|
||
this.setvalue = function (newvalue, from) {
|
||
if (newvalue !== undefined) {
|
||
var vals = newvalue.split("~");
|
||
var valnames = [];
|
||
if (from == 'init')
|
||
valnames = opn.valname.split("~");
|
||
nowvalue = [];
|
||
nowvalname = [];
|
||
for (var i = 0; i < opn.num; i++) {
|
||
if (!vals[i])
|
||
continue;
|
||
nowvalue.push(vals[i]);
|
||
nowvalname.push(valnames[i] ? valnames[i] : '');
|
||
}
|
||
}
|
||
var html = '';
|
||
for (var x in nowvalue) {
|
||
var val = nowvalue[x];
|
||
var realval = ciyfn.file_stor(val);
|
||
var ext = ciyfn.file_ext(val);
|
||
html += '<div class="item" title="' + nowvalname[x] + '" style="width:' + opn.showwh + ';height:' + opn.showwh + ';';
|
||
if (ciyfn.isimg(ext))
|
||
html += 'background-image:url(\'' + realval + '\');';
|
||
html += '">';
|
||
if (ciyfn.isimg(ext)) {
|
||
html += '<a href="' + realval + '" target="_blank" style="position: absolute;bottom: 0.2em;right: 0.2em;transform: scale(0.5);transform-origin: bottom right;line-height: 1em;">' + ext + '</a>';
|
||
} else {
|
||
html += '<a href="' + realval + '" target="_blank" style="font-size:calc(' + opn.showwh + ' / 3);">' + ext + '</a>';
|
||
}
|
||
html += '<i data-idx="' + x + '"></i></div>';
|
||
}
|
||
if (nowvalue.length < opn.num) {
|
||
var tip = '';
|
||
if (opn.num > 1) {
|
||
tip += '最多上传' + opn.num + '个\n';
|
||
tip += '还能上传' + (opn.num - nowvalue.length) + '个\n';
|
||
}
|
||
if (opn.type)
|
||
tip += '可上传' + opn.type.join(',') + '\n';
|
||
html += '<div class="add" title="' + tip + '" style="width:' + opn.showwh + ';height:' + opn.showwh + ';"><div class="progress"></div><svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M960 576a192 192 0 0 1-192 192 32 32 0 0 1 0-64 128 128 0 0 0 0-256h-32a224 224 0 0 0-448 0H256a128 128 0 0 0 0 256 32 32 0 0 1 0 64 192 192 0 0 1-24.96-384 287.36 287.36 0 0 1 561.92 0A192 192 0 0 1 960 576zM534.4 489.6a30.72 30.72 0 0 0-44.8 0L376.32 602.24a32 32 0 1 0 45.44 45.44l58.24-58.24V832a32 32 0 0 0 64 0V589.44l58.24 58.24a32 32 0 1 0 45.44-45.44z" fill="#1296db"></path></svg></div>';
|
||
}
|
||
showuploaddom.html(html);
|
||
this.value = nowvalue.join('~');
|
||
valuedom.val(this.value);
|
||
valnamedom.val(nowvalname.join('~'));
|
||
if (from == 'init' && !opn.initevent)
|
||
return;
|
||
if (typeof (this.onchange) == 'function')
|
||
this.onchange({ name: opn.name, dom: opn.dom, from: from, value: this.value });
|
||
}
|
||
var nowvalue = [];
|
||
var nowvalname = [];
|
||
this.setvalue(opn.value, 'init');
|
||
var enablepaste = false;
|
||
showuploaddom.on('click', 'i', function (e) {
|
||
var idx = toint($5(e.currentTarget).attr('data-idx'));
|
||
nowvalue.splice(idx, 1);
|
||
nowvalname.splice(idx, 1);
|
||
thos.setvalue(undefined, 'delete');
|
||
});
|
||
showuploaddom.on('click', '.add', function () {
|
||
filedom.trigger('click');
|
||
});
|
||
filedom.on('change', function (e) {
|
||
upfiles(e.currentTarget.files);
|
||
});
|
||
showuploaddom.on('mouseenter', function (e) {
|
||
enablepaste = true;
|
||
$5('.add>svg', showuploaddom).css({ opacity: 1 });
|
||
window.focus();
|
||
});
|
||
showuploaddom.on('mouseleave', function (e) {
|
||
enablepaste = false;
|
||
$5('.add>svg', showuploaddom).css({ opacity: 0.6 });
|
||
});
|
||
showuploaddom.on('dragover', function (e) {
|
||
e.preventDefault();
|
||
});
|
||
opn.dom.on('drop', function (e) {
|
||
e.preventDefault();
|
||
upfiles(e.dataTransfer.files);
|
||
});
|
||
$5(document).on('paste', function (e) {
|
||
if (!enablepaste)
|
||
return;
|
||
if (!e.clipboardData)
|
||
return console.warn('Cannot support clipboard pasting');
|
||
if (!e.clipboardData.items)
|
||
return console.warn('Paste clipboard without item');
|
||
var len = e.clipboardData.items.length;
|
||
var files = [];
|
||
for (var i = 0; i < len; i++) {
|
||
if (e.clipboardData.items[i].type.indexOf("image") == -1)
|
||
continue;
|
||
var blob = e.clipboardData.items[i].getAsFile();
|
||
files.push(blob);
|
||
}
|
||
upfiles(files);
|
||
});
|
||
}
|
||
ciycmpfunc.ciytextarea = function (opn) {
|
||
var thos = this;
|
||
this.onchange = opn.onchange;
|
||
opn.initevent = opn.initevent || opn.dom.hasattr('initevent');
|
||
opn.inpstyle = opn.inpstyle || opn.dom.attr('inpstyle') || '';
|
||
opn.total = opn.total || opn.dom.attr('total') || '';
|
||
opn.tab = opn.tab || opn.dom.attr('tab') || ' ';
|
||
opn.autoheight = opn.autoheight || opn.dom.hasattr('autoheight') || false;
|
||
opn.minheight = opn.minheight || opn.dom.attr('minheight') || '5em';
|
||
var html = '';
|
||
html += '<textarea name="' + opn.name + '" style="tab-size:4;transition:all 0.3s;padding:0.5em;line-height: 1.6em;min-height:' + opn.minheight + ';' + opn.inpstyle + '" ></textarea>';
|
||
html += '<span style="line-height: 1.3em;min-height: 1em;display: block;text-align: right;padding: 0;font-size: 0.8em;position: relative;"></span>';
|
||
opn.dom.html(html);
|
||
var valuedom = opn.dom.children(0);
|
||
var showtotaldom = opn.dom.children(1);
|
||
this.autoheight = function () {
|
||
if (!opn.autoheight)
|
||
return;
|
||
valuedom[0].style.overflow = 'hidden';
|
||
valuedom[0].style.resize = 'none';
|
||
valuedom[0].style.height = 'auto';
|
||
valuedom[0].style.height = valuedom[0].scrollHeight + 'px';
|
||
}
|
||
this.setvalue = function (newvalue, from) {
|
||
if (newvalue !== undefined) {
|
||
this.value = newvalue + '';
|
||
valuedom.val(this.value);
|
||
}
|
||
thos.autoheight();
|
||
var totaltxt = tostr(opn.total).replace('{word}', this.value.length).replace('{line}', this.value.split('\n').length);
|
||
if (totaltxt)
|
||
showtotaldom.show().html(totaltxt);
|
||
else
|
||
showtotaldom.hide();
|
||
if (from && typeof (this.onchange) == 'function')
|
||
this.onchange({ name: opn.name, dom: opn.dom, from: from, value: this.value });
|
||
}
|
||
this.setvalue(opn.value, opn.initevent ? 'init' : '');
|
||
valuedom.on('keyup', function (e) {
|
||
thos.value = valuedom.val();
|
||
thos.setvalue(undefined, 'keyup');
|
||
if (e.key == "@") {
|
||
if (typeof (opn.popfn) == 'function') {
|
||
opn.popfn(e);
|
||
}
|
||
}
|
||
});
|
||
valuedom.on('keydown', function (e) {
|
||
if (e.keyCode == 9 && opn.tab) {
|
||
e.preventDefault();
|
||
var indent = opn.tab;
|
||
if (e.shiftKey) {
|
||
var start = valuedom[0].selectionStart;
|
||
var end = valuedom[0].selectionEnd;
|
||
var selected = window.getSelection().toString();
|
||
var lines = selected.split('\n');
|
||
var newlines = [];
|
||
for (var i = 0; i < lines.length; i++) {
|
||
var line = lines[i];
|
||
if (line.length >= indent.length && line.substring(0, indent.length) == indent)
|
||
line = line.substring(indent.length);
|
||
newlines.push(line);
|
||
}
|
||
selected = newlines.join('\n');
|
||
valuedom.val(valuedom.val().substring(0, start) + selected + valuedom.val().substring(end));
|
||
valuedom[0].setSelectionRange(start, start + selected.length);
|
||
thos.autoheight();
|
||
} else {
|
||
var val = valuedom.val();
|
||
var start = valuedom[0].selectionStart;
|
||
var end = valuedom[0].selectionEnd;
|
||
var selected = window.getSelection().toString();
|
||
if (start != end && val[end - 1] == '\n') {
|
||
end--;
|
||
selected = selected.substring(0, selected.length - 1);
|
||
}
|
||
selected = indent + selected.replace(/\n/g, '\n' + indent);
|
||
valuedom.val(val.substring(0, start) + selected + val.substring(end));
|
||
if (start == end)
|
||
valuedom[0].selectionStart = valuedom[0].selectionEnd = start + selected.length;
|
||
else
|
||
valuedom[0].setSelectionRange(start, start + selected.length);
|
||
thos.autoheight();
|
||
}
|
||
}
|
||
if (e.keyCode == 13) {
|
||
//自动给组件增加高度,自适应高度
|
||
// setTimeout(function () {
|
||
// valuedom.css('height', height + 10);
|
||
// }, 100);
|
||
|
||
var currpos = valuedom[0].selectionStart;
|
||
var val = valuedom.val();
|
||
var line = val.substring(val.lastIndexOf('\n', currpos - 1) + 1, currpos);
|
||
if (line.length == 0)
|
||
return;
|
||
var space = '';
|
||
var spaces = 0;
|
||
while (line[spaces] == ' ' || line[spaces] == '\t') {
|
||
space += line[spaces];
|
||
spaces++;
|
||
}
|
||
if (spaces == 0)
|
||
return;
|
||
e.preventDefault();
|
||
valuedom.val(val.substring(0, currpos) + '\n' + space + val.substring(currpos));
|
||
var newpos = currpos + 1 + space.length;
|
||
valuedom[0].setSelectionRange(newpos, newpos);
|
||
thos.autoheight();
|
||
}
|
||
});
|
||
}
|
||
function ciycmp(opn) {
|
||
opn.dom = $5(opn.dom);
|
||
if (opn.dom.length == 0)
|
||
return;
|
||
opn.value = opn.value || opn.dom.attr('value') || '';
|
||
opn.name = opn.name || opn.dom.attr('com') || '';
|
||
var node = opn.dom.node().replace('ciy-', 'ciy');
|
||
if (!ciycmpfunc[node]) {
|
||
console.warn(node + '组件不存在');
|
||
return null;
|
||
}
|
||
var cths = new ciycmpfunc[node](opn);
|
||
if (!cths) {
|
||
console.warn(node + '组件初始化失败');
|
||
return null;
|
||
}
|
||
opn.dom[0].ciycmp = cths;
|
||
return cths;
|
||
}
|
||
/*
|
||
*****ciycmp.js*****
|
||
datetime 时间日期选择器
|
||
daterange 日期范围选择器
|
||
switch 开关
|
||
radio 单选
|
||
checkbox 复选
|
||
select 下拉选择,带搜索
|
||
upload 上传文件,拖入文件/粘贴截图/水印图/压缩缩小图
|
||
textarea 多行文本框,带统计、tab加空格、首行自动加空格
|
||
|
||
*****ciycmp2.js*****
|
||
selcas 联级select
|
||
selmulti 下拉多选,带搜索
|
||
inputbet 倍数数字输入
|
||
inputunitedit 三级单位
|
||
inputcyc 时间周期
|
||
md 简化Markdown编辑器
|
||
map 弹出地图选择经纬度
|
||
|
||
|
||
|
||
|
||
https://element-plus.org/zh-CN/component/overview.html
|
||
参考element及其他前端库样式。
|
||
原生实现,不依赖vue等第三方。
|
||
|
||
|
||
slider 滑块(表单)
|
||
aninum 动态数值动效
|
||
inputnumber 计数器(表单)
|
||
rate 评分(表单)
|
||
inputcolor 颜色选择器(表单)
|
||
notify 通知叠加
|
||
steps 步骤
|
||
swiper 轮播
|
||
timeline 时间线
|
||
drawer 侧边抽屉
|
||
calendar 日历显示
|
||
calwork 日历工作分布
|
||
seltransfer 穿梭框(表单) 重写
|
||
skeleton 骨架
|
||
seltree 树形选择(表单)
|
||
selmultitree 多选树形选择(表单)
|
||
selcas2 箭头式联级选择(表单)
|
||
*/ |