Merge remote-tracking branch 'origin/main'

# Conflicts:
#	src/views/erp/product/category/ProductCategoryForm.vue
main
黄伟杰 3 weeks ago
commit f7942a158f

@ -251,7 +251,8 @@ const processRouteQueryParams = reactive({
pageNo: 1, pageNo: 1,
pageSize: 10, pageSize: 10,
code: undefined, code: undefined,
name: undefined name: undefined,
isEnable: 'true'
}) })
const selectedProcessRouteId = ref<string | number | undefined>() const selectedProcessRouteId = ref<string | number | undefined>()
const selectedProcessRouteRow = ref<ProcessRouteVO | undefined>() const selectedProcessRouteRow = ref<ProcessRouteVO | undefined>()
@ -260,9 +261,14 @@ const processRouteDisplayName = computed(() => {
if (!formData.value.processRouteId) return '' if (!formData.value.processRouteId) return ''
return formData.value.processRouteName || String(formData.value.processRouteId) return formData.value.processRouteName || String(formData.value.processRouteId)
}) })
const isProductType = computed(() => Number(formData.value.type) === 1) const isProductType = computed(() => Number(formData.value.type) === 1)
const isEnabledProcessRoute = (row?: ProcessRouteVO) => {
if (!row) return false
if (row.isEnable === undefined || row.isEnable === null) return true
return ['true', '1'].includes(String(row.isEnable))
}
/** 打开弹窗 */ /** 打开弹窗 */
const open = async (type: string, id?: number, defaultData?: any) => { const open = async (type: string, id?: number, defaultData?: any) => {
dialogVisible.value = true dialogVisible.value = true
@ -357,7 +363,7 @@ const getProcessRouteList = async () => {
processRouteLoading.value = true processRouteLoading.value = true
try { try {
const data = await ProcessRouteApi.getProcessRoutePage(processRouteQueryParams) const data = await ProcessRouteApi.getProcessRoutePage(processRouteQueryParams)
processRouteList.value = data.list || [] processRouteList.value = Array.isArray(data.list) ? data.list.filter(isEnabledProcessRoute) : []
processRouteTotal.value = data.total || 0 processRouteTotal.value = data.total || 0
if (selectedProcessRouteId.value) { if (selectedProcessRouteId.value) {
selectedProcessRouteRow.value = selectedProcessRouteRow.value =
@ -370,19 +376,24 @@ const getProcessRouteList = async () => {
} }
const openProcessRouteDialog = async () => { const openProcessRouteDialog = async () => {
selectedProcessRouteId.value = formData.value.processRouteId selectedProcessRouteId.value = undefined
selectedProcessRouteRow.value = formData.value.processRouteId selectedProcessRouteRow.value = undefined
? { if (formData.value.processRouteId) {
id: formData.value.processRouteId, try {
name: formData.value.processRouteName const data = await ProcessRouteApi.getProcessRoute(Number(formData.value.processRouteId))
if (isEnabledProcessRoute(data)) {
selectedProcessRouteId.value = formData.value.processRouteId
selectedProcessRouteRow.value = data
} }
: undefined } catch {}
}
processRouteQueryParams.pageNo = 1 processRouteQueryParams.pageNo = 1
processRouteDialogVisible.value = true processRouteDialogVisible.value = true
await getProcessRouteList() await getProcessRouteList()
} }
const handleProcessRouteRowClick = (row: ProcessRouteVO) => { const handleProcessRouteRowClick = (row: ProcessRouteVO) => {
if (!isEnabledProcessRoute(row)) return
selectedProcessRouteId.value = row.id selectedProcessRouteId.value = row.id
selectedProcessRouteRow.value = row selectedProcessRouteRow.value = row
} }
@ -395,6 +406,10 @@ const confirmProcessRoute = () => {
const row = const row =
selectedProcessRouteRow.value || selectedProcessRouteRow.value ||
processRouteList.value.find((item) => String(item.id) === String(selectedProcessRouteId.value)) processRouteList.value.find((item) => String(item.id) === String(selectedProcessRouteId.value))
if (!isEnabledProcessRoute(row)) {
message.warning(t('FactoryModeling.ProductCategory.processRouteSelectRequired'))
return
}
formData.value.processRouteId = selectedProcessRouteId.value formData.value.processRouteId = selectedProcessRouteId.value
formData.value.processRouteName = row?.name || String(selectedProcessRouteId.value) formData.value.processRouteName = row?.name || String(selectedProcessRouteId.value)
processRouteDialogVisible.value = false processRouteDialogVisible.value = false
@ -414,6 +429,7 @@ const handleProcessRouteQuery = () => {
const resetProcessRouteQuery = () => { const resetProcessRouteQuery = () => {
processRouteQueryFormRef.value?.resetFields() processRouteQueryFormRef.value?.resetFields()
processRouteQueryParams.isEnable = 'true'
handleProcessRouteQuery() handleProcessRouteQuery()
} }
</script> </script>

@ -387,9 +387,26 @@ const deviceData = reactive({
}) })
// //
function getTodayTimeRange() {
const start = new Date()
start.setHours(0, 0, 0, 0)
const end = new Date(start)
end.setHours(23, 59, 59, 59)
end.setDate(end.getDate())
return {
startTime: formatDateTime(start),
endTime: formatDateTime(end)
}
}
const defaultTimeRange = getTodayTimeRange()
const queryParams = reactive({ const queryParams = reactive({
startTime: '2026-04-22 08:00:00', startTime: defaultTimeRange.startTime,
endTime: '2026-04-22 11:30:00', endTime: defaultTimeRange.endTime,
granularity: 'original', granularity: 'original',
rules: ['max', 'min', 'avg', 'range', 'upperCount', 'lowerCount', 'continuousAbnormal'] rules: ['max', 'min', 'avg', 'range', 'upperCount', 'lowerCount', 'continuousAbnormal']
}) })
@ -827,6 +844,9 @@ function updateChart() {
} }
function resetQuery() { function resetQuery() {
const timeRange = getTodayTimeRange()
queryParams.startTime = timeRange.startTime
queryParams.endTime = timeRange.endTime
selectedPointCodes.value = [] selectedPointCodes.value = []
pointKeyword.value = '' pointKeyword.value = ''
chartMode.value = 'all' chartMode.value = 'all'
@ -949,7 +969,7 @@ function handleStartTimeChange(value) {
if (value && queryParams.endTime) { if (value && queryParams.endTime) {
if (!validateTimeRange(value, queryParams.endTime)) { if (!validateTimeRange(value, queryParams.endTime)) {
const start = new Date(value) const start = new Date(value)
const end = new Date(start.getTime() + 24 * 60 * 60 * 1000 - 1000) // 23:59:59 const end = new Date(start.getTime() + 24 * 60 * 60 * 1000)
queryParams.endTime = formatDateTime(end) queryParams.endTime = formatDateTime(end)
ElMessage.warning('时间范围超过24小时已自动调整结束时间') ElMessage.warning('时间范围超过24小时已自动调整结束时间')
} }
@ -961,7 +981,7 @@ function handleEndTimeChange(value) {
if (queryParams.startTime && value) { if (queryParams.startTime && value) {
if (!validateTimeRange(queryParams.startTime, value)) { if (!validateTimeRange(queryParams.startTime, value)) {
const end = new Date(value) const end = new Date(value)
const start = new Date(end.getTime() - 24 * 60 * 60 * 1000 + 1000) // 00:00:00 const start = new Date(end.getTime() - 24 * 60 * 60 * 1000)
queryParams.startTime = formatDateTime(start) queryParams.startTime = formatDateTime(start)
ElMessage.warning('时间范围超过24小时已自动调整开始时间') ElMessage.warning('时间范围超过24小时已自动调整开始时间')
} }
@ -975,7 +995,7 @@ const endTimeOptions = computed(() => {
if (!queryParams.startTime) return {} if (!queryParams.startTime) return {}
const start = new Date(queryParams.startTime) const start = new Date(queryParams.startTime)
const maxEndTime = new Date(start.getTime() + 24 * 60 * 60 * 1000 - 1000) // 23:59:59 const maxEndTime = new Date(start.getTime() + 24 * 60 * 60 * 1000)
return { return {
disabledDate: (date) => { disabledDate: (date) => {

@ -42,7 +42,7 @@
</el-form-item> </el-form-item>
<el-form-item :label="t('ProcessRoute.fields.items')" prop="items"> <el-form-item :label="t('ProcessRoute.fields.items')" prop="items">
<div class="process-route-items"> <div class="process-route-items">
<el-table :data="formData.items" border size="small" row-key="id"> <el-table :data="formData.items" border size="small" row-key="id" :show-header="false">
<el-table-column :label="t('ProcessRoute.fields.processParameter')" min-width="260" align="center"> <el-table-column :label="t('ProcessRoute.fields.processParameter')" min-width="260" align="center">
<template #default="scope"> <template #default="scope">
<div class="flex items-center gap-1"> <div class="flex items-center gap-1">
@ -70,11 +70,10 @@
<Icon icon="ep:minus" /> <Icon icon="ep:minus" />
</el-button> </el-button>
<el-button <el-button
v-if="scope.$index === (formData.items?.length || 1) - 1"
circle circle
size="small" size="small"
type="primary" type="primary"
@click="addItem" @click="addItem(scope.$index)"
> >
<Icon icon="ep:plus" /> <Icon icon="ep:plus" />
</el-button> </el-button>
@ -137,9 +136,15 @@ const formRules = reactive({
items: [{ validator: (_: any, __: any, callback: any) => validateItems(callback), trigger: 'change' }] items: [{ validator: (_: any, __: any, callback: any) => validateItems(callback), trigger: 'change' }]
}) })
const isEnabledParameter = (item: ProcessParameterVO) => {
if (item.isEnable === undefined || item.isEnable === null) return true
return ['true', '1'].includes(String(item.isEnable))
}
const loadParameterList = async () => { const loadParameterList = async () => {
try { try {
parameterOptions.value = await ProcessParameterApi.getProcessParameterList() const data = await ProcessParameterApi.getProcessParameterList({ isEnable: 'true' })
parameterOptions.value = Array.isArray(data) ? data.filter(isEnabledParameter) : []
} catch { } catch {
parameterOptions.value = [] parameterOptions.value = []
} }
@ -215,21 +220,30 @@ const resetForm = () => {
formRef.value?.resetFields() formRef.value?.resetFields()
} }
const addItem = () => { const createEmptyItem = (): ProcessRouteItemVO => ({
const nextSort = (formData.value.items?.length || 0) + 1 processParameterId: undefined,
formData.value.items = [ remark: undefined
...(formData.value.items || []), })
{
sort: nextSort, const refreshItemSort = () => {
processParameterId: undefined, formData.value.items = (formData.value.items || []).map((item, index) => ({
remark: undefined ...item,
} sort: index + 1
] }))
}
const addItem = (index?: number) => {
const items = [...(formData.value.items || [])]
const insertIndex = index === undefined ? items.length : index + 1
items.splice(insertIndex, 0, createEmptyItem())
formData.value.items = items
refreshItemSort()
formRef.value?.clearValidate?.('items') formRef.value?.clearValidate?.('items')
} }
const removeItem = (index: number) => { const removeItem = (index: number) => {
formData.value.items?.splice(index, 1) formData.value.items?.splice(index, 1)
refreshItemSort()
formRef.value?.clearValidate?.('items') formRef.value?.clearValidate?.('items')
} }

Loading…
Cancel
Save