mt-yd-ui/src/views/modules/monitoring/product.vue

271 lines
7.9 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="mod-config">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item>
<el-input v-model="dataForm.key" :placeholder="$t('prod.name') + ' / ' + $t('prod.code')" clearable></el-input>
</el-form-item>
<el-form-item>
<el-button @click="getDataList()">{{ $t('query') }}</el-button>
<!-- <el-button @click="addOrEdit()">测试</el-button> -->
<!-- <el-button v-if="$hasPermission('monitoring:product:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> -->
<el-button v-if="$hasPermission('monitoring:product:save')" type="primary" @click="addOrEdit()">{{ $t('add') }}</el-button>
</el-form-item>
</el-form>
<base-table :data="dataList" :table-head-configs="tableConfigs" :max-height="calcMaxHeight(8)" @operate-event="handleOperations" @refreshDataList="getDataList" />
<el-pagination
@size-change="sizeChangeHandle"
@current-change="currentChangeHandle"
:current-page="pageIndex"
:page-sizes="[10, 20, 50, 100]"
:page-size="pageSize"
:total="totalPage"
layout="total, sizes, prev, pager, next, jumper"
></el-pagination>
<!-- 弹窗, 新增 / 修改 -->
<!-- <add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update> -->
<base-dialog v-if="showbasedialog" ref="basedialog" :configs="addOrUpdateConfigs" @refreshDataList="getDataList" @destory-dialog="showbasedialog = false" />
</div>
</template>
<script>
import { calcMaxHeight } from '@/utils'
import { timeFilter } from '@/utils/filters'
// import AddOrUpdate from './product-add-or-update'
import i18n from '@/i18n'
import BaseTable from '@/components/base-table'
import TableOperateComponent from '@/components/base-table/components/operationComponent'
// import TableTextComponent from '@/components/base-table/components/detailComponent'
import BaseDialog from '@/components/base-dialog/addOrUpdate'
import moment from 'moment'
import dictListMixin from '@/mixins/dictlist-module'
import { dictFilter } from '@/utils/filters'
const UnitDictTypeId = '1557173812109242370'
const ProductTypeDictTypeId = '1557179530308616193'
const tableConfigs = [
{ type: 'index', width: 100, name: i18n.t('index') },
{ prop: 'createTime', name: i18n.t('createTime'), filter: timeFilter },
{ prop: 'name', name: i18n.t('prod.name') },
{ prop: 'code', name: i18n.t('prod.code') },
{ prop: 'specifications', name: i18n.t('prod.spec') },
{ prop: 'unitDictValue', name: i18n.t('unit'), filter: dictFilter(UnitDictTypeId) },
{ prop: 'operations', name: i18n.t('handle'), fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['viewAttr', 'delete'] }
]
const addOrUpdateConfigs = {
type: 'dialog', // dialog | drawer | page
infoUrl: '/monitoring/product',
fields: [
'name',
{
name: 'code',
api: '/monitoring/product/getCode'
},
{
name: 'processTime',
label: i18n.t('prod.processTime'),
placeholder: i18n.t('prod.processTimeHints'),
type: 'number',
required: true,
rules: [
{
type: 'number',
trigger: 'blur',
transform: val => Number(val),
message: i18n.t('hints.number')
}
]
},
{
name: 'typeDictValue',
label: i18n.t('prod.type'), // 对于非常见属性最好自己指定label
type: 'select',
options: [
// 动态获取
]
},
{
name: 'unitDictValue',
label: i18n.t('unit'),
type: 'select',
// placeholder: '请选择单位',
options: [
// 动态获取
]
},
{
name: 'area',
label: i18n.t('prod.area'),
type: 'number',
rules: [{ type: 'number', transform: val => Number(val), message: i18n.t('hints.number'), trigger: 'blur' }]
},
'specifications',
'remark'
],
operations: [
{ name: 'cancel', url: true, showAlways: true },
{ name: 'save', url: '/monitoring/product', permission: 'monitoring:product:save', showOnEdit: false },
{ name: 'update', url: '/monitoring/product', permission: 'monitoring:product:update', showOnEdit: true }
],
subtable: {
// for i18n
title: i18n.t('prod.attr'),
url: '/monitoring/productArrt',
relatedField: 'productId',
tableConfigs: [
{ type: 'index', width: 100, name: i18n.t('index') },
{ prop: 'createTime', name: i18n.t('createTime'), filter: val => (val ? moment(val).format('YYYY-MM-DD hh:mm:ss') : '-') },
{ prop: 'name', name: i18n.t('attrName'), formField: true, rules: [{ required: true, message: i18n.t('required'), trigger: 'blur' }] },
{ prop: 'code', name: i18n.t('attrValue'), formField: true },
{ prop: 'operations', name: i18n.t('handle'), fixed: 'right', width: 180, subcomponent: TableOperateComponent, options: ['edit', 'delete'] }
]
}
}
export default {
mixins: [dictListMixin],
data() {
return {
calcMaxHeight,
tableConfigs,
dataForm: {
key: ''
},
dataList: [],
pageIndex: 1,
pageSize: 10,
totalPage: 0,
dataListLoading: false,
dataListSelections: [],
addOrUpdateVisible: false,
addOrUpdateConfigs,
showbasedialog: false
}
},
components: {
// AddOrUpdate,
BaseTable,
BaseDialog
},
created() {
this.initDictList([UnitDictTypeId, ProductTypeDictTypeId])
this.addOrUpdateConfigs.fields.forEach(item => {
if (item.name) {
if (item.name === 'typeDictValue') {
item.options = this.dictList[ProductTypeDictTypeId]
} else if (item.name === 'unitDictValue') {
item.options = this.dictList[UnitDictTypeId]
}
}
})
},
activated() {
this.getDataList()
},
methods: {
//
addOrEdit(id) {
this.showbasedialog = true
this.$nextTick(() => {
this.$refs.basedialog.init(id)
})
},
// 获取数据列表
getDataList() {
// console.log("after dialog close: ", this.showbasedialog)
this.showbasedialog = false // 清理弹窗
this.dataListLoading = true
this.$http({
url: this.$http.adornUrl('/monitoring/product/page'),
method: 'get',
params: this.$http.adornParams({
page: this.pageIndex,
limit: this.pageSize,
key: this.dataForm.key
})
}).then(({ data }) => {
if (data && data.code === 0) {
this.dataList = data.data.list
this.totalPage = data.data.total
} else {
this.dataList = []
this.totalPage = 0
}
this.dataListLoading = false
})
},
// 每页数
sizeChangeHandle(val) {
this.pageSize = val
this.pageIndex = 1
this.getDataList()
},
// 当前页
currentChangeHandle(val) {
this.pageIndex = val
this.getDataList()
},
// 多选
selectionChangeHandle(val) {
this.dataListSelections = val
},
// 新增 / 修改
addOrUpdateHandle(id) {
this.addOrUpdateVisible = true
this.$nextTick(() => {
this.$refs.addOrUpdate.init(id)
})
},
// 表格操作事件管理
handleOperations({ type, data }) {
switch (type) {
case 'viewAttr': // <== 对照 tableConfig
return this.addOrEdit(data)
case 'delete':
return this.deleteHandle(data)
}
},
// 删除
deleteHandle(id) {
console.log('id is: ', id)
var ids = id
? [id]
: // ? [1556817256347828335]
this.dataListSelections.map(item => {
return item.id
})
this.$confirm(`${i18n.t('prompt.info', { handle: id ? i18n.t('delete').toLowerCase() : i18n.t('deleteBatch').toLowerCase() })}`, i18n.t('prompt.title'), {
confirmButtonText: i18n.t('confirm'),
cancelButtonText: i18n.t('cancel'),
type: 'warning'
}).then(() => {
this.$http({
url: this.$http.adornUrl('/monitoring/product'),
method: 'delete',
data: ids
// or : data: this.$http.adornData(ids, false, 'raw')
})
// or: this.$http.delete(this.$http.adornUrl('/monitoring/product'), { data: this.$http.adornData(ids, false) })
.then(({ data }) => {
if (data && data.code === 0) {
this.$message({
message: i18n.t('prompt.success'),
type: 'success',
duration: 1500,
onClose: () => {
this.getDataList()
}
})
} else {
this.$message.error(data.msg)
}
})
})
}
}
}
</script>