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
<template>
  <FormDialog
    v-model="visible"
    title="报修审批"
    width="800px"
    @confirm="handleSubmit"
    @cancel="handleClose"
    @close="handleClose"
  >
    <el-descriptions :column="2" border>
      <el-descriptions-item label="设备名称">
        {{ detail.deviceName || "-" }}
      </el-descriptions-item>
      <el-descriptions-item label="规格型号">
        {{ detail.deviceModel || "-" }}
      </el-descriptions-item>
      <el-descriptions-item label="报修日期">
        {{ detail.repairTime || "-" }}
      </el-descriptions-item>
      <el-descriptions-item label="报修人">
        {{ detail.repairName || "-" }}
      </el-descriptions-item>
      <el-descriptions-item label="审批人">
        {{ detail.auditName || "-" }}
      </el-descriptions-item>
      <el-descriptions-item label="当前状态">
        {{ statusText(detail.status) }}
      </el-descriptions-item>
      <el-descriptions-item label="故障现象" :span="2">
        {{ detail.remark || "-" }}
      </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 :value="0">通过</el-radio>
            <el-radio :value="3">不通过</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 { editRepair, getRepairById } from "@/api/equipmentManagement/repair";
 
defineOptions({
  name: "报修审批弹窗",
});
 
const emits = defineEmits(["ok"]);
 
const visible = ref(false);
const loading = ref(false);
const id = ref();
const detail = ref({});
const formRef = ref();
const form = ref({
  decision: undefined, // 0 通过 3 不通过
});
 
const rules = {
  decision: [{ required: true, message: "请选择审批结果", trigger: "change" }],
};
 
const statusText = (status) => {
  const map = {
    0: "待维修",
    1: "完结",
    2: "待审核",
    3: "审核不通过",
  };
  return map[status] ?? "-";
};
 
const loadDetail = async (repairId) => {
  const { data } = await getRepairById(repairId);
  detail.value = data ?? {};
};
 
const open = async (repairId) => {
  id.value = repairId;
  visible.value = true;
  await nextTick();
  await loadDetail(repairId);
  form.value.decision = undefined;
};
 
const handleClose = () => {
  visible.value = false;
  id.value = undefined;
  detail.value = {};
  form.value.decision = undefined;
};
 
const updateStatus = async (status) => {
  loading.value = true;
  try {
    const { code } = await editRepair({ id: id.value, status });
    if (code === 200) {
      ElMessage.success("审批成功");
      emits("ok");
      handleClose();
    }
  } finally {
    loading.value = false;
  }
};
 
const handleSubmit = async () => {
  if (detail.value?.status !== 2) {
    ElMessage.warning("仅待审核状态可审批");
    return;
  }
  await formRef.value?.validate(async (valid) => {
    if (!valid) return;
    const isApprove = form.value.decision === 0;
    ElMessageBox.confirm(`确认审批${isApprove ? "通过" : "不通过"}?`, "提示", {
      confirmButtonText: "确定",
      cancelButtonText: "取消",
      type: "warning",
    }).then(() => updateStatus(form.value.decision));
  });
};
 
defineExpose({ open });
</script>
 
<style scoped></style>