Commit 129a7a01 authored by timel's avatar timel

Merge branch 'dev/sort-in-deck' into 'main'

fix/small

See merge request !259
parents 6ae9cd3b 6db7b43e
...@@ -30,5 +30,6 @@ ...@@ -30,5 +30,6 @@
width: 100%; width: 100%;
background-image: url("/neos-assets/noise-light.webp"); background-image: url("/neos-assets/noise-light.webp");
opacity: $opacity; opacity: $opacity;
pointer-events: none;
} }
} }
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
padding: 15px; padding: 15px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
position: relative;
} }
.btn-close { .btn-close {
...@@ -40,6 +41,11 @@ ...@@ -40,6 +41,11 @@
border-radius: 4px; border-radius: 4px;
overflow: hidden; overflow: hidden;
box-shadow: 0px 14px 20px -5px rgba(0, 0, 0, 0.3); box-shadow: 0px 14px 20px -5px rgba(0, 0, 0, 0.3);
transition: 0.2s;
&:hover {
--width: 220px;
box-shadow: 0px 20px 20px -5px rgb(0 0 0 / 60%);
}
} }
.title { .title {
......
...@@ -52,12 +52,14 @@ export const DeckSelect: React.FC<{ ...@@ -52,12 +52,14 @@ export const DeckSelect: React.FC<{
okText: "上传", okText: "上传",
maskClosable: true, maskClosable: true,
onOk: async () => { onOk: async () => {
const newDecks = await Promise.all( const results = await Promise.all(
newDeck.current.map((deck) => deckStore.add(deck)) newDeck.current.map((deck) => deckStore.add(deck))
); );
newDecks.every(Boolean) newDeck.current = [];
? message.success("上传成功") if (results.length)
: message.error("部分文件上传失败"); results.every(Boolean)
? message.success("上传成功")
: message.error("部分文件上传失败");
}, },
}); });
......
...@@ -42,35 +42,38 @@ export const editDeckStore = proxy({ ...@@ -42,35 +42,38 @@ export const editDeckStore = proxy({
}, },
/** 一张卡能不能放入某个区 */ /** 一张卡能不能放入某个区 */
canAdd(card: CardMeta, type: Type): { result: boolean; reason: string } { canAdd(card: CardMeta, type: Type): { result: boolean; reason: string } {
const deckType = editDeckStore[type];
const cardType = card.data.type ?? 0;
let result = true, let result = true,
reason = ""; reason = "";
const initialCards = editDeckStore[type];
// 如果是衍生物,则不能添加 if (isToken(cardType)) {
if (isToken(card.data.type ?? 0)) {
result = false; result = false;
reason = "不能添加衍生物"; reason = "不能添加衍生物";
} }
// 超出数量,则不能添加
const countLimit = type === "main" ? 60 : 15; const countLimit = type === "main" ? 60 : 15;
if (initialCards.length >= countLimit) { if (deckType.length >= countLimit) {
result = false; result = false;
reason = `超过 ${countLimit} 张的上限`; reason = `超过 ${countLimit} 张的上限`;
} }
// 接着需要检查卡的种类
if ( if (
(type === "extra" && !isExtraDeckCard(card.data.type ?? 0)) || (type === "extra" && !isExtraDeckCard(cardType)) ||
(type === "main" && isExtraDeckCard(card.data.type ?? 0)) (type === "main" && isExtraDeckCard(cardType))
) { ) {
result = false; result = false;
reason = "卡片种类不符合"; reason = "卡片种类不符合";
} }
// 同名卡不超过三张
const maxSameCard = 3; // TODO: 禁卡表 const maxSameCard = 3; // TODO: 禁卡表
const sameCardCount = initialCards.filter((c) => c.id === card.id).length; const sameCardCount = deckType.filter((c) => c.id === card.id).length;
if (sameCardCount >= maxSameCard) { if (sameCardCount >= maxSameCard) {
result = false; result = false;
reason = `超过同名卡 ${maxSameCard} 张的上限`; reason = `超过同名卡 ${maxSameCard} 张的上限`;
} }
return { result, reason }; return { result, reason };
}, },
}) satisfies EditingDeck; }) satisfies EditingDeck;
...@@ -41,14 +41,17 @@ export const compareCards = (a: CardMeta, b: CardMeta): number => { ...@@ -41,14 +41,17 @@ export const compareCards = (a: CardMeta, b: CardMeta): number => {
/** 生成ydk格式的卡组文本 */ /** 生成ydk格式的卡组文本 */
function genYdkText(deck: IDeck): string { function genYdkText(deck: IDeck): string {
const lines: string[] = []; const { main, extra, side } = deck;
lines.push("#created by neos");
lines.push("#main"); const lines = [
lines.push(...deck.main.map((cardId) => cardId.toString())); "#created by neos",
lines.push("#extra"); "#main",
lines.push(...deck.extra.map((cardId) => cardId.toString())); ...main.map((cardId) => cardId.toString()),
lines.push("!side"); "#extra",
lines.push(...deck.side.map((cardId) => cardId.toString())); ...extra.map((cardId) => cardId.toString()),
"!side",
...side.map((cardId) => cardId.toString()),
];
return lines.join("\n"); return lines.join("\n");
} }
......
// 此文件目的是在js和CSS之间共享一些变量,并且这些变量是0运行时的。 // 此文件目的是在js和CSS之间共享一些变量,并且这些变量是0运行时的。
type CSSConfig = Record<string, [number, UNIT]>; interface CSSConfig {
readonly [key: string]: [number, UNIT];
}
/** 转为CSS变量: BOARD_ROTATE_Z -> --board-rotate-z */ /** 转为CSS变量: BOARD_ROTATE_Z -> --board-rotate-z */
const toCssProperties = (config: CSSConfig) => const toCssProperties = (config: CSSConfig) =>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment