266 lines
7.7 KiB
Dart
266 lines
7.7 KiB
Dart
|
||
import 'dart:async';
|
||
import 'package:flutter/material.dart';
|
||
import 'package:get/get.dart';
|
||
import 'package:star_lock/login/login/entity/LoginEntity.dart';
|
||
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesSMSTemplate/valueAddedServicesAddSMSTemplate/newSMSTemplate_entity.dart';
|
||
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesSMSTemplate/valueAddedServicesAddSMSTemplate/newSMSTemplate_state.dart';
|
||
import 'package:star_lock/tools/regularExpression.dart';
|
||
|
||
import '../../../../network/api_repository.dart';
|
||
import '../../../../tools/baseGetXController.dart';
|
||
|
||
class NewSMSTemplateLogic extends BaseGetXController {
|
||
NewSMSTemplateState state = NewSMSTemplateState();
|
||
|
||
//获取默认模板-- 1:电子钥匙 2:密码
|
||
Future<void> getDefaultTemplate() async {
|
||
final NewSMSTemplateEntity entity =
|
||
await ApiRepository.to.getDefaultTemplate();
|
||
if (entity.errorCode!.codeIsSuccessful) {
|
||
state.langTemplateList.value = entity.dataList ?? <LangData>[];
|
||
|
||
state.templateList.value =
|
||
entity.dataList![state.selectedLangIndex.value].templates ??
|
||
<TemplateData>[];
|
||
if (state.templateList.isNotEmpty) {
|
||
state.currentTemplate.value = state.templateList.firstWhere(
|
||
(TemplateData element) =>
|
||
element.name ==
|
||
state.templateList[state.selectedTemplateIndex.value].name,
|
||
);
|
||
state.currentTemplate.refresh();
|
||
}
|
||
}
|
||
}
|
||
|
||
//新建模板-- 1:电子钥匙 2:密码
|
||
Future<void> addSMSTemplate() async {
|
||
if (state.templateNameTf.text.isEmpty) {
|
||
showToast('请输入模板名称');
|
||
return;
|
||
}
|
||
final LoginEntity entity = await ApiRepository.to.addTemplateService(
|
||
channelType: state.channelType.value,
|
||
name: state.templateNameTf.text,
|
||
langType: state.currentTemplate.value.langType ?? 0,
|
||
regards: state.templateOneTf.text,
|
||
tips: state.templateTwoTf.text,
|
||
templateType: state.currentTemplate.value.templateType ?? 0,
|
||
);
|
||
if (entity.errorCode!.codeIsSuccessful) {
|
||
showToast('添加成功'.tr);
|
||
Get.back(result: true);
|
||
}
|
||
}
|
||
|
||
Future<void> updateTemplateInfo() async {
|
||
final LoginEntity entity = await ApiRepository.to.updateTemplateInfo(
|
||
id: state.currentTemplate.value.id ?? 0,
|
||
name: state.templateNameTf.text,
|
||
regards: state.templateOneTf.text,
|
||
tips: state.templateTwoTf.text);
|
||
if (entity.errorCode!.codeIsSuccessful) {
|
||
showToast('修改成功'.tr);
|
||
Get.back(result: true);
|
||
}
|
||
}
|
||
|
||
// 更新短信条数的函数
|
||
int calculateSmsCost() {
|
||
final String smsText =
|
||
'${state.templateOneTf.text}\n${state.currentTemplate.value.template}\n${state.templateTwoTf.text}';
|
||
final int smsCount = smsText.length;
|
||
if (smsCount <= 70) {
|
||
return 1;
|
||
} else {
|
||
return (smsCount / 67).ceil();
|
||
}
|
||
}
|
||
|
||
//构建电子钥匙模板
|
||
List<TextSpan> buildElectronicKeySpan({required bool isPreview}) {
|
||
final List<TextSpan> textSpans = <TextSpan>[];
|
||
// 如果是预览模式,添加预览模板的文本
|
||
if (isPreview) {
|
||
textSpans.add(
|
||
TextSpan(
|
||
text: '${state.templateOneTf.text}\n',
|
||
style: state.defaultStyle,
|
||
),
|
||
);
|
||
}
|
||
|
||
if (isPreview) {
|
||
if (state.currentTemplate.value.generatePreview().isNotEmpty) {
|
||
textSpans.add(
|
||
TextSpan(
|
||
text: state.currentTemplate.value.generatePreview(),
|
||
style: state.defaultStyle,
|
||
),
|
||
);
|
||
} else {
|
||
textSpans.addAll(_buildDefaultTemplate(isPreview));
|
||
}
|
||
} else {
|
||
textSpans.addAll(_buildDefaultTemplate(isPreview));
|
||
}
|
||
|
||
if (isPreview) {
|
||
textSpans.add(
|
||
TextSpan(
|
||
text: '\n${state.templateTwoTf.text}\n',
|
||
style: state.defaultStyle,
|
||
),
|
||
);
|
||
}
|
||
|
||
return textSpans;
|
||
}
|
||
|
||
List<TextSpan> _buildDefaultTemplate(bool isPreview) {
|
||
final List<TextSpan> textSpans = <TextSpan>[];
|
||
// 将模板分割为文本片段
|
||
final List<String> textFragments = state.currentTemplate.value.template
|
||
?.split(RegularExpression.urlRegExp) ??
|
||
<String>[];
|
||
|
||
// 添加链接文本和普通文本到文本片段列表
|
||
for (int i = 0; i < textFragments.length; i++) {
|
||
final String textFragment = textFragments[i];
|
||
// 添加普通文本
|
||
textSpans.add(
|
||
TextSpan(
|
||
text: textFragment,
|
||
style: state.defaultStyle,
|
||
),
|
||
);
|
||
// 如果不是最后一个文本片段,则添加换行符
|
||
if (i < textFragments.length - 1) {
|
||
textSpans.add(
|
||
TextSpan(
|
||
text: '\n',
|
||
style: state.defaultStyle,
|
||
),
|
||
);
|
||
// 添加链接文本
|
||
textSpans.add(
|
||
TextSpan(
|
||
text: RegularExpression.urlRegExp
|
||
.stringMatch(state.currentTemplate.value.template!) ??
|
||
'',
|
||
style: state.highStyle,
|
||
),
|
||
);
|
||
}
|
||
}
|
||
|
||
return textSpans;
|
||
}
|
||
|
||
List<TextSpan> buildPasswordSpan({required bool isPreview}) {
|
||
final List<TextSpan> textSpans = <TextSpan>[];
|
||
|
||
// 如果是预览模式,添加预览模板的文本
|
||
if (isPreview) {
|
||
textSpans.add(
|
||
TextSpan(
|
||
text: '${state.templateOneTf.text}\n',
|
||
style: state.defaultStyle,
|
||
),
|
||
);
|
||
}
|
||
if (isPreview) {
|
||
if (state.currentTemplate.value.generatePreview().isNotEmpty) {
|
||
textSpans.add(
|
||
TextSpan(
|
||
text: state.currentTemplate.value.generatePreview(),
|
||
style: state.defaultStyle,
|
||
),
|
||
);
|
||
|
||
// 在预览模式下,添加预览模板的文本
|
||
if (isPreview) {
|
||
textSpans.add(
|
||
TextSpan(
|
||
text: '\n${state.templateTwoTf.text}',
|
||
style: state.defaultStyle,
|
||
),
|
||
);
|
||
}
|
||
}
|
||
return textSpans;
|
||
}
|
||
|
||
// 定义匹配 ${} 包围的变量的正则表达式
|
||
final RegExp variableRegExp = RegExp(r'\$\{([^}]+)\}');
|
||
final String template = state.currentTemplate.value.template ?? '';
|
||
|
||
// 对模板进行处理
|
||
int startIndex = 0;
|
||
for (final Match match in variableRegExp.allMatches(template)) {
|
||
// 处理变量之前的文本
|
||
final String nonVariableText =
|
||
template.substring(startIndex, match.start);
|
||
// 替换非变量文本中的字符
|
||
final String replacedNonVariableText =
|
||
nonVariableText.replaceAllMapped(RegExp(r',|。'), (Match match) {
|
||
return '${match.group(0)}\n';
|
||
});
|
||
textSpans.add(
|
||
TextSpan(
|
||
text: replacedNonVariableText,
|
||
style: state.defaultStyle,
|
||
),
|
||
);
|
||
|
||
// 处理变量
|
||
final String variableText = match.group(0) ?? '';
|
||
textSpans.add(
|
||
TextSpan(
|
||
text: variableText,
|
||
style: state.highStyle,
|
||
),
|
||
);
|
||
|
||
// 更新起始索引
|
||
startIndex = match.end;
|
||
}
|
||
|
||
// 添加最后一个变量之后的文本
|
||
final String remainingText = template.substring(startIndex);
|
||
// 替换非变量文本中的字符
|
||
final String replacedRemainingText =
|
||
remainingText.replaceAllMapped(RegExp(r',|。'), (Match match) {
|
||
return '${match.group(0)}\n';
|
||
});
|
||
textSpans.add(
|
||
TextSpan(
|
||
text: replacedRemainingText,
|
||
style: state.defaultStyle,
|
||
),
|
||
);
|
||
|
||
// 在预览模式下,添加预览模板的文本
|
||
if (isPreview) {
|
||
textSpans.add(
|
||
TextSpan(
|
||
text: '\n${state.templateTwoTf.text}',
|
||
style: state.defaultStyle,
|
||
),
|
||
);
|
||
}
|
||
|
||
return textSpans;
|
||
}
|
||
|
||
@override
|
||
Future<void> onReady() async {
|
||
super.onReady();
|
||
|
||
// if (state.currentTemplate.value.isUpdate == false) {
|
||
getDefaultTemplate();
|
||
// }
|
||
}
|
||
}
|