import React, { useState } from 'react'
import { Button, Table, Input, Message } from '@alifd/next';
export default function DesignPic() {
// 添加状态管理表格数据
const [tableData, setTableData] = useState(() => {
const result = [];
for (let i = 0; i < 5; i++) {
result.push({
title: { name: `Quotation for 1PCS Nano ${3 + i}.0 controller compatible` },
id: 100306660940 + i,
time: 2e3 + i,
// 添加名称和标签字段
picName: '1235',
picLabel: ''
});
}
return result;
});
const pic_render = (value: any, index: any, record: any) => {
return (
);
}
// 修改图片名称渲染函数
const name_render = (value: any, index: number, record: any) => {
return <>
handleNameChange(value, index)}
composition
placeholder={'请输入图片名称'}
/>
>
};
// 修改图片标签渲染函数
const label_render = (value: any, index: number, record: any) => {
return <>
handleLabelChange(value, index)}
composition
placeholder={'请输入图片标签'}
/>
>
};
// 添加名称变化处理函数
const handleNameChange = (value: string, index: number) => {
const newData = [...tableData];
newData[index].picName = value;
setTableData(newData);
};
// 添加标签变化处理函数
const handleLabelChange = (value: string, index: number) => {
const newData = [...tableData];
newData[index].picLabel = value;
setTableData(newData);
};
// 完善删除功能
const handleDelete = (index: number, record: any) => {
// 方案1: 直接删除
const newData = [...tableData];
newData.splice(index, 1);
setTableData(newData);
// 方案2: 带确认的删除 (可选)
// if (window.confirm(`确定要删除 "${record.title.name}" 吗?`)) {
// const newData = [...tableData];
// newData.splice(index, 1);
// setTableData(newData);
// Message.success('删除成功');
// }
};
// 删除操作渲染函数
const option_render = (value: any, index: number, record: any) => {
return (
handleDelete(index, record)}
>
删除
);
};
// 添加行索引以确保正确删除
const dataSourceWithIndex = tableData.map((item, index) => ({
...item,
index
}));
const getPicData = async () => {
try {
// 获取当前活动标签页
const [tab] = await browser.tabs.query({ active: true, currentWindow: true });
if (!tab.id) {
Message.error('无法获取当前标签页信息');
return;
}
// 检查是否是受限制的页面
const restrictedUrls = ['chrome://', 'chrome-extension://', 'about:'];
if (restrictedUrls.some(url => tab.url?.startsWith(url))) {
Message.error('无法在浏览器内部页面或扩展页面上获取图片,请切换到普通网页(如百度、淘宝等)');
return;
}
try {
// 发送消息到 content script 请求获取图片数据
const response = await browser.tabs.sendMessage(tab.id, { action: "getImages" });
if (response.error) {
Message.error('获取图片时出错: ' + response.error);
return;
}
if (response.images && response.images.length > 0) {
// 处理获取到的图片数据并更新表格
const newTableData = response.images.map((img: any, index: number) => ({
key: index,
url: img.url,
title: { name: img.alt || `图片 ${index + 1}` },
id: index,
time: Date.now(),
picName: img.alt || `图片 ${index + 1}`,
picLabel: `${img.element}${img.class ? '.' + img.class : ''}${img.id ? '#' + img.id : ''}`
}));
setTableData(newTableData);
Message.success(`成功获取到 ${response.images.length} 张图片`);
} else {
Message.warning('在当前页面未找到图片');
setTableData([]);
}
} catch (sendMessageError: any) {
console.error("发送消息失败:", sendMessageError);
if (sendMessageError?.message?.includes('Could not establish connection') ||
sendMessageError?.message?.includes('Receiving end does not exist')) {
Message.error(
无法连接到页面内容脚本,请按以下步骤操作:
- 刷新当前页面后再次尝试
- 确保您在普通网页上(如百度、淘宝等,非浏览器设置页面)
- 检查扩展权限:右键扩展图标 → "此扩展程序可访问的网站" → 选择"在所有网站上"
- 如果问题仍然存在,请重新加载扩展或重启浏览器
);
} else {
Message.error('获取图片数据失败: ' + sendMessageError.message);
}
}
} catch (error: any) {
console.error("获取标签页信息失败:", error);
Message.error('获取标签页信息失败: ' + error.message);
}
};
const testConnection = async () => {
try {
const [tab] = await browser.tabs.query({ active: true, currentWindow: true });
if (!tab.id) {
Message.error('无法获取当前标签页信息');
return;
}
// 发送一个简单的测试消息
await browser.tabs.sendMessage(tab.id, { action: "test" });
Message.success('连接测试成功!Content script 正常工作');
} catch (error: any) {
if (error?.message?.includes('Could not establish connection')) {
Message.error('连接测试失败:Content script 未在当前页面加载');
} else {
Message.error('连接测试失败:' + error.message);
}
}
};
return (
)
}