Merge remote-tracking branch 'origin/main'

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

@ -251,7 +251,8 @@ const processRouteQueryParams = reactive({
pageNo: 1,
pageSize: 10,
code: undefined,
name: undefined
name: undefined,
isEnable: 'true'
})
const selectedProcessRouteId = ref<string | number | undefined>()
const selectedProcessRouteRow = ref<ProcessRouteVO | undefined>()
@ -260,9 +261,14 @@ const processRouteDisplayName = computed(() => {
if (!formData.value.processRouteId) return ''
return formData.value.processRouteName || String(formData.value.processRouteId)
})
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) => {
dialogVisible.value = true
@ -357,7 +363,7 @@ const getProcessRouteList = async () => {
processRouteLoading.value = true
try {
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
if (selectedProcessRouteId.value) {
selectedProcessRouteRow.value =
@ -370,19 +376,24 @@ const getProcessRouteList = async () => {
}
const openProcessRouteDialog = async () => {
selectedProcessRouteId.value = formData.value.processRouteId
selectedProcessRouteRow.value = formData.value.processRouteId
? {
id: formData.value.processRouteId,
name: formData.value.processRouteName
selectedProcessRouteId.value = undefined
selectedProcessRouteRow.value = undefined
if (formData.value.processRouteId) {
try {
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
processRouteDialogVisible.value = true
await getProcessRouteList()
}
const handleProcessRouteRowClick = (row: ProcessRouteVO) => {
if (!isEnabledProcessRoute(row)) return
selectedProcessRouteId.value = row.id
selectedProcessRouteRow.value = row
}
@ -395,6 +406,10 @@ const confirmProcessRoute = () => {
const row =
selectedProcessRouteRow.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.processRouteName = row?.name || String(selectedProcessRouteId.value)
processRouteDialogVisible.value = false
@ -414,6 +429,7 @@ const handleProcessRouteQuery = () => {
const resetProcessRouteQuery = () => {
processRouteQueryFormRef.value?.resetFields()
processRouteQueryParams.isEnable = 'true'
handleProcessRouteQuery()
}
</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({
startTime: '2026-04-22 08:00:00',
endTime: '2026-04-22 11:30:00',
startTime: defaultTimeRange.startTime,
endTime: defaultTimeRange.endTime,
granularity: 'original',
rules: ['max', 'min', 'avg', 'range', 'upperCount', 'lowerCount', 'continuousAbnormal']
})
@ -827,6 +844,9 @@ function updateChart() {
}
function resetQuery() {
const timeRange = getTodayTimeRange()
queryParams.startTime = timeRange.startTime
queryParams.endTime = timeRange.endTime
selectedPointCodes.value = []
pointKeyword.value = ''
chartMode.value = 'all'
@ -949,7 +969,7 @@ function handleStartTimeChange(value) {
if (value && queryParams.endTime) {
if (!validateTimeRange(value, queryParams.endTime)) {
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)
ElMessage.warning('时间范围超过24小时已自动调整结束时间')
}
@ -961,7 +981,7 @@ function handleEndTimeChange(value) {
if (queryParams.startTime && value) {
if (!validateTimeRange(queryParams.startTime, 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)
ElMessage.warning('时间范围超过24小时已自动调整开始时间')
}
@ -975,7 +995,7 @@ const endTimeOptions = computed(() => {
if (!queryParams.startTime) return {}
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 {
disabledDate: (date) => {

@ -42,7 +42,7 @@
</el-form-item>
<el-form-item :label="t('ProcessRoute.fields.items')" prop="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">
<template #default="scope">
<div class="flex items-center gap-1">
@ -70,11 +70,10 @@
<Icon icon="ep:minus" />
</el-button>
<el-button
v-if="scope.$index === (formData.items?.length || 1) - 1"
circle
size="small"
type="primary"
@click="addItem"
@click="addItem(scope.$index)"
>
<Icon icon="ep:plus" />
</el-button>
@ -137,9 +136,15 @@ const formRules = reactive({
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 () => {
try {
parameterOptions.value = await ProcessParameterApi.getProcessParameterList()
const data = await ProcessParameterApi.getProcessParameterList({ isEnable: 'true' })
parameterOptions.value = Array.isArray(data) ? data.filter(isEnabledParameter) : []
} catch {
parameterOptions.value = []
}
@ -215,21 +220,30 @@ const resetForm = () => {
formRef.value?.resetFields()
}
const addItem = () => {
const nextSort = (formData.value.items?.length || 0) + 1
formData.value.items = [
...(formData.value.items || []),
{
sort: nextSort,
processParameterId: undefined,
remark: undefined
}
]
const createEmptyItem = (): ProcessRouteItemVO => ({
processParameterId: undefined,
remark: undefined
})
const refreshItemSort = () => {
formData.value.items = (formData.value.items || []).map((item, index) => ({
...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')
}
const removeItem = (index: number) => {
formData.value.items?.splice(index, 1)
refreshItemSort()
formRef.value?.clearValidate?.('items')
}

Loading…
Cancel
Save