Newer
Older
smart-metering-front / src / views / device / stateManage / components / templatePage.vue
<!-- 状态管理公共模板 -->
<script lang="ts" setup name="stateMangeTemplate">
import all from './status/all.vue' // 全部
import cancel from './status/cancel.vue' // 已取消
import draft from './status/drafts.vue' // 草稿箱
import inApproval from './status/inApproval.vue' // 审批中
import passed from './status/passed.vue'// 已通过
import pending from './status/pending.vue' // 待审批
import unPassed from './status/unPassed.vue' // 未通过
import { getDictByCode } from '@/api/system/dict'
const props = defineProps({
  name: {
    type: String,
    required: true,
  },
  authority: {
    type: String,
    required: true,
  },
  applyType: {
    type: String, // 设备申请类型
    default: '',
  },
  formCode: {
    type: String, // 表单formCode
    default: '',
  },
})
interface menuType {
  name: string
  comp?: any
  id?: string
  value?: string
}
const menu = shallowRef<menuType[]>([
  { name: '全部', comp: all },
  { name: '草稿箱', comp: draft },
  { name: '待审批', comp: pending },
  { name: '审批中', comp: inApproval },
  { name: '已通过', comp: passed },
  { name: '未通过', comp: unPassed },
  { name: '已取消', comp: cancel },
])
const statusList = ref<menuType[]>([])
const type = ref('') // 当前状态的value
const current = ref('')
const currentComp = shallowRef(all)
watch(current, async (newValue) => {
  currentComp.value = menu.value.filter(item => item.name === newValue)[0].comp
  if (statusList.value.length > 0) {
    type.value = statusList.value.filter(item => item.name === newValue)[0].value || ''
  }
  else {
    getDictByCode('approvalStatus').then((res) => {
      statusList.value = (res.data as menuType[])
      type.value = res.data.filter((item: menuType) => item.name === newValue)[0].value
    })
  }
}, {
  immediate: true,
  deep: true,
})
onUnmounted(() => {
  sessionStorage.setItem(`${props.authority}Menu`, current.value)
})
onMounted(async () => {
  await getDictByCode('approvalStatus').then((res) => {
    statusList.value = (res.data as menuType[])
  })
  current.value = sessionStorage.getItem(`${props.authority}Menu`) || '全部'
  if (statusList.value.length > 0) {
    type.value = statusList.value.filter(item => item.name === current.value)[0].value || ''
  }
  sessionStorage.getItem(`${props.authority}Menu`) ? sessionStorage.removeItem(`${props.authority}Menu`) : ''
})
</script>

<template>
  <div class="container">
    <div class="btns">
      <!-- 三级菜单 -->
      <el-radio-group v-model="current">
        <el-radio-button v-for="item in menu" :key="item.name" :label="item.name">
          {{ item.name }}
        </el-radio-button>
      </el-radio-group>
    </div>
    <!-- 展示区域 -->
    <component :is="currentComp" :title="current" :name="props.name" :type="type" :apply-type="applyType" :form-code="props.formCode" />
  </div>
</template>

<style lang="scss" scoped>
.container {
  position: relative;

  .btns {
    position: fixed;
    top: 67px;
    right: 15px;
    z-index: 999;
  }
}
</style>