centaline-data-driven 1.6.56 → 1.6.58
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/centaline/centaline.path.js +1 -0
- package/package.json +2 -1
- package/release-log.md +28 -0
- package/src/Form.vue +2 -2
- package/src/SearchList.vue +5 -2
- package/src/centaline/dynamicForm/src/dynamicForm.vue +152 -41
- package/src/centaline/dynamicJsonViewer/index.js +11 -0
- package/src/centaline/dynamicJsonViewer/src/dynamicJsonViewer.vue +144 -0
- package/src/centaline/dynamicMo/src/dynamicMo.vue +1 -1
- package/src/centaline/dynamicSearchList/src/dynamicSearchList.vue +1 -0
- package/src/centaline/dynamicSearchList/src/dynamicSearchTable.vue +1 -1
- package/src/centaline/dynamicSosTt/src/dynamicSosTt.vue +1 -1
- package/src/centaline/dynamicTree/src/dynamicSearchTree.vue +1 -1
- package/src/centaline/loader/src/ctl/Form.js +12 -0
- package/src/centaline/loader/src/ctl/JsonViewer.js +25 -0
- package/src/centaline/loader/src/ctl/Router.js +1 -1
- package/src/centaline/loader/src/ctl/SensitiveEye.js +3 -2
- package/src/centaline/loader/src/ctl/lib/Enum.js +15 -0
- package/src/centaline/loader/src/ctl/lib/LibFunction.js +6 -0
- package/src/centaline/loader/src/ctl.js +1 -0
- package/src/main.js +7 -6
- package/wwwroot/static/centaline/centaline-data-driven.js +3304 -2038
- package/wwwroot/static/centaline/centaline-data-driven.js.map +1 -1
|
@@ -70,6 +70,7 @@ const paths = {
|
|
|
70
70
|
"dynamicAppContainer": "./src/centaline/dynamicAppContainer/index.js", //
|
|
71
71
|
"dynamicSteps": "./src/centaline/dynamicSteps/index.js", //步骤控件
|
|
72
72
|
"dynamicLocation": "./src/centaline/dynamicLocation/index.js", //经纬度获取控件
|
|
73
|
+
"dynamicJsonViewer": "./src/centaline/dynamicJsonViewer/index.js", //json 数据查看控件
|
|
73
74
|
},
|
|
74
75
|
"plugs": {
|
|
75
76
|
"api": "./src/centaline/api/index.js", //调用API插件
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "centaline-data-driven",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.58",
|
|
4
4
|
"description": "ccai",
|
|
5
5
|
"author": "hjc <3226136347@qq.com>",
|
|
6
6
|
"private": false,
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
"vue": "2.5.17",
|
|
26
26
|
"vue-baidu-map": "^0.21.22",
|
|
27
27
|
"vue-cropper": "^0.5.8",
|
|
28
|
+
"vue-json-viewer": "^2.2.22",
|
|
28
29
|
"vue-ueditor-wrap": "^2.5.6",
|
|
29
30
|
"vuedraggable": "^2.24.3"
|
|
30
31
|
},
|
package/release-log.md
CHANGED
|
@@ -1,3 +1,31 @@
|
|
|
1
|
+
# v1.6.58
|
|
2
|
+
2025-12-01
|
|
3
|
+
|
|
4
|
+
新增
|
|
5
|
+
|
|
6
|
+
表单页面添加bottomTip,显示在页面底部并且悬停,支持html
|
|
7
|
+
|
|
8
|
+
添加 json 数据查看控件
|
|
9
|
+
|
|
10
|
+
优化
|
|
11
|
+
|
|
12
|
+
敏感信息查看控件调整,请求参数添加支持直接获取
|
|
13
|
+
|
|
14
|
+
表单界面的下部的操作按钮统一固定于界面底部
|
|
15
|
+
|
|
16
|
+
表单页面分组水平布局时,是否固定 分组tab(默认 false)
|
|
17
|
+
|
|
18
|
+
# v1.6.57
|
|
19
|
+
2025-11-07
|
|
20
|
+
|
|
21
|
+
优化
|
|
22
|
+
|
|
23
|
+
ActionType添加执行客户端函数ExcuteClientFunction
|
|
24
|
+
|
|
25
|
+
BUG
|
|
26
|
+
|
|
27
|
+
列表关闭右侧会出现滚动条处理
|
|
28
|
+
|
|
1
29
|
# v1.6.56
|
|
2
30
|
2025-10-24
|
|
3
31
|
|
package/src/Form.vue
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div id="form-app" class="data-driven" style="width:100%;height:100%;overflow:auto">
|
|
3
3
|
<!-- <ct-form :source="formdata.content" :apiParam="apiParam"></ct-form> -->
|
|
4
|
-
<ct-form :api="'/
|
|
4
|
+
<ct-form :api="'/salemanage/ContractByPoint/readDetail'" :apiParam="apiParam" :topHeight="topHeight" :documentHeight="'600px'"></ct-form>
|
|
5
5
|
<ct-dialog-list></ct-dialog-list>
|
|
6
6
|
</div>
|
|
7
7
|
</template>
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
data() {
|
|
13
13
|
return {
|
|
14
14
|
apiParam:{
|
|
15
|
-
"
|
|
15
|
+
"commissionMode":1,"contractId":"251120105528E09634DE592A4DF8A326","propertyId":"250522090514A8BF158FF92A43479EA6","searchFields":{"fields":[{"fieldName1":"CompanyPath","groupName":"CompanyPath","operation":1,"searchDataType":1,"searchValue1":"001"},{"fieldName1":"EmpID","groupName":"EmpID","operation":1,"searchDataType":1,"searchValue1":"20201030134831BAA0AC5CDC9344B21E"},{"fieldName1":"DeptPath","groupName":"DeptPath","operation":1,"searchDataType":1,"searchValue1":"001.200.063.001"},{"fieldName1":"type","groupName":"type","operation":1,"searchDataType":1,"searchValue1":"left"},{"fieldName1":"EstateID","groupName":"EstateID","operation":2,"searchDataType":3,"searchValue1":"2411211358417B58943C6E954B35BB56"}]},"pageAttribute":{"pageIndex":1},"columnName":"contractDate","actionType":3
|
|
16
16
|
},
|
|
17
17
|
topHeight:10,
|
|
18
18
|
}
|
package/src/SearchList.vue
CHANGED
|
@@ -21,6 +21,8 @@
|
|
|
21
21
|
|
|
22
22
|
<!-- CCES -->
|
|
23
23
|
<!-- <ct-searchlist :apiParam="para" :searchConditionApi="'/salemattersmanage/agentuserlist/getLayoutOfSearch'" :searchDataApi="'/salemattersmanage/agentuserlist/getList'"></ct-searchlist> -->
|
|
24
|
+
<!-- <ct-searchlist :apiParam="para" :searchConditionApi="'/buildinginfo/getLayoutOfSearch'" :searchDataApi="'/buildinginfo/getList'"></ct-searchlist> -->
|
|
25
|
+
<!-- <ct-searchlist :apiParam="para" :searchConditionApi="'/roomtypelist/getLayoutOfSearch'" :searchDataApi="'/roomtypelist/getList'"></ct-searchlist> -->
|
|
24
26
|
<!-- <ct-searchlist :apiParam="para" :searchConditionApi="'/contractmanage/ContractList/getLayoutOfSearch'" :searchDataApi="'/contractmanage/ContractList/getList'"></ct-searchlist> -->
|
|
25
27
|
<!-- <ct-searchlist :apiParam="para" :searchConditionApi="'/sunexpensemanage/sunexpenserecordlist/getLayoutOfSearch'" :searchDataApi="'/sunexpensemanage/sunexpenserecordlist/getList'"></ct-searchlist> -->
|
|
26
28
|
<!-- <ct-searchlist :apiParam="para" :searchConditionApi="'/workwxmanage/WorkWXApplicationList/getLayoutOfSearch'" :searchDataApi="'/workwxmanage/WorkWXApplicationList/getList'"></ct-searchlist> -->
|
|
@@ -33,11 +35,11 @@
|
|
|
33
35
|
<!-- <ct-searchlist :apiParam="para" :searchConditionApi="'/customerquery/publiccustcalltaskreferrallist/getLayoutOfSearch'" :searchDataApi="'/customerquery/publiccustcalltaskreferrallist/getList'"></ct-searchlist> -->
|
|
34
36
|
<!-- <ct-searchlist :apiParam="para" :searchConditionApi="'/salemattersmanage/agentuserlist/getLayoutOfSearch'" :searchDataApi="'/salemattersmanage/agentuserlist/getList'"></ct-searchlist> -->
|
|
35
37
|
<!-- <ct-searchlist :apiParam="para" :searchConditionApi="'/salemattersmanage/EntranceNoticeInfoList/getLayoutOfSearch'" :searchDataApi="'/salemattersmanage/EntranceNoticeInfoList/getList'"></ct-searchlist> -->
|
|
38
|
+
<!-- <ct-searchlist :apiParam="para" :searchConditionApi="'/salemattersmanage/squareuploadlist/getLayoutOfSearch'" :searchDataApi="'/salemattersmanage/squareuploadlist/getList'"></ct-searchlist> -->
|
|
36
39
|
<!-- <ct-searchlist :apiParam="para" :searchConditionApi="'/commissionquery/properformanceszjjbreport/getLayoutOfSearch'" :searchDataApi="'/commissionquery/properformanceszjjbreport/getList'"></ct-searchlist> -->
|
|
37
40
|
<!-- <ct-searchlist :apiParam="para" :searchConditionApi="'/employeelist/getLayoutOfSearch'" :searchDataApi="'/employeelist/getList'"></ct-searchlist> -->
|
|
38
41
|
<!-- <ct-searchlist :apiParam="para" :searchConditionApi="'/estatemanage/estatlist/getLayoutOfSearch'" :searchDataApi="'/estatemanage/estatlist/getList'"></ct-searchlist> -->
|
|
39
42
|
<!-- <ct-searchlist :apiParam="para" :searchConditionApi="'/system/AreaList/getLayoutOfSearch'" :searchDataApi="'/system/AreaList/getList'"></ct-searchlist> -->
|
|
40
|
-
<!-- <ct-searchlist :apiParam="para" :searchConditionApi="'/roomtypelist/getLayoutOfSearch'" :searchDataApi="'/roomtypelist/getList'"></ct-searchlist> -->
|
|
41
43
|
<!-- <ct-searchlist :apiParam="para" :searchConditionApi="'/salemattersmanage/priceuploadlist/getLayoutOfSearch'" :searchDataApi="'//salemattersmanage/priceuploadlist/getList'"></ct-searchlist> -->
|
|
42
44
|
<!-- <ct-searchlist :apiParam="para" :searchConditionApi="'/app/workbenchdetails/getContractLayoutOfSearch'" :searchDataApi="'/app/workbenchdetails/getContractList'"></ct-searchlist> -->
|
|
43
45
|
<!-- <ct-searchlist :apiParam="para" :searchConditionApi="'/selectionactivitymanage/EvaluationActWorksList/getLayoutOfSearch'" :searchDataApi="'/selectionactivitymanage/EvaluationActWorksList/getListOfSearchModel'"></ct-searchlist> -->
|
|
@@ -125,7 +127,8 @@
|
|
|
125
127
|
<!-- <ct-searchlist :appRootUrl="appRootUrl" :searchConditionApi="'/TrainingAllowanceTotalList/getLayoutOfSearch'" :searchDataApi="'/TrainingAllowanceTotalList/getListOfSearchModel'"></ct-searchlist> -->
|
|
126
128
|
|
|
127
129
|
<!-- ibs -->
|
|
128
|
-
<ct-searchlist :appRootUrl="appRootUrl" :searchConditionApi="'/EmployeeWorkLogList/ind/getLayoutOfSearch'" :searchDataApi="'/EmployeeWorkLogList/ind/getListOfSearchModel'"></ct-searchlist>
|
|
130
|
+
<!-- <ct-searchlist :appRootUrl="appRootUrl" :searchConditionApi="'/EmployeeWorkLogList/ind/getLayoutOfSearch'" :searchDataApi="'/EmployeeWorkLogList/ind/getListOfSearchModel'"></ct-searchlist> -->
|
|
131
|
+
<ct-searchlist :appRootUrl="appRootUrl" :searchConditionApi="'/ApiAccessLogList/getLayoutOfSearch'" :searchDataApi="'/ApiAccessLogList/getListOfSearchModel'"></ct-searchlist>
|
|
129
132
|
<ct-dialog-list></ct-dialog-list>
|
|
130
133
|
</div>
|
|
131
134
|
</template>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div v-loading="loading" :style="{width:pageWidth?pageWidth+'px':'100%',margin:'auto','min-height': minHeight}">
|
|
3
|
-
<div v-if="model !== null && !loading" class="ct-form" :class="{'domDisabled':model.pageDisabled}" :key="formKey">
|
|
2
|
+
<div ref="formRef" v-loading="loading" :style="{width:pageWidth?pageWidth+'px':'100%',margin:'auto','min-height': minHeight}">
|
|
3
|
+
<div ref="fieldsRef" v-if="model !== null && !loading" class="ct-form" :class="{'domDisabled':model.pageDisabled}" :key="formKey">
|
|
4
4
|
<div v-if="model.tip" class="tip-absolute" :style="{width:(tipWidth-20)+'px'}">
|
|
5
5
|
<span v-html="model.tip"></span>
|
|
6
6
|
</div>
|
|
@@ -56,9 +56,12 @@
|
|
|
56
56
|
</el-row>
|
|
57
57
|
|
|
58
58
|
<!--tabs-->
|
|
59
|
-
<el-tabs v-if="model.isHorizontalLayout" v-model="activeName" @tab-click="tabClickHandler">
|
|
60
|
-
<el-tab-pane :
|
|
61
|
-
|
|
59
|
+
<el-tabs ref="tabsRef" v-if="model.isHorizontalLayout" v-model="activeName" @tab-click="tabClickHandler">
|
|
60
|
+
<el-tab-pane :name="index.toString()" :lazy="item.lazyLoad"
|
|
61
|
+
v-for="(item, index) in collapse" v-if="item.show !== false" :key="index">
|
|
62
|
+
<template slot="label">
|
|
63
|
+
<span v-html="item.label"></span>
|
|
64
|
+
</template>
|
|
62
65
|
<el-row>
|
|
63
66
|
<template v-for="(col, index) in collapseFieldsRow[index + 1]">
|
|
64
67
|
<template v-if="col.show !== false && col.lineFeed">
|
|
@@ -87,6 +90,41 @@
|
|
|
87
90
|
</template>
|
|
88
91
|
</el-row>
|
|
89
92
|
</el-tab-pane>
|
|
93
|
+
<template v-if="model.flagFixedTabOnHorizontalLayout">
|
|
94
|
+
<!--尾部元素-->
|
|
95
|
+
<el-row ref="independentRef" v-if="independentItem.length > 0" style="margin-top: 20px;">
|
|
96
|
+
<template v-for="(col, index) in independentItem">
|
|
97
|
+
<template v-if="col.show !== false && col.lineFeed">
|
|
98
|
+
<div style="display: flex; flex: 0 0 100%;"></div>
|
|
99
|
+
<el-col :key="index" v-if="col.show !== false" :span="col.colspan" style="padding:5px">
|
|
100
|
+
<component ref="Fields" :is="col.is" :vmodel="col" :api="model.optionApi" :parentModel="model" v-bind="col.bindPara"
|
|
101
|
+
:fileData="getFileData(col)" :from="'form'" :documentHeight="documentHeight" :documentWidth="documentWidth"
|
|
102
|
+
@click="fieldClickHandler(col,$event)" @change="changeHandler(col,$event)" @enter="enterHandler(col,$event)"
|
|
103
|
+
@input="inputHandler(col,$event)" @importComplete="importComplete" @blur="blurHandler(col,$event)"
|
|
104
|
+
@popupSearchList="popupSearchListHandler" @flagNotificationParentAfterContentChanged="flagNotificationParentAfterContentChanged"
|
|
105
|
+
@popupLocation="popupLocationHandler"
|
|
106
|
+
@tableButtonClick="clickHandler"></component>
|
|
107
|
+
</el-col>
|
|
108
|
+
</template>
|
|
109
|
+
<template v-else>
|
|
110
|
+
<el-col :key="index" v-if="col.show !== false" :span="col.colspan" style="padding:5px">
|
|
111
|
+
<component ref="Fields" :is="col.is" :vmodel="col" :api="model.optionApi" :parentModel="model" v-bind="col.bindPara"
|
|
112
|
+
:fileData="getFileData(col)" :from="'form'" :documentHeight="documentHeight" :documentWidth="documentWidth"
|
|
113
|
+
@click="fieldClickHandler(col,$event)" @change="changeHandler(col,$event)" @enter="enterHandler(col,$event)"
|
|
114
|
+
@input="inputHandler(col,$event)" @importComplete="importComplete" @blur="blurHandler(col,$event)"
|
|
115
|
+
@popupSearchList="popupSearchListHandler" @flagNotificationParentAfterContentChanged="flagNotificationParentAfterContentChanged"
|
|
116
|
+
@popupLocation="popupLocationHandler"
|
|
117
|
+
@tableButtonClick="clickHandler"></component>
|
|
118
|
+
</el-col>
|
|
119
|
+
</template>
|
|
120
|
+
</template>
|
|
121
|
+
</el-row>
|
|
122
|
+
<el-row ref="linksRef" v-if="model.links.findIndex((v)=>{return v.show}) > -1" style="margin-top: 8px;">
|
|
123
|
+
<el-col :span="24" style="text-align:left">
|
|
124
|
+
<component v-for="(btn, index) in model.links" :key="index" :is="btn.is" :vmodel="btn" @click="clickHandler" v-if="btn.show"></component>
|
|
125
|
+
</el-col>
|
|
126
|
+
</el-row>
|
|
127
|
+
</template>
|
|
90
128
|
</el-tabs>
|
|
91
129
|
|
|
92
130
|
<!--分组-->
|
|
@@ -126,23 +164,13 @@
|
|
|
126
164
|
</el-collapse-item>
|
|
127
165
|
</el-collapse>
|
|
128
166
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
<
|
|
132
|
-
<template v-
|
|
133
|
-
<
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
:fileData="getFileData(col)" :from="'form'" :documentHeight="documentHeight" :documentWidth="documentWidth"
|
|
137
|
-
@click="fieldClickHandler(col,$event)" @change="changeHandler(col,$event)" @enter="enterHandler(col,$event)"
|
|
138
|
-
@input="inputHandler(col,$event)" @importComplete="importComplete" @blur="blurHandler(col,$event)"
|
|
139
|
-
@popupSearchList="popupSearchListHandler" @flagNotificationParentAfterContentChanged="flagNotificationParentAfterContentChanged"
|
|
140
|
-
@popupLocation="popupLocationHandler"
|
|
141
|
-
@tableButtonClick="clickHandler"></component>
|
|
142
|
-
</el-col>
|
|
143
|
-
</template>
|
|
144
|
-
<template v-else>
|
|
145
|
-
<el-col :key="index" v-if="col.show !== false" :span="col.colspan" style="padding:5px">
|
|
167
|
+
<template v-if="!model.flagFixedTabOnHorizontalLayout">
|
|
168
|
+
<!--尾部元素-->
|
|
169
|
+
<el-row ref="independentRef" v-if="independentItem.length > 0" style="margin-top: 20px;">
|
|
170
|
+
<template v-for="(col, index) in independentItem">
|
|
171
|
+
<template v-if="col.show !== false && col.lineFeed">
|
|
172
|
+
<div style="display: flex; flex: 0 0 100%;"></div>
|
|
173
|
+
<el-col :key="index" v-if="col.show !== false" :span="col.colspan" style="padding:5px">
|
|
146
174
|
<component ref="Fields" :is="col.is" :vmodel="col" :api="model.optionApi" :parentModel="model" v-bind="col.bindPara"
|
|
147
175
|
:fileData="getFileData(col)" :from="'form'" :documentHeight="documentHeight" :documentWidth="documentWidth"
|
|
148
176
|
@click="fieldClickHandler(col,$event)" @change="changeHandler(col,$event)" @enter="enterHandler(col,$event)"
|
|
@@ -150,24 +178,42 @@
|
|
|
150
178
|
@popupSearchList="popupSearchListHandler" @flagNotificationParentAfterContentChanged="flagNotificationParentAfterContentChanged"
|
|
151
179
|
@popupLocation="popupLocationHandler"
|
|
152
180
|
@tableButtonClick="clickHandler"></component>
|
|
153
|
-
|
|
181
|
+
</el-col>
|
|
182
|
+
</template>
|
|
183
|
+
<template v-else>
|
|
184
|
+
<el-col :key="index" v-if="col.show !== false" :span="col.colspan" style="padding:5px">
|
|
185
|
+
<component ref="Fields" :is="col.is" :vmodel="col" :api="model.optionApi" :parentModel="model" v-bind="col.bindPara"
|
|
186
|
+
:fileData="getFileData(col)" :from="'form'" :documentHeight="documentHeight" :documentWidth="documentWidth"
|
|
187
|
+
@click="fieldClickHandler(col,$event)" @change="changeHandler(col,$event)" @enter="enterHandler(col,$event)"
|
|
188
|
+
@input="inputHandler(col,$event)" @importComplete="importComplete" @blur="blurHandler(col,$event)"
|
|
189
|
+
@popupSearchList="popupSearchListHandler" @flagNotificationParentAfterContentChanged="flagNotificationParentAfterContentChanged"
|
|
190
|
+
@popupLocation="popupLocationHandler"
|
|
191
|
+
@tableButtonClick="clickHandler"></component>
|
|
192
|
+
</el-col>
|
|
193
|
+
</template>
|
|
154
194
|
</template>
|
|
155
|
-
</
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
</el-
|
|
161
|
-
</
|
|
162
|
-
<el-row v-if="model.buttons.findIndex((v)=>{return v.show}) > -1" :class="isScroll?'ccai button-absolute':'button-initial'"
|
|
163
|
-
:style="{'max-width':pageWidth?(pageWidth-20)+'px':'100%'}">
|
|
164
|
-
<el-col :span="24" style="display: flex;align-items: center;justify-content: center;height: 40px ;padding-bottom: 1px;padding-left: 5px;padding-right: 5px;" class="btnPadBom">
|
|
165
|
-
<component v-for="(btn, index) in model.buttons" :key="index" :is="btn.is" :vmodel="btn" @click="clickHandler" v-if="btn.show"
|
|
166
|
-
:style="{'float':btn.isCheckbox ? btn.alignCss:''}"></component>
|
|
167
|
-
</el-col>
|
|
168
|
-
</el-row>
|
|
169
|
-
<div v-if="isScroll" style="height: 34px;"></div>
|
|
195
|
+
</el-row>
|
|
196
|
+
<el-row ref="linksRef" v-if="model.links.findIndex((v)=>{return v.show}) > -1" style="margin-top: 8px;">
|
|
197
|
+
<el-col :span="24" style="text-align:left">
|
|
198
|
+
<component v-for="(btn, index) in model.links" :key="index" :is="btn.is" :vmodel="btn" @click="clickHandler" v-if="btn.show"></component>
|
|
199
|
+
</el-col>
|
|
200
|
+
</el-row>
|
|
201
|
+
</template>
|
|
170
202
|
</component>
|
|
203
|
+
|
|
204
|
+
<div v-if="isScroll" :style="{'height': (model.bottomTip ? 34:0) + (model.buttons.length>0 && model.buttons.findIndex((v)=>{return v.show}) > -1?34:0) + 'px'}"></div>
|
|
205
|
+
</div>
|
|
206
|
+
<div ref="bottomTipRef" v-if="model && !loading && model.bottomTip"
|
|
207
|
+
:class="isScroll? (model.buttons.length>0 && model.buttons.findIndex((v)=>{return v.show}) > -1?'tip-bottom-absolute40':'tip-bottom-absolute'):'tip-bottom'"
|
|
208
|
+
:style="{width:isScroll?'100%':(tipWidth-20)+'px','margin-left':isScroll?'0px':'10px'}">
|
|
209
|
+
<span v-html="model.bottomTip"></span>
|
|
210
|
+
</div>
|
|
211
|
+
<div ref="buttonsRef" v-if="model && !loading && model.buttons.length>0 && model.buttons.findIndex((v)=>{return v.show}) > -1"
|
|
212
|
+
:class="isScroll?'ccai button-absolute':'button-initial'" :style="{'max-width':pageWidth?(pageWidth-20)+'px':'100%'}">
|
|
213
|
+
<el-col :span="24" style="display: flex;align-items: center;justify-content: center;height: 40px ;padding-bottom: 1px;padding-left: 5px;padding-right: 5px;" class="btnPadBom">
|
|
214
|
+
<component v-for="(btn, index) in model.buttons" :key="index" :is="btn.is" :vmodel="btn" @click="clickHandler" v-if="btn.show"
|
|
215
|
+
:style="{'float':btn.isCheckbox ? btn.alignCss:''}"></component>
|
|
216
|
+
</el-col>
|
|
171
217
|
</div>
|
|
172
218
|
<div style="min-height:200px" v-if="loading"></div>
|
|
173
219
|
<iframe :src="downloadUrl" style="height:0px;width:0px;border-width: 0px;display: none;"> </iframe>
|
|
@@ -289,6 +335,7 @@
|
|
|
289
335
|
let parentDom=this.$el.parentElement;
|
|
290
336
|
if (parentDom && parentDom.scrollHeight > parentDom.clientHeight
|
|
291
337
|
&& this.model && (!this.model.isHorizontalLayout || this.flagScroll)) {
|
|
338
|
+
this.$refs.fieldsRef.style.height = 'auto';
|
|
292
339
|
this.isScroll = true;
|
|
293
340
|
}
|
|
294
341
|
}
|
|
@@ -332,6 +379,7 @@
|
|
|
332
379
|
this.model.scripts.formData.fieldsDic = this.model.fieldsDic;
|
|
333
380
|
}
|
|
334
381
|
this.loadFields();
|
|
382
|
+
this.loadTabs();
|
|
335
383
|
|
|
336
384
|
if (this.model.onload) {
|
|
337
385
|
let onloads = this.model.onload.split(';');
|
|
@@ -417,6 +465,33 @@
|
|
|
417
465
|
}
|
|
418
466
|
});
|
|
419
467
|
},
|
|
468
|
+
loadTabs(){
|
|
469
|
+
this.$nextTick(function () {
|
|
470
|
+
if(this.model.flagFixedTabOnHorizontalLayout && this.model.isHorizontalLayout && this.collapse.length > 0){
|
|
471
|
+
let h1 = this.$refs.formRef.parentElement.offsetHeight - 10 | 0;
|
|
472
|
+
let h2 = this.$refs.tabsRef.$el.children[1].offsetTop + 15 | 0;
|
|
473
|
+
let h3 = this.$refs.independentRef ? this.$refs.independentRef.$el.offsetHeight + 20 : 0;
|
|
474
|
+
let h4 = this.$refs.linksRef ? this.$refs.linksRef.$el.offsetHeight : 0;
|
|
475
|
+
let h5 = this.$refs.buttonsRef ? this.$refs.buttonsRef.children[0].offsetHeight : 0;
|
|
476
|
+
let h6 = this.$refs.bottomTipRef ? this.$refs.bottomTipRef.offsetHeight : 0;
|
|
477
|
+
if(h5===0 && h6===0){
|
|
478
|
+
h1=h1-5;
|
|
479
|
+
}
|
|
480
|
+
let tabHeight = h1 - h2 - h5 - h6;
|
|
481
|
+
this.$refs.tabsRef.$el.children[1].style.height = tabHeight + 'px';
|
|
482
|
+
this.$refs.tabsRef.$el.children[1].style.overflow = 'auto';
|
|
483
|
+
}
|
|
484
|
+
else{
|
|
485
|
+
if(!this.model.isHorizontalLayout || this.flagScroll){
|
|
486
|
+
let h1 = this.$refs.formRef.parentElement.offsetHeight - 20;
|
|
487
|
+
let h5 = this.$refs.buttonsRef ? this.$refs.buttonsRef.children[0].offsetHeight : 0;
|
|
488
|
+
let h6 = this.$refs.bottomTipRef ? this.$refs.bottomTipRef.offsetHeight : 0;
|
|
489
|
+
let fieldsHeight = h1 - h5 - h6;
|
|
490
|
+
this.$refs.fieldsRef.style.height = fieldsHeight + 'px';
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
})
|
|
494
|
+
},
|
|
420
495
|
fieldClickHandler(field) {
|
|
421
496
|
let submitData = null;
|
|
422
497
|
var router = this.model.buttons.find((v) => {
|
|
@@ -1580,10 +1655,11 @@
|
|
|
1580
1655
|
|
|
1581
1656
|
.el-collapse-saveLine .ct-collapse-item-title:last-child .el-collapse-item__wrap {
|
|
1582
1657
|
border-bottom: none;
|
|
1583
|
-
}
|
|
1584
|
-
|
|
1658
|
+
}
|
|
1659
|
+
|
|
1585
1660
|
.button-initial {
|
|
1586
|
-
|
|
1661
|
+
line-height: 34px;
|
|
1662
|
+
/* margin-top: 8px; */
|
|
1587
1663
|
}
|
|
1588
1664
|
|
|
1589
1665
|
.button-absolute {
|
|
@@ -1613,4 +1689,39 @@
|
|
|
1613
1689
|
padding: 8px;
|
|
1614
1690
|
font-size: 12px;
|
|
1615
1691
|
}
|
|
1692
|
+
|
|
1693
|
+
.tip-bottom {
|
|
1694
|
+
line-height: 24px;
|
|
1695
|
+
background-color:#ffe7cc;
|
|
1696
|
+
color:#EC3D3D;
|
|
1697
|
+
border-radius: 5px;
|
|
1698
|
+
padding: 8px;
|
|
1699
|
+
font-size: 12px;
|
|
1700
|
+
}
|
|
1701
|
+
.tip-bottom-absolute {
|
|
1702
|
+
z-index: 100;
|
|
1703
|
+
bottom: 0;
|
|
1704
|
+
left: 0;
|
|
1705
|
+
right: 0;
|
|
1706
|
+
position: absolute;
|
|
1707
|
+
line-height: 24px;
|
|
1708
|
+
background-color:#ffe7cc;
|
|
1709
|
+
color:#EC3D3D;
|
|
1710
|
+
border-radius: 5px;
|
|
1711
|
+
padding: 8px;
|
|
1712
|
+
font-size: 12px;
|
|
1713
|
+
}
|
|
1714
|
+
.tip-bottom-absolute40 {
|
|
1715
|
+
z-index: 100;
|
|
1716
|
+
bottom: 40px;
|
|
1717
|
+
left: 0;
|
|
1718
|
+
right: 0;
|
|
1719
|
+
position: absolute;
|
|
1720
|
+
line-height: 24px;
|
|
1721
|
+
background-color:#ffe7cc;
|
|
1722
|
+
color:#EC3D3D;
|
|
1723
|
+
border-radius: 5px;
|
|
1724
|
+
padding: 8px;
|
|
1725
|
+
font-size: 12px;
|
|
1726
|
+
}
|
|
1616
1727
|
</style>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import dynamicJsonViewer from './src/dynamicJsonViewer'
|
|
2
|
+
|
|
3
|
+
dynamicJsonViewer.install = function (Vue, options) {
|
|
4
|
+
Vue.component(dynamicJsonViewer.name, dynamicJsonViewer);
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
if (typeof window !== 'undefined' && window.Vue) {
|
|
8
|
+
window.Vue.use(dynamicJsonViewer);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export default dynamicJsonViewer;
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="field-top">
|
|
3
|
+
<div v-if="model !== null" class="ct-JsonViewer">
|
|
4
|
+
<div :class="[model.showLabel?'el-input-group el-input-group--prepend':'',!valid?'inputError':'']" style="display: inline-block;">
|
|
5
|
+
<div v-if="model.showLabel && model.label" :class="[model.labelClass]" style="text-align: left;padding-bottom: 5px;color: #303133;">
|
|
6
|
+
<h5>{{model.label}}</h5>
|
|
7
|
+
</div>
|
|
8
|
+
<div class="josnViewerBox" tabindex="-1" v-if="isRefresh" :style="{ height: model.height || 'auto','max-height':(listHeight?listHeight-130+'px':'calc(100vh - 130px)') }">
|
|
9
|
+
<JsonViewer :value="model.jsonData" copyable show-array-index show-double-quotes theme="light" :expanded="true"
|
|
10
|
+
:expand-depth="2" @onKeyClick="keyClick">
|
|
11
|
+
<template slot="copy">
|
|
12
|
+
<div class="btn-iocn">
|
|
13
|
+
<i class="el-icon-refresh" title="复原到初始状态" @click.stop="resetJSON">
|
|
14
|
+
</i>
|
|
15
|
+
<i class="el-icon-copy-document" title="复制JSON内容">
|
|
16
|
+
</i>
|
|
17
|
+
</div>
|
|
18
|
+
</template>
|
|
19
|
+
</JsonViewer>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
<transition name="el-fade-in">
|
|
23
|
+
<span v-show="!valid" class="errorMessage">
|
|
24
|
+
{{validMessage}}
|
|
25
|
+
</span>
|
|
26
|
+
</transition>
|
|
27
|
+
</div>
|
|
28
|
+
</div>
|
|
29
|
+
</template>
|
|
30
|
+
<script>
|
|
31
|
+
import dynamicElement from '../../mixins/dynamicElement';
|
|
32
|
+
import JsonViewer from 'vue-json-viewer'
|
|
33
|
+
import 'vue-json-viewer/style.css'
|
|
34
|
+
export default {
|
|
35
|
+
name: 'ct-JsonViewer',
|
|
36
|
+
mixins: [dynamicElement],
|
|
37
|
+
components: {
|
|
38
|
+
'JsonViewer': JsonViewer
|
|
39
|
+
},
|
|
40
|
+
props: {
|
|
41
|
+
vmodel: Object,
|
|
42
|
+
api: String,
|
|
43
|
+
listHeight: {
|
|
44
|
+
type: Number,
|
|
45
|
+
default: null
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
data() {
|
|
49
|
+
return {
|
|
50
|
+
isRefresh:true,
|
|
51
|
+
};
|
|
52
|
+
},
|
|
53
|
+
mounted() {
|
|
54
|
+
var self = this;
|
|
55
|
+
this.$nextTick(function () {
|
|
56
|
+
if (self.vmodel) {
|
|
57
|
+
self.load(self.vmodel);
|
|
58
|
+
}
|
|
59
|
+
else if (typeof self.source !== 'undefined') {
|
|
60
|
+
self.loaderObj.JsonViewer(self.source, (data) => {
|
|
61
|
+
self.load(data);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
},
|
|
66
|
+
destroyed (){
|
|
67
|
+
this.model=null;
|
|
68
|
+
this.$el=null;
|
|
69
|
+
},
|
|
70
|
+
methods: {
|
|
71
|
+
load(data) {
|
|
72
|
+
this.model = data;
|
|
73
|
+
},
|
|
74
|
+
resetJSON() {
|
|
75
|
+
this.isRefresh = false;
|
|
76
|
+
this.$nextTick(function () {
|
|
77
|
+
this.isRefresh = true;
|
|
78
|
+
});
|
|
79
|
+
},
|
|
80
|
+
keyClick(keyName) {
|
|
81
|
+
console.log(keyName, "it was click")
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
</script>
|
|
86
|
+
<style>
|
|
87
|
+
.josnViewerBox {
|
|
88
|
+
overflow: auto;
|
|
89
|
+
width: 100%;
|
|
90
|
+
border: 1px solid #eee;
|
|
91
|
+
border-radius: 4px;
|
|
92
|
+
padding: 2px;
|
|
93
|
+
box-sizing: border-box;
|
|
94
|
+
background-color: #ffffff;
|
|
95
|
+
line-height: normal;
|
|
96
|
+
|
|
97
|
+
.jv-container .jv-code{
|
|
98
|
+
padding: 0px !important;
|
|
99
|
+
}
|
|
100
|
+
.jv-container.light {
|
|
101
|
+
background: #fff;
|
|
102
|
+
white-space: nowrap;
|
|
103
|
+
color: #525252;
|
|
104
|
+
font-size: 14px;
|
|
105
|
+
font-family: Consolas, Menlo, Courier, monospace;
|
|
106
|
+
}
|
|
107
|
+
.jv-container.light .jv-button, .jv-container.jv-dark .jv-button {
|
|
108
|
+
color: #49b3ff;
|
|
109
|
+
}
|
|
110
|
+
.jv-container.light .jv-key {
|
|
111
|
+
color: #111;
|
|
112
|
+
margin-right: 4px;
|
|
113
|
+
}
|
|
114
|
+
.jv-container.light .jv-item.jv-string {
|
|
115
|
+
color: #42b983;
|
|
116
|
+
word-break: break-word;
|
|
117
|
+
white-space: normal;
|
|
118
|
+
}
|
|
119
|
+
.jv-container.light .jv-item.jv-number {
|
|
120
|
+
color: #fc1e70;
|
|
121
|
+
}
|
|
122
|
+
.jv-container.light .jv-item.jv-boolean {
|
|
123
|
+
color: #fc1e70;
|
|
124
|
+
}
|
|
125
|
+
.jv-tooltip {
|
|
126
|
+
position: sticky !important;
|
|
127
|
+
top: 0 !important;
|
|
128
|
+
right: 0 !important;
|
|
129
|
+
/* 新增:靠右定位 */
|
|
130
|
+
z-index: 10;
|
|
131
|
+
margin-left: auto;
|
|
132
|
+
/* 辅助:确保靠右 */
|
|
133
|
+
float: right;
|
|
134
|
+
}
|
|
135
|
+
.btn-iocn {
|
|
136
|
+
display: flex;
|
|
137
|
+
gap: 10px;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
}
|
|
141
|
+
.josnViewerBox:focus {
|
|
142
|
+
border: 1px solid #3D5ECC;
|
|
143
|
+
}
|
|
144
|
+
</style>
|
|
@@ -143,7 +143,7 @@
|
|
|
143
143
|
var dropdown = self.$refs["pop"];
|
|
144
144
|
this.unwatch1=self.$watch('model.options', function (newVal, oldVal) {
|
|
145
145
|
self.$nextTick(() => {
|
|
146
|
-
if (typeof dropdown.popperJS !== 'undefined' && dropdown.popperJS) {
|
|
146
|
+
if (dropdown && typeof dropdown.popperJS !== 'undefined' && dropdown.popperJS) {
|
|
147
147
|
dropdown.popperJS.destroy();
|
|
148
148
|
dropdown.popperJS = null;
|
|
149
149
|
dropdown.updatePopper();
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
:style="{'height': pageHeight? pageHeight:'100%','width':sideBarWidth+'px',right:sideBarRight+'px'}"
|
|
26
26
|
class="sidebar">
|
|
27
27
|
<ct-Detail ref="detail" :api="sideBarApi" :apiParam="sideBarApiParam" :pageType="sideBarPageType"
|
|
28
|
+
:style="{'display': sideBarWidth && sideBarWidth>0 ?'block':'none'}"
|
|
28
29
|
:searchConditionApi="sideBarSearchConditionApi" :searchStatsApi="sideBarSearchStatsApi" :searchDataApi="sideBarSearchDataApi" :listHeight="listHeight"
|
|
29
30
|
:selectIndex="selectIndex" :rowCount="rowCount" :key="detailKey" :drowerClose="drowerClose"
|
|
30
31
|
@clickNextHandler="clickNextHandler" @clickPrevHandler="clickPrevHandler" @simpleRouterclickHandler="simpleRouterclickHandler"
|
|
@@ -1541,7 +1541,7 @@ export default {
|
|
|
1541
1541
|
}
|
|
1542
1542
|
}
|
|
1543
1543
|
}
|
|
1544
|
-
else if (field.isFormPageInSideBar || field.isSearchPageInSideBar) {
|
|
1544
|
+
else if (field.isFormPageInSideBar || field.isSearchPageInSideBar) {
|
|
1545
1545
|
self.model.flagSideBar = true;
|
|
1546
1546
|
self.model.flagDefaultDisplaySideBar = true;
|
|
1547
1547
|
field.actionSource = field.isFormPageInSideBar ? 'Form':'SearchList';
|
|
@@ -144,7 +144,7 @@
|
|
|
144
144
|
var dropdown = self.$refs["pop"];
|
|
145
145
|
this.unwatch=self.$watch('model.options', function (newVal, oldVal) {
|
|
146
146
|
self.$nextTick(() => {
|
|
147
|
-
if (typeof dropdown.popperJS !== 'undefined' && dropdown.popperJS) {
|
|
147
|
+
if (dropdown && typeof dropdown.popperJS !== 'undefined' && dropdown.popperJS) {
|
|
148
148
|
dropdown.popperJS.destroy();
|
|
149
149
|
dropdown.popperJS = null;
|
|
150
150
|
dropdown.updatePopper();
|
|
@@ -28,6 +28,18 @@ const Form = function (source, callBack, apiParam, failCallBack, isFormList) {
|
|
|
28
28
|
get tip() {
|
|
29
29
|
return source.tip;
|
|
30
30
|
},
|
|
31
|
+
set tip(v) {
|
|
32
|
+
source.tip = v;
|
|
33
|
+
},
|
|
34
|
+
get bottomTip() {
|
|
35
|
+
return source.bottomTip;
|
|
36
|
+
},
|
|
37
|
+
set bottomTip(v) {
|
|
38
|
+
source.bottomTip = v;
|
|
39
|
+
},
|
|
40
|
+
get flagFixedTabOnHorizontalLayout() {
|
|
41
|
+
return source.flagFixedTabOnHorizontalLayout;
|
|
42
|
+
},
|
|
31
43
|
get flagShowTitle() {
|
|
32
44
|
let v=false;
|
|
33
45
|
if(source.flagShowTitle)v=source.flagShowTitle;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import base from '../../index';
|
|
2
|
+
import Base from './Base';
|
|
3
|
+
|
|
4
|
+
const JsonViewer = function (source) {
|
|
5
|
+
var init = function (data) {
|
|
6
|
+
var rtn = {
|
|
7
|
+
get jsonData() {
|
|
8
|
+
if (data.code1 && typeof data.code1 === 'string') {
|
|
9
|
+
return JSON.parse(data.code1);
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
return data.code1;
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
get height() {
|
|
16
|
+
return data.rows ? data.rows * 20 + 'px' : 'auto';
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
rtn = base.copy(Base(data), rtn);
|
|
20
|
+
return rtn;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return init(source);
|
|
24
|
+
}
|
|
25
|
+
export default JsonViewer;
|
|
@@ -102,7 +102,7 @@ const Router = function (source) {
|
|
|
102
102
|
return source.pageStyle === Enum.PageStyle.BrowserNewTab;
|
|
103
103
|
},
|
|
104
104
|
get isClientFuntion() {
|
|
105
|
-
return source.pageStyle === Enum.PageStyle.ClientFunction;
|
|
105
|
+
return source.pageStyle === Enum.PageStyle.ClientFunction || source.actionType === Enum.ActionType.ExcuteClientFunction;
|
|
106
106
|
},
|
|
107
107
|
get isSearchPageWithList() {
|
|
108
108
|
return source.pageStyle === Enum.PageStyle.SearchPageWithList;
|