Commit 82226365 by aa.gusti

perubahan detable column filtering

1 parent 1200c8be
...@@ -488,15 +488,19 @@ def add_view_config(config, module, view_name): ...@@ -488,15 +488,19 @@ def add_view_config(config, module, view_name):
class_name = f"{view_name}{class_view}" class_name = f"{view_name}{class_view}"
attr = f"view_{row.def_func}" attr = f"view_{row.def_func}"
log.debug(f"Class: {class_name} Attr: {attr}") log.debug(f"Class: {class_name} Attr: {attr}")
_views = importlib.import_module(class_name) try:
views = _views _views = importlib.import_module(class_name)
if row.template == "json": views = _views
renderer = row.template if row.template == "json":
else: renderers = row.template
renderer = "views/templates/" + row.template else:
config.add_view(views.Views, attr=f"{attr}", renderers = "views/templates/" + row.template
route_name=row.kode, permission=row.permission, config.add_view(views.Views, attr=f"{attr}",
renderer=renderer) route_name=row.kode, permission=row.permission,
renderer=renderers)
except Exception as e:
log.error(str(e))
config.scan('.') config.scan('.')
......
...@@ -277,6 +277,126 @@ class BaseView(object): ...@@ -277,6 +277,126 @@ class BaseView(object):
cols=self.list_cols, buttons=self.list_buttons) cols=self.list_cols, buttons=self.list_buttons)
return arg return arg
def view_act(self, **kwargs):
url_dict = self.req.matchdict
if url_dict['act'] == 'grid':
return self.get_list(**kwargs)
elif url_dict['act'] == 'csv':
return self.csv_response(**kwargs)
elif url_dict['act'] == 'pdf':
return self.pdf_response(**kwargs)
else:
return self.next_act(**kwargs)
def get_list(self, **kwargs):
url = []
select_list = {}
if not self.columns:
columns = []
for d in self.list_schema():
global_search = True
search_method = hasattr(d, "search_method") \
and getattr(d, "search_method") or "string_contains"
if hasattr(d, "global_search"):
if d.global_search == False:
global_search = False
if hasattr(d, "field"):
if type(d.field) == str:
columns.append(
ColumnDT(getattr(self.table, d.field),
mData=d.name,
global_search=global_search,
search_method=search_method))
else:
columns.append(
ColumnDT(d.field, mData=d.name,
global_search=global_search,
search_method=search_method
))
else:
columns.append(
ColumnDT(getattr(self.table, d.name),
mData=d.name,
global_search=global_search,
search_method=search_method))
if hasattr(d, "widget"):
if d.widget:
log.debug(d.widget)
if type(d.widget) is SelectWidget:
select_list[d.name] = d.widget.values
if hasattr(d, "url"):
url.append(d.name)
else:
columns = self.columns
query = self.db_session.query().select_from(self.table)
table_join = kwargs.get('table_join')
if table_join is not None:
query = table_join(query, **kwargs)
else:
query = self.list_join(query, **kwargs)
if self.req.user and self.req.user.company_id and hasattr(self.table, "company_id"):
query = query.filter(
self.table.company_id == self.req.user.company_id)
table_filter = kwargs.get('table_filter')
if table_filter is not None:
query = table_filter(query, **kwargs)
else:
query = self.list_filter(query, **kwargs)
# log.debug(str(columns))
# qry = query.add_columns(*[c.sqla_expr for c in columns])
# log.debug(str(qry))
row_table = DataTables(self.req.GET, query, columns)
result = row_table.output_result()
data = result and "data" in result and result["data"] or {}
for res in data:
for k in res:
if k in select_list.keys():
vals = select_list[k]
for r in vals:
if r[0] == res[k]:
res[k] = r[1]
""
# for k, v in d.items():
# if k in url and v:
# link = "/".join([self.home, nik_url, v])
# d[k] =f'<a href="{link}" target="_blank">View</a>'
return result
def list_join(self, query, **kwargs):
return query
def list_filter(self, query, **kwargs):
return query
def next_act(self, **kwargs):
url_dict = self.req.matchdict
raise HTTPNotFound
def pdf_response(self, **kwargs):
from opensipkd.base.tools.report import jasper_export
filename = jasper_export(self.report_file)
return file_response(self.req, filename=filename[0])
def csv_response(self, **kwargs):
query = self.table.query_register()
row = query.first()
header = row._mapping.keys()
rows = [list(item) for item in query.all()]
filename = f"{get_random_string(16)}.csv"
value = {
'header': header,
'rows': rows,
}
return csv_response(self.req, value, filename)
def get_bindings(self, row=None): def get_bindings(self, row=None):
return {"row": row} return {"row": row}
...@@ -440,120 +560,6 @@ class BaseView(object): ...@@ -440,120 +560,6 @@ class BaseView(object):
def after_view(self, **kwargs): def after_view(self, **kwargs):
return self.route_list(**kwargs) return self.route_list(**kwargs)
def pdf_response(self, **kwargs):
from opensipkd.base.tools.report import jasper_export
filename = jasper_export(self.report_file)
return file_response(self.req, filename=filename[0])
def csv_response(self, **kwargs):
query = self.table.query_register()
row = query.first()
header = row._mapping.keys()
rows = [list(item) for item in query.all()]
filename = f"{get_random_string(16)}.csv"
value = {
'header': header,
'rows': rows,
}
return csv_response(self.req, value, filename)
def list_join(self, query, **kwargs):
return query
def list_filter(self, query, **kwargs):
return query
def get_list(self, **kwargs):
url = []
select_list = {}
if not self.columns:
columns = []
for d in self.list_schema():
global_search = True
if hasattr(d, "searchable"):
if d.searchable == False:
global_search = False
if hasattr(d, "field"):
if type(d.field) == str:
columns.append(
ColumnDT(getattr(self.table, d.field),
mData=d.name,
global_search=global_search))
else:
columns.append(
ColumnDT(d.field, mData=d.name,
global_search=global_search
))
else:
columns.append(
ColumnDT(getattr(self.table, d.name), mData=d.name,
global_search=global_search))
if hasattr(d, "widget"):
if d.widget:
log.debug(d.widget)
if type(d.widget) is SelectWidget:
select_list[d.name] = d.widget.values
if hasattr(d, "url"):
url.append(d.name)
else:
columns = self.columns
query = self.db_session.query().select_from(self.table)
table_join = kwargs.get('table_join')
if table_join is not None:
query = table_join(query, **kwargs)
else:
query = self.list_join(query, **kwargs)
if self.req.user and self.req.user.company_id and hasattr(self.table, "company_id"):
query = query.filter(
self.table.company_id == self.req.user.company_id)
table_filter = kwargs.get('table_filter')
if table_filter is not None:
query = table_filter(query, **kwargs)
else:
query = self.list_filter(query, **kwargs)
# log.debug(str(columns))
# qry = query.add_columns(*[c.sqla_expr for c in columns])
# log.debug(str(qry))
row_table = DataTables(self.req.GET, query, columns)
result = row_table.output_result()
data = result and "data" in result and result["data"] or {}
for res in data:
for k in res:
if k in select_list.keys():
vals = select_list[k]
for r in vals:
if r[0] == res[k]:
res[k] = r[1]
""
# for k, v in d.items():
# if k in url and v:
# link = "/".join([self.home, nik_url, v])
# d[k] =f'<a href="{link}" target="_blank">View</a>'
return result
def next_act(self, **kwargs):
url_dict = self.req.matchdict
raise HTTPNotFound
def view_act(self, **kwargs):
url_dict = self.req.matchdict
if url_dict['act'] == 'grid':
return self.get_list(**kwargs)
elif url_dict['act'] == 'csv':
return self.csv_response(**kwargs)
elif url_dict['act'] == 'pdf':
return self.pdf_response(**kwargs)
else:
return self.next_act(**kwargs)
def get_captcha_url(self): def get_captcha_url(self):
return get_urls("/captcha/") + get_captcha(self.req) return get_urls("/captcha/") + get_captcha(self.req)
......
from datatables.clean_regex import clean_regex from datatables.clean_regex import clean_regex
from datatables.search_methods import SEARCH_METHODS
from sqlalchemy import ( from sqlalchemy import (
String, Text, String, Text,
or_, or_,
...@@ -98,4 +99,4 @@ class DataTables(BaseDataTables): ...@@ -98,4 +99,4 @@ class DataTables(BaseDataTables):
# log.info(str(sort_expressions)) # log.info(str(sort_expressions))
for e in sort_expressions: for e in sort_expressions:
print(e) print(e)
self.sort_expressions = sort_expressions self.sort_expressions = sort_expressions
\ No newline at end of file \ No newline at end of file
import logging
import colander import colander
from deform import (widget, )
from pyramid.view import view_config
from sqlalchemy.orm import aliased
from opensipkd.models import (DBSession, Route, )
from . import BaseView, get_urls
_logging = logging.getLogger(__name__)
@colander.deferred
def route_widget(node, kw):
values = kw.get('route_list', [])
return widget.AutocompleteInputWidget(values=values, placeholder="Pilih Induk")
def route_widget_form():
return widget.AutocompleteInputWidget(
size=60, min_length=3,
requirements=(("typeahead", None), ("deform", None),
{"js": "opensipkd.base:static/js/form/departemen_form.js"}),
)
class EditSchema(colander.Schema):
id = colander.SchemaNode(
colander.Integer(), widget=widget.HiddenWidget())
kode = colander.SchemaNode(
colander.String(), title='Kode')
path = colander.SchemaNode(
colander.String(), title='Path')
nama = colander.SchemaNode(
colander.String(), title='Nama')
module = colander.SchemaNode(
colander.String(),
missing=colander.drop,
description="Nama Aplikasi Untuk Filtering"
)
is_menu = colander.SchemaNode(
colander.Integer(),
missing=colander.drop,
widget=widget.CheckboxWidget(false_val="0", true_val="1"),
label="Checklist jika path merupakan Menu")
parent_id = colander.SchemaNode(
colander.Integer(),
# widget=widget.HiddenWidget,
missing=colander.drop,
oid="parent_id"
)
parent_nm = colander.SchemaNode(
colander.String(),
widget=route_widget,
missing=colander.drop,
oid="parent_nm"
)
order_id = colander.SchemaNode(
colander.Integer(),
missing=colander.drop,
description="Pengurutan Menu")
permission = colander.SchemaNode(
colander.String(),
missing=colander.drop,
description="Nama permission untuk menentukan hak akses"
)
class_view = colander.SchemaNode(
colander.String(),
missing=colander.drop,
description="Nama file tanpa extension yang berisi class Views")
def_func = colander.SchemaNode(
colander.String(),
missing=colander.drop,
description="Nama fungsi dalam class"
)
template = colander.SchemaNode(
colander.String(),
missing=colander.drop,
default="form.pt",
descripton="Nama File template atau 'json' atau renderer")
icon = colander.SchemaNode(
colander.String(),
missing=colander.drop,
)
type = colander.SchemaNode(
colander.Integer(),
widget=widget.CheckboxWidget(false_val="0", true_val="1"),
label="Checklist jika type url adalah json")
status = colander.SchemaNode(
colander.String(),
widget=widget.CheckboxWidget(false_val="0", true_val="1"))
alias = aliased(Route)
from opensipkd.base.views import BaseView
from opensipkd.base.views.user import AddSchema
class ListSchema(colander.Schema):
id = colander.SchemaNode(
colander.Integer(),
widget=widget.HiddenWidget(), visible=False,
searchable=False,
global_search=False,
)
kode = colander.SchemaNode(
colander.String(),
searchable=True)
parent = colander.SchemaNode(
colander.String(),
field=alias.kode,
)
order_id = colander.SchemaNode(
colander.String(),
title="Order",
global_search=False,
searchable=False,
)
is_menu = colander.SchemaNode(
colander.Integer(),
widget=widget.CheckboxWidget(false_val="0", true_val="1"),
title="Menu",
searchable=True,
search_method="numeric",
global_search=False,
)
class AddSchema(colander.Schema): nama = colander.SchemaNode(
test = colander.SchemaNode(colander.String()) colander.String(), title='Nama',
searchable=True)
path = colander.SchemaNode(
colander.String(), title='Path',
searchable=True)
template = colander.SchemaNode(
colander.String(),
searchable=False,
global_search=False,
)
type = colander.SchemaNode(
colander.Boolean(),
widget=widget.CheckboxWidget(false_val="0", true_val="1"),
searchable=True,
search_method="numeric",
global_search=False,
width="50pt")
status = colander.SchemaNode(
colander.Boolean(),
widget=widget.CheckboxWidget(false_val="0", true_val="1"),
searchable=True,
search_method="numeric",
global_search=False,
)
class Views(BaseView): class Views(BaseView):
def __init__(self, request): def __init__(self, request):
super().__init__(request) super().__init__(request)
self.add_schema = AddSchema self.form_params = dict(scripts="")
self.list_url = 'routes'
self.list_route = 'routes'
# self.list_buttons = (btn_view, btn_edit, btn_delete)
self.list_buttons = ()
# self.add_schema = AddSchema
self.edit_schema = EditSchema
self.table = Route
self.list_schema = ListSchema
self.allow_delete = True
self.form_scripts = """
$('#parent_nm').bind('typeahead:selected', function (obj, datum, name) {
$('#parent_id').val(datum.id);
$('#parent_kd').val(datum.kode);
console.log(datum.kode);
});
$('#parent_nm').on('input',
function (e) {
let val = $('#parent_nm').val();
if (val === null || val === "") {
$('#parent_id').val("");
$('#parent_kd').val("");
}
});
"""
@view_config(
route_name='routes', renderer='templates/table.pt',
permission='edit-title')
def view_list(self):
kwargs = {"allow_view": False,
"allow_delete": True,
"state_save": True}
return super().view_list(**kwargs)
def form_validator(self, form, values):
def err_nama():
raise colander.Invalid(
form,
'Nama %s sudah digunakan oleh ID %s' % (values['nama'], found.id)
)
def err_kode():
raise colander.Invalid(
form,
'Kode %s sudah digunakan oleh ID %s' % (values['kode'], found.id)
)
if 'id' in form.request.matchdict:
uid = form.request.matchdict['id']
q = DBSession.query(Route).filter_by(id=uid)
row = q.first()
else:
row = None
# cek nama
q = Route.query(). \
filter_by(nama=values['nama'])
found = q.first()
if row:
if found and found.id != row.id:
err_nama()
elif found:
err_nama()
# cek kode
q = Route.query(). \
filter_by(kode=values['kode'])
found = q.first()
if row:
if found and found.id != row.id:
err_kode()
elif found:
err_kode()
@view_config(
route_name='routes-act', renderer='json', permission='edit-title')
def view_act(self):
return super().view_act()
@view_config(
route_name='routes-edit', renderer='templates/form.pt',
permission='edit-title')
def view_edit(self):
return super().view_edit()
@view_config(
route_name='routes-delete', renderer='templates/form.pt',
permission='edit-title')
def view_delete(self):
return super().view_delete()
def next_act(self, **kwargs):
row = kwargs.get("row")
params = self.req.params
url_dict = self.req.matchdict
if url_dict['act'] == 'hon':
term = 'term' in params and params['term'] or ''
q = Route.query(). \
filter(Route.status == 1,
Route.kode.ilike('%%%s%%' % term)) \
.order_by(Route.kode)
r = []
for k in q.all():
d = dict(id=k.id, value=k.kode, kode=k.kode, nama=k.nama)
r.append(d)
return r
def get_bindings(self, row=None):
return {"route_list": get_urls(f"{self.req.route_url('routes')}/hon/act")}
def view_reports(self): def get_values(self, row, istime=False, null=False):
c values = super().get_values(row, istime, null)
return super().view_add() if row.parent_id:
route = Route.query_id(row.parent_id).first()
values["parent_nm"] = route and route.kode or ""
_logging.debug(values)
return values
def view_report(self):
c
return super().view_add()
\ No newline at end of file \ No newline at end of file
def list_join(self, query, **kwargs):
return query.outerjoin(alias, Route.parent_id == alias.id)
\ No newline at end of file \ No newline at end of file
...@@ -78,11 +78,19 @@ ...@@ -78,11 +78,19 @@
<input id="password" type="password" name="password" class="form-control"> <input id="password" type="password" name="password" class="form-control">
<b class="tooltip tooltip-top-right"><i class="fa fa-lock txt-color-teal"></i> ISI <b class="tooltip tooltip-top-right"><i class="fa fa-lock txt-color-teal"></i> ISI
DENGAN PASSWORD ANDA</b> </label> DENGAN PASSWORD ANDA</b> </label>
<div class="note"> </section>
<a id="lupa" name="lupa" <section>
href="${home}/reset-password">Lupa Password?</a> <div class="form-group">
<label class=" checkbox checkbox-inline">
<input id="show_password" type="checkbox" style="left: 20px;">Show Password</label>
<div class="note">
<a href="${home}/reset-password" id="lupa" >Lupa Password?</a>
</div>
</div> </div>
</section> </section>
<section> <section>
<div tal:condition="'csrf_token' in form"> <div tal:condition="'csrf_token' in form">
<div tal:define="field form['csrf_token']" style="display: none;"> <div tal:define="field form['csrf_token']" style="display: none;">
...@@ -187,5 +195,17 @@ ...@@ -187,5 +195,17 @@
}); });
}); });
</script> </script>
<script>
$(document).ready(function () {
$("#show_password").on("click", function () {
var x = $("#password");
if (x.attr("type") === "password") {
x.attr("type","text");
} else {
x.attr("type","password");
}
});
});
</script>
</body> </body>
</html> </html>
\ No newline at end of file \ No newline at end of file
...@@ -57,6 +57,9 @@ class Login(CSRFSchema): ...@@ -57,6 +57,9 @@ class Login(CSRFSchema):
password = colander.SchemaNode( password = colander.SchemaNode(
colander.String(), widget=widget.PasswordWidget()) colander.String(), widget=widget.PasswordWidget())
# def after_bind(self, schema, kwargs): # def after_bind(self, schema, kwargs):
# request = kwargs["request"] # request = kwargs["request"]
# csrf_token = new_csrf_token(request) # csrf_token = new_csrf_token(request)
...@@ -555,4 +558,4 @@ def view_reset_password(request): ...@@ -555,4 +558,4 @@ def view_reset_password(request):
route_name='reset-password-sent', route_name='reset-password-sent',
renderer='templates/reset-password-sent.pt') renderer='templates/reset-password-sent.pt')
def view_reset_password_sent(request): def view_reset_password_sent(request):
return dict(title=_('Reset password')) return dict(title=_('Reset password'))
\ No newline at end of file \ No newline at end of file
...@@ -6,7 +6,7 @@ import re ...@@ -6,7 +6,7 @@ import re
import colander import colander
import deform import deform
from deform import compat, Form from deform import compat
from deform import field from deform import field
from . import widget from . import widget
...@@ -190,7 +190,7 @@ class DeTable(field.Field): ...@@ -190,7 +190,7 @@ class DeTable(field.Field):
headers = [] headers = []
cols2 = [] cols2 = []
for f in schema: for f in schema:
d = {'data': f.name} d = {'data': f.name, 'title': f.title}
data = [] data = []
if hasattr(f, 'width'): if hasattr(f, 'width'):
d["width"] = f.width d["width"] = f.width
...@@ -208,12 +208,13 @@ class DeTable(field.Field): ...@@ -208,12 +208,13 @@ class DeTable(field.Field):
if hasattr(f, 'orderable'): if hasattr(f, 'orderable'):
d["orderable"] = f.orderable d["orderable"] = f.orderable
data.append(f"orderable: {f.orderable}") data.append(f"orderable: {f.orderable}")
if hasattr(f, "url"): if hasattr(f, "url"):
d["url"] = f.url d["url"] = f.url
# request = kw.get("request") # # request = kw.get("request")
# if request: # # if request:
# d["url"] = request.static_url(f.url) # # d["url"] = request.static_url(f.url)
# log.debug(d["url"]) # # log.debug(d["url"])
if hasattr(f, "action"): if hasattr(f, "action"):
d["action"] = f.action d["action"] = f.action
...@@ -224,8 +225,17 @@ class DeTable(field.Field): ...@@ -224,8 +225,17 @@ class DeTable(field.Field):
d["visible"] = False d["visible"] = False
if isinstance(f.widget, deform.widget.CheckboxWidget): if isinstance(f.widget, deform.widget.CheckboxWidget):
d["checkbox"] = True d["checkbox"] = True
d["check_val"] = [f.widget.true_val, f.widget.false_val]
else: else:
d["checkbox"] = False d["checkbox"] = False
# if type(f.typ) == colander.Integer:
# d["field_typ"] = f"int"
# elif type(f.typ) == colander.Boolean:
# d["field_typ"] = f"bool"
# elif type(f.typ) in (colander.Float, colander.Money):
# d["field_typ"] = f"float"
# else:
# d["field_typ"] = f"str"
thousand = hasattr(f, 'thousand') and f.thousand or None thousand = hasattr(f, 'thousand') and f.thousand or None
separator = thousand and "separator" in thousand and thousand[ separator = thousand and "separator" in thousand and thousand[
...@@ -244,7 +254,7 @@ class DeTable(field.Field): ...@@ -244,7 +254,7 @@ class DeTable(field.Field):
d["className"] = "text-right" d["className"] = "text-right"
columns.append(d) columns.append(d)
headers.append(f.title) headers.append(f.title)
cols2.append(data) # cols2.append(data)
self.headers = headers self.headers = headers
self.head = headers self.head = headers
......
...@@ -37,13 +37,12 @@ ...@@ -37,13 +37,12 @@
</div> </div>
<div role="content"> <div role="content">
<div class="widget-body"> <div class="widget-body">
<table tal:condition="filter_columns" id="${tableid}-form-filter"> <div class="row" tal:condition="filter_columns" >
<thead> <div id="${tableid}-form-filter-container" class="col-md-6">
<tr tal:repeat="child field"> <div id="${tableid}-form-filter" class="collapse">
<th>${child.title}</th> </div>
</tr> </div>
</thead> </div>
</table>
<table id="${tableid}" <table id="${tableid}"
class="table table-bordered table-hover table-condensed dataTable no-footer"> class="table table-bordered table-hover table-condensed dataTable no-footer">
...@@ -54,9 +53,9 @@ ...@@ -54,9 +53,9 @@
</thead> </thead>
<tbody></tbody> <tbody></tbody>
<tfoot> <!--? <tfoot>-->
<th tal:repeat="child field">${child.title}</th> <!--? <th talrepeat="child field">${child.title}</th>-->
</tfoot> <!--? </tfoot>-->
</table> </table>
</div> </div>
<!-- widget-body --> <!-- widget-body -->
...@@ -89,8 +88,15 @@ ...@@ -89,8 +88,15 @@
, 4000); , 4000);
} }
var $btnFilter = $("<a/>", {
"href": "#${tableid}-form-filter",
"data-toggle": "collapse",
"class": "btn btn-warning dropdown"
}).html("Filters");
let tb_array = [ let tb_array = [
'<div class="btn-group pull-left">', '<div class="btn-group pull-left">',
$btnFilter.get(0).outerHTML,
'${structure:buttons}', '${structure:buttons}',
' &nbsp;', ' &nbsp;',
'</div>', '</div>',
...@@ -213,28 +219,69 @@ ...@@ -213,28 +219,69 @@
${tableid}Params.ajax = o${tableid}Url; ${tableid}Params.ajax = o${tableid}Url;
} }
<tal:block tal:condition="filter_columns"> //<talblock talcondition="filter_columns">
$('#${tableid}-form-filter thead th').each(function (i) { //console.log(${tableid}Columns);
console.log($(this).index()); var html = "";
var title = $(this).text(); for (let co in ${tableid}Columns) {
// var title = $('#${tableid}-form-filter thead th') var col = ${tableid}Columns[co];
// .eq($(this).index()) if (col.searchable === true) {
// .text(); var col_id = "${tableid}-" + col.data;
$(this).html( var col_val = localStorage.getItem(col_id);
'<input type="text" placeholder="' + title + '" data-index="' + i + '" />' if (col_val === null || col_val === undefined) {
); col_val = "";
});
$("#${tableid}-form-filter").on('keyup', 'th input', function (e) {
var code = e.keyCode || e.which;
if (code === 13) {
o${tableid}
.column($(this).data('index'))
.search(this.value)
.draw();
} }
}); var txt = 'id="' + col_id + '" data-index="' + co + '" value="' + col_val + '"';
</tal:block>
html += '<div class="form-group">';
if (col.checkbox === true) {
var radioVal = [["", 'Semua'], [col.check_val[0], 'Aktif'], [col.check_val[1], 'Pasif']];
html += '<label class="" for="' + col_id + '">' + col.title + '</label>';
html += '<div class="input-group" id="' + col_id + '">';
for (var rdo = 0; rdo < radioVal.length; rdo++) {
var selected = (col_val === radioVal[rdo][0]) ? "checked" : "";
txt = 'id="' + col_id + '-' + radioVal[rdo][0] + '" ' +
'class="${tableid}-control-filter" data-index="' + co + '"' +
'name="' + col_id + '" value="' + radioVal[rdo][0] + '" '+selected;
html += '<label class="radio-inline">';
html += '<input type="radio" ' + txt + '/>';
html += '<label for="' + col_id + '-' + radioVal[rdo][0] + '">' + radioVal[rdo][1] + '</label>';
html += '</label>';
}
html += '</div>';
} else
html += '<input type="text" class="form-control ' + "${tableid}" + '-control-filter" placeholder="' + col.title + '" ' + txt + '/>';
html += '</div>';
}
}
$("#${tableid}-form-filter").html(html);
$(".${tableid}-control-filter").on('keyup', function (e) {
var code = e.keyCode || e.which;
if (code === 13) {
o${tableid}
.column($(this).data('index'))
.search(this.value)
.draw();
localStorage.setItem($(this).attr('id'), $(this).val());
}
});
$(".${tableid}-control-filter").on('click', function (e) {
var code = e.keyCode || e.which;
if ($(this).attr("type") === 'radio') {
var col_id=$(this).attr('id').split("-");
col_id.length=2;
col_id=col_id.join("-");
o${tableid}
.column($(this).data('index'))
.search(this.value)
.draw();
localStorage.setItem(col_id, $(this).val());
}
});
//</talblock>
o${tableid} = $('#${tableid}').DataTable(${tableid}Params); o${tableid} = $('#${tableid}').DataTable(${tableid}Params);
let tb = tb_array.join(' '); let tb = tb_array.join(' ');
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!