| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856 | <!-- * @Author: chenlong (陈龙) * @Date: 2019-11-06 10:14:38 * @LastEditors: wf * @LastEditTime: 2021-11-19 16:02:33 * @Description: 系统管理>>>告警管理>>>添加|编辑告警 --><template>    <div class="system-alarm-type-add" :class="{ 'no-channel': alarmProperty == '1' }">        <dmp-form            :cols="cols"            :data="data"            :inline="true"            labelPosition="top"            :rules="rules"            :errors="errors"            ref="form"            style="width: 800px"        >            <template slot="productId">                <!-- <el-input                                       v-if="params.todo == 'edit'"                    type="text"                    v-model="data.productName"                    placeholder="限30位,汉字、字母、数字或符号"                    maxlength="30"                    clearable                ></el-input> -->                <el-cascader                    v-model="data.productId"                    :options="productOptions"                    :props="productTypeProps"                    clearable                    placeholder=""                    ref="pcascader"                    @change="productChange"                >                </el-cascader>            </template>            <template slot="communityId">                <el-select v-model="data.communityId">                    <el-option v-for="(item, index) in communityArr" :key="index" :label="item.communityName" :value="item.id"></el-option>                </el-select>            </template>            <template slot="deviceId">                <el-select v-model="data.deviceId" placeholder="请选择设备" clearable @change="deviceSelect">                    <el-option v-for="item in deviceOptions" :key="item.id" :value="item.id" :label="item.deviceName"></el-option>                </el-select>            </template>            <template slot="name">                <span class="txt" v-if="isReadOnly">{{ data.name }}</span>                <el-input                    v-else                    type="text"                    v-model="data.name"                    placeholder="限30位,汉字、字母、数字或符号"                    maxlength="30"                    clearable                ></el-input>            </template>            <template slot="desc">                <span class="txt" v-if="isReadOnly">{{ data.desc }}</span>                <el-input                    v-else                    :disabled="isReadOnly"                    type="textarea"                    resize="none"                    v-model="data.desc"                    placeholder="输入文字,对该告警进行说明或描述"                    :rows="3"                    show-word-limit                    minlength="0"                    maxlength="100"                ></el-input>            </template>            <template slot="alarmRuleList">                <div class="dmp-table_alarm">                    <div class="lixian_class" v-if="alarmCategory == 1">                        <el-form-item slot="row" class="tip-info" label="测点" prop="measuringCode">                            <el-select v-model="measuringCode" placeholder="请选择测点" clearable @change="measureSelect">                                <el-option v-for="item in measureOptions" :key="item.id" :value="item.id" :label="item.name"></el-option>                            </el-select>                        </el-form-item>                        <el-table class="avg_table" :data="data.rules" stripe="true">                            <el-table-column label="运算符" align="left">                                <template slot-scope="scope">                                    <el-form-item :prop="'rules.' + scope.$index + '.operator'" :rules="rules['rules.operator']">                                        <span class="txt" v-if="isReadOnly">{{ scope.row.operator }}</span>                                        <el-select                                            v-else                                            v-model="scope.row.operator"                                            placeholder=""                                            @change="validateKey('rules.' + scope.$index + '.operator', scope.row.operator)"                                            :disabled="scope.row.measuringDataType == 1"                                            clearable                                        >                                            <el-option                                                v-for="item in operatoroptions"                                                :key="item.id"                                                :value="item.id"                                                :label="item.name"                                            ></el-option>                                        </el-select>                                    </el-form-item>                                </template>                            </el-table-column>                            <el-table-column label="条件值" align="left">                                <template slot-scope="scope">                                    <el-form-item :prop="'rules.' + scope.$index + '.value'" :rules="rules['rules.value']">                                        <template v-if="scope.row.measuringDataType == 1">                                            <span class="txt" v-if="isReadOnly">{{                                                toStrById(dictList, scope.row.value, 'specsName', 'specsValue')                                            }}</span>                                            <el-select                                                v-else                                                v-model="scope.row.value"                                                @change="validateKey('rules.' + scope.$index + '.value', scope.row.value)"                                                placeholder=""                                                clearable                                            >                                                <el-option                                                    v-for="item in dictList"                                                    :key="item.specsValue"                                                    :value="item.specsValue"                                                    :label="item.specsName"                                                ></el-option>                                            </el-select>                                        </template>                                        <template v-else>                                            <span class="txt" v-if="isReadOnly">{{ scope.row.value }}</span>                                            <el-input                                                v-else                                                v-model.trim="scope.row.value"                                                :disabled="!scope.row.operator"                                                @blur="validateKey('rules.' + scope.$index + '.value', scope.row.value)"                                                maxlength="128"                                                placeholder="数字"                                                clearable                                            ></el-input>                                        </template>                                    </el-form-item>                                </template>                            </el-table-column>                            <el-table-column label="条件关系" align="left">                                <template slot-scope="scope">                                    <el-form-item :prop="'rules.' + scope.$index + '.relation'" :rules="rules['rules.relation']">                                        <span class="txt" v-if="isReadOnly">{{ scope.row.relation }}</span>                                        <!-- :disabled="scope.$index == 0" -->                                        <el-select                                            v-else                                            v-model="scope.row.relation"                                            @change="validateKey('rules.' + scope.$index + '.relation', scope.row.relation)"                                            placeholder=""                                        >                                            <el-option                                                v-for="item in relationOptions"                                                :key="item.id"                                                :value="item.id"                                                :label="item.name"                                            ></el-option>                                        </el-select>                                    </el-form-item>                                </template>                            </el-table-column>                            <el-table-column label="单位" align="left">                                <template slot-scope="scope">                                    <span>{{ scope.row.measuringUnit || '-' }}</span>                                </template>                            </el-table-column>                            <el-table-column v-if="!isReadOnly" label="操作">                                <template slot-scope="scope">                                    <!-- && !scope.row.measuringCode v-if="!(scope.$index == 0)"-->                                    <i class="icon-del-alarm" title="删除" v-if="!(scope.$index == 0)" @click="delRule(scope.$index)"></i>                                    <i                                        class="icon-add-alarm"                                        title="添加"                                        v-if="scope.$index == data.rules.length - 1 && measuringCode"                                        @click="addRule(scope.$index)"                                    ></i>                                </template>                            </el-table-column>                        </el-table>                    </div>                    <el-table v-else :data="data.rules" stripe="true">                        <el-table-column label="运算符" align="left">                            <template slot-scope="scope">                                <el-form-item :prop="'rules.' + scope.$index + '.operator'" :rules="rules['rules.operator']">                                    <span class="txt" v-if="isReadOnly">{{ scope.row.operator }}</span>                                    <el-select                                        v-else                                        v-model="scope.row.operator"                                        placeholder=""                                        @change="validateKey('rules.' + scope.$index + '.operator', scope.row.operator)"                                        :disabled="scope.row.measuringDataType == 1"                                        @clear="clearOperate(scope.$index)"                                        clearable                                    >                                        <el-option                                            v-for="item in operatoroptions"                                            :key="item.id"                                            :value="item.id"                                            :label="item.name"                                        ></el-option>                                    </el-select>                                </el-form-item>                            </template>                        </el-table-column>                        <el-table-column label="条件值" align="left">                            <template slot-scope="scope">                                <el-form-item :prop="'rules.' + scope.$index + '.value'" :rules="rules['rules.value']">                                    <template v-if="scope.row.measuringDataType == 1">                                        <span class="txt" v-if="isReadOnly">{{                                            toStrById(dictList, scope.row.value, 'specsName', 'specsValue')                                        }}</span>                                        <el-select                                            v-else                                            v-model="scope.row.value"                                            @change="validateKey('rules.' + scope.$index + '.value', scope.row.value)"                                            placeholder=""                                            clearable                                        >                                            <el-option                                                v-for="item in dictList"                                                :key="item.specsValue"                                                :value="item.specsValue"                                                :label="item.specsName"                                            ></el-option>                                        </el-select>                                    </template>                                    <template v-else>                                        <span class="txt" v-if="isReadOnly">{{ scope.row.value }}</span>                                        <el-input                                            v-else                                            v-model.trim="scope.row.value"                                            :disabled="!scope.row.operator"                                            @blur="validateKey('rules.' + scope.$index + '.value', scope.row.value)"                                            maxlength="128"                                            placeholder="数字"                                            clearable                                        ></el-input>                                        <span class="txt time_txt">分钟</span>                                    </template>                                </el-form-item>                            </template>                        </el-table-column>                    </el-table>                </div>            </template>            <template slot="timeSet">                <div class="time_set">                    <div class="time_content" v-for="(item, index) in data.timeList" :key="index">                        <div class="timeduring">                            <div class="time_picker">                                <el-form-item :prop="'timeList.' + index + '.startTime'" :rules="rules.startTime">                                    <el-time-picker                                        value-format="HH:mm:ss"                                        v-model="item.startTime"                                        placeholder="开始时间"                                        class="time_start"                                    >                                    </el-time-picker>                                </el-form-item>                                <el-form-item class="end_time" :prop="'timeList.' + index + '.endTime'" :rules="rules.endTime">                                    <span style="margin: 5px">~</span>                                    <el-time-picker value-format="HH:mm:ss" v-model="item.endTime" placeholder="结束时间" class="time_end">                                    </el-time-picker>                                </el-form-item>                            </div>                            <div class="add_img">                                <i class="icon_add" @click="addTime"></i>                                <i class="icon_delete" v-if="index != 0" @click="deleteTime(index)"></i>                            </div>                        </div>                    </div>                </div>            </template>            <template slot="dayset">                <el-form-item>                    <div class="time_sys">                        <el-switch v-model="checkFlag" width="45" active-color="#0eaeff" inactive-color="#d8d8d8" @change="changeSwitch">                        </el-switch>                        <span class="every_day">每天</span>                        <ul v-if="!checkFlag" class="ul-time">                            <li v-for="(item, index) in dayOption" :key="index" style="cursor: pointer">                                <el-checkbox v-model="item.checked" @change="onChange($event)">{{ item.name }}</el-checkbox>                            </li>                        </ul>                    </div>                </el-form-item>            </template>        </dmp-form>    </div></template><script>import { bodyContent, addCols, operatorOptions, relationOptions, alarmCategoryOptions, toStrById } from './util';export default {    props: {        params: Object    },    data() {        const _selft = this;        return {            data: JSON.parse(JSON.stringify(bodyContent)),            alarmCategory: '1',            measuringCode: '',            cols: [],            measureOptions: [],            dictList: [],            rules: {                communityId:this.$valid.selectRequired('社区'),                productId: this.$valid.selectRequired('产品'),                name: [this.$valid.inputRequired('告警名称'), this.$valid.lengthRange(0, 30)],                // measuringCode: this.$valid.selectRequired('测点'),                measuringCode: this.$valid.custome({                    validator(rule, value, cb) {                        let vv = _selft.measuringCode;                        const rl = rule;                        if (!vv) {                            rl.message = '请选择测点值';                            cb(new Error());                        } else {                            cb();                        }                    }                }),                startTime: this.$valid.custome({                    validator(rule, value, cb) {                        const rl = rule;                        let regExp = /^[0-2][0-9]\:[0-5][0-9]\:[0-5][0-9]$/;                        if (!value) {                            rl.message = '请选择时间';                            cb(new Error());                        } else if (!regExp.test(value)) {                            rl.message = '时间格式错误';                            cb(new Error());                        } else {                            cb();                        }                    }                }),                endTime: this.$valid.custome({                    validator(rule, value, cb) {                        const rl = rule;                        let regExp = /^[0-2][0-9]\:[0-5][0-9]\:[0-5][0-9]$/;                        if (!value) {                            rl.message = '请选择时间';                            cb(new Error());                        } else if (!regExp.test(value)) {                            rl.message = '时间格式错误';                            cb(new Error());                        } else {                            cb();                        }                    }                })                // alarmCategory: this.$valid.selectRequired('告警分类')            },            errors: {},            cascaderProps: { value: 'id', expandTrigger: 'hover' },            alarmCategoryOptions,            measuringOptions: [],            operatoroptions: operatorOptions,            copyoperatorOptions: [],            relationOptions,            productIds: [],            alarmProperty: '2',            productTypeProps: {                value: 'id', // 唯一标识                label: 'label', // 标签显示                children: 'children' // 子级            },            deviceOptions: [],            productOptions: [],            isReadOnly: false,            toStrById,            dayOption: [                { id: 2, name: '周一', checked: false },                { id: 3, name: '周二', checked: false },                { id: 4, name: '周三', checked: false },                { id: 5, name: '周四', checked: false },                { id: 6, name: '周五', checked: false },                { id: 7, name: '周六', checked: false },                { id: 1, name: '周日', checked: false }            ],            checkFlag: true        };    },    computed: {        communityArr() {            return this.$store.getters['getAreaSelect'];        }    },    methods: {        getDeviceOptions(id) {            this.$http.get('/sc-community/device/findByProduct?id=' + id).then(({ data }) => {                this.deviceOptions = data;            });        },        getMeasurePointOptions(id) {            let params = { deviceTypeId: id };            this.$http.get('/sc-community/attributes/listBydeviceTypeId', params).then(({ data }) => {                this.measureOptions = data;            });        },        deviceSelect(value) {            let item = _.find(this.deviceOptions, (it) => it.id == value);            this.$set(this.data, 'iotDeviceId', item.iotDeviceId || '');        },        measureSelect(value) {            let results = {};            this.measureOptions.map((item, index) => {                if (item.id == value) {                    return (results = item);                }            });            this.$set(this.data, 'attributeId', results.id);            this.$set(this.data, 'identifier', results.identifier);            this.getOperator(results.id || '');            if (this.data.rules.length > 1) {                this.data.rules.splice(1, this.data.rules.length);            }            this.data.rules[0].measuringCode = this.measuringCode;            this.data.rules[0].operator = '';            this.data.rules[0].relation = 'AND';            this.data.rules[0].value = '';            if (!_.isEmpty(results)) {                Object.assign(this.rules, {                    'rules.operator': this.$valid.selectRequired('运算符'),                    'rules.value': this.$valid.selectRequired('条件值'),                    'rules.relation': this.$valid.selectRequired('条件关系')                });            } else if (this.data.rules.length == 1) {                this.$refs.form.$refs.form.clearValidate(['rules.0.operator', 'rules.0.value', 'rules.0.relation']);                delete this.rules['rules.operator'];                delete this.rules['rules.value'];                delete this.rules['rules.relation'];            }        },        getOperator(attributeId) {            let _self = this;            _self.$http.get(`/sc-community/attributes/specs/list?attributeId=${attributeId}`).then(({ status, data = [] }) => {                if (status == 0) {                    _self.dictList.splice(0, _self.dictList.length);                    if (data.length > 0) {                        data.map((it) => {                            _self.dictList.push(it);                        });                        if (_self.dictList.length > 0) {                            // eslint-disable-next-line no-param-reassign                            _self.data.rules.map((it) => {                                it.operator = '=';                            });                            this.rules['rules.value'] = this.$valid.selectRequired('条件值');                        } else {                            this.rules['rules.value'] = this.$valid.custome({                                validator(rule, value, cb) {                                    const rl = rule;                                    if (value) {                                        if (value >= -99999999 && value <= 99999999) {                                            cb();                                        } else {                                            rl.message = '您输入格式有误,请重新输入';                                            cb(new Error());                                        }                                    } else {                                        rl.message = '请输入条件值';                                        cb(new Error());                                    }                                }                            });                        }                    } else {                        _self.dictList = _self.dictList.length > 0 ? _self.dictList.splice(0, _self.dictList.length) : [];                    }                    this.data.rules.map((ita) => {                        if (_self.dictList.length > 0) {                            ita.measuringDataType = '1';                            ita.operator = '=';                        } else {                            ita.measuringDataType = '2';                        }                    });                }            });        },        addTime() {            let _self = this;            this.$nextTick(() => {                _self.data.timeList.push({ startTime: '00:00:00', endTime: '23:59:59' });            });        },        deleteTime(index) {            let _self = this;            this.$nextTick(() => {                _self.data.timeList.splice(index, 1);            });        },        changeSwitch() {            let xx = this.checkFlag;        },        onChange(value) {},        validateKey(key, val) {            val && this.$refs.form.$refs.form.clearValidate([key]);        },        measuringChange(id, row) {            const obj = _.find(this.measuringOptions, (v) => v.measuringCode == id);            Object.assign(row, {                operator: '',                value: '',                relation: 'AND',                measuringUnit: ''            });            if (!_.isEmpty(obj)) {                Object.assign(this.rules, {                    'rules[0].measuringCode': this.$valid.selectRequired('测点'),                    'rules.operator': this.$valid.selectRequired('运算符'),                    'rules.value': this.$valid.selectRequired('条件值'),                    'rules.relation': this.$valid.selectRequired('条件关系')                });                const { measuringDataType, measuringUnit, dictList } = obj;                Object.assign(row, {                    measuringDataType,                    measuringUnit,                    dictList                });                if (measuringDataType == 1) {                    // eslint-disable-next-line no-param-reassign                    row.operator = '=';                    this.rules['rules.value'] = this.$valid.selectRequired('条件值');                } else {                    this.rules['rules.value'] = this.$valid.custome({                        validator(rule, value, cb) {                            const rl = rule;                            if (value) {                                if (value >= -99999999 && value <= 99999999) {                                    cb();                                } else {                                    rl.message = '您输入格式有误,请重新输入';                                    cb(new Error());                                }                            } else {                                rl.message = '请输入条件值';                                cb(new Error());                            }                        }                    });                }            } else if (this.data.rules.length == 1) {                this.$refs.form.$refs.form.clearValidate(['rules.0.operator', 'rules.0.value', 'rules.0.relation']);                delete this.rules['rules.measuringCode'];                delete this.rules['rules.operator'];                delete this.rules['rules.value'];                delete this.rules['rules.relation'];            }        },        getMeasuring(id, isEdit) {            this.$http.get(`/zoniot-rmcp-web/alarmRule/getRuleMeasuringList?deviceTypeId=${id}`).then(({ status, data = [] }) => {                if (status == 0) {                    this.measuringOptions = data;                    if (isEdit) {                        const rules = this.data.rules.length                            ? JSON.parse(JSON.stringify(this.data.rules))                            : [                                  {                                      id: '',                                      measuringCode: '',                                      measuringDataType: '',                                      operator: '',                                      value: '',                                      relation: 'AND',                                      measuringUnit: ''                                  }                              ];                        _.each(rules, (v) => {                            const obj = _.find(data, (m) => m.measuringCode == v.measuringCode);                            // eslint-disable-next-line no-param-reassign                            v.dictList = _.isEmpty(obj) ? [] : obj.dictList;                        });                        const params = JSON.parse(JSON.stringify(this.params.data));                        Object.assign(this.data, params, { rules });                    }                }            });        },        productChange(e) {            let  lat = _.last(e)            this.measuringOptions = [];            this.data.productId = e;            this.data.deviceId = '';            this.getDeviceOptions(lat);            this.getMeasurePointOptions(lat);            let rec = this.getCascaderObj(lat, this.productOptions);            this.data.iotProductId = rec.iotId || '';        },        delRule(index) {            this.data.rules.splice(index, 1);            if (this.data.rules.length == 0) {                this.data.rules = [                    {                        id: '',                        measuringCode: '',                        measuringDataType: this.dictList.length > 0 ? '1' : '2',                        operator: '',                        value: '',                        relation: 'AND',                        measuringUnit: ''                    }                ];            }            if (this.data.rules[0].relation != 'AND') {                this.data.rules[0].relation = 'AND';            }        },        addRule(index) {            const props = [`rules.${index}.operator`, `rules.${index}.value`, `rules.${index}.relation`];            let count = props.length;            this.$refs.form.$refs.form.validateField(props, (errorMessage) => {                if (!errorMessage) {                    count -= 1;                }                if (count == 0 && this.data.rules[0].measuringCode) {                    this.data.rules.push({                        id: '',                        measuringCode: this.data.rules[0].measuringCode || '',                        measuringDataType: this.dictList.length > 0 ? '1' : '2',                        operator: this.dictList.length > 0 ? '=' : '',                        value: '',                        relation: 'AND',                        measuringUnit: ''                    });                } else {                }            });        },        reset() {            const dataBak = JSON.parse(JSON.stringify(this.data));            this.data = JSON.parse(JSON.stringify(bodyContent));            if (this.params.todo == 'add') {                this.productIds = [];            } else {                this.data.id = dataBak.id;                this.data.productId = dataBak.productId;                this.data.alarmProperty = dataBak.alarmProperty;            }            this.$refs.form.resetFields();        },        //深拷贝        deepClone(obj) {            if (typeof obj !== 'object') return;            let newObj = obj instanceof Array ? [] : {};            for (let key in obj) {                if (obj.hasOwnProperty(key)) {                    newObj[key] = typeof obj[key] === 'object' ? this.deepClone(obj[key]) : obj[key];                }            }            return newObj;        },        getQueryInfo(id) {            if (this.params && this.params.todo == 'edit') {                this.$http.get(`/sc-community/system/alarmType/findAlarmTypeById?id=${id}`).then(({ data }) => {                    this.data = Object.assign(this.data, data);                    this.data.productId = [null, null, data.productId + ''];                    this.getDeviceOptions(data.productId);                    this.getMeasurePointOptions(data.productId);                    this.measuringCode = this.data.rules[0].measuringCode ? this.data.rules[0].measuringCode : '';                    this.getOperator(this.data.attributeId);                    this.setDaysAndTimes(data.days, data.times);                });            }        },        clearOperate(index) {            this.data.rules[index].value = '';        },        getCascaderObj(val, opt) {            if (!(opt && opt.length)) {                return '';            }            let res = '';            const forFn = (opt, val) => {                for (let i = 0; i < opt.length; i += 1) {                    const item = opt[i];                    if (item.id == val) {                        res = item;                        break;                    }                    if (item.children) {                        forFn(item.children, val);                    }                }            };            forFn(opt, val);            return res;        },        setDaysAndTimes(days = '', times = '-') {            let dayarr = days.split(',');            if (dayarr && dayarr.length > 0) {                if (dayarr[0] == 8) {                    this.checkFlag = true;                } else {                    this.checkFlag = false;                    this.dayOption.map((it) => {                        if (dayarr.includes(it.id.toString())) {                            it.checked = true;                        }                    });                }            }            let timearr = times.split(',');            if (timearr && timearr.length > 0) {                timearr.map((ita, idx) => {                    let timespan = ita.split('-');                    if (timespan && timespan.length > 1) {                        let newitem = null;                        if (idx == 0) {                            this.data.timeList[0].startTime = timespan[0];                            this.data.timeList[0].endTime = timespan[1];                        } else {                            newitem = { startTime: timespan[0], endTime: timespan[1] };                            this.data.timeList.push(newitem);                        }                    } else {                        this.data.timeList.push({ startTime: '', endTime: '' });                    }                });            }        },        submit() {            let _self = this;            new Promise((res) => {                // resolve();                this.$refs.form.validate(res);            })                .then(() => {                    let url = '/sc-community/system/alarmType/add',                        method = 'post';                    if (this.params.todo == 'edit') {                        url = '/sc-community/system/alarmType/edit';                        method = 'post';                    }                    let times = '';                    this.data.timeList.map((item, index) => {                        if (index == _self.data.timeList.length - 1) {                            times += `${item.startTime}-${item.endTime}`;                        } else {                            times += `${item.startTime}-${item.endTime},`;                        }                    });                    let days = '';                    if (!this.checkFlag) {                        this.dayOption.map((itemarr, idx) => {                            if (itemarr.checked) {                                days += itemarr.id + ',';                            }                        });                        days = days.slice(0, days.length - 1);                    } else {                        days = '8';                    }                    let newdata = Object.assign(this.data, { days }, { times });                    const params = JSON.parse(JSON.stringify(newdata));                    params.productId = _.last(params.productId);                    const rules = [];                    // _.each(params.rules, (v) => {                    //   if (v.measuringCode) {                    //     rules.push(v);                    //   }                    // })                    // params.rules = rules;                    _self.data.rules.map((it, index) => {                        if (index >= 1) {                            it.measuringCode = _self.data.rules[0].measuringCode;                        }                    });                    const $loading = this.$loading();                    this.$http[method](url, params)                        .then(({ status, msg }) => {                            if (status == 0) {                                this.$message.success(msg);                                this.params.callback();                                this.$emit('close');                            } else if (status === 500017) {                                this.$set(this.errors, 'name', msg);                            } else {                                this.$message.error(msg);                            }                            $loading.close();                        })                        .catch(() => {                            this.$loading.close();                        });                })                .catch(() => {});        }    },    created() {        this.copyoperatorOptions = operatorOptions.slice();        this.alarmCategory = this.params.alarmCategory;        // this.deviceOptions=this.params.deviceOptions;        this.productOptions = this.params.productOptions;        if (this.alarmCategory == '2') {            let newaddCols = addCols[0].slice(0, 5);            this.cols = [newaddCols];        } else {            this.cols = addCols;        }        if ((this.params && this.params.todo == 'edit') || this.params.todo == 'view') {            this.getQueryInfo(this.params.data.id);            this.$set(this.data, 'name', this.params.data.alarmName);            //给日期和星期赋值this.params.data.days,this.params.data.times            this.isReadOnly = this.params.todo == 'view';        }        this.$set(this.data, 'alarmCategory', this.alarmCategory);        this.$set(this.data, 'sceneType', '3');    }};</script><style lang="scss" scoped>@import './style.scss';.icon-del-alarm {    display: inline-block;    width: 16px;    height: 16px;    cursor: pointer;    background: url('~@assets/img/menuicon/icon-del.png') no-repeat center;    background-size: 100% 100%;    margin-right: 10px;}.icon-add-alarm {    display: inline-block;    width: 16px;    height: 16px;    cursor: pointer;    background: url('~@assets/img/menuicon/icon-add.png') no-repeat center;    background-size: 100% 100%;}.time_picker /deep/ .el-form-item {    margin-bottom: 0px;    .el-form-item__error {        padding-top: 7px;    }    &.end_time {        .el-form-item__error {            left: 40px !important;        }    }}</style>
 |