centaline-data-driven-v3 0.0.65 → 0.0.67
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 +64 -64
- package/package.json +2 -2
- package/src/assets/commonWeb.css +4 -45
- package/src/components/common/video.vue +2 -2
- package/src/components/web/Button.vue +57 -1
- package/src/components/web/ComboBox.vue +29 -4
- package/src/components/web/Form.vue +11 -2
- package/src/components/web/FormList.vue +69 -51
- package/src/components/web/RadioButton.vue +9 -2
- package/src/components/web/SearchList/Tablecurrency.vue +4 -3
- package/src/components/web/SearchScreen.vue +10 -6
- package/src/components/web/SensitiveEye.vue +3 -2
- package/src/components/web/TextBox.vue +11 -5
- package/src/loader/src/Button.js +6 -6
- package/src/loader/src/Form.js +1 -0
- package/src/loader/src/SearchTable.js +5 -2
- package/src/main.js +2 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "centaline-data-driven-v3",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.67",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "centaline-data-driven-v3",
|
|
6
6
|
"main": "dist/centaline-data-driven-v3.umd.js",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"moment": "^2.30.1",
|
|
17
17
|
"photo-sphere-viewer": "^4.8.1",
|
|
18
18
|
"sortablejs": "^1.15.6",
|
|
19
|
-
"vant": "^4.8.0",
|
|
19
|
+
"vant": "^4.8.0",
|
|
20
20
|
"vite-plugin-css-injected-by-js": "^3.3.0",
|
|
21
21
|
"vue": "^3.3.4",
|
|
22
22
|
"vue-cropper": "^1.1.1",
|
package/src/assets/commonWeb.css
CHANGED
|
@@ -128,6 +128,9 @@ body {
|
|
|
128
128
|
line-height: 26px;
|
|
129
129
|
color: var(--centalineGray);
|
|
130
130
|
}
|
|
131
|
+
.el-input__suffix{
|
|
132
|
+
font-size: 12px;
|
|
133
|
+
}
|
|
131
134
|
|
|
132
135
|
.button-initial {
|
|
133
136
|
margin-top: 8px;
|
|
@@ -358,50 +361,6 @@ body {
|
|
|
358
361
|
color: var(--centalineBlack);
|
|
359
362
|
}
|
|
360
363
|
|
|
361
|
-
/* 查询搜索 */
|
|
362
|
-
.search-btn,
|
|
363
|
-
.more-btn {
|
|
364
|
-
height: 26px;
|
|
365
|
-
background: var(--chinaRed) !important;
|
|
366
|
-
border-color: var(--chinaRed) !important;
|
|
367
|
-
box-shadow: 0px 2px 4px 0px rgba(238, 107, 107, 0.25);
|
|
368
|
-
border-radius: 6px;
|
|
369
|
-
color: #fff !important;
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
/* 重置按钮 更多按钮*/
|
|
373
|
-
.reset-btn {
|
|
374
|
-
height: 26px;
|
|
375
|
-
background: #FFFFFF !important;
|
|
376
|
-
border-color: var(--chinaRed) !important;
|
|
377
|
-
border-radius: 6px;
|
|
378
|
-
color: var(--chinaRed) !important;
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
/* 搜索按钮,重置按钮和更多按钮的hover */
|
|
382
|
-
.search-btn:hover,
|
|
383
|
-
.reset-btn:hover,
|
|
384
|
-
.more-btn:hover {
|
|
385
|
-
background-color: var(--btnHoverRed) !important;
|
|
386
|
-
border-color: var(--btnHoverRed) !important;
|
|
387
|
-
color: #fff !important;
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
.more-btn:hover .open,
|
|
391
|
-
.more-btn:hover .fold {
|
|
392
|
-
background-color: var(--btnHoverRed) !important;
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
.search-btn:active,
|
|
396
|
-
.search-btn:focus,
|
|
397
|
-
.reset-btn:active.reset-btn:focus,
|
|
398
|
-
.more-btn:active.more-btn:focus {
|
|
399
|
-
background-color: var(--btnFocusRed);
|
|
400
|
-
border-color: var(--btnFocusRed);
|
|
401
|
-
color: #fff !important;
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
|
|
405
364
|
.subdiv_allinline {
|
|
406
365
|
margin: 0;
|
|
407
366
|
padding: 0;
|
|
@@ -1067,7 +1026,7 @@ body {
|
|
|
1067
1026
|
.el-tag--small {
|
|
1068
1027
|
height: auto;
|
|
1069
1028
|
line-height: 16px;
|
|
1070
|
-
padding: 3px
|
|
1029
|
+
padding: 3px 5px;
|
|
1071
1030
|
}
|
|
1072
1031
|
|
|
1073
1032
|
.el-checkbox.el-checkbox--small {
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
<div class="alert fade in" role="alert"
|
|
3
3
|
style="padding:0px;border-bottom:none;display: table-caption;margin-left: 5px;">
|
|
4
4
|
<video :src="submitData[router.submitFormField]" controls="true" autoplay controlslist="nodownload"
|
|
5
|
-
:height="router.
|
|
6
|
-
:width="router.
|
|
5
|
+
:height="router.pageHeight ? router.pageHeight - 10 : '40'"
|
|
6
|
+
:width="router.pageWidth ? router.pageWidth - 10 : '100%'">您的浏览器不支持 video 标签。
|
|
7
7
|
</video>
|
|
8
8
|
</div>
|
|
9
9
|
</template>
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
:style="{ color: model.textColor, backgroundColor: model.imgUrl ? 'transparent' : model.bgColor, borderColor: model.imgUrl ? 'transparent' : model.borderColor, padding: model.imgUrl ? '0px' : null }"
|
|
17
17
|
@click="clickHandle">{{ model.controlLabel }}</el-link>
|
|
18
18
|
<el-upload v-else-if="model.isImport" :action="model.action" :data="uploadData" :headers="headers" :multiple="false"
|
|
19
|
-
:show-file-list="false" :on-success="handleAvatarSuccess" :on-error="handleAvatarError">
|
|
19
|
+
:show-file-list="false" :on-success="handleAvatarSuccess" :on-error="handleAvatarError" :before-upload="handleAvatarBeforeUpload">
|
|
20
20
|
<el-button type="primary" v-bind="model.attrs"
|
|
21
21
|
:style="{ color: model.textColor, backgroundColor: model.imgUrl ? 'transparent' : model.bgColor, borderColor: model.imgUrl ? 'transparent' : model.borderColor, padding: model.imgUrl ? '0px' : null }"
|
|
22
22
|
:disabled="model.disabled || model.locked">
|
|
@@ -97,6 +97,19 @@ function clickHandle() {
|
|
|
97
97
|
emit('fieldClick', model.value);
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
+
function handleAvatarBeforeUpload(file) {
|
|
101
|
+
if(model.value.form && model.value.form.$vue){
|
|
102
|
+
let submitData = model.value.form.$vue.getFileData(model.value);
|
|
103
|
+
for (var key in submitData) {
|
|
104
|
+
if (typeof submitData[key] === "object") {
|
|
105
|
+
uploadData.value[key] = JSON.stringify(submitData[key]);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
uploadData.value[key] = submitData[key];
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
100
113
|
function handleAvatarSuccess(res) {
|
|
101
114
|
emit('importComplete', res, model.value);
|
|
102
115
|
}
|
|
@@ -124,4 +137,47 @@ function commandClick(code) {
|
|
|
124
137
|
color: var(--chinaRed);
|
|
125
138
|
font-weight: 700;
|
|
126
139
|
}
|
|
140
|
+
/* 查询搜索 */
|
|
141
|
+
.search-btn,
|
|
142
|
+
.more-btn {
|
|
143
|
+
height: 26px;
|
|
144
|
+
background: var(--chinaRed);
|
|
145
|
+
border-color: var(--chinaRed);
|
|
146
|
+
box-shadow: 0px 2px 4px 0px rgba(238, 107, 107, 0.25);
|
|
147
|
+
border-radius: 6px;
|
|
148
|
+
color: #fff;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/* 重置按钮 更多按钮*/
|
|
152
|
+
.reset-btn {
|
|
153
|
+
height: 26px;
|
|
154
|
+
background: #FFFFFF;
|
|
155
|
+
border-color: var(--chinaRed);
|
|
156
|
+
border-radius: 6px;
|
|
157
|
+
color: var(--chinaRed);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/* 搜索按钮,重置按钮和更多按钮的hover */
|
|
161
|
+
.search-btn:hover,
|
|
162
|
+
.reset-btn:hover,
|
|
163
|
+
.more-btn:hover {
|
|
164
|
+
background-color: var(--btnHoverRed);
|
|
165
|
+
border-color: var(--btnHoverRed);
|
|
166
|
+
color: #fff;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.more-btn:hover .open,
|
|
170
|
+
.more-btn:hover .fold {
|
|
171
|
+
background-color: var(--btnHoverRed);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.search-btn:active,
|
|
175
|
+
.search-btn:focus,
|
|
176
|
+
.reset-btn:active.reset-btn:focus,
|
|
177
|
+
.more-btn:active.more-btn:focus {
|
|
178
|
+
background-color: var(--btnFocusRed);
|
|
179
|
+
border-color: var(--btnFocusRed);
|
|
180
|
+
color: #fff;
|
|
181
|
+
}
|
|
182
|
+
|
|
127
183
|
</style>
|
|
@@ -6,14 +6,15 @@
|
|
|
6
6
|
:placeholder="model.placeholder" @visible-change="visibleChange" @clear="clear"
|
|
7
7
|
:filterable="model.filterable" :multiple="model.multiple" class="fieldControl" :height="300"
|
|
8
8
|
@click="clickHandler" :class="[model.moreActionRouter ? 'selectmore' : '', open ? 'open' : '']"
|
|
9
|
-
:filter-method="
|
|
9
|
+
:filter-method="debouncedRemoteMethod" @compositionstart="handleCompositionStart"
|
|
10
|
+
@compositionend="handleCompositionEnd">
|
|
10
11
|
<template #default="{ item }">
|
|
11
12
|
<el-tooltip :disabled="!item.toolTip" :content="item.toolTip" placement="right">
|
|
12
13
|
<span v-html="item.displayName || item.name"></span>
|
|
13
14
|
</el-tooltip>
|
|
14
15
|
</template>
|
|
15
16
|
<template #prefix
|
|
16
|
-
v-if="(model.isList && model.value && !model.multiple) || (model.multiple && model.isList && model.labelValue && model.labelValue.length > 0 && model.placeholder)">
|
|
17
|
+
v-if="((model.isList && model.value && !model.multiple) || (model.multiple && model.isList && model.labelValue && model.labelValue.length > 0 && model.placeholder)) && model.prefix">
|
|
17
18
|
<span>{{ model.prefix }}</span>
|
|
18
19
|
</template>
|
|
19
20
|
<template #tag>
|
|
@@ -57,6 +58,7 @@ const model = initData(props, ComboBox)
|
|
|
57
58
|
const refselect = ref()
|
|
58
59
|
const open = ref(false)
|
|
59
60
|
const itemKey = ref(Math.random())
|
|
61
|
+
const isComposing = ref(false);
|
|
60
62
|
|
|
61
63
|
//下拉框出现/隐藏时触发
|
|
62
64
|
function visibleChange(visible) {
|
|
@@ -79,8 +81,9 @@ function visibleChange(visible) {
|
|
|
79
81
|
}
|
|
80
82
|
//获取数据列表
|
|
81
83
|
function getOptions(key) {
|
|
82
|
-
if (!model.value.moreActionRouter) {
|
|
84
|
+
if (!isComposing.value &&!model.value.moreActionRouter) {
|
|
83
85
|
model.value.getOptions(props.parameterAction, key, function (data) {
|
|
86
|
+
if(data){
|
|
84
87
|
data.forEach((v) => {
|
|
85
88
|
let item = model.value.globalOptions.find((v1) => {
|
|
86
89
|
return v1.code === v.code && v1.locked;
|
|
@@ -113,10 +116,25 @@ function getOptions(key) {
|
|
|
113
116
|
nextTick(function () {
|
|
114
117
|
setminWidth()
|
|
115
118
|
});
|
|
119
|
+
}
|
|
116
120
|
})
|
|
117
121
|
}
|
|
118
122
|
|
|
119
123
|
}
|
|
124
|
+
// 防抖函数
|
|
125
|
+
function debounce(func, delay) {
|
|
126
|
+
let timer = null;
|
|
127
|
+
return function () {
|
|
128
|
+
const context = this;
|
|
129
|
+
const args = arguments;
|
|
130
|
+
clearTimeout(timer);
|
|
131
|
+
timer = setTimeout(() => {
|
|
132
|
+
func.apply(context, args);
|
|
133
|
+
}, delay);
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
// 创建防抖后的远程搜索方法,延迟 300 毫秒
|
|
137
|
+
const debouncedRemoteMethod = debounce(getOptions, 300);
|
|
120
138
|
//选中值发生变化时触发
|
|
121
139
|
function change(val) {
|
|
122
140
|
if (typeof val == 'undefined') {
|
|
@@ -131,6 +149,13 @@ function change(val) {
|
|
|
131
149
|
if (model.value.autoSearch) emit('search');
|
|
132
150
|
|
|
133
151
|
}
|
|
152
|
+
function handleCompositionStart() {
|
|
153
|
+
isComposing.value = true;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function handleCompositionEnd() {
|
|
157
|
+
isComposing.value = false;
|
|
158
|
+
}
|
|
134
159
|
//弹出选择列表
|
|
135
160
|
function popupSearchListHandle() {
|
|
136
161
|
emit('popupSearchList', false, model, model.value.moreActionRouter, (optionArr) => {
|
|
@@ -181,7 +206,7 @@ function setminWidth() {
|
|
|
181
206
|
}
|
|
182
207
|
}
|
|
183
208
|
}
|
|
184
|
-
|
|
209
|
+
|
|
185
210
|
let span = document.createElement('span');
|
|
186
211
|
span.innerText = text;
|
|
187
212
|
span.style.whiteSpace = 'nowrap';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div ref="refForm" v-loading="loading">
|
|
2
|
+
<div ref="refForm" v-loading="loading" :style="{'min-height': minHeight}">
|
|
3
3
|
<div v-if="model !== null && !loading" class="ct-form">
|
|
4
4
|
<el-affix target=".ct-form" v-if="model.tip" :offset="62">
|
|
5
5
|
<div class="ct-form-tip">
|
|
@@ -138,7 +138,7 @@
|
|
|
138
138
|
</div>
|
|
139
139
|
</template>
|
|
140
140
|
<script lang="ts" setup>
|
|
141
|
-
import { ref, nextTick, onUpdated,onDeactivated } from 'vue'
|
|
141
|
+
import { ref, nextTick, onUpdated,onDeactivated , onMounted } from 'vue'
|
|
142
142
|
import { RouterClickHandler } from '../../utils/mixins';
|
|
143
143
|
import common from '../../utils/common'
|
|
144
144
|
import Form from '../../loader/src/Form'
|
|
@@ -205,6 +205,7 @@ const Fields = ref()
|
|
|
205
205
|
const refForm = ref()
|
|
206
206
|
const qrtimer = ref(null)
|
|
207
207
|
const downloadUrl = ref('')
|
|
208
|
+
const minHeight = ref('auto')
|
|
208
209
|
onUpdated(() => {
|
|
209
210
|
nextTick(() => {
|
|
210
211
|
qrtimer.value = setTimeout(getisScroll, 100);
|
|
@@ -213,6 +214,9 @@ onUpdated(() => {
|
|
|
213
214
|
onDeactivated(() => {
|
|
214
215
|
downloadUrl.value=''
|
|
215
216
|
})
|
|
217
|
+
onMounted(() => {
|
|
218
|
+
setCss();
|
|
219
|
+
})
|
|
216
220
|
init()
|
|
217
221
|
//初始化数据
|
|
218
222
|
function init() {
|
|
@@ -535,4 +539,9 @@ function flagNotificationParentAfterContentChanged() {
|
|
|
535
539
|
function updateFields(data) {
|
|
536
540
|
Form.updateFields(data, model.value)
|
|
537
541
|
}
|
|
542
|
+
function setCss() {
|
|
543
|
+
if (props.topHeight > -1) {
|
|
544
|
+
minHeight.value = (document.documentElement.clientHeight - props.topHeight - 20) + 'px';
|
|
545
|
+
}
|
|
546
|
+
}
|
|
538
547
|
</script>
|
|
@@ -68,6 +68,9 @@
|
|
|
68
68
|
</div>
|
|
69
69
|
</template>
|
|
70
70
|
<template v-else>
|
|
71
|
+
<div v-if="model.controlLabel" class="list-title">
|
|
72
|
+
<h5>{{ model.controlLabel }}</h5>
|
|
73
|
+
</div>
|
|
71
74
|
<div class="list-button">
|
|
72
75
|
<component v-if="model.selectRouter !== null" :is="model.selectRouter.is"
|
|
73
76
|
:vmodel="model.selectRouter" @click="popupSearchListHandle(model.selectRouter)"></component>
|
|
@@ -79,33 +82,37 @@
|
|
|
79
82
|
<el-table :data="model.tableData" border :show-summary="model.showSummary"
|
|
80
83
|
:summary-method="getSummaries" style="width: 100%" highlight-current-row>
|
|
81
84
|
<template v-if="model.rowActionRoutersAlign === 1">
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
{
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
<template #default="scope">
|
|
89
|
-
<el-tag :disable-transitions="true" v-if="scope.row.edit || scope.row.isSet" type="success"
|
|
90
|
-
@click="saveRow(scope.row, scope.$index, true)" style="cursor: pointer;">{{
|
|
91
|
-
scope.row.isSet
|
|
92
|
-
?
|
|
93
|
-
'保存' :
|
|
94
|
-
"修改" }}</el-tag>
|
|
95
|
-
<el-tag :disable-transitions="true" v-if="scope.row.delete && !scope.row.isSet"
|
|
96
|
-
style="cursor: pointer;" type="danger"
|
|
97
|
-
@click="deleteRow(scope.$index, scope.row.$sourceIndex)">删除</el-tag>
|
|
98
|
-
<el-tag :disable-transitions="true" v-else-if="scope.row.isSet"
|
|
99
|
-
@click="saveRow(scope.row, scope.$index, false)" style="cursor: pointer;">取消</el-tag>
|
|
100
|
-
<template v-for="(v, i) in model.buttons">
|
|
101
|
-
<el-tag
|
|
102
|
-
v-if="!scope.row.isSet && v.show && (!v.rightField || !scope.row[v.rightField] || scope.row[v.rightField].value == 1)"
|
|
103
|
-
style="cursor: pointer;" @click="buttonClick(scope.row, v)">{{ v.label }} 1</el-tag>
|
|
104
|
-
|
|
85
|
+
<el-table-column label="操作"
|
|
86
|
+
v-if="model.rows[0].edit || model.rows[0].delete || model.buttons.length > 0"
|
|
87
|
+
:width="'100%'">
|
|
88
|
+
<template #header="{ column, $index }">
|
|
89
|
+
{{ setcolumnminWidth(column) }}
|
|
90
|
+
<span style="width:auto; white-space: nowrap;">{{ column.label }}</span>
|
|
105
91
|
</template>
|
|
92
|
+
<template #default="scope">
|
|
93
|
+
<el-tag :disable-transitions="true" v-if="scope.row.edit || scope.row.isSet"
|
|
94
|
+
type="success" @click="saveRow(scope.row, scope.$index, true)"
|
|
95
|
+
style="cursor: pointer;">{{
|
|
96
|
+
scope.row.isSet
|
|
97
|
+
?
|
|
98
|
+
'保存' :
|
|
99
|
+
"修改" }}</el-tag>
|
|
100
|
+
<el-tag :disable-transitions="true" v-if="scope.row.delete && !scope.row.isSet"
|
|
101
|
+
style="cursor: pointer;" type="danger"
|
|
102
|
+
@click="deleteRow(scope.$index, scope.row.$sourceIndex)">删除</el-tag>
|
|
103
|
+
<el-tag :disable-transitions="true" v-else-if="scope.row.isSet"
|
|
104
|
+
@click="saveRow(scope.row, scope.$index, false)"
|
|
105
|
+
style="cursor: pointer;">取消</el-tag>
|
|
106
|
+
<template v-for="(v, i) in model.buttons">
|
|
107
|
+
<el-tag
|
|
108
|
+
v-if="!scope.row.isSet && v.show && (!v.rightField || !scope.row[v.rightField] || scope.row[v.rightField].value == 1)"
|
|
109
|
+
style="cursor: pointer;" @click="buttonClick(scope.row, v)">{{ v.label }}
|
|
110
|
+
1</el-tag>
|
|
106
111
|
|
|
107
|
-
|
|
108
|
-
|
|
112
|
+
</template>
|
|
113
|
+
|
|
114
|
+
</template>
|
|
115
|
+
</el-table-column>
|
|
109
116
|
</template>
|
|
110
117
|
<template v-for="(v, i) in model.rows[0].field" :key="i">
|
|
111
118
|
<el-table-column :prop="v.fieldName1" :label="v.controlLabel" :width="v.width"
|
|
@@ -137,33 +144,37 @@
|
|
|
137
144
|
</el-table-column>
|
|
138
145
|
</template>
|
|
139
146
|
<template v-if="model.rowActionRoutersAlign !== 1">
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
{
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
<template #default="scope">
|
|
147
|
-
<el-tag :disable-transitions="true" v-if="scope.row.edit || scope.row.isSet" type="success"
|
|
148
|
-
@click="saveRow(scope.row, scope.$index, true)" style="cursor: pointer;">{{
|
|
149
|
-
scope.row.isSet
|
|
150
|
-
?
|
|
151
|
-
'保存' :
|
|
152
|
-
"修改" }}</el-tag>
|
|
153
|
-
<el-tag :disable-transitions="true" v-if="scope.row.delete && !scope.row.isSet"
|
|
154
|
-
style="cursor: pointer;" type="danger"
|
|
155
|
-
@click="deleteRow(scope.$index, scope.row.$sourceIndex)">删除</el-tag>
|
|
156
|
-
<el-tag :disable-transitions="true" v-else-if="scope.row.isSet"
|
|
157
|
-
@click="saveRow(scope.row, scope.$index, false)" style="cursor: pointer;">取消</el-tag>
|
|
158
|
-
<template v-for="(v, i) in model.buttons">
|
|
159
|
-
<el-tag
|
|
160
|
-
v-if="!scope.row.isSet && v.show && (!v.rightField || !scope.row[v.rightField] || scope.row[v.rightField].value == 1)"
|
|
161
|
-
style="cursor: pointer;" @click="buttonClick(scope.row, v)">{{ v.label }} 1</el-tag>
|
|
162
|
-
|
|
147
|
+
<el-table-column label="操作"
|
|
148
|
+
v-if="model.rows[0].edit || model.rows[0].delete || model.buttons.length > 0"
|
|
149
|
+
:width="'100%'">
|
|
150
|
+
<template #header="{ column, $index }">
|
|
151
|
+
{{ setcolumnminWidth(column) }}
|
|
152
|
+
<span style="width:auto; white-space: nowrap;">{{ column.label }}</span>
|
|
163
153
|
</template>
|
|
154
|
+
<template #default="scope">
|
|
155
|
+
<el-tag :disable-transitions="true" v-if="scope.row.edit || scope.row.isSet"
|
|
156
|
+
type="success" @click="saveRow(scope.row, scope.$index, true)"
|
|
157
|
+
style="cursor: pointer;">{{
|
|
158
|
+
scope.row.isSet
|
|
159
|
+
?
|
|
160
|
+
'保存' :
|
|
161
|
+
"修改" }}</el-tag>
|
|
162
|
+
<el-tag :disable-transitions="true" v-if="scope.row.delete && !scope.row.isSet"
|
|
163
|
+
style="cursor: pointer;" type="danger"
|
|
164
|
+
@click="deleteRow(scope.$index, scope.row.$sourceIndex)">删除</el-tag>
|
|
165
|
+
<el-tag :disable-transitions="true" v-else-if="scope.row.isSet"
|
|
166
|
+
@click="saveRow(scope.row, scope.$index, false)"
|
|
167
|
+
style="cursor: pointer;">取消</el-tag>
|
|
168
|
+
<template v-for="(v, i) in model.buttons">
|
|
169
|
+
<el-tag
|
|
170
|
+
v-if="!scope.row.isSet && v.show && (!v.rightField || !scope.row[v.rightField] || scope.row[v.rightField].value == 1)"
|
|
171
|
+
style="cursor: pointer;" @click="buttonClick(scope.row, v)">{{ v.label }}
|
|
172
|
+
1</el-tag>
|
|
173
|
+
|
|
174
|
+
</template>
|
|
164
175
|
|
|
165
|
-
|
|
166
|
-
|
|
176
|
+
</template>
|
|
177
|
+
</el-table-column>
|
|
167
178
|
</template>
|
|
168
179
|
<template #empty>
|
|
169
180
|
{{ common.LocalizedString('暂无数据', '暫無數據') }}
|
|
@@ -425,7 +436,7 @@ function fieldsValidExcute() {
|
|
|
425
436
|
if (i === 0) {
|
|
426
437
|
if (f.displayValidMessage) {
|
|
427
438
|
model.value.displayValidMessage = f.displayValidMessage;
|
|
428
|
-
}
|
|
439
|
+
}
|
|
429
440
|
}
|
|
430
441
|
i++;
|
|
431
442
|
rtnBool = false;
|
|
@@ -577,6 +588,12 @@ defineExpose({
|
|
|
577
588
|
})
|
|
578
589
|
</script>
|
|
579
590
|
<style scoped>
|
|
591
|
+
.list-title {
|
|
592
|
+
padding-bottom: 5px;
|
|
593
|
+
text-align: left;
|
|
594
|
+
display: inline-table;
|
|
595
|
+
}
|
|
596
|
+
|
|
580
597
|
.list-button {
|
|
581
598
|
padding-bottom: 5px;
|
|
582
599
|
text-align: right;
|
|
@@ -591,6 +608,7 @@ defineExpose({
|
|
|
591
608
|
width: 100%;
|
|
592
609
|
}
|
|
593
610
|
|
|
611
|
+
|
|
594
612
|
.ct-form-repeat .list-title {
|
|
595
613
|
padding-bottom: 5px;
|
|
596
614
|
text-align: left;
|
|
@@ -25,8 +25,15 @@ const props = defineProps({
|
|
|
25
25
|
const model = initData(props, RadioButton)
|
|
26
26
|
|
|
27
27
|
function change() {
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
if(model.value.code1){
|
|
29
|
+
model.value.selectItems1.forEach((v) => {
|
|
30
|
+
if(model.value.code1===v.code){
|
|
31
|
+
model.value.name1=v.name;
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
changeHandler(model.value, emit);
|
|
36
|
+
if (model.value.autoSearch) emit('search');
|
|
30
37
|
}
|
|
31
38
|
function clearClickHandle() {
|
|
32
39
|
model.value.reset()
|
|
@@ -38,8 +38,8 @@
|
|
|
38
38
|
</button>
|
|
39
39
|
<video ref="video" :src="rowData[router.submitFormField]" controls="true"
|
|
40
40
|
controlslist="nodownload" @timeupdate="saveVoiceHistoryHandler" @ended="voiceEndedHandler"
|
|
41
|
-
:height="router.
|
|
42
|
-
:width="router.
|
|
41
|
+
:height="router.pageHeight ? router.pageHeight : '40'"
|
|
42
|
+
:width="router.pageWidth ? router.pageWidth : '100%'">您的浏览器不支持 video 标签。
|
|
43
43
|
</video>
|
|
44
44
|
</div>
|
|
45
45
|
<img v-if="router.imgUrl && isShowImg" slot="reference"
|
|
@@ -107,7 +107,7 @@ const option = ref({
|
|
|
107
107
|
const tooltipModel = ref({});
|
|
108
108
|
const labelColor = ref('')
|
|
109
109
|
const video = ref()
|
|
110
|
-
const label = computed(() => {
|
|
110
|
+
const label = computed(() => {
|
|
111
111
|
return (typeof props.colValue === "undefined" || props.colValue === '') ? props.router.controlLabel : props.colValue
|
|
112
112
|
})
|
|
113
113
|
const isShowLabel = computed(() => {
|
|
@@ -127,6 +127,7 @@ const isShowLabel = computed(() => {
|
|
|
127
127
|
}
|
|
128
128
|
return flag;
|
|
129
129
|
})
|
|
130
|
+
|
|
130
131
|
isVisited()
|
|
131
132
|
function isVisited() {
|
|
132
133
|
var key = props.router.action + props.rowData.chanceID;
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
@SaveSearchWhere="SaveSearchWhere" @SearchWhereManage="SearchWhereManage"
|
|
23
23
|
@clickSearchWhere="clickSearchWhere"></component>
|
|
24
24
|
<br v-else-if="col.controlType === Enum.ControlType.LineFeed" />
|
|
25
|
-
<component v-else :from="from" class="list-field"
|
|
25
|
+
<component v-else :from="from" class="list-field" v-bind="col.listBind"
|
|
26
26
|
:is="col.is" :vmodel="col" :parameterAction="model.parameterAction"
|
|
27
27
|
@search="searchHandler(col)" @change="changeHandler(col)">
|
|
28
28
|
</component>
|
|
@@ -48,12 +48,12 @@
|
|
|
48
48
|
</div>
|
|
49
49
|
</div>
|
|
50
50
|
<iframe :src="downloadUrl"
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
style="height:0px;width:0px;border-width: 0px;position: absolute;bottom: 0px;display: none;">
|
|
52
|
+
</iframe>
|
|
53
53
|
</div>
|
|
54
54
|
</template>
|
|
55
55
|
<script setup lang="ts">
|
|
56
|
-
import { ref, nextTick,onDeactivated } from 'vue'
|
|
56
|
+
import { ref, nextTick, onDeactivated } from 'vue'
|
|
57
57
|
import SearchScreen from '../../loader/src/SearchScreen'
|
|
58
58
|
import Form from '../../loader/src/Form'
|
|
59
59
|
import Enum from '../../utils/Enum'
|
|
@@ -88,7 +88,7 @@ const Fields = ref()
|
|
|
88
88
|
const downloadUrl = ref('')
|
|
89
89
|
|
|
90
90
|
onDeactivated(() => {
|
|
91
|
-
|
|
91
|
+
downloadUrl.value = ''
|
|
92
92
|
})
|
|
93
93
|
|
|
94
94
|
searchComplate()
|
|
@@ -178,11 +178,15 @@ function searchHandler(field) {
|
|
|
178
178
|
//组件数据验证
|
|
179
179
|
function validExcute() {
|
|
180
180
|
var rtnBool = true;
|
|
181
|
+
var i = 0;
|
|
181
182
|
if (Fields.value) {
|
|
182
183
|
Fields.value.forEach((f) => {
|
|
183
184
|
if (f.model && typeof f.model.validExcute !== 'undefined') {
|
|
184
185
|
if (!f.model.validExcute()) {
|
|
185
|
-
|
|
186
|
+
if (i === 0) {
|
|
187
|
+
common.message(f.model.displayValidMessage)
|
|
188
|
+
}
|
|
189
|
+
i++
|
|
186
190
|
rtnBool = false;
|
|
187
191
|
}
|
|
188
192
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<ct-field :vmodel="model">
|
|
3
3
|
<template #Control>
|
|
4
4
|
<span class="eyelabel">{{ showLable == true ? model.code1 : model.name1 }}</span>
|
|
5
|
-
<el-icon size="16" v-if="model.name1" @click="onSensitiveEye()" style="margin-top:
|
|
5
|
+
<el-icon size="16" v-if="model.name1" @click="onSensitiveEye()" style="margin-top: 5px;">
|
|
6
6
|
<View v-if="showLable" />
|
|
7
7
|
<Hide v-else />
|
|
8
8
|
</el-icon>
|
|
@@ -57,6 +57,7 @@ defineExpose({
|
|
|
57
57
|
</script>
|
|
58
58
|
<style scoped>
|
|
59
59
|
.eyelabel {
|
|
60
|
-
|
|
60
|
+
min-width: 80px;
|
|
61
|
+
line-height: 26px;
|
|
61
62
|
}
|
|
62
63
|
</style>
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<ct-field :vmodel="model">
|
|
3
3
|
<template #Control>
|
|
4
4
|
<div v-if="model.controlType === Enum.ControlType.MultiLineText" style="width: 100%;">
|
|
5
|
-
<el-input :type="model.inputType" v-model="model.code1" v-bind="model.attrs" @input="change()"
|
|
5
|
+
<el-input :type="model.inputType" v-model="model.code1" v-bind="model.attrs" @input="input()" @change="change()"
|
|
6
6
|
: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()" class="fieldControl">
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
</el-input>
|
|
13
13
|
<span v-if="model.sufLabel1" class="sufLabel" v-html="model.sufLabel1"></span>
|
|
14
14
|
</div>
|
|
15
|
-
<el-input v-else :type="model.inputType" v-model="model.code1" v-bind="model.attrs" @input="change()"
|
|
15
|
+
<el-input v-else :type="model.inputType" v-model="model.code1" v-bind="model.attrs" @input="input()" @change="change()"
|
|
16
16
|
:disabled="model.locked" :rows="model.rows" :readonly="model.readonly"
|
|
17
17
|
:show-password="model.inputType == 'password'" autocomplete="on" :maxlength="model.maxValue1"
|
|
18
18
|
:show-word-limit="model.showWordLimit" clearable @keyup.enter.native="search()" class="fieldControl">
|
|
@@ -51,10 +51,16 @@ function search() {
|
|
|
51
51
|
emit('search');
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
-
|
|
54
|
+
function input() {
|
|
55
|
+
if(model.value.controlType===Enum.ControlType.MultiLineText || model.value.controlType===Enum.ControlType.TextBox){
|
|
56
|
+
}
|
|
57
|
+
else{
|
|
58
|
+
change();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
55
61
|
function change() {
|
|
56
|
-
|
|
57
|
-
|
|
62
|
+
changeHandler(model.value, emit);
|
|
63
|
+
if (props.from == 'tree') { emit('search'); }
|
|
58
64
|
}
|
|
59
65
|
//弹出选择列表
|
|
60
66
|
function popupSearchListHandle() {
|
package/src/loader/src/Button.js
CHANGED
|
@@ -7,15 +7,15 @@ const Button = function (source) {
|
|
|
7
7
|
let rtn = {
|
|
8
8
|
icon: '',
|
|
9
9
|
get bgColor() {
|
|
10
|
-
if (source.controlType == Enum.ControlType.ButtonReset) {
|
|
11
|
-
|
|
12
|
-
}
|
|
10
|
+
// if (source.controlType == Enum.ControlType.ButtonReset) {
|
|
11
|
+
// return '#519DA6'
|
|
12
|
+
// }
|
|
13
13
|
return source.bgColor
|
|
14
14
|
},
|
|
15
15
|
get borderColor() {
|
|
16
|
-
if (source.controlType == Enum.ControlType.ButtonReset) {
|
|
17
|
-
|
|
18
|
-
}
|
|
16
|
+
// if (source.controlType == Enum.ControlType.ButtonReset) {
|
|
17
|
+
// return '#519DA6'
|
|
18
|
+
// }
|
|
19
19
|
return source.borderColor
|
|
20
20
|
},
|
|
21
21
|
get action() {
|