web
2025-07-03 a02a7acbcebc5ed668114087ea4256a44361a0c0
src/views/facility/facilityList/index.vue
@@ -1,9 +1,5 @@
<script setup>
import facilityApi from "@/api/facility/index";
import pointApi from "@/api/facility/point";
import facilityTypeApi from "@/api/facility/facilityType.js";
import commonParameters from "@/api/configuration/commonParameters/index.js";
import waterFacilityParameter from "@/api/facility/parameter.js";
import setPostParams from "@/utils/searchParams.js";
import {onMounted} from "vue";
@@ -38,9 +34,10 @@
let tableHeader = ref({
    facilityCode: '设备编号',
    facilityName: '设备名称',
    facilityTypeName: '设备类型',
    pointName: '设备监控点',
    longitude: '经度',
    latitude: '纬度',
    facilityUrl: '设备图片',
    address: '设备地址',
    installDate: '安装日期',
})
@@ -61,71 +58,23 @@
const formLabel = ({
    facilityCode: '设备编号',
    facilityName: '设备名称',
    facilityType: '设备类型',
    pointId: '设备监控点',
    longitude: '经度',
    latitude: '纬度',
    facilityUrl: '设备图片',
    remark: '备注信息',
    createTimeView: '创建时间'
    address: '设备地址',
    installDate: '安装时间'
})
const rules = ref({
    facilityCode: [{required: true, message: `${inpTip + formLabel.facilityCode}`, trigger: "blur"}],
    facilityName: [{required: true, message: `${inpTip + formLabel.facilityName}`, trigger: "blur"}],
    facilityType: [{required: true, message: `${inpTip + formLabel.facilityTypeName}`, trigger: "blur"}],
    pointId: [{required: true, message: `${inpTip + formLabel.pointName}`, trigger: "blur"}],
    supplier: [{required: true, message: `${inpTip + formLabel.supplier}`, trigger: "blur"}],
    longitude: [{required: true, message: `${inpTip + formLabel.longitude}`, trigger: "blur"}],
    latitude: [{required: true, message: `${inpTip + formLabel.latitude}`, trigger: "blur"}],
    address: [{required: true, message: `${inpTip + formLabel.address}`, trigger: "blur"}],
});
const form = ref({});
const searchParams = ref({
    keywords: '',
});
//查询监控点
const pointList = ref();
const cascaderOption = {
    label: 'pointName',
    value: 'id',
    children: 'childrenList',
    checkStrictly: true,
    expandTrigger: 'hover',
    emitPath: false
}; //级联选择器配置
const getPoint = async () => {
    await pointApi().getParentPoint().then((res) => {
        pointList.value = res.data
    })
}
//查询设备类型
const facilityTypeList = ref();
const getFacilityTypeList = async () => {
    await facilityTypeApi().search({limit: 100, page: 1}).then((res) => {
        facilityTypeList.value = res.data.list
    })
}
//获取参数列表数据
//设备参数table
const tableParamData = ref([]);
const getParamList = async () => {
    await commonParameters().search({limit: 10000, page: 1}).then((res) => {
        tableParamData.value = res.data.list;
    })
}
//获取已绑定参数数据
const getSelectParamList = async (val) => {
    await waterFacilityParameter().getParam(val).then((res) => {
        const data = res.data
        console.log("参数列表", data)
        if (data.length > 0) {
            data.forEach(item => {
                tableParamData.value.forEach((tableItem) => {
                    if (item.columnsCode == tableItem.mark) {
                        tableRef.value.toggleRowSelection(tableItem, undefined)
                    }
                })
            })
        }
    })
}
/** 新增按钮操作 */
async function handleAdd() {
@@ -165,56 +114,10 @@
 *  新增/修改弹窗Form表单相关
 */
//设备参数弹窗
const tableRef = ref()
const openParamForm = ref(false)
const open = ref(false);
const title = ref("");
const isDetail = ref(false);
const multipleSelection = ref([])
let tableParamHeader = ref({
    name: '参数名称',
    mark: '参数标识',
    unit: '参数单位',
})
/**
 * 绑定相关
 */
//绑定数据
const facilityData = ref({
    facilityId: '',
    parameterList: []
})
//已选择设备参数
const handleSelectionParams = (val) => {
    multipleSelection.value = val
}
/**
 * 设备参数操作相关
 */
//提交绑定
const handleSubmit = async () => {
    multipleSelection.value.forEach((item) => {
        facilityData.value.parameterList.push({
            columnsCode: item.mark,
            columnsShow: item.name,
            columnsUnits: item.unit,
        })
    })
    let res = await waterFacilityParameter().create(facilityData.value)
    if (res.code == 200) {
        proxy.$modal.msgSuccess('绑定成功!')
        facilityData.value.parameterList = []
        openParamForm.value = false
        tableRef.value.clearSelection()
    } else {
        proxy.$modal.msgError('绑定失败!')
        openParamForm.value = false
        tableRef.value.clearSelection()
    }
}
//上传文件,添加图片地址信息
const uploadData = (data) => {
    form.value.facilityUrl = data.toString();
@@ -253,16 +156,7 @@
/** 取消按钮 */
function cancel() {
    open.value = false;
    openParamForm.value = false;
    reset();
}
/** 绑定按钮操作 */
const handleband = async (row) => {
    facilityData.value.facilityId = row.id
    await getParamList()
    getSelectParamList(row.id)
    openParamForm.value = true
}
/** 表单重置 */
@@ -270,10 +164,10 @@
    form.value = {
        facilityCode: '',
        facilityName: '',
        facilityType: '',
        pointId: '',
        longitude: '',
        latitude: '',
        facilityUrl: '',
        remark: '',
        address: '',
        installDate: ''
    };
    proxy.resetForm("facilityTypeRef");
@@ -281,8 +175,6 @@
onMounted(() => {
    getList();
    getPoint()
    getFacilityTypeList()
})
</script>
@@ -332,7 +224,6 @@
            </el-table-column>
            <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
                <template #default="scope">
                    <el-button link type="primary" icon="Edit" @click="handleband(scope.row)">参数绑定</el-button>
                    <el-button link type="primary" icon="Edit" v-has="['update',route]"
                               @click="handleUpdate(scope.row)">修改
                    </el-button>
@@ -358,19 +249,14 @@
                <el-form-item :label="formLabel.facilityName" prop="facilityName">
                    <el-input v-model="form.facilityName" :placeholder="inpTip+formLabel.facilityName"/>
                </el-form-item>
                <el-form-item label="选择设备类型" prop="facilityType">
                    <el-select v-model="form.facilityType" :placeholder="inpTip+formLabel.facilityType">
                        <el-option
                            v-for="(item,index) in facilityTypeList"
                            :label="item.name"
                            :value="item.id"
                            :key="index"
                        ></el-option>
                    </el-select>
                <el-form-item :label="formLabel.longitude" prop="longitude">
                    <el-input v-model="form.longitude" :placeholder="inpTip+formLabel.longitude"/>
                </el-form-item>
                <el-form-item label="选择监控点" prop="pointId">
                    <el-cascader v-model="form.pointId" :options="pointList" :show-all-levels="false"
                                 :props="cascaderOption"/>
                <el-form-item :label="formLabel.latitude" prop="latitude">
                    <el-input v-model="form.latitude" :placeholder="inpTip+formLabel.latitude"/>
                </el-form-item>
                <el-form-item :label="formLabel.address" prop="address">
                    <el-input v-model="form.address" :placeholder="inpTip+formLabel.address"/>
                </el-form-item>
                <el-form-item label="安装日期" prop="installDate">
                    <el-date-picker
@@ -382,9 +268,6 @@
                        :disabled="isDetail ? true : false"
                    />
                </el-form-item>
                <el-form-item :label="formLabel.remark" prop="remark">
                    <el-input v-model="form.remark" :placeholder="inpTip+formLabel.remark"/>
                </el-form-item>
                <el-form-item label="资料上传" prop="facilityUrl" style="flex: 1">
                    <upload-icons @uploadData="uploadData" :imageList="form.facilityUrl" :limit="1"></upload-icons>
                    <span style="display: block;">(请上传1张设备图片)</span>
@@ -393,26 +276,6 @@
            <template #footer>
                <div class="dialog-footer">
                    <el-button type="primary" @click="submitForm">确 定</el-button>
                    <el-button @click="cancel">取 消</el-button>
                </div>
            </template>
        </el-dialog>
        <!-- 设备参数弹窗 -->
        <el-dialog title="设备参数" v-model="openParamForm" width="50vw" center align-center append-to-body>
            <!--表格-->
            <el-table ref='tableRef' :data="tableParamData" height="75vh" @selection-change="handleSelectionParams">
                <el-table-column type="selection" width="55" align="center"/>
                <el-table-column
                    v-for="(item, key, index) of tableParamHeader"
                    :prop="key.toString()"
                    :label="item"
                    :key="index"
                    align="center"
                ></el-table-column>
            </el-table>
            <template #footer>
                <div class="dialog-footer">
                    <el-button type="primary" @click="handleSubmit">确认绑定</el-button>
                    <el-button @click="cancel">取 消</el-button>
                </div>
            </template>