子关（位于今兴安省），越将陈日燏、陈国瓒在南宋遗将赵忠 (宋元之际)协助下击败元将唆都；陈光启在昇龙附近击败脱欢，使之退守京北地区（今北宁省地区），越军收复国都；元将唆都失利后，移师到西结（位于今兴安省），陈兴道乘机设下伏兵，击毙唆都，时在1285年（陈绍宝七年）农历五月。这些战事，令元军士气大挫。西结之役后，元军士气低落，加以时值盛夏，军中爆发疫病，造成士卒严重折损，脱欢决定撤军回国。陈兴道亦知道脱欢必然撤兵，便先在各地佈置军队后，亲自率军攻脱欢军，脱欢溃退，至万劫（位于今海阳省）时，更被陈兴道预设的