1.设备台帐二维码上加上设备名称
2.设备保养和保修加上每次的保养保修金额
3.加一个汇总页面,可以看到每个设备的每个月的金额,也可以选择看每年的金额
已添加1个文件
已修改10个文件
已删除4个文件
929 ■■■■ 文件已修改
src/api/system/post.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/filePreview/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/amountSummary/index.vue 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/ledger/index.vue 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/repair/Form/MaintainForm.vue 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/repair/Form/RepairForm.vue 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/repair/Modal/MaintainModal.vue 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/repair/Modal/RepairModal.vue 130 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/repair/index.vue 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/upkeep/Form/MaintenanceForm.vue 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/upkeep/Form/PlanForm.vue 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/upkeep/Modal/MaintenanceModal.vue 91 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/upkeep/Modal/PlanModal.vue 123 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/upkeep/index.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/lavorissue/ledger/index.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/system/post.js
@@ -8,6 +8,14 @@
    params: query
  })
}
// æŸ¥è¯¢å²—位列表全部
export function listPostAll(query) {
  return request({
    url: '/system/post/listAll',
    method: 'get',
    params: query
  })
}
// æŸ¥è¯¢å²—位详细
export function getPost(postId) {
src/components/filePreview/index.vue
@@ -88,7 +88,6 @@
});
const isPdf = computed(() => {
  console.log(fileUrl.value)
  return /\.pdf$/i.test(fileUrl.value);
});
src/views/equipmentManagement/amountSummary/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,82 @@
<template>
  <div class="app-container">
    <el-form :inline="true" :model="filters">
      <el-form-item label="查看模式">
        <el-radio-group v-model="mode" @change="buildColumns">
          <el-radio-button :value="'month'">按月</el-radio-button>
          <el-radio-button :value="'year'">按年</el-radio-button>
        </el-radio-group>
      </el-form-item>
      <el-form-item v-if="mode === 'month' || mode === 'year'" label="年份">
        <el-date-picker v-model="year" type="year" value-format="YYYY" format="YYYY" placeholder="请选择年份" @change="refresh" />
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="refresh">查询</el-button>
        <el-button @click="reset">重置</el-button>
      </el-form-item>
    </el-form>
    <div class="table_list">
      <PIMTable
        rowKey="deviceId"
        :column="columns"
        :tableData="tableData"
        :page="{ current: 1, size: tableData.length || 10, total: tableData.length }"
      />
    </div>
  </div>
</template>
<script setup>
import { ref, computed } from "vue";
defineOptions({ name: "金额汇总" });
const mode = ref("month");
const year = ref(new Date().getFullYear().toString());
const filters = ref({});
const columns = ref([]);
const tableData = ref([]);
const buildColumns = () => {
  const base = [{ label: "设备名称", align: "center", prop: "deviceName", width: 180 }];
  if (mode.value === "month") {
    const monthCols = Array.from({ length: 12 }, (_, i) => ({
      label: `${i + 1}月`,
      align: "center",
      prop: `m${i + 1}`,
    }));
    columns.value = [
      ...base,
      ...monthCols,
      { label: "总计", align: "center", prop: "total" },
    ];
  } else {
    columns.value = [
      ...base,
      { label: "金额", align: "center", prop: "yearAmount" },
    ];
  }
};
const refresh = async () => {
  buildColumns();
  tableData.value = [];
};
const reset = () => {
  mode.value = "month";
  year.value = new Date().getFullYear().toString();
  refresh();
};
buildColumns();
refresh();
</script>
<style scoped>
.table_list {
  margin-top: 10px;
}
</style>
src/views/equipmentManagement/ledger/index.vue
@@ -85,6 +85,7 @@
    <el-dialog v-model="qrDialogVisible" title="二维码" width="300px">
      <div style="text-align:center;">
        <img :src="qrCodeUrl" alt="二维码" style="width:200px;height:200px;" />
        <div style="margin-top:6px;font-size:14px;color:#333;">{{ qrRowData?.deviceName }}</div>
        <div style="margin:10px 0;">
          <el-button type="primary" @click="downloadQRCode">下载二维码图片</el-button>
        </div>
