Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions uliweb_apijson/apijson/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,19 @@

def get_apijson_tables(role="UNKNOWN"):
from uliweb import settings
apijson_tables = dict(settings.APIJSON_TABLES.iteritems())

s = settings.APIJSON_TABLES
if s:
apijson_tables = dict(s.iteritems())
else:
return {}
for n in apijson_tables:
c = apijson_tables[n]
editable = c["editable"]
_model_name = c.get("@model_name") or n
if editable=="auto":
editable = False
POST = settings.APIJSON_MODELS[n]["POST"]
POST = settings.APIJSON_MODELS[_model_name]["POST"]
if POST:
roles = POST["roles"]
if roles:
Expand Down
27 changes: 24 additions & 3 deletions uliweb_apijson/apijson/templates/vue/inc_apijson_table.html
Original file line number Diff line number Diff line change
@@ -1,16 +1,21 @@
<script>
Vue.component('apijson-table', {
delimiters: ['{', '}'],
props: ["table_name","config"],
props: ["table_name","config","func_init","func_change_params"],
template: `<div>
<div v-if="config_editable && config_add_fields!=null"><i-button type="primary" @click="add">Add</i-button> <br><br> </div>
<i-table stripe border :columns="tcolumns" :data="tlist" @on-sort-change="table_on_sort_change"></i-table>
<page :total="total" :page-size="query_count" :current.sync="current_page" :page-size-opts="[10, 20, 50, 100]" show-sizer @on-change="page_on_change" @on-page-size-change="page_on_page_size_change"></page>
<modal v-model="modal_add" title="Add" @on-ok="real_add">
<modal v-model="modal_add" title="Add">
<i-form @submit.native.prevent :label-width="80">
<form-item v-for="item in add_items" :key="item.key" :label="item.title">
<i-input v-if="item.type=='input'" v-model="item.value"></i-input>
<checkbox v-if="item.type=='checkbox'" v-model="item.value"></checkbox>
<i-input v-if="item.type=='textarea'" v-model="item.value" type="textarea" :autosize="{minRows: 2,maxRows: 5}"></i-input>
</form-item>
<form-item v-if="config_editable" label="action">
<i-button type="info" icon="plus" @click="real_add">Add</i-button>
</form-item>
</i-form>
</modal>
<modal v-model="modal_view" :title="viewedit_label">
Expand Down Expand Up @@ -117,6 +122,9 @@
"[]":arr_params,
"total@":"/[]/total"
}
if (thisp.func_change_params!=null) {
params = thisp.func_change_params("apijson_get",params)
}
$.ajax({
type: "POST",
url: "{{=url_for('uliweb_apijson.apijson.views.ApiJson.get')}}",
Expand Down Expand Up @@ -214,6 +222,9 @@
}
}
params[thisp.table_name] = record_params
if (thisp.func_change_params!=null) {
params = thisp.func_change_params("apijson_put",params)
}
$.ajax({
type: "POST",
url: "{{=url_for('uliweb_apijson.apijson.views.ApiJson.put')}}",
Expand All @@ -225,6 +236,7 @@
title: 'success update #'+row.id+' in table '+thisp.table_name,
desc: data.msg
})
thisp.modal_view = false
thisp.update_list()
}
else {
Expand All @@ -244,6 +256,9 @@
params[thisp.table_name] = {
"id": thisp.delete_params.row.id
}
if (thisp.func_change_params!=null) {
params = thisp.func_change_params("apijson_delete",params)
}
$.ajax({
type: "POST",
url: "{{=url_for('uliweb_apijson.apijson.views.ApiJson.delete')}}",
Expand Down Expand Up @@ -291,7 +306,9 @@
post_params[d.key] = d.value
}
params[this.table_name] = post_params

if (thisp.func_change_params!=null) {
params = thisp.func_change_params("apijson_post",params)
}
$.ajax({
type: "POST",
url: "{{=url_for('uliweb_apijson.apijson.views.ApiJson.post')}}",
Expand All @@ -311,6 +328,7 @@
desc: result.msg
})
thisp.update_list()
thisp.modal_add = false
}
})
},
Expand All @@ -336,6 +354,9 @@
this.add_items = this.config_add_fields
}
}
if (this.func_init!=null) {
this.func_init(this)
}
this.update_list()
}
})
Expand Down
28 changes: 18 additions & 10 deletions uliweb_apijson/apijson/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,10 @@ def _get_array(self,key):
if not owner_filtered:
return json({"code":400,"msg":"'%s' cannot filter with owner"%(modelname)})

for n in model_param:
if n[0]!="@" and hasattr(model,n):
q = q.filter(getattr(model.c,n)==model_param[n])

if query_type in [1,2]:
self.vars["/%s/total"%(key)] = q.count()

Expand Down Expand Up @@ -334,10 +338,11 @@ def _post_one(self,key,tag):
return json({"code":400,"msg":"model '%s' not found"%(modelname)})

request_tag = settings.APIJSON_REQUESTS.get(tag,{})
request_tag_tag = request_tag.get(tag,{})
if not request_tag_tag:
_model_name = request_tag.get("@model_name") or tag
request_tag_config = request_tag.get(_model_name,{})
if not request_tag_config:
return json({"code":400,"msg":"tag '%s' not found"%(tag)})
tag_POST = request_tag_tag.get("POST",{})
tag_POST = request_tag_config.get("POST",{})
ADD = tag_POST.get("ADD")
if ADD:
ADD_role = ADD.get("@role")
Expand Down Expand Up @@ -435,11 +440,13 @@ def _put_one(self,key,tag):
log.error("try to find model '%s' but not found: '%s'"%(modelname,e))
return json({"code":400,"msg":"model '%s' not found"%(modelname)})

request_tag = settings.APIJSON_REQUESTS.get(tag,{})
request_tag_tag = request_tag.get(tag,{})
if not request_tag_tag:
APIJSON_REQUESTS = settings.APIJSON_REQUESTS or {}
request_tag = APIJSON_REQUESTS.get(tag,{})
_model_name = request_tag.get("@model_name") or tag
request_tag_config = request_tag.get(_model_name,{})
if not request_tag_config:
return json({"code":400,"msg":"tag '%s' not found"%(tag)})
tag_PUT = request_tag_tag.get("PUT",{})
tag_PUT = request_tag_config.get("PUT",{})
ADD = tag_PUT.get("ADD")
if ADD:
ADD_role = ADD.get("@role")
Expand Down Expand Up @@ -537,10 +544,11 @@ def _delete_one(self,key,tag):
return json({"code":400,"msg":"model '%s' not found"%(modelname)})

request_tag = settings.APIJSON_REQUESTS.get(tag,{})
request_tag_tag = request_tag.get(tag,{})
if not request_tag_tag:
_model_name = request_tag.get("@model_name") or tag
request_tag_config = request_tag.get(_model_name,{})
if not request_tag_config:
return json({"code":400,"msg":"tag '%s' not found"%(tag)})
tag_DELETE = request_tag_tag.get("DELETE",{})
tag_DELETE = request_tag_config.get("DELETE",{})
ADD = tag_DELETE.get("ADD")
if ADD:
ADD_role = ADD.get("@role")
Expand Down