331 lines
10 KiB
HTML
331 lines
10 KiB
HTML
<!DOCTYPE html>
|
||
<html>
|
||
|
||
<head>
|
||
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
|
||
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
|
||
<link href="/jscss/style.css" rel="stylesheet" type="text/css" />
|
||
<script type="text/javascript" charset="utf-8" src="/jscss/theme.js"></script>
|
||
</head>
|
||
|
||
<body>
|
||
<div class="container">
|
||
<form class="search" onsubmit="search(this);return false;">
|
||
<div>
|
||
<div class="sinps"></div>
|
||
<div class="sbtns">
|
||
<button class="lang btn" type="submit">查询</button>
|
||
<a class="lang btn" onclick="multiadd()">添加新分类</a>
|
||
<a class="lang btn dag" onclick="deltree()">批量删除</a>
|
||
</div>
|
||
</div>
|
||
</form>
|
||
<div class='table'>
|
||
<div class="loading">Loading...</div>
|
||
<div class="list"></div>
|
||
</div>
|
||
</div>
|
||
<div id="alert_modifyupid" style="display:none;">
|
||
<div class="ciy-form">
|
||
<label style="min-width:3em;" class="lang">调整到</label>
|
||
<div>
|
||
<ciy-select com="newupid"></select>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="alert_multiadd" style="display:none;">
|
||
<div class="ciy-form">
|
||
<label style="min-width:3em;" class="lang">添加到</label>
|
||
<div>
|
||
<ciy-select com="upid"></select>
|
||
</div>
|
||
</div>
|
||
<div class="ciy-form v">
|
||
<label style="min-width:3em;"><span class="lang">分类名称</span><code class="lang">(一行一个)</code></label>
|
||
<div>
|
||
<ciy-textarea com="multi" minheight="30em"></ciy-textarea>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
||
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
||
<script type="text/javascript" src="/jscss/ciytable.js"></script>
|
||
<script type="text/javascript" src="../common.js"></script>
|
||
<script type="text/javascript">
|
||
'use strict';
|
||
var table;
|
||
var Glob = {};
|
||
ciyfn.pageload(function () {
|
||
$5(document).on('keydown', function (e) {
|
||
if (e.ctrlKey && e.keyCode == 83) {//Ctrl+S
|
||
e.preventDefault();
|
||
var upbtns = $5('.upbtn:not(.def)');
|
||
upbtns.each(function (dom) {
|
||
menubtn(dom, 'edit');
|
||
},0.5);
|
||
}
|
||
});
|
||
table = new ciyclass.table({
|
||
dom: '.table'
|
||
, url: 'init'
|
||
, thfield: function (name, key, field, json) {
|
||
if (key == 'name')
|
||
return '<a style="font-size: 1.5em;vertical-align: middle;padding-right: 0.5em;" onclick="$5(\'div[data-treeid][data-deep=0]\').trigger(\'click\');">⇅</a> ' + ciyfn.lang(name);
|
||
}
|
||
, fn_beforedata: function (json) {
|
||
json.list = ciyfn.conv_treerow(json.list, 0, 0);
|
||
ciyfn.fillsearch({
|
||
searchdom: '.search'
|
||
, data: json
|
||
});
|
||
return json;
|
||
}
|
||
, fn_trprop: function (data, json) {
|
||
var rettxt = ' data-upid="' + data['upid'] + '"';
|
||
if (data['_count'] == '0')
|
||
rettxt += ' data-search="ok"';
|
||
// if (data['_deep'] > 0)
|
||
// rettxt += ' style="display:none;"';
|
||
return rettxt;
|
||
}
|
||
, fn_tdcontent: function (key, datashow, field, data) {
|
||
if (key == 'csort') {
|
||
return '<input spellcheck="false" style="width:100%;" onkeydown="btnset(this)" type="text" name="' + key + '" value="' + datashow + '"/>';
|
||
}
|
||
if (key == '_btn') {
|
||
var html = '<a class="lang btn def upbtn" onclick="menubtn(this, \'edit\')">' + (data['id'] == 0 ? '新增' : '更新') + '</a>';
|
||
html += '<a class="lang btn" onclick="menubtn(this, \'tz\')">调整</a>';
|
||
return html;
|
||
}
|
||
if (key == 'name') {
|
||
var deep = toint(data['_deep']);
|
||
var html = ' '.repeat(deep);
|
||
if (data['_count'] > 0) {
|
||
html += '<span class="ciy-tree-dot">▶</span> <input style="margin-left: 0.3em;width:100%;" onkeydown="btnset(this)" type="text" name="' + key + '" value="' + data['name'] + '"/>';
|
||
} else {
|
||
if (deep > 0)
|
||
html += ' ';
|
||
html += '<input style="width:100%;" onkeydown="btnset(this)" type="text" name="' + key + '" value="' + data['name'] + '"/>';
|
||
}
|
||
return {
|
||
divprop: (data['_count'] > 0 ? ' data-treeid="' + data['id'] + '"' : '') + ' data-deep="' + data['_deep'] + '" style="display: flex;" class="ciy-tree-spread"'// class="ciy-tree-spread"
|
||
, datashow: html
|
||
};
|
||
}
|
||
}
|
||
, fn_done: function () {
|
||
table.tree();
|
||
var doms = $5('[com=isuse]');
|
||
for (var i = 0; i < doms.length; i++) {
|
||
ciycmp({
|
||
dom: doms[i], onchange: function (e) {
|
||
if (e.from == 'init') return;
|
||
btnset(e.dom);
|
||
}
|
||
});
|
||
}
|
||
var doms = $5('ciy-select[com]');
|
||
for (var i = 0; i < doms.length; i++) {
|
||
ciycmp({
|
||
dom: doms[i], range:'adminuser', onchange: function (e) {
|
||
if (e.from == 'init') return;
|
||
btnset(e.dom);
|
||
}
|
||
});
|
||
}
|
||
}
|
||
});
|
||
table.callpage(1);
|
||
});
|
||
function search(dom) {
|
||
Glob.key = ciyfn.getform(dom);
|
||
$5('[data-search]').each(function (rdom) {
|
||
var bshow = true;
|
||
for (var k in Glob.key) {
|
||
if (!Glob.key[k])
|
||
continue;
|
||
var val = $5('[name=' + k + ']', rdom).val();
|
||
if (val.indexOf(Glob.key[k]) == -1) {
|
||
bshow = false;
|
||
break;
|
||
}
|
||
}
|
||
rdom.style.display = bshow ? '' : 'none';
|
||
});
|
||
}
|
||
function btnset(dom) {
|
||
var domtr = $5(dom).parent('tr');
|
||
$5('.btn.upbtn', domtr).removeClass('def');
|
||
}
|
||
function multiadd() {
|
||
ciyfn.alert({
|
||
title: '添加新分类'
|
||
, width: 'mb'
|
||
, contentstyle: 'overflow:hidden;'
|
||
, content: document.getElementById("alert_multiadd").innerHTML
|
||
, fn_showed: function (doc, dom) {
|
||
ciycmp({ dom: $5('[com="upid"]', dom), range: fillrange(), value: 0 });
|
||
ciycmp({ dom: $5('[com="multi"]', dom) });
|
||
}
|
||
, btns: ["添加", "*关闭"]
|
||
, cb: function (opn) {
|
||
if (opn.btn == "关闭")
|
||
return opn.close();
|
||
if (ciyfn.throttle(opn.dombtn)) return;
|
||
ciyfn.callfunc('multiadd', opn.inputs, function (json) {
|
||
ciyfn.toast('操作成功', function () {
|
||
opn.close();
|
||
ciyfn.sendsignal(window.top, 'manage_refresh');
|
||
});
|
||
});
|
||
}
|
||
});
|
||
}
|
||
function datatxt() {
|
||
var tdata = new Array();
|
||
for (var i in table.data) {
|
||
if (table.data[i].isuse != 1)
|
||
continue;
|
||
tdata.push(table.data[i]);
|
||
}
|
||
tdata.sort((a, b) => toint(b.csort) - toint(a.csort));
|
||
function deeptxt(tdata, upid = 0, indent = '') {
|
||
var menutxt = '';
|
||
for (var i in tdata) {
|
||
if (tdata[i].upid != upid)
|
||
continue;
|
||
menutxt += indent + tdata[i].name + '\n';
|
||
if (tdata[i].upid === upid)
|
||
menutxt += deeptxt(tdata, tdata[i].id, indent + ' ');
|
||
}
|
||
return menutxt;
|
||
}
|
||
ciyfn.alert({
|
||
title: '分类结构'
|
||
, width: 'mb'
|
||
, height: 'pc'
|
||
, content: '<textarea style="height: 100%;">' + deeptxt(tdata) + '</textarea>'
|
||
});
|
||
}
|
||
|
||
function menubtn(dom, btn) {
|
||
var domtr = $5(dom).parent('tr');
|
||
var id = toint(domtr.attr('data-id'));
|
||
if (btn == 'edit') {
|
||
var postparam = ciyfn.getform(dom, 'TR');
|
||
postparam.id = id;
|
||
postparam.upid = table.data[id].upid;
|
||
postparam.cbid = table.once.cbid;
|
||
ciyfn.callfastfunc(dom, '', 'update', postparam, function (json) {
|
||
$5(dom).addClass('def');
|
||
});
|
||
}
|
||
if (btn == 'tz') {
|
||
ciyfn.alert({
|
||
title: '调整分类层级'
|
||
, content: document.getElementById("alert_modifyupid").innerHTML
|
||
, fn_showed: function (doc, dom) {
|
||
if (id == 0)
|
||
return;
|
||
ciycmp({ dom: $5('[com="newupid"]', dom), range: fillrange(), value: table.data[id].upid });
|
||
}
|
||
, btns: ["调整", "*关闭"]
|
||
, cb: function (opn) {
|
||
if (opn.btn == "关闭")
|
||
return opn.close();
|
||
opn.inputs.id = id;
|
||
if (ciyfn.throttle(opn.dombtn)) return;
|
||
ciyfn.callfunc('modifyupid', opn.inputs, function (json) {
|
||
opn.close();
|
||
ciyfn.sendsignal(window.top, 'manage_refresh');
|
||
});
|
||
}
|
||
});
|
||
}
|
||
}
|
||
function fillrange() {
|
||
var tdata = [];
|
||
for (var i in table.data)
|
||
tdata.push(table.data[i]);
|
||
tdata.sort((a, b) => toint(b.csort) - toint(a.csort));
|
||
var ranges = [];
|
||
ranges.push({ id: 0, name: '顶层' });
|
||
deephtml(tdata, 0, 1, 9);
|
||
function deephtml(tdata, upid, deep, maxdeep) {
|
||
if (deep > maxdeep)
|
||
return;
|
||
for (var i in tdata) {
|
||
if (tdata[i].upid != upid)
|
||
continue;
|
||
ranges.push({ id: tdata[i].id, name: ' '.repeat(deep) + ciyfn.lang(tdata[i].name) });
|
||
deephtml(tdata, tdata[i].id, deep + 1, maxdeep);
|
||
}
|
||
}
|
||
return ranges;
|
||
}
|
||
function fillhtmloption(selid) {
|
||
var html = '';
|
||
var tdata = new Array();
|
||
for (var i in table.data)
|
||
tdata.push(table.data[i]);
|
||
tdata.sort((a, b) => toint(b.csort) - toint(a.csort));
|
||
html += '<option value="0">【顶层】</option>';
|
||
html += deephtml(tdata, 0, selid, 1, 9);
|
||
|
||
function deephtml(tdata, upid, selid, deep, maxdeep) {
|
||
if (deep > maxdeep)
|
||
return '';
|
||
var htmld = '';
|
||
for (var i in tdata) {
|
||
if (tdata[i].upid != upid)
|
||
continue;
|
||
htmld += '<option value="' + tdata[i].id + '"';
|
||
if (tdata[i].id == selid)
|
||
htmld += ' selected="true"';
|
||
htmld += '>' + ' '.repeat(deep) + tdata[i].name + '</option>';
|
||
htmld += deephtml(tdata, tdata[i].id, selid, deep + 1, maxdeep);
|
||
}
|
||
return htmld;
|
||
}
|
||
return html;
|
||
}
|
||
function deltree() {
|
||
var array = [];
|
||
$5('[data-id]', '.table').each(function (dom) {
|
||
if (!$5(dom).hasClass("selected"))
|
||
return;
|
||
var deep = toint($5('[data-deep]', dom).attr("data-deep"));
|
||
array.push({ id: $5(dom).attr("data-id"), deep: deep });
|
||
});
|
||
if (array.length == 0)
|
||
return ciyfn.toast("请至少选择一条信息");
|
||
ciyfn.alert('已选<span class="txt-lggg px1">' + array.length + '</span>条,确认批量删除?', function (opn) {
|
||
opn.close();
|
||
if (opn.btn == "关闭")
|
||
return;
|
||
function deldeep(deep) {
|
||
if (deep < 0)
|
||
return;
|
||
var ids = [];
|
||
for (var j = 0; j < array.length; j++) {
|
||
if (array[j].deep == deep) {
|
||
ids.push(array[j].id);
|
||
}
|
||
}
|
||
if (ids.length == 0)
|
||
return deldeep(deep - 1);
|
||
var postparam = {};
|
||
postparam.ids = ids.join(",");
|
||
ciyfn.callfunc('del', postparam, function (json) {
|
||
table.delline(json);
|
||
deldeep(deep - 1);
|
||
});
|
||
}
|
||
deldeep(9);
|
||
}, { btns: ["删除", "*关闭"] });
|
||
}
|
||
</script>
|
||
</body>
|
||
|
||
</html> |