|
@@ -531,21 +531,45 @@ onMounted(async () => {
|
|
|
|
|
|
|
|
<el-dialog
|
|
<el-dialog
|
|
|
v-model="planDialogVisible"
|
|
v-model="planDialogVisible"
|
|
|
- :title="`${currentRow?.contractName || ''} - ${currentRow?.wellName || ''} - 任务计划`"
|
|
|
|
|
- width="80%">
|
|
|
|
|
- <div class="mb-15px">
|
|
|
|
|
- <el-button type="primary" @click="addNewRow">
|
|
|
|
|
- <Icon icon="ep:plus" class="mr-5px" />新增行
|
|
|
|
|
- </el-button>
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+ width="min(1440px, calc(100vw - 40px))"
|
|
|
|
|
+ class="plan-dialog">
|
|
|
|
|
+ <template #header>
|
|
|
|
|
+ <div class="plan-dialog-title">
|
|
|
|
|
+ <span class="plan-dialog-title__icon">
|
|
|
|
|
+ <Icon icon="ep:calendar" />
|
|
|
|
|
+ </span>
|
|
|
|
|
+ <div class="plan-dialog-title__content">
|
|
|
|
|
+ <h3>任务计划</h3>
|
|
|
|
|
+ <p>
|
|
|
|
|
+ {{ currentRow?.contractName || '未关联合同' }}
|
|
|
|
|
+ <span class="plan-dialog-title__separator">·</span>
|
|
|
|
|
+ {{ currentRow?.wellName || '未填写井号' }}
|
|
|
|
|
+ </p>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </template>
|
|
|
|
|
|
|
|
- <el-table :data="planList" border stripe>
|
|
|
|
|
- <el-table-column label="序号" width="60" align="center">
|
|
|
|
|
- <template #default="scope">
|
|
|
|
|
- {{ scope.$index + 1 }}
|
|
|
|
|
- </template>
|
|
|
|
|
- </el-table-column>
|
|
|
|
|
- <!-- <el-table-column label="施工状态" min-width="200">
|
|
|
|
|
|
|
+ <div class="plan-dialog-content">
|
|
|
|
|
+ <div class="plan-toolbar">
|
|
|
|
|
+ <div>
|
|
|
|
|
+ <div class="plan-toolbar__title">计划明细</div>
|
|
|
|
|
+ <div class="plan-toolbar__subtitle">维护任务开始时间、结束时间及工作量</div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="plan-toolbar__actions">
|
|
|
|
|
+ <span class="plan-count">共 {{ planList.length }} 条</span>
|
|
|
|
|
+ <el-button size="default" type="primary" @click="addNewRow">
|
|
|
|
|
+ <Icon icon="ep:plus" class="mr-5px" />新增计划
|
|
|
|
|
+ </el-button>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
|
|
+ <el-table :data="planList" border stripe max-height="50vh" class="plan-table">
|
|
|
|
|
+ <el-table-column label="序号" width="60" align="center">
|
|
|
|
|
+ <template #default="scope">
|
|
|
|
|
+ {{ scope.$index + 1 }}
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </el-table-column>
|
|
|
|
|
+ <!-- <el-table-column label="施工状态" min-width="200">
|
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
|
<el-select
|
|
<el-select
|
|
|
v-model="scope.row.status"
|
|
v-model="scope.row.status"
|
|
@@ -561,63 +585,70 @@ onMounted(async () => {
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column> -->
|
|
</el-table-column> -->
|
|
|
- <el-table-column label="开始时间" min-width="200">
|
|
|
|
|
- <template #default="scope">
|
|
|
|
|
- <el-date-picker
|
|
|
|
|
- v-model="scope.row.startTime"
|
|
|
|
|
- type="datetime"
|
|
|
|
|
- placeholder="选择开始时间"
|
|
|
|
|
- value-format="YYYY-MM-DD HH:mm"
|
|
|
|
|
- format="YYYY-MM-DD HH:mm"
|
|
|
|
|
- class="w-full" />
|
|
|
|
|
- </template>
|
|
|
|
|
- </el-table-column>
|
|
|
|
|
- <el-table-column label="结束时间" min-width="200">
|
|
|
|
|
- <template #default="scope">
|
|
|
|
|
- <el-date-picker
|
|
|
|
|
- v-if="rowShowEndTime(scope.row)"
|
|
|
|
|
- v-model="scope.row.endTime"
|
|
|
|
|
- type="datetime"
|
|
|
|
|
- placeholder="选择结束时间"
|
|
|
|
|
- value-format="YYYY-MM-DD HH:mm"
|
|
|
|
|
- format="YYYY-MM-DD HH:mm"
|
|
|
|
|
- class="w-full" />
|
|
|
|
|
- </template>
|
|
|
|
|
- </el-table-column>
|
|
|
|
|
-
|
|
|
|
|
- <el-table-column
|
|
|
|
|
- min-width="100"
|
|
|
|
|
- v-for="item in currentTableColumns"
|
|
|
|
|
- :key="item.identifier"
|
|
|
|
|
- :prop="item.identifier">
|
|
|
|
|
- <template #header>
|
|
|
|
|
- <span>
|
|
|
|
|
- <span v-if="isRequiredColumn(item)" class="required-mark">*</span>
|
|
|
|
|
- {{ item.unit ? `${item.name}(${item.unit})` : item.name }}
|
|
|
|
|
- </span>
|
|
|
|
|
- </template>
|
|
|
|
|
- <template #default="scope">
|
|
|
|
|
- <!-- <el-input type="number" v-model="scope.row[item.identifier]" placeholder="请输入" /> -->
|
|
|
|
|
- <el-input-number
|
|
|
|
|
- style="width: 150px"
|
|
|
|
|
- v-model="scope.row[item.identifier]"
|
|
|
|
|
- :min="0"
|
|
|
|
|
- placeholder="请输入" />
|
|
|
|
|
- </template>
|
|
|
|
|
- </el-table-column>
|
|
|
|
|
|
|
+ <el-table-column label="开始时间" min-width="200">
|
|
|
|
|
+ <template #default="scope">
|
|
|
|
|
+ <el-date-picker
|
|
|
|
|
+ v-model="scope.row.startTime"
|
|
|
|
|
+ type="datetime"
|
|
|
|
|
+ placeholder="选择开始时间"
|
|
|
|
|
+ value-format="YYYY-MM-DD HH:mm"
|
|
|
|
|
+ format="YYYY-MM-DD HH:mm"
|
|
|
|
|
+ class="w-full" />
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </el-table-column>
|
|
|
|
|
+ <el-table-column label="结束时间" min-width="200">
|
|
|
|
|
+ <template #default="scope">
|
|
|
|
|
+ <el-date-picker
|
|
|
|
|
+ v-if="rowShowEndTime(scope.row)"
|
|
|
|
|
+ v-model="scope.row.endTime"
|
|
|
|
|
+ type="datetime"
|
|
|
|
|
+ placeholder="选择结束时间"
|
|
|
|
|
+ value-format="YYYY-MM-DD HH:mm"
|
|
|
|
|
+ format="YYYY-MM-DD HH:mm"
|
|
|
|
|
+ class="w-full" />
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </el-table-column>
|
|
|
|
|
+
|
|
|
|
|
+ <el-table-column
|
|
|
|
|
+ min-width="100"
|
|
|
|
|
+ v-for="item in currentTableColumns"
|
|
|
|
|
+ :key="item.identifier"
|
|
|
|
|
+ :prop="item.identifier">
|
|
|
|
|
+ <template #header>
|
|
|
|
|
+ <span>
|
|
|
|
|
+ <span v-if="isRequiredColumn(item)" class="required-mark">*</span>
|
|
|
|
|
+ {{ item.unit ? `${item.name}(${item.unit})` : item.name }}
|
|
|
|
|
+ </span>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ <template #default="scope">
|
|
|
|
|
+ <!-- <el-input type="number" v-model="scope.row[item.identifier]" placeholder="请输入" /> -->
|
|
|
|
|
+ <el-input-number
|
|
|
|
|
+ v-model="scope.row[item.identifier]"
|
|
|
|
|
+ size="default"
|
|
|
|
|
+ :min="0"
|
|
|
|
|
+ class="plan-number-input"
|
|
|
|
|
+ placeholder="请输入" />
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </el-table-column>
|
|
|
|
|
|
|
|
- <el-table-column label="操作" width="100" align="center">
|
|
|
|
|
- <template #default="scope">
|
|
|
|
|
- <el-button link type="danger" @click="removeRow(scope.$index)">删除</el-button>
|
|
|
|
|
- </template>
|
|
|
|
|
- </el-table-column>
|
|
|
|
|
- </el-table>
|
|
|
|
|
|
|
+ <el-table-column label="操作" width="100" align="center">
|
|
|
|
|
+ <template #default="scope">
|
|
|
|
|
+ <el-button link type="danger" @click="removeRow(scope.$index)">删除</el-button>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </el-table-column>
|
|
|
|
|
+ </el-table>
|
|
|
|
|
+ </div>
|
|
|
|
|
|
|
|
<template #footer>
|
|
<template #footer>
|
|
|
- <span class="dialog-footer">
|
|
|
|
|
- <el-button @click="planDialogVisible = false">取消</el-button>
|
|
|
|
|
- <el-button type="primary" :loading="saveLoading" @click="savePlan">保存</el-button>
|
|
|
|
|
- </span>
|
|
|
|
|
|
|
+ <div class="plan-dialog-footer">
|
|
|
|
|
+ <span>请确认各计划时间和工作量填写完整</span>
|
|
|
|
|
+ <div>
|
|
|
|
|
+ <el-button size="default" @click="planDialogVisible = false">取消</el-button>
|
|
|
|
|
+ <el-button size="default" type="primary" :loading="saveLoading" @click="savePlan">
|
|
|
|
|
+ <Icon icon="ep:check" class="mr-5px" />保存
|
|
|
|
|
+ </el-button>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
</template>
|
|
</template>
|
|
|
</el-dialog>
|
|
</el-dialog>
|
|
|
|
|
|
|
@@ -709,6 +740,138 @@ onMounted(async () => {
|
|
|
margin-bottom: 0;
|
|
margin-bottom: 0;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+.plan-dialog-title {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ min-width: 0;
|
|
|
|
|
+ padding-right: 40px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.plan-dialog-title__icon {
|
|
|
|
|
+ display: inline-flex;
|
|
|
|
|
+ flex: 0 0 auto;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: center;
|
|
|
|
|
+ width: 40px;
|
|
|
|
|
+ height: 40px;
|
|
|
|
|
+ margin-right: 12px;
|
|
|
|
|
+ color: #3478f6;
|
|
|
|
|
+ background: #eaf2ff;
|
|
|
|
|
+ border-radius: 8px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.plan-dialog-title__content {
|
|
|
|
|
+ min-width: 0;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.plan-dialog-title h3 {
|
|
|
|
|
+ margin: 0;
|
|
|
|
|
+ font-size: 16px;
|
|
|
|
|
+ font-weight: 600;
|
|
|
|
|
+ line-height: 24px;
|
|
|
|
|
+ color: var(--el-text-color-primary);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.plan-dialog-title p {
|
|
|
|
|
+ margin: 2px 0 0;
|
|
|
|
|
+ overflow: hidden;
|
|
|
|
|
+ font-size: 12px;
|
|
|
|
|
+ line-height: 18px;
|
|
|
|
|
+ color: var(--el-text-color-secondary);
|
|
|
|
|
+ text-overflow: ellipsis;
|
|
|
|
|
+ white-space: nowrap;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.plan-dialog-title__separator {
|
|
|
|
|
+ margin: 0 6px;
|
|
|
|
|
+ color: var(--el-text-color-placeholder);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.plan-dialog :deep(.el-dialog__header) {
|
|
|
|
|
+ padding: 16px 20px;
|
|
|
|
|
+ margin-right: 0;
|
|
|
|
|
+ border-bottom: 1px solid var(--el-border-color-lighter);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.plan-dialog :deep(.el-dialog__body) {
|
|
|
|
|
+ padding: 16px 20px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.plan-dialog :deep(.el-dialog__footer) {
|
|
|
|
|
+ padding: 12px 20px;
|
|
|
|
|
+ border-top: 1px solid var(--el-border-color-lighter);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.plan-dialog-content {
|
|
|
|
|
+ overflow: hidden;
|
|
|
|
|
+ border: 1px solid var(--el-border-color-lighter);
|
|
|
|
|
+ border-radius: 6px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.plan-toolbar {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: space-between;
|
|
|
|
|
+ min-height: 60px;
|
|
|
|
|
+ padding: 10px 14px;
|
|
|
|
|
+ background: var(--el-fill-color-extra-light);
|
|
|
|
|
+ border-bottom: 1px solid var(--el-border-color-lighter);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.plan-toolbar__title {
|
|
|
|
|
+ font-size: 14px;
|
|
|
|
|
+ font-weight: 600;
|
|
|
|
|
+ line-height: 22px;
|
|
|
|
|
+ color: var(--el-text-color-primary);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.plan-toolbar__subtitle {
|
|
|
|
|
+ margin-top: 1px;
|
|
|
|
|
+ font-size: 12px;
|
|
|
|
|
+ line-height: 18px;
|
|
|
|
|
+ color: var(--el-text-color-secondary);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.plan-toolbar__actions {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ gap: 12px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.plan-count {
|
|
|
|
|
+ font-size: 12px;
|
|
|
|
|
+ color: var(--el-text-color-secondary);
|
|
|
|
|
+ white-space: nowrap;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.plan-table {
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.plan-table :deep(.el-table__cell) {
|
|
|
|
|
+ padding: 8px 0;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.plan-number-input {
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.plan-dialog-footer {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: space-between;
|
|
|
|
|
+ gap: 16px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.plan-dialog-footer > span {
|
|
|
|
|
+ font-size: 12px;
|
|
|
|
|
+ color: var(--el-text-color-secondary);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.plan-dialog-footer :deep(.el-button) {
|
|
|
|
|
+ margin-left: 8px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
.required-mark {
|
|
.required-mark {
|
|
|
margin-right: 2px;
|
|
margin-right: 2px;
|
|
|
color: var(--el-color-danger);
|
|
color: var(--el-color-danger);
|
|
@@ -779,6 +942,24 @@ onMounted(async () => {
|
|
|
width: 100%;
|
|
width: 100%;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ .plan-dialog .plan-dialog-title p,
|
|
|
|
|
+ .plan-dialog .plan-toolbar__subtitle,
|
|
|
|
|
+ .plan-dialog .plan-dialog-footer > span {
|
|
|
|
|
+ display: none;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .plan-dialog .plan-toolbar {
|
|
|
|
|
+ align-items: flex-start;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .plan-dialog .plan-toolbar__actions {
|
|
|
|
|
+ gap: 8px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .plan-dialog .plan-dialog-footer {
|
|
|
|
|
+ justify-content: flex-end;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
.query-row {
|
|
.query-row {
|
|
|
grid-template-columns: minmax(0, 1fr);
|
|
grid-template-columns: minmax(0, 1fr);
|
|
|
}
|
|
}
|