@@ -299,10 +300,44 @@
};
const downloadQRCode = () => {
  const a = document.createElement("a");
  a.href = qrCodeUrl.value;
  a.download = `${qrRowData.value.deviceName || "二维码"}.png`;
  a.click();
  const name = qrRowData.value?.deviceName || "二维码";
  const img = new Image();
  img.src = qrCodeUrl.value;
  img.onload = () => {
    const padding = 10;
    const qrSize = 200;
    const textHeight = 24; // space for text
    const width = qrSize + padding * 2;
    const height = qrSize + padding * 2 + textHeight;
    const canvas = document.createElement("canvas");
    canvas.width = width;
    canvas.height = height;
    const ctx = canvas.getContext("2d");
    // background
    ctx.fillStyle = "#ffffff";
    ctx.fillRect(0, 0, width, height);
    // draw QR centered
    ctx.drawImage(img, padding, padding, qrSize, qrSize);
    // draw name centered below
    ctx.fillStyle = "#333";
    ctx.font = "14px Arial";
    ctx.textAlign = "center";
    ctx.textBaseline = "middle";
    const maxTextWidth = width - padding * 2;
    let displayName = name;
    // ellipsis if too long
    while (ctx.measureText(displayName).width > maxTextWidth && displayName.length > 0) {
      displayName = displayName.slice(0, -1);
    }
    if (displayName !== name) displayName = displayName + "…";
    ctx.fillText(displayName, width / 2, qrSize + padding + textHeight / 2);
    const dataUrl = canvas.toDataURL("image/png");
    const a = document.createElement("a");
    a.href = dataUrl;
    a.download = `${name}.png`;
    a.click();
  };
};
onMounted(() => {
src/views/equipmentManagement/repair/Form/MaintainForm.vue
ÎļþÒÑɾ³ý
src/views/equipmentManagement/repair/Form/RepairForm.vue
ÎļþÒÑɾ³ý
src/views/equipmentManagement/repair/Modal/MaintainModal.vue
@@ -1,6 +1,27 @@
<template>
  <el-dialog v-model="visible" :title="modalOptions.title" direction="ltr">
    <MaintainForm ref="maintainFormRef" />
    <el-form :model="form" :rules="rules" label-width="110px" ref="formRef">
      <el-form-item label="维修人" prop="maintenanceName">
        <el-input v-model="form.maintenanceName" placeholder="请输入维修人" />
      </el-form-item>
      <el-form-item label="维修结果" prop="maintenanceResult">
        <el-input v-model="form.maintenanceResult" placeholder="请输入维修结果" />
      </el-form-item>
      <el-form-item label="本次维修金额" prop="money">
        <el-input-number v-model="form.money" :min="0" :precision="2" style="width: 100%" />
      </el-form-item>
      <el-form-item label="维修日期" prop="maintenanceTime">
        <el-date-picker
          v-model="form.maintenanceTime"
          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>
    <template #footer>
            <el-button type="primary" @click="sendForm" :loading="loading">
                {{ modalOptions.confirmText }}
@@ -11,15 +32,17 @@
</template>
<script setup>
import { ref, nextTick } from "vue";
import { useModal } from "@/hooks/useModal";
import MaintainForm from "../Form/MaintainForm.vue";
import useFormData from "@/hooks/useFormData";
import useUserStore from "@/store/modules/user";
import dayjs from "dayjs";
import { addMaintain } from "@/api/equipmentManagement/repair";
defineOptions({
  name: "维修模态框",
});
const maintainFormRef = ref();
const emits = defineEmits(["ok"]);
const {
@@ -32,22 +55,49 @@
  closeModal,
} = useModal({ title: "设备维修" });
const userStore = useUserStore();
const formRef = ref();
const { form, resetForm } = useFormData({
  maintenanceName: undefined, // ç»´ä¿®åç§°
  maintenanceResult: undefined, // ç»´ä¿®ç»“æžœ
  maintenanceTime: undefined, // ç»´ä¿®æ—¥æœŸ
  money: undefined, // æœ¬æ¬¡ç»´ä¿®é‡‘额
});
const rules = {
  maintenanceName: [{ required: true, message: "请输入维修人", trigger: "blur" }],
  maintenanceResult: [{ required: true, message: "请输入维修结果", trigger: "blur" }],
  money: [{ required: true, message: "请输入本次维修金额", trigger: "change" }],
  maintenanceTime: [{ required: true, message: "请选择维修日期", trigger: "change" }],
};
const setForm = (data) => {
  form.maintenanceName = data.maintenanceName ?? userStore.nickName;
  form.maintenanceResult = data.maintenanceResult;
  form.money = data.money;
  form.maintenanceTime =
    dayjs(data.maintenanceTime).format("YYYY-MM-DD HH:mm:ss") ??
    dayjs().format("YYYY-MM-DD HH:mm:ss");
};
const sendForm = async () => {
  loading.value = true;
  const form = await maintainFormRef.value.getForm();
  const { code } = await addMaintain({ id: id.value, ...form });
  if (code == 200) {
    emits("ok");
    maintainFormRef.value.resetForm();
    closeModal();
  }
  loading.value = false;
  await formRef.value.validate(async (valid) => {
    if (!valid) return;
    loading.value = true;
    const { code } = await addMaintain({ id: id.value, ...form });
    if (code == 200) {
      emits("ok");
      resetForm();
      closeModal();
    }
    loading.value = false;
  });
};
const open = async (id, row) => {
  openModal(id);
  await nextTick();
  maintainFormRef.value.setForm(row);
  setForm(row);
};
defineExpose({
src/views/equipmentManagement/repair/Modal/RepairModal.vue
@@ -1,6 +1,49 @@
<template>
  <el-dialog v-model="visible" :title="modalOptions.title" @close="close">
    <RepairForm ref="repairFormRef" />
    <el-form :model="form" :rules="rules" ref="formRef" label-width="100px">
      <el-row>
        <el-col :span="12">
          <el-form-item label="设备名称" prop="deviceLedgerId">
            <el-select v-model="form.deviceLedgerId" @change="setDeviceModel">
              <el-option
                v-for="(item, index) in deviceOptions"
                :key="index"
                :label="item.deviceName"
                :value="item.id"
              ></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="规格型号">
            <el-input v-model="form.deviceModel" placeholder="请输入规格型号" disabled />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="报修日期" prop="repairTime">
            <el-date-picker
              v-model="form.repairTime"
              placeholder="请选择报修日期"
              format="YYYY-MM-DD"
              value-format="YYYY-MM-DD"
              type="date"
              clearable
              style="width: 100%"
            />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="报修人" prop="repairName">
            <el-input v-model="form.repairName" placeholder="请输入报修人" />
          </el-form-item>
        </el-col>
        <el-col :span="24">
          <el-form-item label="故障现象" prop="remark">
            <el-input v-model="form.remark" :rows="2" type="textarea" placeholder="请输入故障现象" />
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>
    <template #footer>
            <el-button type="primary" @click="sendForm" :loading="loading">
                {{ modalOptions.confirmText }}
@@ -8,16 +51,20 @@
      <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 RepairForm from "../Form/RepairForm.vue";
import useFormData from "@/hooks/useFormData";
import useUserStore from "@/store/modules/user";
import {
  addRepair,
  editRepair,
  getRepairById,
} from "@/api/equipmentManagement/repair";
import { getDeviceLedger } from "@/api/equipmentManagement/ledger";
import { ElMessage } from "element-plus";
defineOptions({
@@ -25,8 +72,6 @@
});
const emits = defineEmits(["ok"]);
const repairFormRef = ref();
const {
  id,
  visible,
@@ -37,36 +82,77 @@
  closeModal,
} = useModal({ title: "设备报修" });
const userStore = useUserStore();
const deviceOptions = ref([]);
const formRef = ref();
const { form, resetForm } = useFormData({
  deviceLedgerId: undefined, // è®¾å¤‡Id
  deviceName: undefined, // è®¾å¤‡åç§°
  deviceModel: undefined, // è§„格型号
  repairTime: undefined, // æŠ¥ä¿®æ—¥æœŸ
  repairName: userStore.nickName, // æŠ¥ä¿®äºº
  remark: undefined, // æ•…障现象
});
const rules = {
  deviceLedgerId: [{ required: true, message: "请选择设备名称", trigger: "change" }],
  repairTime: [{ required: true, message: "请选择报修日期", trigger: "change" }],
  repairName: [{ required: true, message: "请输入报修人", trigger: "blur" }],
  remark: [{ required: true, message: "请输入故障现象", trigger: "blur" }],
};
const loadDeviceName = async () => {
  const { data } = await getDeviceLedger();
  deviceOptions.value = data;
};
const setDeviceModel = (id) => {
  const option = deviceOptions.value.find((item) => item.id === id);
  form.deviceModel = option ? option.deviceModel : undefined;
};
const setForm = (data) => {
  form.deviceLedgerId = data.deviceLedgerId;
  form.deviceName = data.deviceName;
  form.deviceModel = data.deviceModel;
  form.repairTime = data.repairTime;
  form.repairName = data.repairName ?? userStore.nickName;
  form.remark = data.remark;
};
const sendForm = async () => {
  loading.value = true;
  const form = await repairFormRef.value.getForm();
  const { code } = id.value
    ? await editRepair({ id: unref(id), ...form })
    : await addRepair(form);
  if (code == 200) {
    ElMessage.success(`${id ? "编辑" : "新增"}报修成功`);
    closeModal();
    emits("ok");
  }
  loading.value = false;
  await formRef.value.validate(async (valid) => {
    if (!valid) return;
    loading.value = true;
    const payload = { ...form };
    const { code } = id.value
      ? await editRepair({ id: id.value, ...payload })
      : await addRepair(payload);
    if (code == 200) {
      ElMessage.success(`${id.value ? "编辑" : "新增"}报修成功`);
      closeModal();
      emits("ok");
    }
    loading.value = false;
  });
};
const openAdd = async () => {
  openModal();
  await nextTick();
  await repairFormRef.value.loadDeviceName();
  await loadDeviceName();
};
const openEdit = async (id) => {
  const { data } = await getRepairById(id);
  openModal(id);
const openEdit = async (editId) => {
  const { data } = await getRepairById(editId);
  openModal(editId);
  await nextTick();
  await repairFormRef.value.loadDeviceName();
  await repairFormRef.value.setForm(data);
  await loadDeviceName();
  setForm(data);
};
const close = () => {
  repairFormRef.value.resetForm();
  resetForm();
  closeModal();
};
src/views/equipmentManagement/repair/index.vue
@@ -7,7 +7,6 @@
            style="width: 240px"
            placeholder="请输入设备名称"
            clearable
            :prefix-icon="Search"
            @change="getTableData"
        />
      </el-form-item>
@@ -17,7 +16,6 @@
            style="width: 240px"
            placeholder="请选择规格型号"
            clearable
            :prefix-icon="Search"
            @change="getTableData"
        />
      </el-form-item>
@@ -27,7 +25,6 @@
            style="width: 240px"
            placeholder="请输入故障现象"
            clearable
            :prefix-icon="Search"
            @change="getTableData"
        />
      </el-form-item>
@@ -37,7 +34,6 @@
            style="width: 240px"
            placeholder="请输入维修人"
            clearable
            :prefix-icon="Search"
            @change="getTableData"
        />
      </el-form-item>
@@ -68,6 +64,9 @@
      <div class="actions">
        <el-text class="mx-1" size="large">设备报修</el-text>
        <div>
                    <el-button type="success" icon="Van" @click="addRepair">
                        æ–°å¢žæŠ¥ä¿®
                    </el-button>
          <el-button
            type="primary"
            icon="Plus"
@@ -75,9 +74,6 @@
            @click="addMaintain"
          >
            æ–°å¢žç»´ä¿®
          </el-button>
          <el-button type="success" icon="Van" @click="addRepair">
            æ–°å¢žæŠ¥ä¿®
          </el-button>
          <el-button @click="handleOut">
            å¯¼å‡º
@@ -112,16 +108,14 @@
        <template #operation="{ row }">
          <el-button
            type="primary"
            text
            icon="editPen"
            link
            @click="editRepair(row.id)"
          >
            ç¼–辑
          </el-button>
          <el-button
            type="danger"
            text
            icon="delete"
                        link
            @click="delRepairByIds(row.id)"
          >
            åˆ é™¤
@@ -231,7 +225,7 @@
      dataType: "slot",
      slot: "operation",
      align: "center",
      width: "200px",
      width: "150px",
    },
  ]
);
src/views/equipmentManagement/upkeep/Form/MaintenanceForm.vue
ÎļþÒÑɾ³ý
src/views/equipmentManagement/upkeep/Form/PlanForm.vue
ÎļþÒÑɾ³ý
src/views/equipmentManagement/upkeep/Modal/MaintenanceModal.vue
@@ -1,6 +1,33 @@
<template>
  <el-dialog v-model="visible" :title="modalOptions.title" direction="ltr">
    <MaintenanceForm ref="maintenanceFormRef" />
    <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="money">
                <el-input-number v-model="form.money" :min="0" :precision="2" style="width: 100%" />
            </el-form-item>
    </el-form>
    <template #footer>
            <el-button type="primary" @click="sendForm" :loading="loading">
                {{ modalOptions.confirmText }}
@@ -11,15 +38,17 @@
</template>
<script setup>
import MaintenanceForm from "../Form/MaintenanceForm.vue";
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 maintenanceFormRef = ref();
const emits = defineEmits(["ok"]);
const {
@@ -35,22 +64,58 @@
/**
 * @desc ä¿å­˜ä¿å…»
 */
const userStore = useUserStore();
const formRef = ref();
const { form, resetForm } = useFormData({
  maintenanceActuallyName: undefined, // å®žé™…保养人
  maintenanceActuallyTime: undefined, // å®žé™…保养日期
  maintenanceResult: undefined, // ä¿å…»ç»“æžœ
    money: undefined, // ä¿å…»é‡‘额
});
const rules = {
  maintenanceActuallyName: [
    { required: true, message: "请输入实际保养人", trigger: "blur" },
  ],
  maintenanceActuallyTime: [
    { required: true, message: "请选择实际保养日期", trigger: "change" },
  ],
  maintenanceResult: [
    { required: true, message: "请选择保养结果", trigger: "change" },
  ],
    money: [
    { required: true, message: "请输入本次保养金额", trigger: "change" },
  ],
};
const sendForm = async () => {
  loading.value = true;
  const form = await maintenanceFormRef.value.getForm();
  const { code } = await addMaintenance({ id: id.value, ...form });
  if (code == 200) {
    emits("ok");
    maintenanceFormRef.value.resetForm();
    closeModal();
  }
  loading.value = false;
  await formRef.value.validate(async (valid) => {
    if (!valid) return;
    loading.value = true;
    const { code } = await addMaintenance({ id: id.value, ...form });
    if (code == 200) {
      emits("ok");
      resetForm();
      closeModal();
    }
    loading.value = false;
  });
};
const open = async (id, row) => {
  openModal(id);
  await nextTick();
  maintenanceFormRef.value.setForm(row);
  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.money = row.money;
};
defineExpose({
  open,
src/views/equipmentManagement/upkeep/Modal/PlanModal.vue
@@ -5,7 +5,40 @@
    width="30%"
    @close="close"
  >
    <PlanForm ref="planFormRef"></PlanForm>
    <el-form :model="form" :rules="rules" ref="formRef" label-width="110px">
      <el-form-item label="设备名称" prop="deviceLedgerId">
        <el-select
          v-model="form.deviceLedgerId"
          @change="setDeviceModel"
          placeholder="请选择设备"
        >
          <el-option
            v-for="(item, index) in deviceOptions"
            :key="index"
            :label="item.deviceName"
            :value="item.id"
          ></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="规格型号">
        <el-input
          v-model="form.deviceModel"
          placeholder="请输入规格型号"
          disabled
        />
      </el-form-item>
      <el-form-item label="计划保养日期" prop="maintenancePlanTime">
        <el-date-picker
          style="width: 100%"
          v-model="form.maintenancePlanTime"
          format="YYYY-MM-DD"
          value-format="YYYY-MM-DD HH:mm:ss"
          type="date"
          placeholder="请选择计划保养日期日期"
          clearable
        />
      </el-form-item>
    </el-form>
    <template #footer>
            <el-button type="primary" @click="sendForm" :loading="loading">
                {{ modalOptions.confirmText }}
@@ -16,8 +49,11 @@
</template>
<script setup>
import { ref, nextTick, watch } from "vue";
import { useModal } from "@/hooks/useModal";
import PlanForm from "../Form/PlanForm";
import useFormData from "@/hooks/useFormData";
import { getDeviceLedger } from "@/api/equipmentManagement/ledger";
import dayjs from "dayjs";
import {
  addUpkeep,
  editUpkeep,
@@ -30,7 +66,6 @@
});
const emits = defineEmits(["ok"]);
const planFormRef = ref();
const {
  id,
  visible,
@@ -41,32 +76,82 @@
  closeModal,
} = useModal({ title: "设备保养计划" });
const openEdit = async (id) => {
  const { data } = await getUpkeepById(id);
  openModal(id);
const deviceOptions = ref([]);
const formRef = ref();
const { form, resetForm } = useFormData({
  deviceLedgerId: undefined, // è®¾å¤‡Id
  deviceName: undefined, // è®¾å¤‡åç§°
  deviceModel: undefined, // è§„格型号
  maintenancePlanTime: undefined, // è®¡åˆ’保养日期
});
const rules = {
  deviceLedgerId: [{ required: true, message: "请选择设备", trigger: "change" }],
  maintenancePlanTime: [
    { required: true, message: "请选择计划保养日期", trigger: "change" },
  ],
};
const loadDeviceName = async () => {
  const { data } = await getDeviceLedger();
  deviceOptions.value = data;
};
const setDeviceModel = (id) => {
  const option = deviceOptions.value.find((item) => item.id === id);
  form.deviceModel = option ? option.deviceModel : undefined;
};
const setForm = (data) => {
  form.deviceLedgerId = data.deviceLedgerId;
  form.deviceName = data.deviceName;
  form.deviceModel = data.deviceModel;
  form.maintenancePlanTime = dayjs(data.maintenancePlanTime).format(
    "YYYY-MM-DD HH:mm:ss"
  );
};
const openEdit = async (editId) => {
  const { data } = await getUpkeepById(editId);
  openModal(editId);
  await nextTick();
  await planFormRef.value.setForm(data);
  await loadDeviceName();
  setForm(data);
};
const sendForm = async () => {
  loading.value = true;
  const form = await planFormRef.value.getForm();
  const { code } = id.value
    ? await editUpkeep({ id: unref(id), ...form })
    : await addUpkeep(form);
  if (code == 200) {
    ElMessage.success(`${id ? "编辑" : "新增"}计划成功`);
    closeModal();
    emits("ok");
  }
  loading.value = false;
  await formRef.value.validate(async (valid) => {
    if (!valid) return;
    loading.value = true;
    const payload = { ...form };
    const { code } = id.value
      ? await editUpkeep({ id: id.value, ...payload })
      : await addUpkeep(payload);
    if (code == 200) {
      ElMessage.success(`${id.value ? "编辑" : "新增"}计划成功`);
      closeModal();
      emits("ok");
    }
    loading.value = false;
  });
};
const close = () => {
  planFormRef.value.resetForm();
  resetForm();
  closeModal();
};
// load device options whenever the dialog opens (covers add and edit)
watch(
  () => visible.value,
  async (val) => {
    if (val) {
      await nextTick();
      await loadDeviceName();
    }
  }
);
defineExpose({
  openModal,
  openEdit,
src/views/equipmentManagement/upkeep/index.vue
@@ -7,7 +7,6 @@
            style="width: 240px"
            placeholder="请输入设备名称"
            clearable
            :prefix-icon="Search"
            @change="getTableData"
        />
      </el-form-item>
@@ -35,7 +34,6 @@
            style="width: 240px"
            placeholder="请输入实际保养人"
            clearable
            :prefix-icon="Search"
            @change="getTableData"
        />
      </el-form-item>
@@ -48,6 +46,9 @@
      <div class="actions">
        <el-text class="mx-1" size="large">设备保养</el-text>
        <div>
                    <el-button type="success" icon="Van" @click="addPlan">
                        æ–°å¢žè®¡åˆ’
                    </el-button>
          <el-button
            type="primary"
            icon="Plus"
@@ -55,9 +56,6 @@
            @click="addMaintain"
          >
            æ–°å¢žä¿å…»
          </el-button>
          <el-button type="success" icon="Van" @click="addPlan">
            æ–°å¢žè®¡åˆ’
          </el-button>
          <el-button @click="handleOut">
            å¯¼å‡º
@@ -100,16 +98,14 @@
        <template #operation="{ row }">
          <el-button
            type="primary"
            text
            icon="editPen"
            link
            @click="editPlan(row.id)"
          >
            ç¼–辑
          </el-button>
          <el-button
            type="danger"
            text
            icon="delete"
                        link
            @click="delRepairByIds(row.id)"
          >
            åˆ é™¤
@@ -225,7 +221,7 @@
    dataType: "slot",
    slot: "operation",
    align: "center",
    width: "200px",
    width: "150px",
  },
]);
// type == 1实际保养时间 2计划保养时间
src/views/lavorissue/ledger/index.vue
@@ -9,7 +9,7 @@
            placeholder="请选择"
            :clearable="false"
        >
          <el-option :label="item.label" :value="item.value" v-for="(item,index) in jidu" :key="value" />
          <el-option :label="item.label" :value="item.value" v-for="(item,index) in jidu" :key="item.value" />
        </el-select>
      </el-form-item>
      <el-form-item label="员工名称:">
@@ -57,10 +57,10 @@
          @pagination="changePage"
      >
        <template #operation="{ row }">
          <el-button type="primary" text @click="edit(row)" icon="editPen">
          <el-button type="primary" link @click="edit(row)">
            ç¼–辑
          </el-button>
          <el-button type="primary" :disabled="row.adoptedDate ? true : false" text @click="adopted(row)">
          <el-button type="success" :disabled="row.adoptedDate ? true : false" link @click="adopted(row)">
            é¢†ç”¨
          </el-button>
        </template>
@@ -162,7 +162,7 @@
        dataType: "slot",
        slot: "operation",
        align: "center",
        width: "200px",
        width: "150px",
      },
    ]
);