gaoluyang
2026-02-27 b9e53d7500e3497f8659fc373e6c707071b6dfb7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
<template>
  <FormDialog
    v-model="visible"
    title="定时任务审批"
    width="800px"
    @confirm="handleSubmit"
    @cancel="handleClose"
    @close="handleClose"
  >
    <el-descriptions :column="2" border>
      <el-descriptions-item label="任务名称">
        {{ detail.taskName || "-" }}
      </el-descriptions-item>
      <el-descriptions-item label="规格型号">
        {{ detail.deviceModel || "-" }}
      </el-descriptions-item>
      <el-descriptions-item label="频次">
        {{ frequencyText(detail.frequencyType) }}
      </el-descriptions-item>
      <el-descriptions-item label="开始日期与时间">
        {{ detail.frequencyDetail || "-" }}
      </el-descriptions-item>
      <el-descriptions-item label="登记人">
        {{ detail.registrant || "-" }}
      </el-descriptions-item>
      <el-descriptions-item label="登记日期">
        {{ detail.registrationDate || "-" }}
      </el-descriptions-item>
      <el-descriptions-item label="当前状态">
        {{ statusText(detail.status) }}
      </el-descriptions-item>
      <el-descriptions-item label="备注" :span="2">
        {{ detail.remarks || "-" }}
      </el-descriptions-item>
    </el-descriptions>
    <div style="margin-top: 16px">
      <el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
        <el-form-item label="审批结果" prop="decision">
          <el-radio-group v-model="form.decision">
            <el-radio label="审核通过">审核通过</el-radio>
            <el-radio label="审核不通过">审核不通过</el-radio>
          </el-radio-group>
        </el-form-item>
      </el-form>
    </div>
  </FormDialog>
</template>
 
<script setup>
import { nextTick, ref } from "vue";
import { ElMessage, ElMessageBox } from "element-plus";
import FormDialog from "@/components/Dialog/FormDialog.vue";
import { deviceMaintenanceTaskEdit } from "@/api/equipmentManagement/upkeep";
 
defineOptions({
  name: "定时任务审批弹窗",
});
 
const emits = defineEmits(["ok"]);
 
const visible = ref(false);
const loading = ref(false);
const detail = ref({});
const formRef = ref();
const form = ref({
  decision: undefined, // 审核通过 / 审核不通过
});
 
const rules = {
  decision: [{ required: true, message: "请选择审批结果", trigger: "change" }],
};
 
const statusText = (status) => status || "-";
 
const frequencyText = (type) => {
  const map = {
    DAILY: "每日",
    WEEKLY: "每周",
    MONTHLY: "每月",
    QUARTERLY: "季度",
  };
  return map[type] ?? "-";
};
 
const open = async (row) => {
  detail.value = { ...(row || {}) };
  visible.value = true;
  await nextTick();
  form.value.decision = undefined;
};
 
const handleClose = () => {
  visible.value = false;
  detail.value = {};
  form.value.decision = undefined;
};
 
const updateStatus = async (status) => {
  loading.value = true;
  try {
    const payload = { ...(detail.value || {}), status };
    const { code } = await deviceMaintenanceTaskEdit(payload);
    if (code === 200) {
      ElMessage.success("审批成功");
      emits("ok");
      handleClose();
    }
  } finally {
    loading.value = false;
  }
};
 
const handleSubmit = async () => {
  if (detail.value?.status === "审核通过") {
    ElMessage.warning("审核通过后不可再次审批");
    return;
  }
  await formRef.value?.validate(async (valid) => {
    if (!valid) return;
    const isApprove = form.value.decision === "审核通过";
    ElMessageBox.confirm(
      `确认审批${isApprove ? "通过" : "不通过"}?`,
      "提示",
      {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      }
    ).then(() => updateStatus(form.value.decision));
  });
};
 
defineExpose({ open });
</script>
 
<style scoped></style>