完整功能，部分细节需要修改