import { MessageBox } from 'element-ui'

export default {
  data() {
    return {
      items: null,
      recordCount: null,
      listLoading: true,
      dialogStatus: '',
      dialogFormVisible: false,
      temp: {},
      textMap: {
        update: '修改',
        create: '新增'
      },
      dialogPvVisible: false,
      listQuery: {
        pageIndex: 1,
        pageSize: 20
      },
      height: 500
    }
  }
}

export function crudPageList(page, _pagelist) {
  page.listLoading = true
  _pagelist(Object.assign({}, page.listQuery)).then(response => {
    page.items = response.items
    page.listLoading = false
    page.recordCount = response.recordCount
    page.pageIndex = response.pageIndex
    page.pageSize = response.pageSize
  })
}
export function crudGetItem(page, _get, rowid, initData) {
  if (rowid) {
    _get({ id: rowid }).then(response => {
      if (!response.data) {
        MessageBox.alert('数据不存在，请确认是否已删除。', '消息', {
          confirmButtonText: '确定'
        })
        return
      }
      page.temp = response.data
      page.dialogFormVisible = true
      page.$nextTick(() => {
        page.$refs['dataForm'].clearValidate()
      })
    })
  } else {
    page.temp = Object.assign({}, initData)
    page.dialogFormVisible = true
    page.$nextTick(() => {
      page.$refs['dataForm'].clearValidate()
    })
  }
}
export function crudCreate(page, _create, _callback) {
  page.$refs['dataForm'].validate((valid) => {
    if (valid) {
      _create(page.temp).then(response => {
        if (typeof _callback === 'function') {
          _callback()
        }
        page.dialogFormVisible = false
        page.$notify({
          title: '成功',
          message: (page.dialogStatus === 'create') ? '创建成功' : '修改成功',
          type: 'success',
          duration: 2000
        })
      })
    }
  })
}
export function crudDelete(page, _delete, rowid, _callback) {
  MessageBox.confirm('确认删除记录吗？', '删除', {
    confirmButtonText: '确认',
    cancelButtonText: '取消',
    type: 'warning'
  }).then(() => {
    _delete({ id: rowid }).then(response => {
      if (typeof _callback === 'function') {
        _callback()
      }
      page.$notify({
        title: '成功',
        message: '删除成功',
        type: 'success',
        duration: 2000
      })
    })
  })
}
