基本完成版，请测试