Newer
Older
operation_web / src / mixins / project.js
@yuwj yuwj on 27 Jan 2021 10 KB 集成数据滤网模块
// 消息提示
import {
  notify
} from '../util/item';
import {
  mapActions
} from 'vuex';
// 表格组件
import xfTable from '../model/tableColmn';
// 按钮组件
import xfButtons from '../model/buttons.vue';
// 按钮权限引入
import {
  buttonPermiss
} from '../util/authority';

/**
 * 项目站点管理等公有属性标识
 */
export default {
  data () {
    return {
      'authority': {},
      'projectData': [],
      'siteDataTc': [],
      'deleteList': [],
      'searchVal': '', //搜索框内容
      'modelHead': ['添加数据', '修改数据'],
      'page': { //表格分页
        'pageSizes': [10, 20, 30, 40], //默认可以调节展示的页数
        'currentPage': 1, //当前页数
        'total': 1, //总条数
        'pageSize': 10 //默认展示多少条数据
      }
    };
  },
  created () {
    // 按钮权限问题,
    this.authority = buttonPermiss(this.$route.name);
    // this.loadOption.menu = buttonPermiss(this.$route.name)['menu'];
  },
  mounted () { },
  'components': {
    xfTable,
    xfButtons
  },
  'methods': {
    ...mapActions({
      'distingLoading': 'system/distingLoading' // 取消或添加请求的loading状态框
    }),
    authorityMeth (name) {
      // 按钮权限问题,
      this.authority = buttonPermiss(name);
    },
    async getTableData (params, url, dif = 1) {
      /**
       * 初次进入,获取表格的值
       * @param {Object} params 传入的值
       * @param {String} url http路径
       * @return {Object} promise对象 成功或者失败的callback
       */
      try {
        // this.distingLoading(true)
        let res = '';

        if (dif === 1) {
          res = await this.$http.get(url, params);
        } else {
          res = await this.$http.post(url, params);
        }
        // this.distingLoading(false)

        return new Promise((resolve, reject) => {
          this.setCurrent();
          resolve(res);
        });
      } catch (error) {
        this.$store.commit('system/loading', false);
        throw new Error(error)
      }
    },
    async getHttpDatas (url, params = {}, httpType = 1, type = 1) {
      /**
       * 数据存储
       * @param {String} url 请求到的连接,格式为data-code类型
       * @param {Object} params 请求连接
       * @param {Number} httpType 数据请求类型,1为get,2为post
       * @param {Number} type 类型2为有提示消息
       */

      try {
        // 请求的loading的隐藏
        // this.distingLoading(true)
        let res = '';

        if (httpType === 1) {
          res = await this.$http.get(url, {
            params: params
          });
        } else {
          res = await this.$http.post(url, params);
        }
        // this.distingLoading(false)
        let response = res.data.data ? res.data.data : [];

        if (type === 2 && res.data.code === 200) {
          // 成功提示
          notify(res);
        }

        return new Promise((resolve, reject) => {
          resolve(response);
        });
      } catch (error) {
        console.log(error);
      }

    },
    setCurrent () {
      // 清理选中行
      this.clickValue = '';
      this.$refs.table ? this.$refs.table.emptyCurrentRo() : null;
    },
    correct (formName) {
      // 表单验证
      return new Promise((resolve, reject) => {
        this.$refs[formName].validate((valid) => {
          if (valid) {
            resolve()
          } else {
            console.log('error submit!!');
            reject()
            return false;
          }
        });
      })
    },
    searChange (val) {
      // 输入框改变时触发
      this.searchVal = val;
    },
    rendering (response) {
      // 表格数据渲染

      if (response.data.code !== 200) {
        notify(response);
      }

      this.$set(this.page, 'total', response.data.data ? response.data.data.total : 1)
      this.getSiteData = response.data.data ? response.data.data.list : [];

      // 当删除多条数据的时候,监测上一页数据量,并展示
      if (this.getSiteData.length === 0 && this.page.currentPage !== 1) {
        this.$set(this.page, 'currentPage', this.page.currentPage - 1)

        this.getLists(this.searchVal);
      }
      // 调用子组件首次加载数据
      this.$refs.table.onLoad(this.getSiteData, this.loadOption, this.page);
    },
    handleCurrentRowChange (row) {
      // 表格行单击选中,进行数据存储,并进行判断
      this.clickValue = row;
    },
    clickeEdit () {
      // 单击选中行修改
      if (!this.clickValue) {
        this.$notify.warning('请先选择要修改的行,再进行数据修改!');
        return;
      } else {
        this.handleEdit(this.clickValue);
      }
    },
    searchChange (val = '') {
      // 搜索数据
      this.searchVal = val;
      this.$set(this.page, 'currentPage', 1)
      if (val === '') {
        this.getLists();
        return
      }

      this.getLists(val);

    },
    currentChange (val) {
      /**
       * 翻页功能
       * @param {String} val 当前页数
       */

      this.$set(this.page, 'currentPage', val)
      this.getLists(this.searchVal);
    },
    sizeChange (val) {
      /**
       * 选择展示默认展示多少条数据
       * @param {String} val 当前选中每次展示多少条
       */
      this.$set(this.page, 'currentPage', 1)
      this.$set(this.page, 'pageSize', val)

      this.getLists();
    },
    resetChecked (formName = 'ruleForm') {
      // 清空表单状态和值
      this.$nextTick(() => {
        setTimeout(() => {
          let falge = this.$refs[formName];

          if (falge) {
            this.$refs[formName].clearValidate();
          }
        }, 300);
      });
    },
    refreshChange (val) {
      // 暂无数据,点击刷新
      this.getLists(val);
    },
    openContent () {
      // 打开模态框方法
    },
    closeContent () {
      // 关闭模态框方法
    },
    delectVals () {
      /**
       * 批量删除
       * @param {Number} type 1为,分割;2为数组格式
       */
      if (this.deleteList.length === 0) {
        this.$notify({
          'message': '请选择要删除的数据!',
          'type': 'warning'
        });
      } else {
        this.$confirm('是否确认删除选择数据,删除后不可恢复?', '提示', {
          'confirmButtonText': '确定',
          'cancelButtonText': '取消',
          'type': 'warning'
        }).then(() => {
          let datas = [];

          this.deleteList.forEach(item => {
            datas.push(item[this.deleteId]);
          });

          datas = datas.join(',');
          this.deleteUserLise(datas, this.deleteList = []);
        }).catch(() => {
          this.$notify({
            'type': 'info',
            'message': '已取消删除'
          });
        });
      }
    },
    selectionChange (list) {
      // 删除选中框
      this.deleteList = list;
    },
    delectVal (row = []) {
      /**
       * 删除此行数据
       * @param {object} row
       */
      let rows = row;
      this.$confirm('是否删除选择数据 , 删除后不可恢复 ?', '提示', {
        'cancelButtonText': '取消',
        'confirmButtonText': '确定',
        'type': 'warning'
      }).then(() => {
        if (Array.isArray(row)) {
          // 删除多条数据
          let datas = [];

          this.deleteList.forEach(item => {
            datas.push(item[this.deleteId]);
          });
          datas = datas.join(',');
          this.deleteUserLise(datas, this.deleteList);
        } else {
          // 单行删除
          this.deleteUserLise(row[this.deleteId], rows);
        }

      }).catch(() => {
        this.$notify({
          'type': 'info',
          'message': '已取消删除'
        });
      });
    },
    async asyncDelete (params, url) {
      // 删除
      const response = await this.$http.delete(url, params);

      notify(response);
      if (response.data.code === 200) {
        this.getLists();
      }

    },
    async projectDatas () {
      /**
       * 获取项目信息
       */
      this.deleteList = [];
      let datas = {
        'params': {
          'projectName': '',
          'pageNo': 1,
          'pageSize': 1000
        }
      };
      let response = await this.getTableData(datas, this.nozzle.projectGet);

      this.projectData = response.data ? response.data.data.list : [];
    },
    async siteGet (projectNo) {
      // 站点数据填充
      let datas = {
        'params': {
          'projectNo': projectNo
        }
      };
      const response = await this.$http.get(this.nozzle.getListByNosA, datas);

      if (response.data.code === 200) {
        this.siteDataTc = response.data.data.list;
      } else {
        this.siteDataTc = [];
      }
    },
    getWarrantS () {
      /**
       * 获取权限信息
       */
      this.ruleFormWarrant['permissionIds'] = [];
      this.deleteList = [];
      let datas = {
        'pageSize': 1000,
        'pageNo': 1
      };

      this.$http.get(this.nozzle.permissionList, {
        'params': datas
      }).then(response => {
        this.warrantDatas = response.data ? response.data.data.list : [];
        // 调用子组件首次加载数据
      });
    },
    async warrantAdd (datas, url) {
      // 权限控制处理
      this.dataWarrant = false;
      let response = await this.$http.get(url, {
        'params': datas
      });

      notify(response);
    },
    compareTime (startDate, endDate) {
      // 开始时间和结束时间的比较
      if (startDate.length > 0 && endDate.length > 0) {
        var startDateTemp = startDate.split(' ');
        var endDateTemp = endDate.split(' ');

        var arrStartDate = startDateTemp[0].split('-');
        var arrEndDate = endDateTemp[0].split('-');

        var arrStartTime = startDateTemp[1].split(':');
        var arrEndTime = endDateTemp[1].split(':');

        var allStartDate = new Date(arrStartDate[0], arrStartDate[1], arrStartDate[2], arrStartTime[0], arrStartTime[1], arrStartTime[2]);
        var allEndDate = new Date(arrEndDate[0], arrEndDate[1], arrEndDate[2], arrEndTime[0], arrEndTime[1], arrEndTime[2]);

        if (allStartDate.getTime() >= allEndDate.getTime()) {
          this.$notify({
            'type': 'warning',
            'message': '项目开始时间不能大于项目结束时间'
          });
          return false;
        } else {
          // alert("startTime小于endTime,所以通过了");
          return true;
        }
      } else {
        alert('时间不能为空');
        return false;
      }
    },
    notEmpty (value, serial) {
      // 输入框首字母为非空
      if (value.length === 1 && value === ' ') {
        this.ruleForm[serial] = '';
        this.$notify({
          'type': 'warning',
          'message': '首字母不能为空格,请重新输入'
        });
      }
    },
    onCopy (e) {
      // 复制成功
      this.$notify({
        type: 'success',
        message: '复制成功'
      })
    },
    // 复制失败
    onError (e) {
      this.$notify({
        type: 'success',
        message: '复制失败'
      })
    },
  }
};