index.tsx 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import {NTabPane, NTabs} from 'naive-ui'
  2. import {defineComponent, nextTick, onMounted, reactive, ref} from 'vue'
  3. import {useRoute} from 'vue-router'
  4. import {getTabsCache, setTabsCaches} from '@/hooks/use-async'
  5. import SmsConfig from "@views/message/message-config/sms/sms-config";
  6. import PushConfig from "@views/message/message-config/push/push-config";
  7. import WechatConfig from "@views/message/message-config/wechat/wechat-config";
  8. import EmailConfig from "@views/message/message-config/email/email-config";
  9. export default defineComponent({
  10. name: 'message-config-index',
  11. setup() {
  12. const state = reactive({
  13. tabName: 'SMS' as 'SMS' | 'PUSH' | 'EMAIL' | 'WECHAT',
  14. })
  15. const tabsInstRef = ref()
  16. getTabsCache((val: any) => {
  17. if (val.form.tabName) {
  18. state.tabName = val.form.tabName
  19. nextTick(() => tabsInstRef.value?.syncBarPosition())
  20. }
  21. })
  22. const route = useRoute()
  23. const setTabs = (val: any) => {
  24. setTabsCaches(val, 'tabName', route)
  25. }
  26. onMounted(async () => {
  27. nextTick(() => tabsInstRef.value?.syncBarPosition())
  28. })
  29. return () => {
  30. return (
  31. <div class="system-menu-container">
  32. <div class={['section-container']} style="padding-top: 0">
  33. <NTabs
  34. ref={tabsInstRef}
  35. type="line"
  36. size="large"
  37. v-model:value={state.tabName}
  38. onUpdate:value={(val: any) => setTabs(val)}
  39. >
  40. <NTabPane name='SMS' tab='短信'><SmsConfig/></NTabPane>
  41. <NTabPane name='PUSH' tab="推送"><PushConfig/></NTabPane>
  42. <NTabPane name='WECHAT' tab="公众号"><WechatConfig/></NTabPane>
  43. <NTabPane name='EMAIL' tab="邮件"><EmailConfig/></NTabPane>
  44. </NTabs>
  45. </div>
  46. </div>
  47. )
  48. }
  49. }
  50. })