cuijian
2025-07-28 accebdce93486d3b4f26e55ffdea047549cce20c
src/views/mdc/base/AlarmManager.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,346 @@
<template>
  <a-card :bordered="false">
    <!-- æŸ¥è¯¢åŒºåŸŸ -->
    <div class="table-page-search-wrapper">
      <a-form
        layout="inline"
        @keyup.enter.native="searchQuery"
      >
        <a-row :gutter="24">
          <a-col
            :xl="6"
            :lg="7"
            :md="8"
            :sm="24"
          >
            <a-form-item label="控制系统类型">
              <a-auto-complete
                v-model="queryParam.driveType"
                :data-source="driveTypeList"
                placeholder="请选择控制系统类型"
                :filter-option="filterOption"
                :allowClear="true"
              />
            </a-form-item>
          </a-col>
            <a-col
              :xl="4"
              :lg="4"
              :md="4"
              :sm="24"
            >
              <a-form-item label="报警号">
                <a-input
                  placeholder="请输入报警号"
                  v-model="queryParam.alarmCode"
                ></a-input>
              </a-form-item>
            </a-col>
            <a-col
              :xl="4"
              :lg="4"
              :md="4"
              :sm="24"
            >
              <a-form-item label="报警内容">
                <a-input
                  placeholder="请输入报警内容"
                  v-model="queryParam.alarmContent"
                ></a-input>
              </a-form-item>
            </a-col>
          <a-col
            :xl="4"
            :lg="4"
            :md="4"
            :sm="24"
          >
            <span
              style="float: left;overflow: hidden;"
              class="table-page-search-submitButtons"
            >
              <a-button
                type="primary"
                @click="searchQuery"
                icon="search"
              >查询</a-button>
              <a-button
                type="primary"
                @click="searchReset"
                icon="reload"
                style="margin-left: 8px"
              >重置</a-button>
            </span>
          </a-col>
        </a-row>
      </a-form>
    </div>
    <!-- æŸ¥è¯¢åŒºåŸŸ-END -->
    <!-- æ“ä½œæŒ‰é’®åŒºåŸŸ -->
    <div class="table-operator">
      <a-button
        @click="handleAddTRype"
        type="primary"
        icon="plus"
      >新增</a-button>
      <!--<a-button-->
        <!--@click="handleAdd"-->
        <!--type="primary"-->
        <!--icon="plus"-->
      <!--&gt;设备新增</a-button>-->
      <!--<a-upload-->
        <!--name="file"-->
        <!--:showUploadList="false"-->
        <!--:multiple="false"-->
        <!--:headers="tokenHeader"-->
        <!--:action="importExcelUrl"-->
        <!--@change="handleImportExcel"-->
      <!--&gt;-->
        <!--<a-button-->
          <!--type="primary"-->
          <!--icon="import"-->
        <!--&gt;导入</a-button>-->
      <!--</a-upload>-->
      <a-dropdown v-if="selectedRowKeys.length > 0">
        <a-menu slot="overlay">
          <a-menu-item
            key="1"
            @click="batchDel"
          >
            <a-icon type="delete" />删除
          </a-menu-item>
        </a-menu>
        <a-button style="margin-left: 8px"> æ‰¹é‡æ“ä½œ
          <a-icon type="down" />
        </a-button>
      </a-dropdown>
    </div>
    <!-- table区域-begin -->
    <div>
      <div
        class="ant-alert ant-alert-info"
        style="margin-bottom: 16px;"
      >
        <i class="anticon anticon-info-circle ant-alert-icon"></i> å·²é€‰æ‹© <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
        <a
          style="margin-left: 24px"
          @click="onClearSelected"
        >清空</a>
      </div>
      <a-table
        ref="table"
        size="middle"
        :scroll="{x:'max-content',y:465}"
        bordered
        rowKey="id"
        :columns="columns"
        :dataSource="dataSource"
        :pagination="ipagination"
        :loading="loading"
        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
        class="j-table-force-nowrap"
        @change="handleTableChange"
      >
        <span
          slot="action"
        slot-scope="text, record"
        >
          <a @click="handleEdit(record)">编辑</a>
          <a-divider type="vertical" />
           <a-popconfirm
             title="确定删除吗?"
             @confirm="() => handleDelete(record.id)"
           >
                  <a>删除</a>
                </a-popconfirm>
        </span>
      </a-table>
    </div>
    <!--<alarm-manager-modal ref="modalForm" @ok="modalFormOk"></alarm-manager-modal>-->
    <alarm-manager-form ref="modalFormType" @ok="modalFormOk" :driveTypeList="driveTypeList" :filterOption="filterOption"></alarm-manager-form>
    <alarm-manager-edit ref="modalFormEdit" @ok="modalFormOk"></alarm-manager-edit>
  </a-card>
