nuxt-device-detectというModuleを使えば実現できます。
https://github.com/nuxt-community/device-module
これを使えばコンテキストに$deviceがインジェクトされ、デバイス判別プロパティにアクセスできます。
(内部ではUser-Agentを見て切り替えている)
context.isDesktop
context.isMobile
context.isTablet
context.isMobileOrTablet
// thisからもアクセス可能
this.$device.isDesktop
あとはpageのlayoutから$deviceを使い、レイアウトを切り替えます。
layouts/pc.vue
にPC用のSCSSファイルなどをstyleに読み込めばOKです。
export default {
layout ({ app }) {
return app.$device.isDesktop ? 'pc' : 'sp'
}
}
全pageファイルにlayoutを記述するのは面倒だと思うので、グローバルMixinを使いましょう。
自分は以下のようなPluginを作成しました。
import Vue from 'vue'
Vue.mixin({
layout ({ app }) {
return app.$device.isDesktop ? 'pc' : 'sp'
}
})