gaoluyang
2026-06-02 7c2cdcbc7f5585b96fba76a07b0e4417a09c4d7e
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
142
143
144
145
146
147
148
149
150
151
152
153
<template>
  <div>
    <el-dialog v-model="isShow"
               title="绑定物联设备"
               width="600"
               @close="closeModal">
      <el-form label-width="100px"
               :model="formState"
               ref="formRef">
        <el-form-item label="产品名称">
          <el-input v-model="props.record.productName" disabled />
        </el-form-item>
        <el-form-item label="规格型号">
          <el-input v-model="props.record.model" disabled />
        </el-form-item>
        <el-form-item label="批号">
          <el-input v-model="props.record.batchNo" disabled />
        </el-form-item>
        <el-form-item label="物联设备"
                      prop="deviceIds"
                      :rules="[
                        {
                          required: false,
                          message: '请选择物联设备',
                          trigger: 'change',
                        }
                      ]">
          <el-select v-model="formState.deviceIds"
                     multiple
                     filterable
                     placeholder="请选择物联设备"
                     style="width: 100%">
            <el-option v-for="item in deviceOptions"
                       :key="item.id"
                       :label="`${item.deviceName} (${item.deviceModel})`"
                       :value="item.id">
              <span style="float: left">{{ item.deviceName }}</span>
              <span style="float: right; color: #8492a6; font-size: 13px">{{ item.deviceModel }}</span>
            </el-option>
          </el-select>
        </el-form-item>
      </el-form>
      <template #footer>
        <div class="dialog-footer">
          <el-button type="primary" @click="handleSubmit" :loading="submitLoading">确认</el-button>
          <el-button @click="closeModal">取消</el-button>
        </div>
      </template>
    </el-dialog>
  </div>
</template>
 
<script setup>
  import { ref, computed, onMounted, getCurrentInstance } from "vue";
  import { getLedgerPage } from "@/api/equipmentManagement/ledger.js";
  import { createStockInventory } from "@/api/inventoryManagement/stockInventory.js";
 
  const props = defineProps({
    visible: {
      type: Boolean,
      required: true,
    },
    record: {
      type: Object,
      default: () => ({}),
    },
  });
 
  const emit = defineEmits(["update:visible", "completed"]);
 
  const { proxy } = getCurrentInstance();
 
  const isShow = computed({
    get() {
      return props.visible;
    },
    set(val) {
      emit("update:visible", val);
    },
  });
 
  const formRef = ref(null);
  const submitLoading = ref(false);
  const deviceOptions = ref([]);
 
  const formState = ref({
    deviceIds: [],
  });
 
  // 获取物联设备列表
  const getDeviceOptions = async () => {
    try {
      const res = await getLedgerPage({
        isIotDevice: 1,
        page: 1,
        size: 999,
      });
      if (res.data && res.data.records) {
        deviceOptions.value = res.data.records;
      }
    } catch (error) {
      console.error("获取物联设备列表失败:", error);
      proxy.$modal.msgError("获取物联设备列表失败");
    }
  };
 
  // 初始化已绑定设备
  const initSelectedDevices = () => {
    if (props.record.warehouse) {
      // warehouse 字段存储的是逗号分隔的设备ID
      const deviceIds = props.record.warehouse.split(",").map(id => Number(id.trim())).filter(id => !isNaN(id));
      formState.value.deviceIds = deviceIds;
    }
  };
 
  const closeModal = () => {
    formState.value.deviceIds = [];
    isShow.value = false;
  };
 
  const handleSubmit = () => {
    formRef.value.validate(valid => {
      if (valid) {
        submitLoading.value = true;
        // 将设备ID数组转换为逗号分隔的字符串
        const warehouse = formState.value.deviceIds.join(",");
        // 使用库存新增/编辑接口,warehouse 字段传设备ID
        const submitData = {
          id: props.record.id,
          productModelId: props.record.productModelId,
          batchNo: props.record.batchNo,
          qualitity: props.record.qualitity,
          warehouse: warehouse,
        };
        createStockInventory(submitData)
          .then(res => {
            submitLoading.value = false;
            proxy.$modal.msgSuccess("绑定成功");
            closeModal();
            emit("completed");
          })
          .catch(() => {
            submitLoading.value = false;
          });
      }
    });
  };
 
  onMounted(() => {
    getDeviceOptions();
    initSelectedDevices();
  });
</script>