</template>
<script>
  import '@/assets/less/TableExpand.less'
  import { mixinDevice } from '@/utils/mixin'
  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
  // import MdcDriveTypeParamConfigModal from './modules/mdcDriveTypeParamConfig/MdcDriveTypeParamConfigModal'
  import AlarmManagerModal from './modules/alarmManager/alarmManagerModal'
  import AlarmManagerForm from './modules/alarmManager/alarmManagerForm'
  import AlarmManagerEdit from './modules/alarmManager/alarmManagerEdit'
  import { filterMultiDictText } from '@/components/dict/JDictSelectUtil'
  import { filterObj } from '@/utils/util';
  import api from '@/api/mdc'
  export default {
    name: 'AlarmManager',
    mixins: [JeecgListMixin, mixinDevice],
    components: {
      AlarmManagerEdit,
      AlarmManagerForm,
      AlarmManagerModal
    },
    data() {
      return {
        description: '报警号管理界面',
        /* åˆ†é¡µå‚æ•° */
        ipagination:{
          current: 1,
          pageSize: 30,
          pageSizeOptions: ['30', '50', '100'],
          showTotal: (total, range) => {
            return range[0] + "-" + range[1] + " å…±" + total + "条"
          },
          showQuickJumper: true,
          showSizeChanger: true,
          total: 0
        },
        // è¡¨å¤´
        columns: [
          {
            title: '#',
            dataIndex: '',
            key: 'rowIndex',
            width: 60,
            align: "center",
            customRender: function (t, r, index) {
              return parseInt(index) + 1;
            }
          },
          {
            title: '报警号',
            align: "center",
            // sorter: true,
            dataIndex: 'alarmCode',
            width:400
          },
          {
            title: '报警内容',
            align: "center",
            // sorter: true,
            dataIndex: 'alarmContent',
            width:400
          },
          {
            title: '设备驱动类型',
            align: "center",
            // sorter: true,
            dataIndex: 'driveType',
            width:400
          },
          // {
          //   title: '是否过滤',
          //   align: "center",
          //   dataIndex: 'isUse',
          //   customRender: (text) => (text ? filterMultiDictText(this.dictOptions['isUse'], text) : ''),
          // },
          {
            dataIndex:'isUse_dictText',
            title: '是否启用',
            align: "center",
            width:380
           // dictCode:'alarm_is_use'
          },
          {
            title: '操作',
            dataIndex: 'action',
            align: "center",
            fixed: "right",
            width: 150,
            scopedSlots: { customRender: 'action' }
          }
        ],
        url: {
          list: "/mdc/mdcAlarmInfo/list",
          delete: "/mdc/mdcAlarmInfo/delete",
          deleteBatch: "/mdc/mdcAlarmInfo/deleteBatch",
          importExcelUrl: "mdc/mdcDriveTypeParamConfig/importExcel",
        },
        dictOptions: {},
        superFieldList: [],
        driveTypeList:[]
      }
    },
    created() {
      this.$set(this.dictOptions, 'isUse', [{ text: '是', value: '0' }, { text: '否', value: '-1' }])
      this.getSuperFieldList();
      this.getDriveTypeByApi()
    },
    computed: {
      // importExcelUrl: function () {
      //   return `${window._CONFIG['domianURL']}${this.url.importExcelUrl}`;
      // },
    },
    methods: {
      handleEdit: function (record) {
        this.$refs.modalFormEdit.edit(record);
        this.$refs.modalFormEdit.title = "编辑";
        this.$refs.modalFormEdit.disableSubmit = false;
      },
      handleAddTRype(){
        this.$refs.modalFormType.add();
        this.$refs.modalFormType.title = "新增";
        this.$refs.modalFormType.disableSubmit = false
      },
      initDictConfig() {
      },
      getSuperFieldList() {
        let fieldList = [];
        fieldList.push({ type: 'string', value: 'alarmCode', text: '报警号', dictCode: '' })
        fieldList.push({ type: 'string', value: 'alarmDescription', text: '报警内容', dictCode: '' })
        fieldList.push({ type: 'int', value: 'driveType', text: '设备驱动类型', dictCode: '' })
        fieldList.push({ type: 'switch', value: 'isUse', text: '是否启用' })
        this.superFieldList = fieldList
      },
      getQueryParams() {
        // é‡å†™æŸ¥è¯¢æ¡ä»¶
        let sqp = {}
        if (this.superQueryParams) {
          sqp['superQueryParams'] = encodeURI(this.superQueryParams)
          sqp['superQueryMatchType'] = this.superQueryMatchType
        }
        var param = Object.assign(sqp, this.queryParam, {}, this.filters)
        param.field = this.getQueryField()
        param.pageNo = this.ipagination.current
        param.pageSize = this.ipagination.pageSize
        return filterObj(param)
      },
      /**
       * è°ƒç”¨æŽ¥å£èŽ·å–æŽ§åˆ¶ç³»ç»Ÿç±»åž‹
       */
      getDriveTypeByApi(){
        api.getDriveTypeApi().then((res)=>{
          this.driveTypeList=res.result.map(item=>item.value)
        })
      },
      /**
       * è”想输入框筛选功能
       * @param input è¾“入的内容
       * @param option é…ç½®
       * @returns {boolean} åˆ¤æ–­æ˜¯å¦ç­›é€‰
       */
      filterOption(input, option) {
        return (
          option.componentOptions.children[0].text.toUpperCase().indexOf(input.toUpperCase()) >= 0
        );
      },
    }
  }
</script>
<style scoped>
  @import '~@assets/less/common.less';
</style>