Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit71c799a

Browse files
authored
Merge pull request#14 from zhangchunlin/master
同步代码
2 parents6aeac33 +9a55c69 commit71c799a

File tree

7 files changed

+212
-57
lines changed

7 files changed

+212
-57
lines changed

‎demo/apps/tables/settings.ini

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
[APIJSON_TABLES]
2+
moment = {
3+
"editable" :"auto",
4+
"table_fields" : [
5+
{"title":"#","key":"id","width":80},
6+
{"title":"User id","key":"user_id","width":100},
7+
{"title":"Date","key":"date","width":160},
8+
{"title":"Content","key":"content"},
9+
],
10+
"viewedit_fields" : [
11+
{"title":"#","key":"id","editable":False},
12+
{"title":"User id","key":"user_id"},
13+
{"title":"Date","key":"date","editable":False},
14+
{"title":"Content","key":"content","type":"textarea"},
15+
],
16+
}
17+
18+
comment = {
19+
"editable" :"auto",
20+
"table_fields" : [
21+
{"title":"#","key":"id","width":80},
22+
{"title":"User id","key":"user_id","width":100},
23+
{"title":"To id","key":"to_id","width":100},
24+
{"title":"Moment id","key":"moment_id","width":100},
25+
{"title":"Date","key":"date","width":160},
26+
{"title":"Content","key":"content"},
27+
],
28+
"viewedit_fields" : [
29+
{"title":"#","key":"id","editable":False},
30+
{"title":"User id","key":"user_id"},
31+
{"title":"To id","key":"to_id","editable":False},
32+
{"title":"Moment id","key":"moment_id","editable":False},
33+
{"title":"Date","key":"date","editable":False},
34+
{"title":"Content","key":"content","type":"textarea"},
35+
],
36+
}

‎demo/apps/tables/templates/Tables/list.html

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<divid="app">
1111
<tabsv-model:value="tab_current"type="card">
1212
<tab-panev-for="item in tabs":key="item":label="item":name="item">
13-
<apijson-table:table_name="item"></apijson-table>
13+
<apijson-table:table_name="item":config="apijson_tables[item]"></apijson-table>
1414
</tab-pane>
1515
</tabs>
1616
</div>
@@ -21,7 +21,8 @@
2121
delimiters:['{','}'],
2222
data:{
2323
tab_current:null,
24-
tabs:{{=table_keys_json}}
24+
tabs:{{=table_keys_json}},
25+
apijson_tables:{{=apijson_tables_json}}
2526
}
2627
})
2728
</script>

‎demo/apps/tables/views.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
11
#coding=utf-8
22
fromuliwebimportexpose,functions
3-
fromjsonimportdumps
43

54
@expose('/tables')
65
classTables(object):
76
@expose('')
87
deflist(self):
98
table_keys=settings.APIJSON_MODELS.keys()
10-
ifrequest.userandfunctions.has_role(request.user,"ADMIN"):
11-
role="ADMIN"
12-
elifrequest.user:
13-
role="LOGIN"
9+
ifrequest.user:
10+
iffunctions.has_role(request.user,"ADMIN"):
11+
role="ADMIN"
12+
else:
13+
role="OWNER"
1414
else:
1515
role="UNKNOWN"
16+
apijson_tables=functions.get_apijson_tables(role)
1617
return {
17-
"table_keys_json":dumps(table_keys),
18-
"role":role
18+
"table_keys_json":json_dumps(table_keys),
19+
"apijson_tables_json":json_dumps(apijson_tables),
20+
"role":role,
1921
}

‎uliweb_apijson/apijson/__init__.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#coding=utf-8
2+
3+
defget_apijson_tables(role="UNKNOWN"):
4+
fromuliwebimportsettings
5+
apijson_tables=dict(settings.APIJSON_TABLES.iteritems())
6+
forninapijson_tables:
7+
c=apijson_tables[n]
8+
editable=c["editable"]
9+
ifeditable=="auto":
10+
editable=False
11+
POST=settings.APIJSON_MODELS[n]["POST"]
12+
ifPOST:
13+
roles=POST["roles"]
14+
ifroles:
15+
editable=roleinroles
16+
c["editable"]=editable
17+
returnapijson_tables

‎uliweb_apijson/apijson/settings.ini

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,6 @@ user = {
1616
"PUT" : {"roles" : ["ADMIN","OWNER"] },
1717
"DELETE" : {"roles" : ["ADMIN","OWNER"] },
1818
}
19+
20+
[FUNCTIONS]
21+
get_apijson_tables ="uliweb_apijson.apijson.get_apijson_tables"

