gaoluyang
14 小时以前 1f17fe5e687b4dadef305d25b1e97ce8cd1afc8a
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
137
138
139
140
141
<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-item label="监督人" prop="supervisoryName">
          <el-input v-model="form.supervisoryName" placeholder="请输入监督人" clearable style="width: 100%" />
        </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 不通过
  supervisoryName: undefined, // 监督人
});
 
const rules = {
  decision: [{ required: true, message: "请选择审批结果", trigger: "change" }],
  supervisoryName: [{ 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;
  form.value.supervisoryName = undefined;
};
 
const handleClose = () => {
  visible.value = false;
  id.value = undefined;
  detail.value = {};
  form.value.decision = undefined;
  form.value.supervisoryName = undefined;
};
 
const updateStatus = async (status) => {
  loading.value = true;
  try {
    const { code } = await editRepair({ id: id.value, status, supervisoryName: form.value.supervisoryName });
    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>