feat:输入优化、文字分类

This commit is contained in:
2025-06-23 17:54:31 +08:00
parent 4c94fa28f9
commit 70d6da38d1
6 changed files with 341 additions and 29 deletions
+77 -25
View File
@@ -1,4 +1,4 @@
import { WATER_COLORS, PAPER_SIZE } from '../../constants/index';
import { WATER_COLORS, PAPER_SIZE } from '../../constants/colors';
import TextDrawService from '../../service/textDrawService';
Page({
@@ -20,19 +20,19 @@ Page({
const hasShowIntroduction =
wx.getStorageSync('hasShowIntroduction') || false;
// if (!hasShowIntroduction) {
this.setData({
cardList: [
{ color: '#FF0000', word: '涂' },
{ color: '#00FF00', word: '欢' },
{ color: '#FF7F00', word: '鸦' },
{ color: '#00FFFF', word: '迎' },
{ color: '#FFFF00', word: '丫' },
{ color: '#8A2BE2', word: '你' },
],
showIntroductionPopup: true,
});
// }
if (!hasShowIntroduction) {
this.setData({
cardList: [
{ color: '#FF0000', word: '涂' },
{ color: '#00FF00', word: '欢' },
{ color: '#FF7F00', word: '鸦' },
{ color: '#00FFFF', word: '迎' },
{ color: '#FFFF00', word: '丫' },
{ color: '#8A2BE2', word: '你' },
],
showIntroductionPopup: true,
});
}
},
onReady() {
@@ -82,7 +82,7 @@ Page({
updatedCardList?: Array<{ color: string; word: string }>,
callback: () => void = () => {},
) {
if (updatedCardList && updatedCardList.length > 0) {
if (updatedCardList && updatedCardList.length >= 0) {
this.setData({ cardList: updatedCardList }, callback);
} else {
updatedCardList = this.data.cardList;
@@ -97,15 +97,63 @@ Page({
},
onConfirmInput(e: WechatMiniprogram.Input) {
const { cardList } = this.data;
const { value } = e.detail;
const characters = value.split('');
const shuffledColors = [...WATER_COLORS.extended24].sort(
// 计算剩余空间
const remainingSlots = 6 - cardList.length;
if (remainingSlots <= 0) {
wx.showToast({
title: '最多只能添加6个字哦!',
icon: 'none',
duration: 2000,
});
return;
}
// 准备颜色数组
const allColors = WATER_COLORS.basic12.map((color) => color.hex);
const usedColors = cardList.map((item) => item.color);
const usedWords = cardList.map((item) => item.word);
const availableColors = allColors.filter(
(color) => !usedColors.includes(color),
);
const shuffledColors = [...availableColors].sort(
() => Math.random() - 0.5,
);
const updatedCardList = characters.map((char, index) => ({
color: shuffledColors[index % shuffledColors.length].hex,
word: char,
}));
const newCharacters: string[] = [];
let isBeyond = false;
for (const char of characters) {
// 检查字符是否是新字符且未被使用
if (newCharacters.length >= remainingSlots) {
isBeyond = true;
break;
}
if (!usedWords.includes(char) && !newCharacters.includes(char)) {
newCharacters.push(char);
}
}
if (isBeyond) {
wx.showToast({
title: '最多只能添加6个字,多余的字为被添加哦!',
icon: 'none',
duration: 2000,
});
}
// 为新字符创建卡片
const newCards = newCharacters.map((char, index) => {
const colorIndex = index % shuffledColors.length;
return {
word: char,
color: shuffledColors[colorIndex],
};
});
// 合并新旧卡片
const updatedCardList = [...cardList, ...newCards];
this.drawCanvas(updatedCardList);
},
@@ -113,7 +161,6 @@ Page({
const { key, word } = e.detail;
const { cardList } = this.data;
const updatedCardList = cardList.filter((_, index) => index !== key);
this.drawCanvas(updatedCardList, () => {
wx.showToast({
title: `已删除 "${word}"`,
@@ -172,10 +219,15 @@ Page({
const { color } = e.detail;
const { currentKey, cardList } = this.data;
cardList[currentKey].color = color;
this.setData({
showColorPopup: false,
cardList,
});
this.setData(
{
showColorPopup: false,
cardList,
},
() => {
this.drawCanvas();
},
);
},
onCloseIntroductionPopup() {