|
|
@@ -2,7 +2,11 @@
|
|
|
<ContentWrap v-loading="formLoading">
|
|
|
<!-- 第一部分:日报标题 -->
|
|
|
<div class="daily-report-title">
|
|
|
- <h2>{{ dailyReportTitle }}</h2>
|
|
|
+ <h2>{{ isApprovalMode ? dailyReportApprovalTitle : dailyReportTitle }}</h2>
|
|
|
+ <!-- 在审批模式下显示审批状态提示 -->
|
|
|
+ <div v-if="isApprovalMode" class="approval-notice">
|
|
|
+ <el-alert title="审批模式:所有字段均为只读" type="info" :closable="false" />
|
|
|
+ </div>
|
|
|
</div>
|
|
|
|
|
|
<!-- 第二部分:项目/任务信息 -->
|
|
|
@@ -116,10 +120,11 @@
|
|
|
<el-form
|
|
|
ref="formRef"
|
|
|
:model="formData"
|
|
|
- :rules="formRules"
|
|
|
+ :rules="isApprovalMode ? {} : formRules"
|
|
|
v-loading="formLoading"
|
|
|
style="margin-top: 1em"
|
|
|
label-width="200px"
|
|
|
+ :disabled="isApprovalMode"
|
|
|
>
|
|
|
<!-- 第一行:时间节点、施工状态 -->
|
|
|
<el-row :gutter="30">
|
|
|
@@ -133,12 +138,13 @@
|
|
|
end-placeholder="结束时间"
|
|
|
placeholder="选择时间范围"
|
|
|
style="width: 100%"
|
|
|
+ :readonly="isApprovalMode"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
<el-form-item label="施工状态" prop="rdStatus">
|
|
|
- <el-select v-model="formData.rdStatus" placeholder="请选择施工状态" style="width: 100%">
|
|
|
+ <el-select v-model="formData.rdStatus" placeholder="请选择施工状态" style="width: 100%" :disabled="isApprovalMode">
|
|
|
<el-option
|
|
|
v-for="dict in rdStatusOptions"
|
|
|
:key="dict.value"
|
|
|
@@ -154,7 +160,8 @@
|
|
|
<el-row>
|
|
|
<el-col :span="24">
|
|
|
<el-form-item label="施工工艺" prop="techniqueIds">
|
|
|
- <el-select v-model="formData.techniqueIds" placeholder="请选择施工工艺" style="width: 100%" multiple>
|
|
|
+ <el-select v-model="formData.techniqueIds" placeholder="请选择施工工艺"
|
|
|
+ style="width: 100%" multiple :disabled="isApprovalMode">
|
|
|
<el-option
|
|
|
v-for="dict in techniqueOptions"
|
|
|
:key="dict.value"
|
|
|
@@ -176,13 +183,14 @@
|
|
|
<el-form-item
|
|
|
:label="attr.name + (attr.unit ? `(${attr.unit})` : '')"
|
|
|
:prop="'dynamicFields.' + attr.identifier"
|
|
|
- :rules="getDynamicAttrRules(attr)"
|
|
|
+ :rules="isApprovalMode ? [] : getDynamicAttrRules(attr)"
|
|
|
>
|
|
|
<!-- 文本类型 -->
|
|
|
<el-input
|
|
|
v-if="attr.dataType === 'text'"
|
|
|
v-model="formData.dynamicFields[attr.identifier]"
|
|
|
:placeholder="`请输入${attr.name}`"
|
|
|
+ :readonly="isApprovalMode"
|
|
|
/>
|
|
|
|
|
|
<!-- 文本域类型 -->
|
|
|
@@ -192,6 +200,7 @@
|
|
|
:placeholder="`请输入${attr.name}`"
|
|
|
type="textarea"
|
|
|
:rows="3"
|
|
|
+ :readonly="isApprovalMode"
|
|
|
/>
|
|
|
|
|
|
<!-- 数字类型 -->
|
|
|
@@ -202,6 +211,7 @@
|
|
|
type="number"
|
|
|
:min="attr.minValue || undefined"
|
|
|
:max="attr.maxValue || undefined"
|
|
|
+ :readonly="isApprovalMode"
|
|
|
/>
|
|
|
|
|
|
<!-- 日期类型 -->
|
|
|
@@ -212,6 +222,7 @@
|
|
|
value-format="x"
|
|
|
:placeholder="`选择${attr.name}`"
|
|
|
style="width: 100%"
|
|
|
+ :readonly="isApprovalMode"
|
|
|
/>
|
|
|
|
|
|
<!-- 默认文本输入 -->
|
|
|
@@ -219,6 +230,7 @@
|
|
|
v-else
|
|
|
v-model="formData.dynamicFields[attr.identifier]"
|
|
|
:placeholder="`请输入${attr.name}`"
|
|
|
+ :readonly="isApprovalMode"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
@@ -233,6 +245,7 @@
|
|
|
type="textarea"
|
|
|
:rows="3"
|
|
|
placeholder="请输入当日生产动态"
|
|
|
+ :readonly="isApprovalMode"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
@@ -247,6 +260,7 @@
|
|
|
type="textarea"
|
|
|
:rows="3"
|
|
|
placeholder="请输入下步工作计划"
|
|
|
+ :readonly="isApprovalMode"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
@@ -261,6 +275,32 @@
|
|
|
type="textarea"
|
|
|
:rows="3"
|
|
|
placeholder="请输入外租设备信息"
|
|
|
+ :readonly="isApprovalMode"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-form>
|
|
|
+ </ContentWrap>
|
|
|
+
|
|
|
+ <!-- 第四部分:审批意见 - 只在审批模式下显示 -->
|
|
|
+ <ContentWrap class="section-padding" v-if="isApprovalMode">
|
|
|
+ <el-form
|
|
|
+ ref="approvalFormRef"
|
|
|
+ :model="approvalForm"
|
|
|
+ style="margin-top: 1em"
|
|
|
+ label-width="200px"
|
|
|
+ >
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-form-item label="审批意见" prop="opinion">
|
|
|
+ <el-input
|
|
|
+ v-model="approvalForm.opinion"
|
|
|
+ type="textarea"
|
|
|
+ :rows="4"
|
|
|
+ placeholder="请输入审批意见"
|
|
|
+ maxlength="500"
|
|
|
+ show-word-limit
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
@@ -269,7 +309,7 @@
|
|
|
</ContentWrap>
|
|
|
|
|
|
<!-- 操作按钮 -->
|
|
|
- <ContentWrap class="section-padding">
|
|
|
+ <ContentWrap class="section-padding" v-if="!isApprovalMode">
|
|
|
<el-form>
|
|
|
<el-form-item style="float: right">
|
|
|
<el-button @click="submitForm" type="primary" :disabled="formLoading">
|
|
|
@@ -279,6 +319,22 @@
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
</ContentWrap>
|
|
|
+
|
|
|
+ <!-- 审批模式下的操作按钮 -->
|
|
|
+ <ContentWrap class="section-padding" v-if="isApprovalMode">
|
|
|
+ <el-form>
|
|
|
+ <el-form-item style="float: right">
|
|
|
+ <el-button @click="handleApprove('pass')" type="success">
|
|
|
+ 审批通过
|
|
|
+ </el-button>
|
|
|
+ <el-button @click="handleApprove('reject')" type="danger">
|
|
|
+ 审批驳回
|
|
|
+ </el-button>
|
|
|
+ <el-button @click="close">{{ t('common.close') }}</el-button>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ </ContentWrap>
|
|
|
+
|
|
|
</ContentWrap>
|
|
|
</template>
|
|
|
|
|
|
@@ -315,6 +371,20 @@ const dailyReportData = ref<any>({})
|
|
|
// 动态属性相关变量
|
|
|
const dynamicAttrs = ref<any[]>([]) // 存储动态属性列表
|
|
|
|
|
|
+// 添加审批表单相关变量
|
|
|
+const approvalFormRef = ref()
|
|
|
+const approvalForm = reactive({
|
|
|
+ opinion: '' // 审批意见
|
|
|
+})
|
|
|
+
|
|
|
+// 审批表单验证规则(可选,根据需求添加)
|
|
|
+const approvalFormRules = reactive({
|
|
|
+ opinion: [
|
|
|
+ { required: false, message: '请输入审批意见', trigger: 'blur' },
|
|
|
+ { min: 0, max: 500, message: '审批意见长度不能超过500个字符', trigger: 'blur' }
|
|
|
+ ]
|
|
|
+})
|
|
|
+
|
|
|
// 表单数据
|
|
|
const formData = ref({
|
|
|
id: undefined,
|
|
|
@@ -356,6 +426,9 @@ const queryParams = reactive({
|
|
|
techniqueIds: [],
|
|
|
})
|
|
|
|
|
|
+// 添加审批模式判断
|
|
|
+const isApprovalMode = computed(() => params.mode === 'approval')
|
|
|
+
|
|
|
// 下拉选项
|
|
|
const rdStatusOptions = getStrDictOptions(DICT_TYPE.PMS_PROJECT_RD_STATUS) // 施工状态
|
|
|
const techniqueOptions = getStrDictOptions(DICT_TYPE.PMS_PROJECT_RD_TECHNOLOGY) // 瑞都施工工艺
|
|
|
@@ -369,6 +442,15 @@ const dailyReportTitle = computed(() => {
|
|
|
return `${dailyReportData.value.wellName} - ${dateStr} 生产日报`
|
|
|
})
|
|
|
|
|
|
+// 日报审批:日报标题
|
|
|
+const dailyReportApprovalTitle = computed(() => {
|
|
|
+ if (!dailyReportData.value.wellName || !dailyReportData.value.constructionStartDate) {
|
|
|
+ return '日报审批'
|
|
|
+ }
|
|
|
+ const dateStr = formatDate(dailyReportData.value.constructionStartDate)
|
|
|
+ return `${dailyReportData.value.wellName} - ${dateStr} 日报审批`
|
|
|
+})
|
|
|
+
|
|
|
// 计算属性:施工周期
|
|
|
const constructionPeriod = computed(() => {
|
|
|
const start = dailyReportData.value.constructionStartDate
|
|
|
@@ -654,6 +736,53 @@ onMounted(async () => {
|
|
|
formLoading.value = false
|
|
|
}
|
|
|
})
|
|
|
+
|
|
|
+/** 审批操作 */
|
|
|
+const handleApprove = async (action: 'pass' | 'reject') => {
|
|
|
+ try {
|
|
|
+ // 验证审批表单(如果需要)
|
|
|
+ // await approvalFormRef.value.validate()
|
|
|
+
|
|
|
+ formLoading.value = true
|
|
|
+
|
|
|
+ // 处理时间范围数据
|
|
|
+ if (formData.value.timeRange && formData.value.timeRange.length === 2) {
|
|
|
+ // 将时间范围转换为 LocalTime 格式的字符串
|
|
|
+ const startDate = dayjs(formData.value.timeRange[0])
|
|
|
+ const endDate = dayjs(formData.value.timeRange[1])
|
|
|
+
|
|
|
+ // 格式化为 HH:mm:ss 字符串,后端会自动转换为 LocalTime
|
|
|
+ formData.value.startTime = startDate.format('HH:mm:ss')
|
|
|
+ formData.value.endTime = endDate.format('HH:mm:ss')
|
|
|
+ }
|
|
|
+
|
|
|
+ // 构建审批数据,包含审批意见
|
|
|
+ const approveData = {
|
|
|
+ ...formData.value,
|
|
|
+ id: Number(id),
|
|
|
+ opinion: approvalForm.opinion,
|
|
|
+ auditStatus: action === 'pass' ? 20 : 30
|
|
|
+ }
|
|
|
+
|
|
|
+ // 这里可以调用审批API
|
|
|
+ if (action === 'pass') {
|
|
|
+ // 审批通过逻辑
|
|
|
+ await IotRdDailyReportApi.approveRdDailyReport(approveData)
|
|
|
+ message.success('审批通过')
|
|
|
+ } else {
|
|
|
+ // 审批驳回逻辑
|
|
|
+ await IotRdDailyReportApi.approveRdDailyReport(approveData)
|
|
|
+ message.success('审批驳回')
|
|
|
+ }
|
|
|
+ close()
|
|
|
+ } catch (error) {
|
|
|
+ console.error('审批操作失败:', error)
|
|
|
+ message.error('审批操作失败')
|
|
|
+ } finally {
|
|
|
+ formLoading.value = false
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
</script>
|
|
|
|
|
|
<style scoped>
|
|
|
@@ -812,4 +941,51 @@ onMounted(async () => {
|
|
|
/* 保证换行后文本正常显示(可选,清除可能的 nowrap 影响) */
|
|
|
white-space: normal;
|
|
|
}
|
|
|
+
|
|
|
+/* 添加审批模式下的样式 */
|
|
|
+.approval-notice {
|
|
|
+ margin-top: 10px;
|
|
|
+}
|
|
|
+
|
|
|
+/* 审批模式下表单字段的只读样式 */
|
|
|
+:deep(.el-form-item.is-disabled .el-input__inner),
|
|
|
+:deep(.el-form-item.is-disabled .el-textarea__inner) {
|
|
|
+ background-color: #f5f7fa;
|
|
|
+ border-color: #e4e7ed;
|
|
|
+ color: #c0c4cc;
|
|
|
+ cursor: not-allowed;
|
|
|
+}
|
|
|
+
|
|
|
+:deep(.el-form-item.is-disabled .el-select .el-input__inner) {
|
|
|
+ background-color: #f5f7fa;
|
|
|
+ border-color: #e4e7ed;
|
|
|
+ color: #c0c4cc;
|
|
|
+ cursor: not-allowed;
|
|
|
+}
|
|
|
+
|
|
|
+:deep(.el-form-item.is-disabled .el-date-editor .el-input__inner) {
|
|
|
+ background-color: #f5f7fa;
|
|
|
+ border-color: #e4e7ed;
|
|
|
+ color: #c0c4cc;
|
|
|
+ cursor: not-allowed;
|
|
|
+}
|
|
|
+
|
|
|
+/* 添加审批意见区域的样式 */
|
|
|
+.approval-opinion-section {
|
|
|
+ margin-top: 20px;
|
|
|
+ border-top: 2px solid #f0f0f0;
|
|
|
+ padding-top: 20px;
|
|
|
+}
|
|
|
+
|
|
|
+/* 审批意见文本域样式 */
|
|
|
+:deep(.approval-opinion .el-textarea__inner) {
|
|
|
+ min-height: 100px;
|
|
|
+ resize: vertical;
|
|
|
+}
|
|
|
+
|
|
|
+/* 审批意见标签样式 */
|
|
|
+:deep(.approval-opinion .el-form-item__label) {
|
|
|
+ font-weight: bold;
|
|
|
+ color: #606266;
|
|
|
+}
|
|
|
</style>
|