The setup for this can be fairly complex, but a good place to start is to use a "multiple package" plugin... such as Packages Configuration for Woocoomerce or Multiple Packages for WooCommerce, which allow you to split the packages up for each vendor. This way, customers can choose a shipping method for each package on the Cart page.
Allowing the vendors to assign the shipping price is slightly more tricky as it needs a user (vendor) interface. For example, WC Vendors Pro Shipping Module has this available, but vendors can set only a flat-rate in their country or internationally through that it seems, which may or may not be too limiting.
If the vendor needed a more complex setup, you'd probably have to configure it for them. For example, if you have an existing shipping plugin that works on distance, or by table rates etc., you can assign that to the shipping class or vendor via the packages plugin, but the setup pages for those would typically not be available to vendors via the backend. But if you get everything working fine, you might then consider paying a developer to give some kind of interface to those pages so the vendors are able to configure it themselves.