Jelly, 117 bytes
L⁾||ẋṫ5“/\“\/”jµ⁾<>Ḋ?⁶ẋ4¤s2¤js1s2 j@€⁾ z⁶⁾_-jⱮZj@"Ç;“¡{+Ṁ“#ßɗ⁾ŀ`m“¬ṖȥƇʂẆEẒẓ“¡ɲÇ⁹E⁸ċ⁷“¡ɲÇ⁹D⁹{Ṅ’ṃ“\ ^_(o)/|-w”¤⁶;$8¡€¤ -26 bytes using base + integer compression (thanks to Bubbler for the idea)
-2 bytes thanks to caird coinheringaahing
-1 byte thanks to Nick Kennedy
thanks to Jonathan Allan for finding a bug; also -4 bytes from fixing it
-1 byte thanks to Jonathan Allan
Explanation
L⁾||ẋṫ5“/\“\/”jµ⁾<>Ḋ?⁶ẋ4¤s2¤js1s2 Helper Link - generates the side borders ? If Ḋ list[1:] (basically, if the length is not 1) L⁾||ẋṫ5“/\“\/”jµ Sublink; generate the side borders for the non-edge case L Take the length ⁾||ẋ Repeat "||" that many times ṫ5 Tail; remove the first 4 elements “/\“\/”j Use that result to join ["/\", "\/"] ⁾<> Otherwise, return "<>" ⁶ẋ4¤ " " * 4 s2¤ split into slices of size 2 j Prepend and append (Extra spaces are needed because the top and bottom borders don't have side borders) s2 Slices of length 2 (separate the left and right border components) s2 Slices of length 2 (group the left and right border components into pairs) j@€⁾ z⁶⁾_-jⱮZj@"Ç;“...’ṃ“ \_(o)/|-w^”¤⁶;$8¡€¤ Main Link j@€⁾ join " " with each row (surround in spaces) z⁶ Zip, using space as filler Ɱ For each column ⁾_-j Join ["_", "-"] using it (prepend _ and append -) Z Zip j@"Ç Vectorized swapped join with the helper link (basically, for each row, prepend and append the borders) ; Append: {{ “...’ [23386201, 8811166311836860, 134563374682941922730, 101089407352370886, 101089407336781202] ṃ“ \_(o)/|-w^” Base decompressed with " \_(o)/|-w^" - this is the cow without leading spaces € For each row ⁶;$ Prepend " " 8¡ 8 times ¤ }}