Skip to content

Commit 9efedbb

Browse files
pengfeixxdeepin-bot[bot]
authored andcommitted
fix: Fix no prompt when input is too long
Fix no prompt when input is too long Log: Fix no prompt when input is too long pms: BUG-341977
1 parent 2ae063c commit 9efedbb

File tree

1 file changed

+99
-60
lines changed

1 file changed

+99
-60
lines changed

src/plugin-authentication/qml/authenticationMain.qml

Lines changed: 99 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -141,81 +141,120 @@ DccObject {
141141
}
142142
}
143143

144-
TextInput {
145-
id: textInputItem
146-
text: modelData
144+
Rectangle {
145+
id: textInputBackground
146+
property D.Palette alertBackgroundColor: DS.Style.edit.alertBackground
147147
Layout.leftMargin: 10
148148
Layout.preferredHeight: DS.Style.itemDelegate.height
149-
verticalAlignment: Text.AlignVCenter
150-
horizontalAlignment: Text.AlignHCenter
151-
focus: false
152-
wrapMode: Text.NoWrap
153-
readOnly: true
154-
focusPolicy: Qt.NoFocus
155-
color: palette.text
156-
onEditingFinished: {
157-
if (!checkInputInvalid()) {
158-
text = modelData;
149+
Layout.maximumWidth: 200
150+
Layout.minimumWidth: textInputItem.contentWidth + 16
151+
radius: 4
152+
color: alert.visible ? D.ColorSelector.alertBackgroundColor : "transparent"
153+
154+
TextInput {
155+
id: textInputItem
156+
property int maxLength: 15
157+
anchors.fill: parent
158+
anchors.leftMargin: 8
159+
anchors.rightMargin: 8
160+
text: modelData
161+
verticalAlignment: Text.AlignVCenter
162+
horizontalAlignment: Text.AlignLeft
163+
focus: false
164+
wrapMode: Text.NoWrap
165+
readOnly: true
166+
focusPolicy: Qt.NoFocus
167+
color: palette.text
168+
clip: true
169+
selectByMouse: true
170+
171+
onTextEdited: {
172+
// 实时检测:过滤非法字符并限制长度
173+
var filteredText = text;
174+
// 过滤非法字符(只允许字母、数字、中文、下划线)
175+
filteredText = filteredText.replace(/[^A-Za-z0-9\u4e00-\u9fa5_]/g, "");
176+
177+
// 检查是否超长
178+
if (filteredText.length > maxLength) {
179+
alert.show(qsTr("No more than 15 characters"));
180+
filteredText = filteredText.slice(0, maxLength);
181+
}
182+
183+
if (text !== filteredText) {
184+
text = filteredText;
185+
}
186+
}
187+
188+
onEditingFinished: {
189+
if (!checkInputInvalid()) {
190+
text = modelData;
191+
textInputItem.text = Qt.binding(function() {
192+
return modelData
193+
})
194+
return;
195+
}
196+
focus = false;
197+
if (modelData !== textInputItem.text) {
198+
layout.requestRename(modelData, text);
199+
}
159200
textInputItem.text = Qt.binding(function() {
160201
return modelData
161202
})
162-
return;
163203
}
164-
focus = false;
165-
if (modelData !== textInputItem.text) {
166-
layout.requestRename(modelData, text);
204+
onFocusChanged: {
205+
if (!focus)
206+
readOnly = true;
167207
}
168-
textInputItem.text = Qt.binding(function() {
169-
return modelData
170-
})
171-
}
172-
onFocusChanged: {
173-
if (!focus)
174-
readOnly = true;
175-
}
176-
Keys.onEnterPressed: {
177-
focus = false;
178-
}
179-
180-
function checkInputInvalid() {
181-
var reg = /^[A-Za-z0-9\u4e00-\u9fa5_]+$/;
182-
var isValid = reg.test(textInputItem.text);
183-
var isOverLength = textInputItem.text.length > 15;
184-
185-
var nameList = [];
186-
switch (itemRep.authType) {
187-
case CharaMangerModel.Type_Face:
188-
nameList = dccData.model.facesList;
189-
break;
190-
case CharaMangerModel.Type_Finger:
191-
nameList = dccData.model.thumbsList;
192-
break;
193-
case CharaMangerModel.Type_Iris:
194-
nameList = dccData.model.irisList;
195-
break;
208+
Keys.onEnterPressed: {
209+
focus = false;
196210
}
197-
198-
var isDuplicate = nameList.includes(textInputItem.text) &&
199-
textInputItem.text !== modelData;
211+
Keys.onReturnPressed: {
212+
focus = false;
213+
}
214+
215+
function checkInputInvalid() {
216+
var reg = /^[A-Za-z0-9\u4e00-\u9fa5_]+$/;
217+
var isValid = text.length === 0 || reg.test(textInputItem.text);
218+
var isOverLength = textInputItem.text.length > maxLength;
219+
var isEmpty = textInputItem.text.length === 0;
220+
221+
var nameList = [];
222+
switch (itemRep.authType) {
223+
case CharaMangerModel.Type_Face:
224+
nameList = dccData.model.facesList;
225+
break;
226+
case CharaMangerModel.Type_Finger:
227+
nameList = dccData.model.thumbsList;
228+
break;
229+
case CharaMangerModel.Type_Iris:
230+
nameList = dccData.model.irisList;
231+
break;
232+
}
233+
234+
var isDuplicate = nameList.includes(textInputItem.text) &&
235+
textInputItem.text !== modelData;
200236

201-
if (!isValid && isOverLength) {
202-
alert.show(qsTr("Use letters, numbers and underscores only, and no more than 15 characters"));
203-
} else if (!isValid) {
204-
alert.show(qsTr("Use letters, numbers and underscores only"));
205-
} else if (isOverLength) {
206-
alert.show(qsTr("No more than 15 characters"));
207-
} else if (isDuplicate) {
208-
alert.show(qsTr("This name already exists"));
209-
} else {
210-
return true;
237+
if (isEmpty) {
238+
alert.show(qsTr("The name cannot be empty"));
239+
} else if (!isValid && isOverLength) {
240+
alert.show(qsTr("Use letters, numbers and underscores only, and no more than 15 characters"));
241+
} else if (!isValid) {
242+
alert.show(qsTr("Use letters, numbers and underscores only"));
243+
} else if (isOverLength) {
244+
alert.show(qsTr("No more than 15 characters"));
245+
} else if (isDuplicate) {
246+
alert.show(qsTr("This name already exists"));
247+
} else {
248+
return true;
249+
}
250+
return false;
211251
}
212-
return false;
213252
}
214253
}
215254

216255
D.AlertToolTip {
217256
id: alert
218-
target: layout
257+
target: textInputBackground
219258
timeout: 3000
220259
visible: false
221260

0 commit comments

Comments
 (0)