SmartOpsBaseQueryFields.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <!--
  2. 仅用于「智慧运营看板」分组内:九宫格 + S1~S9 共 10 个看板页。
  3. 不要在 cockpit、S0 建模、智慧诊断、业务列表等页面引用。
  4. -->
  5. <template>
  6. <!-- 仅 S1~S9 引用;白底下拉与深色条内的日期/其它输入框视觉对齐(九宫格不用本组件) -->
  7. <div class="smart-ops-base-fields smart-ops-base-fields--light-selects">
  8. <el-form-item v-if="!compact" label-width="0" class="smart-ops-base-fields__hint-row">
  9. <span class="smart-ops-base-fields__hint">基础查询:日期、产品、订单号、产线</span>
  10. </el-form-item>
  11. <el-form-item label="日期">
  12. <el-date-picker
  13. :model-value="modelValue.dateRange"
  14. type="daterange"
  15. range-separator="至"
  16. start-placeholder="开始"
  17. end-placeholder="结束"
  18. value-format="YYYY-MM-DD"
  19. style="width: 240px"
  20. @update:model-value="patch({ dateRange: $event })"
  21. />
  22. </el-form-item>
  23. <el-form-item label="产品">
  24. <el-select
  25. :model-value="modelValue.product || undefined"
  26. filterable
  27. clearable
  28. placeholder="全部"
  29. style="width: 180px"
  30. :loading="optionsLoading"
  31. @update:model-value="patch({ product: $event == null ? '' : String($event) })"
  32. >
  33. <el-option v-for="p in productOptions" :key="'p-' + p" :label="p" :value="p" />
  34. </el-select>
  35. </el-form-item>
  36. <el-form-item label="订单号">
  37. <el-select
  38. :model-value="modelValue.orderNo || undefined"
  39. filterable
  40. clearable
  41. placeholder="全部"
  42. style="width: 180px"
  43. :loading="optionsLoading"
  44. @update:model-value="patch({ orderNo: $event == null ? '' : String($event) })"
  45. >
  46. <el-option v-for="o in orderNoOptions" :key="'o-' + o" :label="o" :value="o" />
  47. </el-select>
  48. </el-form-item>
  49. <el-form-item label="产线">
  50. <el-select
  51. :model-value="modelValue.productionLine || undefined"
  52. filterable
  53. clearable
  54. placeholder="全部"
  55. style="width: 160px"
  56. :loading="optionsLoading"
  57. @update:model-value="patch({ productionLine: $event == null ? '' : String($event) })"
  58. >
  59. <el-option v-for="l in productionLineOptions" :key="'l-' + l" :label="l" :value="l" />
  60. </el-select>
  61. </el-form-item>
  62. </div>
  63. </template>
  64. <script setup>
  65. import { onMounted, ref } from 'vue'
  66. import { loadSmartOpsFilterOptions } from '../utils/smartOpsFilterOptionsCache'
  67. const props = defineProps({
  68. modelValue: {
  69. type: Object,
  70. required: true,
  71. },
  72. /** 单行紧凑(九宫格顶栏等),不显示占满行的说明文字 */
  73. compact: { type: Boolean, default: false },
  74. })
  75. const emit = defineEmits(['update:modelValue'])
  76. const optionsLoading = ref(true)
  77. const productOptions = ref([])
  78. const orderNoOptions = ref([])
  79. const productionLineOptions = ref([])
  80. function patch(p) {
  81. emit('update:modelValue', { ...props.modelValue, ...p })
  82. }
  83. onMounted(async () => {
  84. optionsLoading.value = true
  85. try {
  86. const d = await loadSmartOpsFilterOptions(1, 1)
  87. productOptions.value = d.products ?? []
  88. orderNoOptions.value = d.orderNos ?? []
  89. productionLineOptions.value = d.productionLines ?? []
  90. } finally {
  91. optionsLoading.value = false
  92. }
  93. })
  94. </script>
  95. <style scoped>
  96. .smart-ops-base-fields__hint-row {
  97. margin-right: 0 !important;
  98. margin-bottom: 2px !important;
  99. width: 100%;
  100. flex-basis: 100%;
  101. }
  102. .smart-ops-base-fields__hint-row :deep(.el-form-item__content) {
  103. justify-content: flex-start;
  104. }
  105. .smart-ops-base-fields__hint {
  106. font-size: 12px;
  107. font-weight: 600;
  108. color: #475569;
  109. letter-spacing: 0.02em;
  110. }
  111. </style>