|  | @@ -0,0 +1,315 @@
 | 
	
		
			
				|  |  | +<template>
 | 
	
		
			
				|  |  | +  <div class="app-container">
 | 
	
		
			
				|  |  | +    <el-row :gutter="20">
 | 
	
		
			
				|  |  | +      <el-col :span="24" :xs="24">
 | 
	
		
			
				|  |  | +        <div class="main-right-box">
 | 
	
		
			
				|  |  | +          <div class="main-search-box">
 | 
	
		
			
				|  |  | +            <el-form
 | 
	
		
			
				|  |  | +              :model="queryParams"
 | 
	
		
			
				|  |  | +              ref="queryForm"
 | 
	
		
			
				|  |  | +              size="small"
 | 
	
		
			
				|  |  | +              :inline="true"
 | 
	
		
			
				|  |  | +              v-show="showSearch"
 | 
	
		
			
				|  |  | +            >
 | 
	
		
			
				|  |  | +              <el-form-item label="组织机构">
 | 
	
		
			
				|  |  | +                <org-tree
 | 
	
		
			
				|  |  | +                  v-model="queryParams.orgId"
 | 
	
		
			
				|  |  | +                  @defaultKey="getDefaultKey"
 | 
	
		
			
				|  |  | +                  @defaultOrg="getDefaultOrg"
 | 
	
		
			
				|  |  | +                  @checkChange="checkChange"
 | 
	
		
			
				|  |  | +                  @click="clickTreeNode"
 | 
	
		
			
				|  |  | +                  ref="orgTree"
 | 
	
		
			
				|  |  | +                ></org-tree>
 | 
	
		
			
				|  |  | +              </el-form-item>
 | 
	
		
			
				|  |  | +              <el-form-item label="设备名称" prop="deviceName">
 | 
	
		
			
				|  |  | +                <el-input
 | 
	
		
			
				|  |  | +                  v-model="queryParams.deviceName"
 | 
	
		
			
				|  |  | +                  clearable
 | 
	
		
			
				|  |  | +                  placeholder="请输入关键字"
 | 
	
		
			
				|  |  | +                  @keyup.enter.native="handleQuery"/>
 | 
	
		
			
				|  |  | +              </el-form-item>
 | 
	
		
			
				|  |  | +              <el-form-item label="绑定阈值" prop="state">
 | 
	
		
			
				|  |  | +                <el-select
 | 
	
		
			
				|  |  | +                  v-model="queryParams.state" clearable
 | 
	
		
			
				|  |  | +                  label="绑定阈值" placeholder="请选择绑定状态" prop="state">
 | 
	
		
			
				|  |  | +                  <el-option
 | 
	
		
			
				|  |  | +                    v-for="item in bindTypes"
 | 
	
		
			
				|  |  | +                    :key="item.value"
 | 
	
		
			
				|  |  | +                    :label="item.label"
 | 
	
		
			
				|  |  | +                    :value="item.value"/>
 | 
	
		
			
				|  |  | +                </el-select>
 | 
	
		
			
				|  |  | +              </el-form-item>
 | 
	
		
			
				|  |  | +              <el-form-item label="阈值名称" prop="thresholdCode">
 | 
	
		
			
				|  |  | +                <el-select
 | 
	
		
			
				|  |  | +                  v-model="queryParams.thresholdCode"
 | 
	
		
			
				|  |  | +                  clearable
 | 
	
		
			
				|  |  | +                  label="设备类型"
 | 
	
		
			
				|  |  | +                  placeholder="请选择告警类型"
 | 
	
		
			
				|  |  | +                  prop="thresholdCode"
 | 
	
		
			
				|  |  | +                >
 | 
	
		
			
				|  |  | +                  <el-option
 | 
	
		
			
				|  |  | +                    v-for="item in deviceTypes"
 | 
	
		
			
				|  |  | +                    :key="item.value"
 | 
	
		
			
				|  |  | +                    :label="item.label"
 | 
	
		
			
				|  |  | +                    :value="item.value">
 | 
	
		
			
				|  |  | +                  </el-option>
 | 
	
		
			
				|  |  | +                </el-select>
 | 
	
		
			
				|  |  | +              </el-form-item>
 | 
	
		
			
				|  |  | +            </el-form>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            <el-row :gutter="10">
 | 
	
		
			
				|  |  | +              <el-col :span="1.5">
 | 
	
		
			
				|  |  | +                <el-button
 | 
	
		
			
				|  |  | +                  type="primary"
 | 
	
		
			
				|  |  | +                  icon="el-icon-search"
 | 
	
		
			
				|  |  | +                  size="mini"
 | 
	
		
			
				|  |  | +                  @click="handleQuery"
 | 
	
		
			
				|  |  | +                  >搜索
 | 
	
		
			
				|  |  | +                </el-button>
 | 
	
		
			
				|  |  | +              </el-col>
 | 
	
		
			
				|  |  | +              <el-col :span="1.5">
 | 
	
		
			
				|  |  | +                <el-button
 | 
	
		
			
				|  |  | +                  type="primary"
 | 
	
		
			
				|  |  | +                  icon="el-icon-refresh"
 | 
	
		
			
				|  |  | +                  size="mini"
 | 
	
		
			
				|  |  | +                  @click="resetQuery"
 | 
	
		
			
				|  |  | +                  >重置
 | 
	
		
			
				|  |  | +                </el-button>
 | 
	
		
			
				|  |  | +              </el-col>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +              <el-col :span="1.5">
 | 
	
		
			
				|  |  | +                <el-button
 | 
	
		
			
				|  |  | +                  type="primary"
 | 
	
		
			
				|  |  | +                  icon="el-icon-download"
 | 
	
		
			
				|  |  | +                  size="mini"
 | 
	
		
			
				|  |  | +                  @click="handleExport"
 | 
	
		
			
				|  |  | +                >导出数据
 | 
	
		
			
				|  |  | +                </el-button>
 | 
	
		
			
				|  |  | +              </el-col>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +              <right-toolbar
 | 
	
		
			
				|  |  | +                :showSearch.sync="showSearch"
 | 
	
		
			
				|  |  | +                @queryTable="getList"
 | 
	
		
			
				|  |  | +              ></right-toolbar>
 | 
	
		
			
				|  |  | +            </el-row>
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          <el-table
 | 
	
		
			
				|  |  | +            v-loading="loading"
 | 
	
		
			
				|  |  | +            :data="dataList"
 | 
	
		
			
				|  |  | +            border
 | 
	
		
			
				|  |  | +            height="600"
 | 
	
		
			
				|  |  | +            size="small"
 | 
	
		
			
				|  |  | +          >
 | 
	
		
			
				|  |  | +          <el-table-column label="序号" type="index" align="center" width="70">
 | 
	
		
			
				|  |  | +          <template slot-scope="scope">
 | 
	
		
			
				|  |  | +            {{
 | 
	
		
			
				|  |  | +              (queryParams.pageNum - 1) * queryParams.pageSize +
 | 
	
		
			
				|  |  | +              scope.$index +
 | 
	
		
			
				|  |  | +              1
 | 
	
		
			
				|  |  | +            }}
 | 
	
		
			
				|  |  | +          </template>
 | 
	
		
			
				|  |  | +        </el-table-column>
 | 
	
		
			
				|  |  | +            <el-table-column label="地区" align="center" prop="firstOrgName" width="180"/>
 | 
	
		
			
				|  |  | +            <el-table-column label="行社名称" align="center" prop="secondOrgName" width="220"/>
 | 
	
		
			
				|  |  | +            <el-table-column label="所属机构" align="center" prop="orgName" width="220"/>
 | 
	
		
			
				|  |  | +            <el-table-column label="设备名称" align="center" prop="deviceName" width="300"/>
 | 
	
		
			
				|  |  | +            <el-table-column label="所属主机" align="center" prop="hostName" width="280"/>
 | 
	
		
			
				|  |  | +            <el-table-column label="阈值" align="center" prop="thresholdName" width="380"/>
 | 
	
		
			
				|  |  | +          </el-table>
 | 
	
		
			
				|  |  | +          <DetailDialog ref="detailDialog" @success="refresh(true)"></DetailDialog>
 | 
	
		
			
				|  |  | +          <pagination
 | 
	
		
			
				|  |  | +            v-show="total > 0"
 | 
	
		
			
				|  |  | +            :total="total"
 | 
	
		
			
				|  |  | +            :page.sync="queryParams.pageNum"
 | 
	
		
			
				|  |  | +            :limit.sync="queryParams.pageSize"
 | 
	
		
			
				|  |  | +            @pagination="getList"
 | 
	
		
			
				|  |  | +          />
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +      </el-col>
 | 
	
		
			
				|  |  | +    </el-row>
 | 
	
		
			
				|  |  | +  </div>
 | 
	
		
			
				|  |  | +</template>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<script>
 | 
	
		
			
				|  |  | +import { list,thresholdTypeList} from "@/api/iot/diagnoseThreshold";
 | 
	
		
			
				|  |  | +import  DetailDialog  from "./dialog.detail.vue";
 | 
	
		
			
				|  |  | +import OrgTree from "@/components/orgTree/orgQuerySelector.vue";
 | 
	
		
			
				|  |  | +import DataRangePicker from "@/components/dateTime/daterange.picker.vue";
 | 
	
		
			
				|  |  | +import { mapGetters } from "vuex";
 | 
	
		
			
				|  |  | +import dayjs from "dayjs";
 | 
	
		
			
				|  |  | +export default {
 | 
	
		
			
				|  |  | +  components: { OrgTree, DataRangePicker,DetailDialog },
 | 
	
		
			
				|  |  | +  name: "Task",
 | 
	
		
			
				|  |  | +  dicts: ["sys_org_type",'sensor_alarm_status','sensor_device_type'],
 | 
	
		
			
				|  |  | +  data() {
 | 
	
		
			
				|  |  | +    return {
 | 
	
		
			
				|  |  | +      bindTypes:[
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +              value: '0',
 | 
	
		
			
				|  |  | +              label: '未绑定'
 | 
	
		
			
				|  |  | +            },
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +              value: '1',
 | 
	
		
			
				|  |  | +              label: '已绑定'
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +      ],
 | 
	
		
			
				|  |  | +      deviceTypes: [],
 | 
	
		
			
				|  |  | +      // 遮罩层
 | 
	
		
			
				|  |  | +      loading: false,
 | 
	
		
			
				|  |  | +      // 选中数组
 | 
	
		
			
				|  |  | +      ids: [],
 | 
	
		
			
				|  |  | +      // 非单个停用
 | 
	
		
			
				|  |  | +      single: true,
 | 
	
		
			
				|  |  | +      // 非多个停用
 | 
	
		
			
				|  |  | +      multiple: true,
 | 
	
		
			
				|  |  | +      // 显示搜索条件
 | 
	
		
			
				|  |  | +      showSearch: true,
 | 
	
		
			
				|  |  | +      // 总条数
 | 
	
		
			
				|  |  | +      total: 1,
 | 
	
		
			
				|  |  | +      // 弹出层标题
 | 
	
		
			
				|  |  | +      title: "",
 | 
	
		
			
				|  |  | +      // 是否显示弹出层
 | 
	
		
			
				|  |  | +      open: false,
 | 
	
		
			
				|  |  | +      // 查询参数
 | 
	
		
			
				|  |  | +      queryParams: {
 | 
	
		
			
				|  |  | +        pageNum: 1,
 | 
	
		
			
				|  |  | +        pageSize: 10,
 | 
	
		
			
				|  |  | +        checkSub: true,
 | 
	
		
			
				|  |  | +        thresholdCode: null,
 | 
	
		
			
				|  |  | +        state: null,
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      // 表单参数
 | 
	
		
			
				|  |  | +      form: {},
 | 
	
		
			
				|  |  | +      // 表单校验
 | 
	
		
			
				|  |  | +      rules: {},
 | 
	
		
			
				|  |  | +      timeClearable: true,
 | 
	
		
			
				|  |  | +      showOverflowTooltip:true,
 | 
	
		
			
				|  |  | +      dataList:[],
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  created() {
 | 
	
		
			
				|  |  | +    this.queryParams.orgId = this.$store.getters.orgId;
 | 
	
		
			
				|  |  | +    this.initDeviceTypeList();
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  computed: {
 | 
	
		
			
				|  |  | +    ...mapGetters(["orgId"]),
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  methods: {
 | 
	
		
			
				|  |  | +    initDeviceTypeList(){
 | 
	
		
			
				|  |  | +          thresholdTypeList()
 | 
	
		
			
				|  |  | +            .then((r) => {
 | 
	
		
			
				|  |  | +              // 使用 map 而不是 filter 进行数据转换
 | 
	
		
			
				|  |  | +              const transformedList = r.map((item) => ({
 | 
	
		
			
				|  |  | +                value: item.value,
 | 
	
		
			
				|  |  | +                label: item.label,
 | 
	
		
			
				|  |  | +                type: item.type,
 | 
	
		
			
				|  |  | +              }));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +              // 将转换后的数据推送到 this.deviceTypeList
 | 
	
		
			
				|  |  | +              this.deviceTypes.push(...transformedList);
 | 
	
		
			
				|  |  | +            })
 | 
	
		
			
				|  |  | +            .catch((error) => {
 | 
	
		
			
				|  |  | +              // 处理错误
 | 
	
		
			
				|  |  | +              console.error('Error fetching device type list:', error);
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    /** 查询列表 */
 | 
	
		
			
				|  |  | +    getList() {
 | 
	
		
			
				|  |  | +      this.loading = true;
 | 
	
		
			
				|  |  | +      list(this.queryParams).then((response) => {
 | 
	
		
			
				|  |  | +        this.dataList = response.rows;
 | 
	
		
			
				|  |  | +        this.total = response.total;
 | 
	
		
			
				|  |  | +        this.loading = false;
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    // 取消弹框
 | 
	
		
			
				|  |  | +    closeHandler() {
 | 
	
		
			
				|  |  | +      this.reset();
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    handleImport() {},
 | 
	
		
			
				|  |  | +    getDefaultOrg(org) {
 | 
	
		
			
				|  |  | +      this.orgName = org.name;
 | 
	
		
			
				|  |  | +      this.selectedOrgName = org.shortName;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    getDefaultKey(key) {
 | 
	
		
			
				|  |  | +      this.queryParams.orgId = key;
 | 
	
		
			
				|  |  | +      this.getList();
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    checkChange(state) {
 | 
	
		
			
				|  |  | +      this.queryParams.checkSub = state;
 | 
	
		
			
				|  |  | +      this.handleQuery();
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    // 节点单击事件
 | 
	
		
			
				|  |  | +    clickTreeNode(data) {
 | 
	
		
			
				|  |  | +      this.queryParams.orgId = data.id;
 | 
	
		
			
				|  |  | +      this.orgName = data.name;
 | 
	
		
			
				|  |  | +      this.selectedOrgName = data.shortName;
 | 
	
		
			
				|  |  | +      this.handleQuery();
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    /** 下穿状态改变*/
 | 
	
		
			
				|  |  | +    changeCheckBox() {
 | 
	
		
			
				|  |  | +      this.getList();
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    // 取消按钮
 | 
	
		
			
				|  |  | +    cancel() {
 | 
	
		
			
				|  |  | +      this.open = false;
 | 
	
		
			
				|  |  | +      this.reset();
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    // 表单重置
 | 
	
		
			
				|  |  | +    reset() {
 | 
	
		
			
				|  |  | +      this.form = {
 | 
	
		
			
				|  |  | +        id: null,
 | 
	
		
			
				|  |  | +        orgId: null,
 | 
	
		
			
				|  |  | +        orgPath: null,
 | 
	
		
			
				|  |  | +        orgName: null
 | 
	
		
			
				|  |  | +      };
 | 
	
		
			
				|  |  | +      this.resetForm("form");
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    /** 搜索按钮操作 */
 | 
	
		
			
				|  |  | +    handleQuery() {
 | 
	
		
			
				|  |  | +      this.queryParams.pageNum = 1;
 | 
	
		
			
				|  |  | +      this.getList();
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    /** 重置按钮操作 */
 | 
	
		
			
				|  |  | +    resetQuery() {
 | 
	
		
			
				|  |  | +      this.resetForm("queryForm");
 | 
	
		
			
				|  |  | +      this.queryParams.orgId = this.orgId;
 | 
	
		
			
				|  |  | +      this.selectedOrgName = this.orgName;
 | 
	
		
			
				|  |  | +      this.queryParams.checkSub = true;
 | 
	
		
			
				|  |  | +      this.queryParams.planStartTime = null;
 | 
	
		
			
				|  |  | +      this.$refs["orgTree"].setCheckSub(this.queryParams.checkSub);
 | 
	
		
			
				|  |  | +      this.handleQuery();
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /** 修改按钮操作 */
 | 
	
		
			
				|  |  | +    lookView(row) {
 | 
	
		
			
				|  |  | +      this.$refs["detailDialog"].show(row);
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /** 导出按钮操作 */
 | 
	
		
			
				|  |  | +    handleExport() {
 | 
	
		
			
				|  |  | +      if (this.total==null || this.total===0){
 | 
	
		
			
				|  |  | +        this.$modal.alert("暂无可用数据导出");
 | 
	
		
			
				|  |  | +        return;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      if (this.total>50000){
 | 
	
		
			
				|  |  | +        this.$modal.alert("导出数据超过5万条,请缩小查询范围后重试");
 | 
	
		
			
				|  |  | +        return;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      this.download(
 | 
	
		
			
				|  |  | +        "iot/sensor/export",
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +          ...this.queryParams,
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        `${
 | 
	
		
			
				|  |  | +          this.selectedOrgName
 | 
	
		
			
				|  |  | +        }-${this.$tab.getCurrentTabName()}-${dayjs().format("YYYYMMDD")}.xlsx`
 | 
	
		
			
				|  |  | +      );
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +</script>
 | 
	
		
			
				|  |  | +<style lang="scss" scoped></style>
 |