|
|
@@ -1,5 +1,6 @@
|
|
|
-<script lang="ts" setup generic="T">
|
|
|
+<script lang="ts" setup>
|
|
|
import { IotRyDailyReportApi } from '@/api/pms/iotrydailyreport'
|
|
|
+import { IotProjectTaskApi } from '@/api/pms/iotprojecttask'
|
|
|
import { useTableComponents } from '@/components/ZmTable/useTableComponents'
|
|
|
import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
|
|
|
import { calculateDuration, formatT } from '@/utils/formatTime'
|
|
|
@@ -15,6 +16,8 @@ const userStore = useUserStore()
|
|
|
interface Props {
|
|
|
visible: boolean
|
|
|
type?: 'edit' | 'approval' | 'readonly'
|
|
|
+ deptId?: number
|
|
|
+ deptName?: string
|
|
|
loadList: () => void
|
|
|
noValidateStatus?: boolean
|
|
|
}
|
|
|
@@ -159,7 +162,8 @@ const FORM_KEYS: (keyof FormOriginal)[] = [
|
|
|
const formRef = ref<FormInstance>()
|
|
|
const loading = ref(false)
|
|
|
const formLoading = ref(false)
|
|
|
-const formType = ref<'edit' | 'readonly'>('edit')
|
|
|
+type FormMode = 'create' | 'edit' | 'readonly'
|
|
|
+const formType = ref<FormMode>('edit')
|
|
|
const message = useMessage()
|
|
|
const { t } = useI18n()
|
|
|
|
|
|
@@ -184,7 +188,41 @@ const isEdit = computed(() => props.type === 'edit')
|
|
|
const isMainFieldDisabled = computed(() => formType.value === 'readonly' || isApproval.value)
|
|
|
const isConstructionBriefDisabled = computed(() => formType.value === 'readonly')
|
|
|
|
|
|
-const wellOptions = ref<{ label: string; value: number }[]>([])
|
|
|
+interface WellOption {
|
|
|
+ label: string
|
|
|
+ value: number
|
|
|
+}
|
|
|
+
|
|
|
+const wellOptions = ref<WellOption[]>([])
|
|
|
+
|
|
|
+async function loadCreateTaskOptions() {
|
|
|
+ if (props.deptId === undefined) {
|
|
|
+ wellOptions.value = []
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ loading.value = true
|
|
|
+ try {
|
|
|
+ const tasks = await IotProjectTaskApi.getTaskWellNames({
|
|
|
+ deptId: props.deptId,
|
|
|
+ wellName: ''
|
|
|
+ })
|
|
|
+
|
|
|
+ wellOptions.value = tasks.map((task) => ({
|
|
|
+ label: task.wellName,
|
|
|
+ value: task.id
|
|
|
+ }))
|
|
|
+ } catch {
|
|
|
+ wellOptions.value = []
|
|
|
+ message.error('任务井加载失败')
|
|
|
+ } finally {
|
|
|
+ loading.value = false
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function handleTaskChange(taskId: number) {
|
|
|
+ form.value.taskId = taskId
|
|
|
+}
|
|
|
|
|
|
async function loadDetail(id: number) {
|
|
|
loading.value = true
|
|
|
@@ -261,9 +299,21 @@ const removeProductionStatusRow = (index: number) => {
|
|
|
|
|
|
const { ZmTable, ZmTableColumn } = useTableComponents<ReportDetail>()
|
|
|
|
|
|
-function handleOpenForm(id: number, type: 'edit' | 'readonly') {
|
|
|
+function handleOpenForm(id: number | undefined, type: FormMode) {
|
|
|
formType.value = type
|
|
|
emits('update:visible', true)
|
|
|
+
|
|
|
+ if (id === undefined) {
|
|
|
+ wellOptions.value = []
|
|
|
+ form.value = initFormData()
|
|
|
+ form.value.deptId = props.deptId
|
|
|
+ form.value.deptName = props.deptName
|
|
|
+ addProductionStatusRow()
|
|
|
+ loadCreateTaskOptions()
|
|
|
+ nextTick(() => formRef.value?.clearValidate())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
loadDetail(id).then(() => {
|
|
|
nextTick(() => formRef.value?.clearValidate())
|
|
|
})
|
|
|
@@ -420,7 +470,9 @@ const submitForm = async () => {
|
|
|
}
|
|
|
|
|
|
await IotRyDailyReportApi.createIotRyDailyReport(submitData)
|
|
|
- message.success(t('common.updateSuccess'))
|
|
|
+ message.success(
|
|
|
+ t(formType.value === 'create' ? 'common.createSuccess' : 'common.updateSuccess')
|
|
|
+ )
|
|
|
emits('update:visible', false)
|
|
|
props.loadList()
|
|
|
} catch (error) {
|
|
|
@@ -498,7 +550,7 @@ const allocatedTimeDisabled = computed(() => {
|
|
|
size="100%">
|
|
|
<template #header>
|
|
|
<span class="text-xl font-bold text-[var(--el-text-color-primary)]">
|
|
|
- {{ type === 'edit' ? '编辑日报' : '审批日报' }}
|
|
|
+ {{ formType === 'create' ? '新增日报' : type === 'edit' ? '编辑日报' : '审批日报' }}
|
|
|
</span>
|
|
|
</template>
|
|
|
|
|
|
@@ -578,7 +630,12 @@ const allocatedTimeDisabled = computed(() => {
|
|
|
v-model="form.taskId"
|
|
|
placeholder="请选择任务井"
|
|
|
:options="wellOptions"
|
|
|
- :disabled="form.auditStatus !== 20 && form.auditStatus !== 30" />
|
|
|
+ filterable
|
|
|
+ @change="handleTaskChange"
|
|
|
+ :disabled="
|
|
|
+ formType === 'readonly' ||
|
|
|
+ (formType === 'edit' && form.auditStatus !== 20 && form.auditStatus !== 30)
|
|
|
+ " />
|
|
|
</el-form-item>
|
|
|
<el-form-item label="施工区域" prop="location">
|
|
|
<el-input v-model="form.location" disabled />
|