|
|
|
|
@ -17,10 +17,28 @@
|
|
|
|
|
</el-radio-group>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="设备列表" prop="deviceList">
|
|
|
|
|
<el-input v-model="formData.deviceList" placeholder="请输入设备列表" />
|
|
|
|
|
<el-select
|
|
|
|
|
v-model="formData.deviceList"
|
|
|
|
|
multiple
|
|
|
|
|
filterable
|
|
|
|
|
clearable
|
|
|
|
|
placeholder="请选择设备列表"
|
|
|
|
|
class="!w-full"
|
|
|
|
|
>
|
|
|
|
|
<el-option v-for="item in deviceOptions" :key="String(item.id)" :label="item.deviceName" :value="String(item.id)" />
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="项目表单" prop="projectForm">
|
|
|
|
|
<el-input v-model="formData.projectForm" placeholder="请输入项目表单" />
|
|
|
|
|
<el-select
|
|
|
|
|
v-model="formData.projectForm"
|
|
|
|
|
multiple
|
|
|
|
|
filterable
|
|
|
|
|
clearable
|
|
|
|
|
placeholder="请选择项目表单"
|
|
|
|
|
class="!w-full"
|
|
|
|
|
>
|
|
|
|
|
<el-option v-for="item in planOptions" :key="String(item.id)" :label="item.planName" :value="String(item.id)" />
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="起止日期" prop="dateRange">
|
|
|
|
|
<el-date-picker
|
|
|
|
|
@ -33,10 +51,19 @@
|
|
|
|
|
/>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="cron 表达式" prop="cronExpression">
|
|
|
|
|
<el-input v-model="formData.cronExpression" placeholder="请输入 cron 表达式" />
|
|
|
|
|
<crontab v-model="formData.cronExpression" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="可操作人" prop="operableUsers">
|
|
|
|
|
<el-input v-model="formData.operableUsers" placeholder="请输入可操作人" />
|
|
|
|
|
<el-select
|
|
|
|
|
v-model="formData.operableUsers"
|
|
|
|
|
multiple
|
|
|
|
|
filterable
|
|
|
|
|
clearable
|
|
|
|
|
placeholder="请选择可操作人"
|
|
|
|
|
class="!w-full"
|
|
|
|
|
>
|
|
|
|
|
<el-option v-for="item in users" :key="String(item.id)" :label="item.nickname" :value="String(item.id)" />
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="是否启用" prop="enabled">
|
|
|
|
|
<el-radio-group v-model="formData.enabled">
|
|
|
|
|
@ -56,6 +83,9 @@
|
|
|
|
|
<script setup lang="ts">
|
|
|
|
|
import { DICT_TYPE, getBoolDictOptions } from '@/utils/dict'
|
|
|
|
|
import { TaskManagementApi, TaskManagementVO } from '@/api/mes/taskManagement'
|
|
|
|
|
import { DeviceLedgerApi } from '@/api/mes/deviceledger'
|
|
|
|
|
import { PlanMaintenanceApi } from '@/api/mes/planmaintenance'
|
|
|
|
|
import { getSimpleUserList, UserVO } from '@/api/system/user'
|
|
|
|
|
|
|
|
|
|
defineOptions({ name: 'TaskManagementForm' })
|
|
|
|
|
|
|
|
|
|
@ -68,15 +98,54 @@ const formLoading = ref(false)
|
|
|
|
|
const formType = ref('')
|
|
|
|
|
const formRef = ref()
|
|
|
|
|
|
|
|
|
|
type DeviceOption = {
|
|
|
|
|
id: number | string
|
|
|
|
|
deviceName: string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type PlanOption = {
|
|
|
|
|
id: number | string
|
|
|
|
|
planName: string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const deviceOptions = ref<DeviceOption[]>([])
|
|
|
|
|
const planOptions = ref<PlanOption[]>([])
|
|
|
|
|
const users = ref<UserVO[]>([])
|
|
|
|
|
|
|
|
|
|
const parseIdsValue = (value: any): string[] => {
|
|
|
|
|
if (!value) return []
|
|
|
|
|
if (Array.isArray(value)) return value.map((v) => String(v).trim()).filter(Boolean)
|
|
|
|
|
return String(value)
|
|
|
|
|
.split(',')
|
|
|
|
|
.map((v) => v.trim())
|
|
|
|
|
.filter(Boolean)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const toCommaSeparatedIds = (value: any): string | undefined => {
|
|
|
|
|
const ids = parseIdsValue(value)
|
|
|
|
|
return ids.length ? ids.join(',') : undefined
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const ensureOptionsLoaded = async () => {
|
|
|
|
|
const [deviceRes, planRes, userRes] = await Promise.all([
|
|
|
|
|
DeviceLedgerApi.getDeviceLedgerPage({}),
|
|
|
|
|
PlanMaintenanceApi.getPlanMaintenancePage({ pageNo: 1, pageSize: 100 }),
|
|
|
|
|
getSimpleUserList()
|
|
|
|
|
])
|
|
|
|
|
deviceOptions.value = (deviceRes?.list ?? []) as DeviceOption[]
|
|
|
|
|
planOptions.value = (planRes?.list ?? []) as PlanOption[]
|
|
|
|
|
users.value = userRes ?? []
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const formData = ref({
|
|
|
|
|
id: undefined as number | undefined,
|
|
|
|
|
name: undefined as string | undefined,
|
|
|
|
|
taskType: undefined as number | undefined,
|
|
|
|
|
deviceList: undefined as string | undefined,
|
|
|
|
|
projectForm: undefined as string | undefined,
|
|
|
|
|
deviceList: [] as string[],
|
|
|
|
|
projectForm: [] as string[],
|
|
|
|
|
dateRange: [] as string[],
|
|
|
|
|
cronExpression: undefined as string | undefined,
|
|
|
|
|
operableUsers: undefined as string | undefined,
|
|
|
|
|
operableUsers: [] as string[],
|
|
|
|
|
enabled: true as boolean
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
@ -91,11 +160,11 @@ const resetForm = () => {
|
|
|
|
|
id: undefined,
|
|
|
|
|
name: undefined,
|
|
|
|
|
taskType: undefined,
|
|
|
|
|
deviceList: undefined,
|
|
|
|
|
projectForm: undefined,
|
|
|
|
|
deviceList: [],
|
|
|
|
|
projectForm: [],
|
|
|
|
|
dateRange: [],
|
|
|
|
|
cronExpression: undefined,
|
|
|
|
|
operableUsers: undefined,
|
|
|
|
|
operableUsers: [],
|
|
|
|
|
enabled: true
|
|
|
|
|
}
|
|
|
|
|
formRef.value?.resetFields()
|
|
|
|
|
@ -106,17 +175,34 @@ const open = async (type: string, row?: TaskManagementVO) => {
|
|
|
|
|
dialogTitle.value = t('action.' + type)
|
|
|
|
|
formType.value = type
|
|
|
|
|
resetForm()
|
|
|
|
|
await ensureOptionsLoaded()
|
|
|
|
|
|
|
|
|
|
if (type === 'update' && row) {
|
|
|
|
|
formData.value.id = row.id
|
|
|
|
|
formData.value.name = row.name
|
|
|
|
|
formData.value.taskType = row.taskType
|
|
|
|
|
formData.value.deviceList = row.deviceList
|
|
|
|
|
formData.value.projectForm = row.projectForm
|
|
|
|
|
formData.value.deviceList = parseIdsValue((row as any).deviceList)
|
|
|
|
|
const projectFormIds = parseIdsValue((row as any).projectForm)
|
|
|
|
|
if (projectFormIds.length) {
|
|
|
|
|
formData.value.projectForm = projectFormIds
|
|
|
|
|
} else {
|
|
|
|
|
const projectFormNames = parseIdsValue((row as any).projectFormName)
|
|
|
|
|
const mappedIds = projectFormNames
|
|
|
|
|
.map((name) => planOptions.value.find((p) => p.planName === name)?.id)
|
|
|
|
|
.filter((id) => id !== undefined && id !== null)
|
|
|
|
|
.map((id) => String(id))
|
|
|
|
|
formData.value.projectForm = mappedIds
|
|
|
|
|
}
|
|
|
|
|
formData.value.dateRange = [row.startDate, row.endDate].filter(Boolean) as string[]
|
|
|
|
|
formData.value.cronExpression = row.cronExpression
|
|
|
|
|
formData.value.operableUsers = row.operableUsers
|
|
|
|
|
formData.value.enabled = typeof row.enabled === 'boolean' ? row.enabled : true
|
|
|
|
|
formData.value.operableUsers = parseIdsValue((row as any).operableUsers)
|
|
|
|
|
if (typeof row.enabled === 'boolean') {
|
|
|
|
|
formData.value.enabled = row.enabled
|
|
|
|
|
} else if (row.enabled === 'true' || row.enabled === 'false') {
|
|
|
|
|
formData.value.enabled = row.enabled === 'true'
|
|
|
|
|
} else {
|
|
|
|
|
formData.value.enabled = true
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -133,12 +219,12 @@ const submitForm = async () => {
|
|
|
|
|
id: formData.value.id,
|
|
|
|
|
name: formData.value.name,
|
|
|
|
|
taskType: formData.value.taskType,
|
|
|
|
|
deviceList: formData.value.deviceList,
|
|
|
|
|
projectForm: formData.value.projectForm,
|
|
|
|
|
deviceList: toCommaSeparatedIds((formData.value as any).deviceList),
|
|
|
|
|
projectForm: toCommaSeparatedIds((formData.value as any).projectForm),
|
|
|
|
|
startDate: startDate || undefined,
|
|
|
|
|
endDate: endDate || undefined,
|
|
|
|
|
cronExpression: formData.value.cronExpression,
|
|
|
|
|
operableUsers: formData.value.operableUsers,
|
|
|
|
|
operableUsers: toCommaSeparatedIds((formData.value as any).operableUsers),
|
|
|
|
|
enabled: formData.value.enabled
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -156,4 +242,3 @@ const submitForm = async () => {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|