‎uliweb_apijson/apijson/templates/vue/inc_apijson_table.html

Lines changed: 141 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
11
<script>
22
Vue.component('apijson-table',{
33
delimiters:['{','}'],
4-
props:["table_name"],
4+
props:["table_name","config"],
55
template:`<div>
66
<i-table stripe border :columns="tcolumns" :data="tlist" @on-sort-change="table_on_sort_change"></i-table>
77
<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>
8-
<modal v-model="modal_view" title="View">
8+
<modal v-model="modal_view":title="viewedit_label">
99
<i-form @submit.native.prevent :label-width="80">
10-
<form-item v-for="item in view_items" :key="item.key" :label="item.key">
11-
<i-input v-if="typeof item.value !=='boolean'" v-model="item.value" :readonly=true></i-input>
12-
<checkbox v-if="typeof item.value ==='boolean'" v-model="item.value" disabled></checkbox>
10+
<form-item v-for="item in viewedit_items" :key="item.key" :label="item.title">
11+
<i-input v-if="item.type=='input'" v-model="item.value" :readonly="!editable(item)"></i-input>
12+
<checkbox v-if="item.type=='checkbox'" v-model="item.value" :disabled="!editable(item)"></checkbox>
13+
<i-input v-if="item.type=='textarea'" v-model="item.value" type="textarea" :autosize="{minRows: 2,maxRows: 5}"></i-input>
14+
</form-item>
15+
<form-item v-if="config_editable" label="action">
16+
<i-button type="info" icon="ios-download" @click="save">Save</i-button>
1317
</form-item>
1418
</i-form>
1519
</modal>
@@ -21,16 +25,32 @@
2125
varthisp=this
2226
return{
2327
modal_view:false,
24-
view_items:[],
28+
viewedit_items:[],
29+
30+
edit_params:{},
31+
2532
modal_delete:false,
26-
delete_params:{},
27-
tcolumns:[
28-
{title:'#',key:'id',width:80},
29-
{
33+
delete_params:{},
34+
35+
tcolumns:[],
36+
tcolumns_preset:{
37+
"id":{title:'#',key:'id',width:80},
38+
"action":{
3039
title:'Action',
3140
width:140,
32-
render:(h,params)=>{
33-
returnh('div',[
41+
render:function(h,params){
42+
vardelete_button=h('Button',{
43+
props:{
44+
type:'error',
45+
size:'small'
46+
},
47+
on:{
48+
click:function(){
49+
thisp.remove(params)
50+
}
51+
}
52+
},'Delete')
53+
varbuttons=[
3454
h('Button',{
3555
props:{
3656
type:'primary',
@@ -44,31 +64,31 @@
4464
thisp.show(params)
4565
}
4666
}
47-
},'View'),
48-
h('Button',{
49-
props:{
50-
type:'error',
51-
size:'small'
52-
},
53-
on:{
54-
click:function(){
55-
thisp.remove(params)
56-
}
57-
}
58-
},'Delete')
59-
]);
67+
},thisp.viewedit_label)
68+
]
69+
if(thisp.config_editable){
70+
buttons.push(delete_button)
71+
}
72+
returnh('div',buttons);
6073
}
6174
}
62-
],
75+
},
6376
tcolumns_init:false,
6477
tlist:[],
6578
query_count:10,
6679
current_page:1,
6780
total:0,
6881
sort_key:"id",
69-
sort_order:"-"
82+
sort_order:"-",
83+
84+
config_editable:false,
85+
config_table_fields:null,
86+
config_viewedit_fields:null
7087
}
7188
},
89+
computed:{
90+
viewedit_label:function(){returnthis.config_editable?'Edit':'View'}
91+
},
7292
methods:{
7393
update_list:function(){
7494
varthisp=this
@@ -94,21 +114,30 @@
94114
if(data.code==200){
95115
vararr=data["[]"]
96116
if(!thisp.tcolumns_init){
97-
if(arr.length>0){
98-
varitem=arr[0]
99-
for(varkinitem){
100-
if(k!="id"){
101-
varcol={title:k,key:k}
102-
if(typeofitem[k]==="boolean"){
103-
col["width"]=80
104-
}
105-
elseif(typeofitem[k]==="number"){
106-
col["width"]=100
117+
if(thisp.config_table_fields!=null){
118+
thisp.tcolumns=thisp.config_table_fields
119+
thisp.tcolumns.push(thisp.tcolumns_preset["action"])
120+
thisp.tcolumns_init=true
121+
}
122+
else{
123+
thisp.tcolumns.push(thisp.tcolumns_preset["id"])
124+
if(arr.length>0){
125+
varitem=arr[0]
126+
for(varkinitem){
127+
if(k!="id"){
128+
varcol={title:k,key:k}
129+
if(typeofitem[k]==="boolean"){
130+
col["width"]=80
131+
}
132+
elseif(typeofitem[k]==="number"){
133+
col["width"]=100
134+
}
135+
thisp.tcolumns.push(col)
107136
}
108-
thisp.tcolumns.push(col)
109137
}
138+
thisp.tcolumns.push(thisp.tcolumns_preset["action"])
139+
thisp.tcolumns_init=true
110140
}
111-
thisp.tcolumns_init=true
112141
}
113142
}
114143
thisp.tlist=arr
@@ -119,20 +148,82 @@
119148
},
120149
show:function(params){
121150
varrow=params.row
122-
this.view_items=[]
123-
this.view_items.push({key:"id",value:row.id})
124-
for(varkinrow){
125-
if(k!="id"&&k[0]!="_"){
126-
value=row[k]
127-
this.view_items.push({key:k,value:value})
151+
this.viewedit_items=[]
152+
if(this.config_viewedit_fields!=null){
153+
for(variinthis.config_viewedit_fields){
154+
vard=this.config_viewedit_fields[i]
155+
d.value=row[d.key]
156+
d.type=d.type||"input"
157+
this.viewedit_items.push(d)
158+
}
159+
}
160+
else{
161+
this.viewedit_items.push({title:"id",value:row.id,"type":"input"})
162+
vartype2type={
163+
"boolean":"checkbox"
128164
}
165+
for(varkinrow){
166+
if(k!="id"&&k[0]!="_"){
167+
varvalue=row[k]
168+
vartype=type2type[typeofvalue]||"input"
169+
this.viewedit_items.push({title:k,value:value,type:type})
170+
}
171+
}
172+
}
173+
if(this.config_editable){
174+
this.edit_params=params
175+
}
176+
else{
177+
this.edit_params=null
129178
}
130179
this.modal_view=true
131180
},
181+
editable:function(item){
182+
vareditable=true
183+
if(item.editable!=null){editable=item.editable}
184+
returnthis.config_editable&&editable&&(item.key!="id")
185+
},
132186
remove:function(params){
133187
this.delete_params=params
134188
this.modal_delete=true
135189
},
190+
save:function(){
191+
varthisp=this
192+
varparams={
193+
"@tag":thisp.table_name
194+
}
195+
varrecord_params={}
196+
varrow=thisp.edit_params.row
197+
198+
for(varkinthisp.viewedit_items){
199+
vard=thisp.viewedit_items[k]
200+
if(d.key=="id"||d.value!=row[d.key]){
201+
record_params[d.key]=d.value
202+
}
203+
}
204+
params[thisp.table_name]=record_params
205+
$.ajax({
206+
type:"POST",
207+
url:"{{=url_for('uliweb_apijson.apijson.views.ApiJson.put')}}",
208+
contentType:'application/json',
209+
data:JSON.stringify(params),
210+
success:function(data){
211+
if(data.code==200){
212+
thisp.$Notice.success({
213+
title:'success update #'+row.id+' in table '+thisp.table_name,
214+
desc:data.msg
215+
})
216+
thisp.update_list()
217+
}
218+
else{
219+
thisp.$Notice.error({
220+
title:'error when update #'+row.id+' in table '+thisp.table_name,
221+
desc:data.msg
222+
})
223+
}
224+
}
225+
})
226+
},
136227
real_remove:function(){
137228
varthisp=this
138229
varparams={
@@ -183,6 +274,11 @@
183274
}
184275
},
185276
mounted:function(){
277+
if(this.config!=null){
278+
this.config_editable=this.config.editable||false
279+
this.config_table_fields=this.config.table_fields||null
280+
this.config_viewedit_fields=this.config.viewedit_fields||null
281+
}
186282
this.update_list()
187283
}
188284
})

‎uliweb_apijson/apijson/views.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -499,14 +499,14 @@ def _put_one(self,key,tag):
499499
obj_dict= {"id":id_}
500500
ifret:
501501
obj_dict["code"]=200
502-
obj_dict["message"]="success"
502+
obj_dict["msg"]="success"
503503
obj_dict["count"]=1
504504
else:
505505
obj_dict["code"]=400
506-
obj_dict["message"]="fail"
506+
obj_dict["msg"]="failed when updating, maybe no change"
507507
obj_dict["count"]=0
508508
self.rdict["code"]=400
509-
self.rdict["message"]="fail"
509+
self.rdict["msg"]="failed when updating, maybe no change"
510510
self.rdict[key]=obj_dict
511511

512512
defdelete(self):

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp