周宾
2025-12-08 4da40604690325917d208e386e3add022f181147
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
<template>
  <el-dialog v-model="visible" :title="modalOptions.title" direction="ltr">
    <el-form :model="form" :rules="rules" label-width="110px" ref="formRef">
      <el-form-item label="实际保养人" prop="maintenanceActuallyName">
        <el-input
          v-model="form.maintenanceActuallyName"
          placeholder="请输入实际保养人"
        ></el-input>
      </el-form-item>
      <el-form-item label="实际保养日期" prop="maintenanceActuallyTime">
        <el-date-picker
          v-model="form.maintenanceActuallyTime"
          placeholder="请选择实际保养日期"
          format="YYYY-MM-DD HH:mm:ss"
          value-format="YYYY-MM-DD HH:mm:ss"
          type="datetime"
          clearable
          style="width: 100%"
        />
      </el-form-item>
      <el-form-item label="保养结果" prop="maintenanceResult">
        <el-select v-model="form.maintenanceResult" placeholder="请选择保养结果">
          <el-option label="完好" :value="1"></el-option>
          <el-option label="维修" :value="0"></el-option>
        </el-select>
      </el-form-item>
            <el-form-item label="本次保养金额" prop="maintenancePrice">
                <el-input-number v-model="form.maintenancePrice" :min="0" :precision="2" style="width: 100%" />
            </el-form-item>
    </el-form>
    <template #footer>
            <el-button type="primary" @click="sendForm" :loading="loading">
                {{ modalOptions.confirmText }}
            </el-button>
      <el-button @click="closeModal">{{ modalOptions.cancelText }}</el-button>
    </template>
  </el-dialog>
</template>
 
<script setup>
import { ref, nextTick } from "vue";
import { useModal } from "@/hooks/useModal";
import useFormData from "@/hooks/useFormData";
import useUserStore from "@/store/modules/user";
import dayjs from "dayjs";
import { addMaintenance } from "@/api/equipmentManagement/upkeep";
 
defineOptions({
  name: "保养模态框",
});
 
const emits = defineEmits(["ok"]);
 
const {
  id,
  visible,
  loading,
  openModal,
  modalOptions,
  handleConfirm,
  closeModal,
} = useModal({ title: "设备保养" });
 
/**
 * @desc 保存保养
 */
const userStore = useUserStore();
const formRef = ref();
const { form, resetForm } = useFormData({
  maintenanceActuallyName: undefined, // 实际保养人
  maintenanceActuallyTime: undefined, // 实际保养日期
  maintenanceResult: undefined, // 保养结果
    maintenancePrice: undefined, // 保养金额
});
 
const rules = {
  maintenanceActuallyName: [
    { required: true, message: "请输入实际保养人", trigger: "blur" },
  ],
  maintenanceActuallyTime: [
    { required: true, message: "请选择实际保养日期", trigger: "change" },
  ],
  maintenanceResult: [
    { required: true, message: "请选择保养结果", trigger: "change" },
  ],
    maintenancePrice: [
    { required: true, message: "请输入本次保养金额", trigger: "change" },
  ],
};
 
const sendForm = async () => {
  await formRef.value.validate(async (valid) => {
    if (!valid) return;
    const { code } = await addMaintenance({ id: id.value, ...form });
    if (code == 200) {
      emits("ok");
      resetForm();
      closeModal();
    }
  });
};
 
const open = async (id, row) => {
  openModal(id);
  await nextTick();
  if (!row) {
    resetForm();
    form.maintenanceActuallyName = userStore.nickName;
    return;
  }
  form.maintenanceActuallyName = row.maintenanceActuallyName ?? userStore.nickName;
  form.maintenanceActuallyTime = row.maintenanceActuallyTime
    ? dayjs(row.maintenanceActuallyTime).format("YYYY-MM-DD HH:mm:ss")
    : undefined;
  form.maintenanceResult = row.maintenanceResult;
  form.maintenancePrice = row.maintenancePrice;
};
defineExpose({
  open,
});
</script>
 
<style lang="scss" scoped></style>