centaline-data-driven-v3 0.1.28 → 0.1.30
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/dist/centaline-data-driven-v3.umd.js +77 -77
- package/package.json +1 -1
- package/src/assets/commonWeb.css +18 -1
- package/src/components/app/File.vue +11 -7
- package/src/components/web/ComboBox.vue +19 -7
- package/src/components/web/RichText.vue +2 -2
- package/src/components/web/SearchList/SearchTable.vue +1 -1
- package/src/components/web/SearchList.vue +13 -9
- package/src/components/web/TextBox.vue +15 -2
- package/src/components/web/Tree/Tree.vue +28 -20
- package/src/components/web/Tree.vue +1 -1
- package/src/loader/src/Field.js +3 -2
- package/src/loader/src/Form.js +20 -0
- package/src/loader/src/LibFunction.js +1 -2
- package/src/loader/src/Router.js +2 -1
- package/src/main.js +1 -1
- package/src/utils/Enum.js +11 -6
- package/src/views/Form.vue +3 -7
- package/src/views/SearchList.vue +3 -3
- package/src/views/Tree.vue +1 -1
package/package.json
CHANGED
package/src/assets/commonWeb.css
CHANGED
|
@@ -98,6 +98,14 @@ body {
|
|
|
98
98
|
align-items: center;
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
+
.ct-form .search-list .serach-screen .list-field .el-form-item__label {
|
|
102
|
+
width: auto;
|
|
103
|
+
text-align: right;
|
|
104
|
+
line-height: normal;
|
|
105
|
+
min-height: 26px;
|
|
106
|
+
align-items: center;
|
|
107
|
+
}
|
|
108
|
+
|
|
101
109
|
|
|
102
110
|
.errorMessage {
|
|
103
111
|
height: 26px;
|
|
@@ -874,6 +882,15 @@ body {
|
|
|
874
882
|
line-height: 22px;
|
|
875
883
|
}
|
|
876
884
|
|
|
885
|
+
.el-select__wrapper {
|
|
886
|
+
height: 28px;
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
.el-select__wrapper .el-select__selection {
|
|
890
|
+
flex-wrap: nowrap !important;
|
|
891
|
+
margin-right: 20px;
|
|
892
|
+
}
|
|
893
|
+
|
|
877
894
|
.el-select__input-wrapper {
|
|
878
895
|
height: 22px;
|
|
879
896
|
line-height: 22px;
|
|
@@ -913,7 +930,7 @@ body {
|
|
|
913
930
|
.el-col1 {
|
|
914
931
|
display: flex;
|
|
915
932
|
flex-direction: column;
|
|
916
|
-
justify-content: flex-end;
|
|
933
|
+
justify-content: flex-end;
|
|
917
934
|
}
|
|
918
935
|
|
|
919
936
|
.el-collapse {
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
<div class="ct-fielduploader" ref="refupload" v-if="model !== null">
|
|
3
3
|
<div class="van-uploader">
|
|
4
4
|
<div class="van-uploader__wrapper">
|
|
5
|
-
<draggable :list="model.fileList" v-bind="dragOptions" @change="onEnd"
|
|
5
|
+
<draggable :list="model.fileList" v-bind="dragOptions" @change="onEnd" :delay="100"
|
|
6
|
+
:touch-start-threshold="5" class="card" style="display: flex;">
|
|
6
7
|
<template #item="{ element, index }">
|
|
7
8
|
<div class="van-uploader__preview">
|
|
8
9
|
<template v-if="!element.progressFlag">
|
|
@@ -11,7 +12,8 @@
|
|
|
11
12
|
class="van-image__img" style="object-fit: cover;">
|
|
12
13
|
<div class="van-uploader__preview-cover"
|
|
13
14
|
v-if="(model.locked && element.mediaLabelName) || model.paramName1">
|
|
14
|
-
<div class="preview-cover van-ellipsis"
|
|
15
|
+
<div class="preview-cover van-ellipsis"
|
|
16
|
+
@click.stop="classifyClickHandle(element)">
|
|
15
17
|
{{ element.mediaLabelName }}</div>
|
|
16
18
|
</div>
|
|
17
19
|
</div>
|
|
@@ -27,7 +29,8 @@
|
|
|
27
29
|
</div>
|
|
28
30
|
<span class="cover-list-item-play" v-if="element.videoPlayIconUrl">
|
|
29
31
|
<div class="swiper-i">
|
|
30
|
-
<img @click="viewerfile(element)" :src="element.videoPlayIconUrl"
|
|
32
|
+
<img @click="viewerfile(element)" :src="element.videoPlayIconUrl"
|
|
33
|
+
class="hous-icon" />
|
|
31
34
|
</div>
|
|
32
35
|
</span>
|
|
33
36
|
<span class="cover-list-item-play"
|
|
@@ -146,9 +149,9 @@ function uploadProcess(file) {
|
|
|
146
149
|
function handleRemove(file) {
|
|
147
150
|
showConfirmDialog({
|
|
148
151
|
title: "提示",
|
|
149
|
-
confirmButtonText: common.LocalizedString("确定","確認"),
|
|
152
|
+
confirmButtonText: common.LocalizedString("确定", "確認"),
|
|
150
153
|
cancelButtonText: "取消",
|
|
151
|
-
message: common.LocalizedString("确定删除该附件?","確定刪除該附件?"),
|
|
154
|
+
message: common.LocalizedString("确定删除该附件?", "確定刪除該附件?"),
|
|
152
155
|
})
|
|
153
156
|
.then(() => {
|
|
154
157
|
File.deleteFile(file, false, model.value);
|
|
@@ -274,7 +277,7 @@ function viewerfile(file) {
|
|
|
274
277
|
}
|
|
275
278
|
|
|
276
279
|
function onEnd(ev) {
|
|
277
|
-
File.changeFile(model.value,model.value.fileList[ev.moved.oldIndex], model.value.fileList[ev.moved.newIndex])
|
|
280
|
+
File.changeFile(model.value, model.value.fileList[ev.moved.oldIndex], model.value.fileList[ev.moved.newIndex])
|
|
278
281
|
}
|
|
279
282
|
defineExpose({
|
|
280
283
|
model
|
|
@@ -294,8 +297,9 @@ defineExpose({
|
|
|
294
297
|
color: #fff;
|
|
295
298
|
font-size: 12px;
|
|
296
299
|
text-align: center;
|
|
297
|
-
background:
|
|
300
|
+
background: #000000;
|
|
298
301
|
height: 24px;
|
|
302
|
+
opacity: 0.5;
|
|
299
303
|
}
|
|
300
304
|
|
|
301
305
|
.ct-fielduploader .van-uploader__preview-image {
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
:height="300" @click="clickHandler"
|
|
9
9
|
:class="[model.moreActionRouter ? 'selectmore' : '', open ? 'open' : '']"
|
|
10
10
|
:filter-method="debouncedRemoteMethod" @compositionstart="handleCompositionStart"
|
|
11
|
-
@compositionend="handleCompositionEnd">
|
|
11
|
+
@compositionend="handleCompositionEnd" :formatter="formatLabel">
|
|
12
12
|
<template #default="{ item }">
|
|
13
13
|
<el-tooltip :disabled="!item.toolTip" :content="item.toolTip" placement="right">
|
|
14
14
|
<span v-html="item.displayName || item.name"></span>
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
<template v-for="(v, i) in model.labelValue" :key="i">
|
|
23
23
|
<el-tag class="ml-2" type="info" disable-transitions :closable="!v.locked && !model.locked"
|
|
24
24
|
@close="closeTag(v.code)">
|
|
25
|
-
{{ v.
|
|
25
|
+
{{ v.name }}</el-tag>
|
|
26
26
|
</template>
|
|
27
27
|
</template>
|
|
28
28
|
</el-select-v2>
|
|
@@ -113,7 +113,7 @@ function getOptions(key) {
|
|
|
113
113
|
if (item) {
|
|
114
114
|
v.locked = true
|
|
115
115
|
}
|
|
116
|
-
v.label =
|
|
116
|
+
v.label =v.name
|
|
117
117
|
v.value = v.code
|
|
118
118
|
v.disabled = v.locked
|
|
119
119
|
if (v.options) {
|
|
@@ -125,7 +125,7 @@ function getOptions(key) {
|
|
|
125
125
|
if (item1) {
|
|
126
126
|
v2.locked = true
|
|
127
127
|
}
|
|
128
|
-
v2.label = v2.
|
|
128
|
+
v2.label = v2.name
|
|
129
129
|
v2.value = v2.code
|
|
130
130
|
v2.disabled = v2.locked
|
|
131
131
|
});
|
|
@@ -165,10 +165,18 @@ function debounce(func, delay) {
|
|
|
165
165
|
const debouncedRemoteMethod = debounce(getOptions, 300);
|
|
166
166
|
//选中值发生变化时触发
|
|
167
167
|
function change(val) {
|
|
168
|
-
if (typeof val == 'undefined') {
|
|
168
|
+
if (typeof val == 'undefined' || (model.value.multiple && val.length == 0)) {
|
|
169
169
|
if (model.value.defaultCode1) {
|
|
170
|
-
|
|
171
|
-
|
|
170
|
+
if (model.value.multiple) {
|
|
171
|
+
var defaultCode1 = JSON.parse(model.value.defaultCode1)
|
|
172
|
+
defaultCode1.forEach((v) => {
|
|
173
|
+
model.value.value.push(v.code);
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
val = model.value.defaultCode1
|
|
178
|
+
model.value.value = val
|
|
179
|
+
}
|
|
172
180
|
model.value.itemKey = Math.random()
|
|
173
181
|
}
|
|
174
182
|
else {
|
|
@@ -265,6 +273,10 @@ function closeTag(val) {
|
|
|
265
273
|
model.value.value.splice(model.value.value.indexOf(val), 1)
|
|
266
274
|
change(model.value.value)
|
|
267
275
|
}
|
|
276
|
+
const formatLabel = (option) => {
|
|
277
|
+
console.log('进入 formatter', option); // 测试是否触发
|
|
278
|
+
return option.name || option.label;
|
|
279
|
+
};
|
|
268
280
|
defineExpose({
|
|
269
281
|
model
|
|
270
282
|
})
|
|
@@ -260,8 +260,8 @@ if (model.value.paramName1 && !model.value.locked) {
|
|
|
260
260
|
}
|
|
261
261
|
else if (!model.value.locked) {
|
|
262
262
|
config.value.maximumWords = model.value && model.value.maxValue1 ? parseFloat(model.value.maxValue1) : 5000;
|
|
263
|
-
config.value.serverUrl = model.value.moreActionRouter
|
|
264
|
-
config.value.imageUrl = model.value.moreActionRouter
|
|
263
|
+
config.value.serverUrl = model.value.moreActionRouter?.action;
|
|
264
|
+
config.value.imageUrl = model.value.moreActionRouter?.action;
|
|
265
265
|
}
|
|
266
266
|
|
|
267
267
|
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
<div v-loading="operationLoading"></div>
|
|
16
16
|
|
|
17
17
|
<div class="ct-tableParent" ref="refTableParent" v-bind="model.attrs" v-if="!isLoading && model"
|
|
18
|
-
:style="{ height:
|
|
18
|
+
:style="{ height:model.tableHeight + 'px', 'border-bottom': model.isLayout ? 'none' : '', 'border-top': model.isLayout ? 'none' : '', }"
|
|
19
19
|
@scroll="scrollHandle($event)" @keydown.up="rowKeyDownHandle($event, 0)"
|
|
20
20
|
@keydown.down="rowKeyDownHandle($event, 1)" tabindex="-1">
|
|
21
21
|
<div class="ct-table-content" v-if="!model.isLayout">
|
|
@@ -26,11 +26,12 @@
|
|
|
26
26
|
<div ref="refSidebar" v-if="flagSideBar && flagSideBarOfData"
|
|
27
27
|
:style="{ 'height': pageHeight ? pageHeight : '100%', 'width': sideBarWidth + 'px', right: sideBarRight + 'px' }"
|
|
28
28
|
class="sidebar">
|
|
29
|
-
<SearchSideRight
|
|
30
|
-
:
|
|
31
|
-
:
|
|
32
|
-
@
|
|
33
|
-
@
|
|
29
|
+
<SearchSideRight :style="{ 'display': sideBarWidth && sideBarWidth > 0 ? 'block' : 'none' }" ref="RefSideRight"
|
|
30
|
+
:apiParam="sideBarApiParam" :pageType="sideBarPageType" :rowSelectRouter="rowSelectRouter"
|
|
31
|
+
:listHeight="listHeight" :selectIndex="selectIndex" :rowCount="rowCount" :key="detailKey"
|
|
32
|
+
:drowerClose="drowerClose" @clickNextHandler="clickNextHandler" @clickPrevHandler="clickPrevHandler"
|
|
33
|
+
@simpleRouterclickHandler="simpleRouterclickHandler" @closeSideHandler="closeSideHandler"
|
|
34
|
+
@submit="submitHandler"></SearchSideRight>
|
|
34
35
|
<SearchSideMenu ref="refSideMenu" :sideBarMenuRight="sideBarMenuRight" :sideBarStatus="sideBarStatus"
|
|
35
36
|
@sideMenuClickHandler="sideMenuClickHandler"></SearchSideMenu>
|
|
36
37
|
</div>
|
|
@@ -266,8 +267,8 @@ function tableLoaded() {
|
|
|
266
267
|
var tagkey = window.localStorage.getItem(sideBarPageType.value + "key" + title.value);
|
|
267
268
|
sideBarStatus.value = tagkey;
|
|
268
269
|
}
|
|
269
|
-
|
|
270
|
-
if ((flagDefaultDisplaySideBar.value && !sideBarStatus.value)||refTable.value.model.isPageInSideBar) {
|
|
270
|
+
|
|
271
|
+
if ((flagDefaultDisplaySideBar.value && !sideBarStatus.value) || refTable.value.model.isPageInSideBar) {
|
|
271
272
|
sideMenuClickHandler('close');
|
|
272
273
|
}
|
|
273
274
|
else {
|
|
@@ -283,6 +284,9 @@ function tableLoaded() {
|
|
|
283
284
|
flagSideBarOfData.value = false;
|
|
284
285
|
searchWidth.value = 0;
|
|
285
286
|
}
|
|
287
|
+
if (model.value) {
|
|
288
|
+
model.value.table = refTable.value;
|
|
289
|
+
}
|
|
286
290
|
emit('tableLoaded', refTable.value.model);
|
|
287
291
|
emit('loaded', refTable.value.model);
|
|
288
292
|
}
|
|
@@ -390,10 +394,10 @@ function rowClickHandle() {
|
|
|
390
394
|
}
|
|
391
395
|
);
|
|
392
396
|
}
|
|
393
|
-
if(refTable.value.model.columnName){
|
|
397
|
+
if (refTable.value.model.columnName) {
|
|
394
398
|
sideBarApiParam.value.columnName = refTable.value.model.columnName;
|
|
395
399
|
}
|
|
396
|
-
if(refTable.value.model.columnGroupId){
|
|
400
|
+
if (refTable.value.model.columnGroupId) {
|
|
397
401
|
sideBarApiParam.value.columnGroupId = refTable.value.model.columnGroupId;
|
|
398
402
|
}
|
|
399
403
|
sideBarApiParam.value.actionType = refTable.value.model.rowSelectRouter.actionType;
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
@change="change()" :disabled="model.locked" :rows="model.rows" :readonly="model.readonly"
|
|
7
7
|
:show-password="model.inputType == 'password'" autocomplete="on" :maxlength="model.maxValue1"
|
|
8
8
|
:show-word-limit="model.showWordLimit" clearable @keyup.enter.native="search()"
|
|
9
|
-
class="fieldControl">
|
|
9
|
+
@keydown.enter.native="handleKeyDown" class="fieldControl">
|
|
10
10
|
<template #suffix>
|
|
11
11
|
<span v-if="model.unitName1">{{ model.unitName1 }}</span>
|
|
12
12
|
</template>
|
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
@change="change()" :disabled="model.locked" :rows="model.rows" :readonly="model.readonly"
|
|
18
18
|
:show-password="model.inputType == 'password'" autocomplete="on"
|
|
19
19
|
:maxlength="model.controlType !== Enum.ControlType.NumericTextBox ? model.maxValue1 : ''"
|
|
20
|
-
:show-word-limit="model.showWordLimit" clearable @keyup.enter.native="search()"
|
|
20
|
+
:show-word-limit="model.showWordLimit" clearable @keyup.enter.native="search()"
|
|
21
|
+
@keydown.enter.native="handleKeyDown" class="fieldControl">
|
|
21
22
|
<template #suffix>
|
|
22
23
|
<span v-if="model.unitName1">{{ model.unitName1 }}</span>
|
|
23
24
|
</template>
|
|
@@ -34,6 +35,8 @@
|
|
|
34
35
|
</ct-field>
|
|
35
36
|
</template>
|
|
36
37
|
<script lang="ts" setup>
|
|
38
|
+
import { ref } from 'vue'
|
|
39
|
+
|
|
37
40
|
import { initData, changeHandler } from '../../utils/mixins';
|
|
38
41
|
import TextBox from '../../loader/src/TextBox';
|
|
39
42
|
import Enum from '../../utils/Enum'
|
|
@@ -47,6 +50,7 @@ const props = defineProps({
|
|
|
47
50
|
default: ''
|
|
48
51
|
},
|
|
49
52
|
})
|
|
53
|
+
const isEnterPressed = ref(false);
|
|
50
54
|
const model = initData(props, TextBox)
|
|
51
55
|
model.value.selfValidExcute = () => {
|
|
52
56
|
model.value.valid = true;
|
|
@@ -64,6 +68,12 @@ function search() {
|
|
|
64
68
|
if (model.value.autoSearch || props.from == 'tree') {
|
|
65
69
|
emit('search');
|
|
66
70
|
}
|
|
71
|
+
setTimeout(() => {
|
|
72
|
+
isEnterPressed.value = false;
|
|
73
|
+
}, 100);
|
|
74
|
+
}
|
|
75
|
+
function handleKeyDown(event) {
|
|
76
|
+
isEnterPressed.value = true;
|
|
67
77
|
}
|
|
68
78
|
function input() {
|
|
69
79
|
if (model.value.controlType === Enum.ControlType.MultiLineText || model.value.controlType === Enum.ControlType.TextBox) {
|
|
@@ -74,6 +84,9 @@ function input() {
|
|
|
74
84
|
}
|
|
75
85
|
function change() {
|
|
76
86
|
changeHandler(model.value, emit);
|
|
87
|
+
if (isEnterPressed.value) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
77
90
|
if (props.from == 'tree') { emit('search'); }
|
|
78
91
|
}
|
|
79
92
|
//弹出选择列表
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div id="ct-tree" class="ct-tree" oncontextmenu="event.preventDefault()" style="overflow:auto;" v-loading="loading"
|
|
2
|
+
<div id="ct-tree" class="ct-tree" oncontextmenu="event.preventDefault()" style="overflow:auto;" v-loading="loading"
|
|
3
|
+
:style="{ height: props.treeHeight - 10 + 'px' }">
|
|
3
4
|
<el-tree class="tree-line" :props="defaultProps" :load="loadNode" :expand-on-click-node="false"
|
|
4
5
|
@node-click="handleNodeClick" lazy ref="refTree" @node-contextmenu="rightClick" node-key="code"
|
|
5
6
|
current-node-key="currentNodeKey">
|
|
@@ -50,10 +51,10 @@ const props = defineProps({
|
|
|
50
51
|
Number,
|
|
51
52
|
default: 500,
|
|
52
53
|
},
|
|
53
|
-
})
|
|
54
|
+
})
|
|
54
55
|
const refTree = ref()
|
|
55
|
-
const rootNode
|
|
56
|
-
const rootResolve
|
|
56
|
+
const rootNode = ref();
|
|
57
|
+
const rootResolve = ref();
|
|
57
58
|
const LastClickNode = ref(null)
|
|
58
59
|
const defaultProps = ref({
|
|
59
60
|
label: 'name',
|
|
@@ -65,13 +66,13 @@ const defaultProps = ref({
|
|
|
65
66
|
const searchStatus = ref([])
|
|
66
67
|
|
|
67
68
|
const menuVisible = ref(false)//右键菜单显示控制
|
|
68
|
-
const currentData = ref({code:""})// 当前节点所对应的数据
|
|
69
|
+
const currentData = ref({ code: "" })// 当前节点所对应的数据
|
|
69
70
|
const currentNode = ref(null)//当前节点对应的 Node
|
|
70
71
|
const loading = ref(false)//数据理否查询完成
|
|
71
72
|
|
|
72
|
-
const model = ref(null)
|
|
73
|
+
const model = ref(null)
|
|
73
74
|
const nodeRef = ref()
|
|
74
|
-
|
|
75
|
+
const retryCount = ref(0);
|
|
75
76
|
const treeNodeRefMap = ref({});
|
|
76
77
|
/** 动态设置Input Ref */
|
|
77
78
|
const handleSetInputMap = (el: refItem, item) => {
|
|
@@ -80,8 +81,8 @@ const handleSetInputMap = (el: refItem, item) => {
|
|
|
80
81
|
}
|
|
81
82
|
};
|
|
82
83
|
|
|
83
|
-
const qrtimer=ref(null)
|
|
84
|
-
onBeforeUnmount(()=>{
|
|
84
|
+
const qrtimer = ref(null)
|
|
85
|
+
onBeforeUnmount(() => {
|
|
85
86
|
if (qrtimer.value) {
|
|
86
87
|
clearTimeout(qrtimer.value);
|
|
87
88
|
qrtimer.value = null;
|
|
@@ -91,24 +92,32 @@ onBeforeUnmount(()=>{
|
|
|
91
92
|
//搜索(查询条件调用)
|
|
92
93
|
function search(m) {
|
|
93
94
|
if (searchStatus.value.length == 0) {
|
|
94
|
-
|
|
95
|
+
// 重置计数器
|
|
96
|
+
retryCount.value = 0
|
|
97
|
+
if (qrtimer.value) clearTimeout(qrtimer.value);
|
|
95
98
|
searchStatus.value.push('a');
|
|
96
99
|
rootNode.value.childNodes = []
|
|
97
|
-
loadNode(rootNode.value, rootResolve.value,m)
|
|
100
|
+
loadNode(rootNode.value, rootResolve.value, m)
|
|
98
101
|
}
|
|
99
102
|
else {
|
|
103
|
+
if (retryCount.value >= 50) {
|
|
104
|
+
console.warn(`搜索繁忙,请稍后再试`);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
retryCount.value++
|
|
108
|
+
|
|
100
109
|
qrtimer.value = setTimeout(() => {
|
|
101
110
|
search(m);
|
|
102
111
|
}, 200);
|
|
103
112
|
}
|
|
104
113
|
}
|
|
105
114
|
//加载节点(点击节点加号时调用)
|
|
106
|
-
function loadNode(node, resolve,m) {
|
|
115
|
+
function loadNode(node, resolve, m) {
|
|
107
116
|
if (node.level === 0) {
|
|
108
117
|
loading.value = true;
|
|
109
118
|
rootNode.value = node
|
|
110
119
|
rootResolve.value = resolve;
|
|
111
|
-
return SearchTree(m||undefined).then(data => {
|
|
120
|
+
return SearchTree(m || undefined).then(data => {
|
|
112
121
|
loading.value = false;
|
|
113
122
|
resolve(data.rows);
|
|
114
123
|
load(data, true)
|
|
@@ -131,7 +140,7 @@ async function load(data, firstLoad) {
|
|
|
131
140
|
model.value = data;
|
|
132
141
|
if (searchStatus.value.length > 0) {
|
|
133
142
|
searchStatus.value = searchStatus.value.slice(1)
|
|
134
|
-
}
|
|
143
|
+
}
|
|
135
144
|
loading.value = false;
|
|
136
145
|
menuVisible.value = false;
|
|
137
146
|
if (firstLoad) {
|
|
@@ -150,7 +159,7 @@ function SearchTree(m) {
|
|
|
150
159
|
|
|
151
160
|
return new Promise((resolve, reject) => {
|
|
152
161
|
if (typeof props.api !== 'undefined') {
|
|
153
|
-
|
|
162
|
+
|
|
154
163
|
resolve(Tree.loadSearchTreeApi(props.api, m));
|
|
155
164
|
}
|
|
156
165
|
});
|
|
@@ -183,7 +192,7 @@ function handleNodeClick(data, formType) {
|
|
|
183
192
|
//右键菜单
|
|
184
193
|
function rightClick(event, object, Node) { // event、object该节点所对应的对象、节点对应的 Node、节点组件本身
|
|
185
194
|
nodeRef.value = treeNodeRefMap.value[`node_Ref_${object.code}`]
|
|
186
|
-
|
|
195
|
+
|
|
187
196
|
currentData.value = object
|
|
188
197
|
currentNode.value = Node
|
|
189
198
|
let actionIndex = 0;
|
|
@@ -201,7 +210,7 @@ function rightClick(event, object, Node) { // event、object该节点所对应
|
|
|
201
210
|
function closeMenu() {
|
|
202
211
|
menuVisible.value = false;
|
|
203
212
|
nodeRef.value = null
|
|
204
|
-
currentData.value = { ...currentData.value,code:"" }
|
|
213
|
+
currentData.value = { ...currentData.value, code: "" }
|
|
205
214
|
document.removeEventListener('click', closeMenu)
|
|
206
215
|
}
|
|
207
216
|
// 菜单路由
|
|
@@ -440,10 +449,10 @@ defineExpose({
|
|
|
440
449
|
background-size: 10px;
|
|
441
450
|
}
|
|
442
451
|
|
|
443
|
-
.box-menu {
|
|
452
|
+
.box-menu {
|
|
444
453
|
z-index: 1000;
|
|
445
454
|
background-color: #fff;
|
|
446
|
-
|
|
455
|
+
padding: 10px;
|
|
447
456
|
|
|
448
457
|
div {
|
|
449
458
|
cursor: pointer;
|
|
@@ -459,4 +468,3 @@ defineExpose({
|
|
|
459
468
|
color: var(--btnHoverRed);
|
|
460
469
|
}
|
|
461
470
|
</style>
|
|
462
|
-
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div>
|
|
3
3
|
<div ref="refscreenDiv" id="refscreenDiv">
|
|
4
|
-
<ct-searchscreen ref="reftreescreen" :from="'tree'" :api="searchConditionApi" :screenPara="screenPara"
|
|
4
|
+
<ct-searchscreen ref="reftreescreen" :from="'tree'" style="padding-left: 11px;" :api="searchConditionApi" :screenPara="screenPara"
|
|
5
5
|
@search="search" @loaded="screenload" ></ct-searchscreen>
|
|
6
6
|
</div>
|
|
7
7
|
<tree v-if="loadTree" ref="reftree" :api="searchDataApi" @loaded="loaded" :treeHeight="treeHeight">
|
package/src/loader/src/Field.js
CHANGED
|
@@ -852,8 +852,9 @@ const Base = function (source, moreActionRouter, formLabelPlacement) {
|
|
|
852
852
|
if (this.multiple) {
|
|
853
853
|
this.value.splice(0);
|
|
854
854
|
this.labelValue.splice(0);
|
|
855
|
-
if (this.
|
|
856
|
-
this.
|
|
855
|
+
if (this.defaultCode1) {
|
|
856
|
+
var defaultCode1=JSON.parse(this.defaultCode1)
|
|
857
|
+
defaultCode1.forEach((v) => {
|
|
857
858
|
this.value.push(v.code);
|
|
858
859
|
this.labelValue.push(v);
|
|
859
860
|
});
|
package/src/loader/src/Form.js
CHANGED
|
@@ -820,6 +820,26 @@ function loadFromModel(source, isFormList) {
|
|
|
820
820
|
});
|
|
821
821
|
Object.assign(rtnFormObj, customizeColumnsObj);
|
|
822
822
|
}
|
|
823
|
+
else if (f.controlType == Enum.ControlType.SearchPage) {
|
|
824
|
+
if (f.table) {
|
|
825
|
+
let rtnFormArr = [];
|
|
826
|
+
var tempListData = f.table.model.getSelectRowData({ isMulti: f.table.model.isMulti });
|
|
827
|
+
for (let i = 0; i < tempListData.length; i++) {
|
|
828
|
+
rtnFormArr.push(tempListData[i]);
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
let rtnObj = {};
|
|
832
|
+
Object.defineProperty(rtnObj, f.fieldName1, {
|
|
833
|
+
get: function () {
|
|
834
|
+
return rtnFormArr;
|
|
835
|
+
},
|
|
836
|
+
enumerable: true,
|
|
837
|
+
configurable: true
|
|
838
|
+
});
|
|
839
|
+
Object.assign(rtnFormObj, rtnObj);
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
}
|
|
823
843
|
else {
|
|
824
844
|
if (f.hasOwnProperty('getFormObj') && typeof f.getFormObj === "function") {
|
|
825
845
|
Object.assign(rtnFormObj, f.getFormObj());
|
|
@@ -222,13 +222,12 @@ const LibFunction = {
|
|
|
222
222
|
item.is = 'ct-location';
|
|
223
223
|
break;
|
|
224
224
|
case Enum.ControlType.SearchPage: //搜索列表页面
|
|
225
|
-
item = {};
|
|
225
|
+
//item = {};
|
|
226
226
|
item.is = 'ct-searchlist';
|
|
227
227
|
item.bindPara = {
|
|
228
228
|
searchConditionApi: field.code1,
|
|
229
229
|
searchDataApi: field.code2,
|
|
230
230
|
pageHeight: field.code4 ? field.code4 + 'px' : '',
|
|
231
|
-
from: 'form',
|
|
232
231
|
apiParam: field.code3 ? JSON.parse(field.code3) : {}
|
|
233
232
|
};
|
|
234
233
|
break;
|
package/src/loader/src/Router.js
CHANGED
|
@@ -148,7 +148,8 @@ const Router = function (source) {
|
|
|
148
148
|
return source.pageStyle === Enum.PageStyle.BrowserNewTab;
|
|
149
149
|
},
|
|
150
150
|
get isClientFuntion() {
|
|
151
|
-
return source.pageStyle === Enum.PageStyle.ClientFunction
|
|
151
|
+
return source.pageStyle === Enum.PageStyle.ClientFunction
|
|
152
|
+
||source.actionType===Enum.ActionType.ExcuteClientFunction;
|
|
152
153
|
},
|
|
153
154
|
get isSearchPageWithList() {
|
|
154
155
|
return source.pageStyle === Enum.PageStyle.SearchPageWithList;
|
package/src/main.js
CHANGED
|
@@ -65,7 +65,7 @@ app.use(centaline, {
|
|
|
65
65
|
//获取请求头
|
|
66
66
|
getRequestHeaders: function () {
|
|
67
67
|
return {
|
|
68
|
-
authobject: '{token:"
|
|
68
|
+
authobject: '{token:"wufw-1988032150800367616",platform:"WEB"}',
|
|
69
69
|
//oldToken: 'd92d4a3b-2274-42e8-96f0-100ffb579b6e',
|
|
70
70
|
//authObject: '{token:"jiangzf-1958445358178844672",platform:"WEB"}',
|
|
71
71
|
//authObject: '{EmpID:"Token_4e09499b-4b76-46df-9ce5-5498d48ed062",MachineCode:"ae184643-f8e2-453c-a752-ba82612b592f",SSO_Token:"SSOToken_4e09499b-4b76-46df-9ce5-5498d48ed062",Platform:"WEB"}',
|
package/src/utils/Enum.js
CHANGED
|
@@ -486,6 +486,11 @@ const Enum = {
|
|
|
486
486
|
* 打开百度地图
|
|
487
487
|
*/
|
|
488
488
|
OpenBaiduMap: 100,
|
|
489
|
+
|
|
490
|
+
/// <summary>
|
|
491
|
+
/// 执行客户端函数
|
|
492
|
+
/// </summary>
|
|
493
|
+
ExcuteClientFunction: 27,
|
|
489
494
|
},
|
|
490
495
|
|
|
491
496
|
/// <summary>
|
|
@@ -669,13 +674,13 @@ const Enum = {
|
|
|
669
674
|
* 在tab页打开 前端的VUE组件, 组件名称放在action参数里
|
|
670
675
|
*/
|
|
671
676
|
OpenVueComponentInTab: 122,
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
677
|
+
/**
|
|
678
|
+
* 表单在侧边栏打开
|
|
679
|
+
*/
|
|
675
680
|
FormPageInSideBar: 123,
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
681
|
+
/**
|
|
682
|
+
* 列表在侧边栏打开
|
|
683
|
+
*/
|
|
679
684
|
SearchPageInSideBar: 124
|
|
680
685
|
},
|
|
681
686
|
|
package/src/views/Form.vue
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div id="form-app" class="data-driven" style="width:100%;height:100%;overflow:auto">
|
|
3
|
-
<ct-form :api="'/
|
|
3
|
+
<ct-form :api="'/Employee/readDetail'" :apiParam="apiParam"></ct-form>
|
|
4
4
|
<!-- <ct-textbox :source="source"></ct-textbox> -->
|
|
5
|
-
|
|
5
|
+
<ct-dialoglist ref="dialogList"></ct-dialoglist>
|
|
6
6
|
</div>
|
|
7
7
|
</template>
|
|
8
8
|
<script lang="ts" setup>
|
|
9
|
-
const apiParam={
|
|
10
|
-
"actionType": 2,
|
|
11
|
-
"empID": "{90A76197-49CC-4D81-A08E-048557757B57}"
|
|
12
|
-
}
|
|
13
|
-
const source={"controlType":2,"showLabel":true,"controlLabel":"制度标识","groupExpand":false,"singleLine":false,"rows":1,"required":true,"spanCols":1,"locked":false,"autoFill":false,"searchDataType":1,"searchOperation":1,"displayLabelAfterSelected":true,"autoSearch":false,"mediaViewPageType":1,"fieldName1":"WorkSystemID","code1":"CD","name1":"","decimals1":-1,"maxValue1":"50","preLabel1":"","sufLabel1":"","fieldName2":"","code2":"","name2":"","decimals2":-1,"decimals3":0,"decimals4":-1,"width":200,"applyNew":1,"applyEdit":1,"applyBrowse":1}
|
|
9
|
+
const apiParam={"actionType":2}
|
|
14
10
|
</script>
|
package/src/views/SearchList.vue
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div id="app-search" style="width:100%;height:100%;position: fixed;">
|
|
3
|
-
<ct-searchlist :apiParam="apiParam" :searchConditionApi="'
|
|
4
|
-
:searchDataApi="'
|
|
3
|
+
<ct-searchlist :apiParam="apiParam" :searchConditionApi="'ReportOverTimeList/getLayoutOfSearch'"
|
|
4
|
+
:searchDataApi="'ReportOverTimeList/getListOfSearchModel'"></ct-searchlist>
|
|
5
5
|
|
|
6
6
|
<!-- <ct-searchlist :apiParam="apiParam" :searchConditionApi="'/EmployeeMaternityList/getLayoutOfSearch'"
|
|
7
7
|
:searchDataApi="'/EmployeeMaternityList/getListOfSearchModel'"></ct-searchlist> -->
|
|
@@ -15,6 +15,6 @@
|
|
|
15
15
|
|
|
16
16
|
<script lang="ts" setup>
|
|
17
17
|
import { ref, nextTick } from 'vue'
|
|
18
|
-
const apiParam = {
|
|
18
|
+
const apiParam = {}
|
|
19
19
|
|
|
20
20
|
</script>
|
package/src/views/Tree.vue
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div id="app-Tree" style="height:100%;position: fixed;width:100%;padding: 10px;">
|
|
3
3
|
<ct-treelist :flagsearch="true" :apiParam="apiParam" :leftWidth="'280'"
|
|
4
|
-
:searchConditionApi="'/
|
|
4
|
+
:searchConditionApi="'/SystemUser/getSystemBusinessCategory'" :searchDataApi="'/SystemUser/getSystemBusinessCategory'"
|
|
5
5
|
@loaded="loaded"></ct-treelist>
|
|
6
6
|
<!-- <ct-textbox :source="source"></ct-textbox> -->
|
|
7
7
|
<ct-dialoglist></ct-dialoglist>
|