config.vue 2.46 KB
<template>
  <collapse-item name="属性" :expanded="true">
    <setting-item-box name="路径" :alone="true">
      <setting-item name="请选择要加载的组态">
        <n-select size="small" v-model:value="optionData.dataset" :options="configurationOptions" />
      </setting-item>
    </setting-item-box>
    <setting-item-box name="样式">
      <setting-item name="圆角">
        <n-input-number
          v-model:value="optionData.borderRadius"
          size="small"
          :min="0"
          placeholder="圆角"
        ></n-input-number>
      </setting-item>
    </setting-item-box>
    <setting-item-box name="分页">
      <setting-item name="页码">
        <n-input-number v-model:value="optionData.pages.page" size="small" :min="1" placeholder="页码"></n-input-number>
      </setting-item>
      <setting-item name="页数">
        <n-input-number
          disabled
          v-model:value="optionData.pages.pageSize"
          size="small"
          :min="10"
          placeholder="页数"
        ></n-input-number>
      </setting-item>
    </setting-item-box>
    <setting-item-box name="颜色" :alone="true">
      <SettingItem name="颜色">
        <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.color"></n-color-picker>
      </SettingItem>
      <SettingItem>
        <n-button size="small" @click="optionData.color = 'black'"> 恢复默认 </n-button>
      </SettingItem>
    </setting-item-box>
  </collapse-item>
</template>

<script setup lang="ts">
import { PropType, onMounted, ref, watch } from 'vue'
import { option } from './config'
import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting'
import { getConfigurationList } from '@/api/external/common/index'

const props = defineProps({
  optionData: {
    type: Object as PropType<typeof option>,
    required: true
  }
})

const configurationOptions = ref([])

const getConfigurationOptions = async (params: object) => {
  const { items } = await getConfigurationList(params)
  if (items) {
    configurationOptions.value = items.map((item: Record<string, string>) => ({ label: item.name, value: item.id }))
  }
}

watch(
  () => props.optionData.pages,
  (newData: any) => {
    getConfigurationOptions({ page: newData.page, pageSize: newData.pageSize })
  },
  {
    deep: true,
    immediate: true
  }
)

onMounted(() => {
  getConfigurationOptions({ page: props.optionData.pages.page, pageSize: props.optionData.pages.pageSize })
})
</script>