征南大军以皇子脱欢为总帅,兵分三路以进,脱欢与奥鲁赤率领东路军进攻女儿关等地,程鹏飞率领西路军进攻永平等地,乌马儿、樊楫由海路率舟师配合进攻。
又以海道运粮万户张文虎等人运粮十七万石以供军食。元军气势汹汹杀向安南,初战连连告捷。安南军见元军来势凶猛,有计划退却,诱敌深入。
元军顺利渡过寓良江,进迫安南京师大罗城,陈日烜于至元二十五年(1288)再次逃走入海。
同时,安南人民有计划坚壁清野,藏粮逃遁,以困元师。这时,张文虎所率的运粮船在绿水洋受到安南军阻击,所运粮米全部被沉于海,只好退还琼州。
元军长驱深入,粮饷得不到接济,再加上连日行军,疲劳过甚,天气转热,疾病发生,元军陷入进退两难的境地。
脱欢见处境险恶,士气低落,难以进兵,遂下令全师北撤。
这时,安南军已作好截击元军北归的准备。当樊楫等由水道先行退到白藤江时遭到安南军队袭击,全军覆灭。安南又在女儿关、丘急岭一线集结重兵三十万,连亘百余里。切断元军退路。