广丰卷烟厂数采质量分析系统
zhuguifei
2026-03-02 80ff784bf60637cd348ae665fc907f7b1e527dd8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
<script setup lang="ts">
import { computed, ref, watch } from 'vue';
import type { FormRules } from 'naive-ui';
import { useNaiveForm } from '@/hooks/common/form';
import { $t } from '@/locales';
 
defineOptions({
  name: 'RollerDataSearch'
});
 
interface Emits {
  (e: 'search'): void;
}
 
const emit = defineEmits<Emits>();
 
const { formRef, validate, restoreValidation } = useNaiveForm();
 
const model = defineModel<Api.Qa.RollerDataSearchParams>('model', { required: true });
 
const rules: FormRules = {
  equNo: {
    required: true,
    type: 'number',
    message: '请选择设备',
    trigger: ['blur', 'change']
  },
  'params.beginTime': {
    required: true,
    message: '请选择时间区间',
    trigger: ['blur', 'change']
  }
};
 
const timeRange = ref<[string, string] | null>(null);
 
// sync model params to timeRange
watch(
  () => model.value.params,
  (val: Api.Qa.RollerDataSearchParams['params']) => {
    if (val?.beginTime && val?.endTime) {
      timeRange.value = [val.beginTime, val.endTime];
    } else {
      timeRange.value = null;
    }
  },
  { immediate: true, deep: true }
);
 
const shiftOptions = [
  { label: '早班', value: 1 },
  { label: '中班', value: 2 },
  { label: '晚班', value: 3 }
];
 
const equNoOptions = Array.from({ length: 13 }, (_, i) => i + 1)
  .filter(i => i !== 4)
  .map(i => ({ label: `${i}#卷接机组`, value: 100 + i }));
 
function onTimeRangeUpdate(value: [string, string] | null) {
  if (!model.value.params) {
    model.value.params = {};
  }
  if (value && value.length === 2) {
    [model.value.params.beginTime, model.value.params.endTime] = value;
  } else {
    model.value.params.beginTime = undefined;
    model.value.params.endTime = undefined;
  }
}
 
async function reset() {
  await restoreValidation();
  model.value.shift = null;
  model.value.equNo = 101;
 
  const now = new Date();
  const todayStart = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')} 00:00:00`;
  const todayEnd = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')} 23:59:59`;
 
  timeRange.value = [todayStart, todayEnd];
  onTimeRangeUpdate(timeRange.value);
  emit('search');
}
 
async function search() {
  await validate();
  emit('search');
}
</script>
 
<template>
  <NCard :bordered="false" size="small" class="card-wrapper">
    <NCollapse>
      <NCollapseItem :title="$t('common.search')" name="roller-data-search">
        <NForm ref="formRef" :model="model" :rules="rules" label-placement="left" :label-width="80">
          <NGrid responsive="screen" item-responsive>
            <NFormItemGi span="24 s:12 m:8" label="时间区间" path="params.beginTime" class="pr-24px">
              <NDatePicker
                v-model:formatted-value="timeRange"
                type="datetimerange"
                value-format="yyyy-MM-dd HH:mm:ss"
                clearable
                @update:formatted-value="onTimeRangeUpdate"
                :default-time="['00:00:00', '23:59:59']"
              />
            </NFormItemGi>
            <NFormItemGi span="24 s:12 m:8" label="设备" path="equNo" class="pr-24px">
              <NSelect
                v-model:value="model.equNo"
                placeholder="请选择设备号"
                :options="equNoOptions"
                clearable
              />
            </NFormItemGi>
            <NFormItemGi span="24 s:12 m:8" label="班次" path="shift" class="pr-24px">
              <NSelect
                v-model:value="model.shift"
                placeholder="请选择班次"
                :options="shiftOptions"
                clearable
              />
            </NFormItemGi>
            <NFormItemGi span="24" class="pr-24px">
              <NSpace class="w-full" justify="end">
                <NButton @click="reset">
                  <template #icon>
                    <icon-ic-round-refresh class="text-icon" />
                  </template>
                  {{ $t('common.reset') }}
                </NButton>
                <NButton type="primary" ghost @click="search">
                  <template #icon>
                    <icon-ic-round-search class="text-icon" />
                  </template>
                  {{ $t('common.search') }}
                </NButton>
              </NSpace>
            </NFormItemGi>
          </NGrid>
        </NForm>
      </NCollapseItem>
    </NCollapse>
  </NCard>
</template>
 
<style scoped></style>