You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

533 lines
18 KiB

<template>
<ContentWrap>
<!-- 搜索工作栏 -->
1 year ago
<Search
:schema="EquipmentAccounts.allSchemas.searchSchema"
@search="setSearchParams"
@reset="setSearchParams"
/>
</ContentWrap>
1 year ago
<!-- 列表头部 -->
<TableHead
:HeadButttondata="HeadButttondata"
@button-base-click="buttonBaseClick"
:routeName="routeName"
@updataTableColumns="updataTableColumns"
@searchFormClick="searchFormClick"
:allSchemas="EquipmentAccounts.allSchemas"
/>
<!-- 列表 -->
<ContentWrap>
<Table
:columns="tableColumns"
:data="tableObject.tableList"
:loading="tableObject.loading"
:pagination="{
total: tableObject.total
}"
v-model:pageSize="tableObject.pageSize"
v-model:currentPage="tableObject.currentPage"
v-model:sort="tableObject.sort"
>
1 year ago
<template #code="{ row }">
<el-button type="primary" link @click="openDetail(row, '代码', row.code)">
<span>{{ row.code }}</span>
</el-button>
</template>
<template #action="{ row }">
1 year ago
<ButtonBase :Butttondata="butttondata" @button-base-click="buttonTableClick($event, row)" />
</template>
</Table>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<BasicForm
ref="basicFormRef"
@success="formsSuccess"
:rules="EquipmentAccountsRules"
:formAllSchemas="EquipmentAccounts.allSchemas"
:apiUpdate="EquipmentAccountsApi.updateEquipmentAccounts"
:apiCreate="EquipmentAccountsApi.createEquipmentAccounts"
@searchTableSuccess="searchTableSuccess"
:isBusiness="false"
/>
<!-- 详情 -->
1 year ago
<DetailLedger
ref="detailRef"
:isBasic="true"
:allSchemas="EquipmentAccounts.allSchemas"
:subTabs="subTabList"
:operationRecordList="operationRecordList"
@handleOperationTabsChange="handleOperationTabsChange"
:detailAllSchemas="detailAllSchemas"
:apiPage="apiPage"
:dialogApiPage="dialogApiPage"
:dialogAllSchemas="dialogAllSchemas"
1 year ago
:dynamicInfoFields="dynamicInfoFields"
funcCode="device_mould_file"
1 year ago
/>
<!-- 主要部件 -->
<SearchTable ref="searchTableRef" @searchTableSuccess="submitEquipmentMainPartRelation" />
<!-- 备件 -->
<SearchTable ref="searchSparePartTableRef" @searchTableSuccess="submitSparePartRelation" />
<!-- 导入 -->
1 year ago
<ImportForm
ref="importFormRef"
url="/eam/device/equipment-accounts/import"
:importTemplateData="importTemplateData"
@success="importSuccess"
/>
</template>
<script setup lang="ts">
import download from '@/utils/download'
1 year ago
import { EquipmentAccounts, EquipmentAccountsRules } from './equipmentAccounts.data'
import * as EquipmentAccountsApi from '@/api/eam/equipmentAccounts'
import * as defaultButtons from '@/utils/disposition/defaultButtons'
import TableHead from '@/components/TableHead/src/TableHead.vue'
import ImportForm from '@/components/ImportForm/src/ImportForm.vue'
import DetailLedger from '@/components/Detail/src/DetailLedger.vue'
1 year ago
import { RelationMainPart, RelationMainPartRules } from '../relationMainPart/relationMainPart.data'
import * as RelationMainPartApi from '@/api/eam/relationMainPart'
1 year ago
import {
EquipmentMainPart,
EquipmentMainPartRules
} from '../equipmentMainPart/equipmentMainPart.data'
import * as EquipmentMainPartApi from '@/api/eam/equipmentMainPart'
1 year ago
import { Item, ItemRules } from '../item/item.data'
import * as ItemApi from '@/api/eam/item'
import {
EquipmentToolSparePart,
EquipmentToolSparePartRules
} from '../equipmentToolSparePart/equipmentToolSparePart.data'
import * as EquipmentToolSparePartApi from '@/api/eam/equipmentToolSparePart'
1 year ago
import {
EquipmentReportRepairRequest,
EquipmentReportRepairRequestRules
} from '../equipmentReportRepairRequest/equipmentReportRepairRequest.data'
import * as EquipmentReportRepairRequestApi from '@/api/eam/equipmentReportRepairRequest'
1 year ago
import {
EquipmentSpotCheckRecordMain,
EquipmentSpotCheckRecordMainRules
} from '../equipmentSpotCheckRecordMain/equipmentSpotCheckRecordMain.data'
import * as EquipmentSpotCheckRecordMainApi from '@/api/eam/equipmentSpotCheckRecordMain'
1 year ago
import {
EquipmentSpotCheckRecordDetail,
EquipmentSpotCheckRecordDetailRules
} from '../equipmentSpotCheckRecordDetail/equipmentSpotCheckRecordDetail.data'
import * as EquipmentSpotCheckRecordDetailApi from '@/api/eam/equipmentSpotCheckRecordDetail'
1 year ago
import {
EquipmentInspectionRecordMain,
EquipmentInspectionRecordMainRules
} from '../equipmentInspectionRecordMain/equipmentInspectionRecordMain.data'
import * as EquipmentInspectionRecordMainApi from '@/api/eam/equipmentInspectionRecordMain'
1 year ago
import {
EquipmentInspectionRecordDetail,
EquipmentInspectionRecordDetailRules
} from '../equipmentInspectionRecordDetail/equipmentInspectionRecordDetail.data'
import * as EquipmentInspectionRecordDetailApi from '@/api/eam/equipmentInspectionRecordDetail'
1 year ago
import {
EquipmentRepairRecordMain,
EquipmentRepairRecordMainRules
} from '../equipmentRepairRecordMain/equipmentRepairRecordMain.data'
import * as EquipmentRepairRecordMainApi from '@/api/eam/equipmentRepairRecordMain'
1 year ago
import {
EquipmentRepairRecordDetail,
EquipmentRepairRecordDetailRules
} from '../equipmentRepairRecordDetail/equipmentRepairRecordDetail.data'
import * as EquipmentRepairRecordDetailApi from '@/api/eam/equipmentRepairRecordDetail'
1 year ago
import {
EquipmentMaintenanceRecordMain,
EquipmentMaintenanceRecordMainRules
} from '../equipmentMaintenanceRecordMain/equipmentMaintenanceRecordMain.data'
import * as EquipmentMaintenanceRecordMainApi from '@/api/eam/equipmentMaintenanceRecordMain'
1 year ago
import {
EquipmentMaintenanceRecordDetail,
EquipmentMaintenanceRecordDetailRules
} from '../equipmentMaintenanceRecordDetail/equipmentMaintenanceRecordDetail.data'
import * as EquipmentMaintenanceRecordDetailApi from '@/api/eam/equipmentMaintenanceRecordDetail'
1 year ago
import * as WorkshopApi from '@/api/wms/workshop'
import * as ProductionlineApi from '@/api/wms/productionline'
import * as EquipmentSupplierApi from '@/api/eam/equipmentSupplier'
import * as EquipmentManufacturerApi from '@/api/eam/equipmentManufacturer'
defineOptions({ name: 'EquipmentAccounts' })
const message = useMessage() // 消息弹窗
const { t } = useI18n() // 国际化
const route = useRoute() // 路由信息
const routeName = ref()
const deviceNumber = ref()
routeName.value = route.name
const tableColumns = ref(EquipmentAccounts.allSchemas.tableColumns)
1 year ago
const tabs = ref<{ label: string; prop: string }[]>([])
const subTabList = ref([])
const detailAllSchemas = ref()
const apiPage = ref()
const dialogApiPage = ref()
const dialogAllSchemas = ref()
// 查询页面返回
const searchTableSuccess = (formField, searchField, val, formRef) => {
nextTick(() => {
const setV = {}
setV[formField] = val[0][searchField]
1 year ago
if (formField == 'workshopName') {
1 year ago
setV['workshopCode'] = val[0]['code']
setV['workshopName'] = val[0]['name']
1 year ago
} else if (formField == 'lineName') {
1 year ago
setV['lineCode'] = val[0]['code']
setV['lineName'] = val[0]['name']
1 year ago
} else if (formField == 'manufactureName') {
1 year ago
setV['manufactureCode'] = val[0]['number']
setV['manufactureName'] = val[0]['name']
1 year ago
} else if (formField == 'supplierName') {
1 year ago
setV['supplierCode'] = val[0]['number']
setV['supplierName'] = val[0]['name']
}
formRef.setValues(setV)
})
}
const operationRecordList = ref([
1 year ago
{ label: '报修记录', value: 'report' },
{ label: '维修记录', value: 'repair' },
{ label: '保养记录', value: 'maintenance' },
{ label: '巡检记录', value: 'inspection' },
{ label: '点检记录', value: 'spot_check' }
])
1 year ago
const dynamicInfoFields = ref([
1 year ago
'totalRunningTime',
'maintenanceRunningTime',
'usageTimes',
'lastInspectionDate',
'outageRate',
'breakdownRecover',
'purchaseInterval'
])
1 year ago
// 字段设置 更新主列表字段
const updataTableColumns = (val) => {
tableColumns.value = val
}
const { tableObject, tableMethods } = useTable({
getListApi: EquipmentAccountsApi.getEquipmentAccountsPage // 分页接口
})
// 获得表格的各种操作
const { getList, setSearchParams } = tableMethods
// 列表头部按钮
const HeadButttondata = [
1 year ago
defaultButtons.defaultAddBtn({ hasPermi: 'eam:equipment-accounts:create' }), // 新增
defaultButtons.defaultImportBtn({ hasPermi: 'eam:equipment-accounts:import' }), // 导入
defaultButtons.defaultExportBtn({ hasPermi: 'eam:equipment-accounts:export' }), // 导出
defaultButtons.defaultFreshBtn(null), // 刷新
defaultButtons.defaultFilterBtn(null), // 筛选
1 year ago
defaultButtons.defaultSetBtn(null) // 设置
// {
// label: '自定义扩展按钮',
// name: 'zdy',
// hide: false,
// type: 'primary',
// icon: 'Select',
// color: ''
// },
]
// 头部按钮事件
const buttonBaseClick = (val, item) => {
1 year ago
if (val == 'add') {
// 新增
openForm('create')
1 year ago
} else if (val == 'import') {
// 导入
handleImport()
1 year ago
} else if (val == 'export') {
// 导出
handleExport()
1 year ago
} else if (val == 'refresh') {
// 刷新
getList()
1 year ago
} else if (val == 'filtrate') {
// 筛选
} else {
// 其他按钮
console.log('其他按钮', item)
}
}
// 列表-操作按钮
const butttondata = [
1 year ago
defaultButtons.mainListEditBtn({ hasPermi: 'eam:equipment-accounts:update' }), // 编辑
defaultButtons.componentBtn({ hasPermi: 'eam:equipment-accounts:component' }), // 部件
defaultButtons.sparePartBtn({ hasPermi: 'eam:equipment-accounts:item' }) // 备件
// defaultButtons.mainListDeleteBtn({hasPermi:'eam:equipment-accounts:delete'}), // 删除
]
// 列表-操作按钮事件
const buttonTableClick = async (val, row) => {
1 year ago
if (val == 'edit') {
// 编辑
openForm('update', row)
1 year ago
} else if (val == 'delete') {
// 删除
handleDelete(row.id)
1 year ago
} else if (val == 'component') {
// 部件
openComponent(row)
1 year ago
} else if (val == 'sparePart') {
// 备件
openSparePart(row)
}
}
/** 添加/修改操作 */
const basicFormRef = ref()
1 year ago
const openForm = async (type: string, row?: any) => {
1 year ago
if (type == 'update') {
const equipmentManufacturerNoPage =
await EquipmentManufacturerApi.getEquipmentManufacturerNoPage({})
1 year ago
const equipmentSupplierNoPage = await EquipmentSupplierApi.getEquipmentSupplierNoPage({})
const workshopNoPage = await WorkshopApi.getWorkshopNoPage({})
1 year ago
const productionlineNoPage = await ProductionlineApi.getProductionlineNoPage({})
row.workshopName = workshopNoPage?.find((item) => item.code == row.workshopCode)?.name
row.lineName = productionlineNoPage?.find((item) => item.code == row.lineCode)?.name
row.manufactureName = equipmentManufacturerNoPage?.find(
(item) => item.number == row.manufactureCode
)?.name
row.supplierName = equipmentSupplierNoPage?.find(
(item) => item.number == row.supplierCode
)?.name
1 year ago
}
basicFormRef.value.open(type, row)
}
// form表单提交
1 year ago
const formsSuccess = async (formType, data) => {
var isHave = EquipmentAccounts.allSchemas.formSchema.some(function (item) {
return item.field === 'activeTime' || item.field === 'expireTime'
})
if (isHave) {
if (data.activeTime && data.expireTime && data.activeTime >= data.expireTime) {
message.error('失效时间要大于生效时间')
1 year ago
return
}
}
1 year ago
if (data.activeTime == 0) data.activeTime = null
if (data.expireTime == 0) data.expireTime = null
if (formType === 'create') {
await EquipmentAccountsApi.createEquipmentAccounts(data)
message.success(t('common.createSuccess'))
} else {
await EquipmentAccountsApi.updateEquipmentAccounts(data)
message.success(t('common.updateSuccess'))
}
basicFormRef.value.dialogVisible = false
getList()
}
/** 详情操作 */
const detailRef = ref()
const openDetail = async (row: any, titleName: any, titleValue: any) => {
detailRef.value.openDetail(row, titleName, titleValue, 'basicEquipmentAccounts')
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
// 删除的二次确认
await message.delConfirm()
// 发起删除
await EquipmentAccountsApi.deleteEquipmentAccounts(id)
message.success(t('common.delSuccess'))
// 刷新列表
await getList()
} catch {}
}
/** 导出按钮操作 */
const exportLoading = ref(false) // 导出的加载中
const handleExport = async () => {
try {
// 导出的二次确认
await message.exportConfirm()
// 发起导出
exportLoading.value = true
const data = await EquipmentAccountsApi.exportEquipmentAccounts(tableObject.params)
download.excel(data, '设备台账.xlsx')
} catch {
} finally {
exportLoading.value = false
}
}
/** 导入 */
const importFormRef = ref()
const handleImport = () => {
importFormRef.value.open()
}
// 导入附件弹窗所需的参数
const importTemplateData = reactive({
templateUrl: '',
templateTitle: '设备台账导入模版.xlsx'
})
// 导入成功之后
const importSuccess = () => {
getList()
}
// 筛选提交
const searchFormClick = (searchData) => {
tableObject.params = {
isSearch: true,
filters: searchData.filters
}
getList() // 刷新当前列表
}
const searchTableRef = ref()
const searchSparePartTableRef = ref()
const searchTableSelections = ref([])
const searchTableSparePartSelections = ref([])
const syncData = async (row) => {
searchTableSparePartSelections.value = []
1 year ago
await RelationMainPartApi.getRelationMainPartNoPage({
equipmentCode: row.code,
type: 'DEVICE'
}).then(async (res) => {
await EquipmentMainPartApi.getEquipmentMainPartNoPage({ type: 'DEVICE' }).then((response) => {
searchTableSelections.value = response.filter((element) => {
let flag = false
res.forEach((item) => {
if (element.code == item.mainPartCode) {
1 year ago
flag = true
}
1 year ago
})
return flag
})
})
})
}
const syncSparePartData = async (row) => {
searchTableSparePartSelections.value = []
1 year ago
await EquipmentToolSparePartApi.getEquipmentToolSparePartNoPage({
equipmentToolCode: row.code
}).then(async (res) => {
await SparePartApi.getSparePartNoPage({}).then((response) => {
searchTableSparePartSelections.value = response.filter((element) => {
let flag = false
res.forEach((item) => {
if (element.code == item.sparePartCode) {
1 year ago
flag = true
}
1 year ago
})
return flag
})
})
})
}
/** 绑定备件操作 */
1 year ago
const openComponent = async (row: any) => {
await syncData(row)
searchTableRef.value.open(
'选择部件',
EquipmentMainPart.allSchemas,
EquipmentMainPartApi.getEquipmentMainPartPage,
'equipmentMainPart',
EquipmentMainPart.allSchemas.searchSchema,
true,
1 year ago
null, //type
row,
1 year ago
{ type: 'DEVICE' },
null,
null,
null,
searchTableSelections.value
)
}
1 year ago
const openSparePart = async (row: any) => {
await syncSparePartData(row)
searchSparePartTableRef.value.open(
'选择备件',
1 year ago
Item.allSchemas,
ItemApi.getItemPage,
'item',
Item.allSchemas.searchSchema,
true,
1 year ago
null, //type
row,
null,
null,
null,
null,
searchTableSparePartSelections.value
)
}
1 year ago
const submitEquipmentMainPartRelation = (formField, searchField, val, formRef, rowRef) => {
const deviceMainPartRelList = val.map((element) => ({
1 year ago
mainPartCode: element.number,
equipmentCode: rowRef.code,
type: 'DEVICE'
}))
RelationMainPartApi.createRelationMainPartBatch(deviceMainPartRelList).then((res) => {
message.success(t('common.createSuccess'))
getList()
})
}
const handleOperationTabsChange = (val) => {
1 year ago
if (val == 'report') {
apiPage.value = EquipmentReportRepairRequestApi.getEquipmentReportRepairRequestPage
detailAllSchemas.value = EquipmentReportRepairRequest.allSchemas
1 year ago
} else if (val == 'repair') {
apiPage.value = EquipmentRepairRecordMainApi.getEquipmentRepairRecordMainPage
detailAllSchemas.value = EquipmentRepairRecordMain.allSchemas
dialogApiPage.value = EquipmentRepairRecordDetailApi.getEquipmentRepairRecordDetailPage
dialogAllSchemas.value = EquipmentRepairRecordDetail.allSchemas
1 year ago
} else if (val == 'maintenance') {
apiPage.value = EquipmentMaintenanceRecordMainApi.getEquipmentMaintenanceRecordMainPage
detailAllSchemas.value = EquipmentMaintenanceRecordMain.allSchemas
1 year ago
dialogApiPage.value =
EquipmentMaintenanceRecordDetailApi.getEquipmentMaintenanceRecordDetailPage
dialogAllSchemas.value = EquipmentMaintenanceRecordDetail.allSchemas
1 year ago
} else if (val == 'inspection') {
apiPage.value = EquipmentInspectionRecordMainApi.getEquipmentInspectionRecordMainPage
detailAllSchemas.value = EquipmentInspectionRecordMain.allSchemas
dialogApiPage.value = EquipmentInspectionRecordDetailApi.getEquipmentInspectionRecordDetailPage
dialogAllSchemas.value = EquipmentInspectionRecordDetail.allSchemas
1 year ago
} else if (val == 'spot_check') {
apiPage.value = EquipmentSpotCheckRecordMainApi.getEquipmentSpotCheckRecordMainPage
detailAllSchemas.value = EquipmentSpotCheckRecordMain.allSchemas
dialogApiPage.value = EquipmentSpotCheckRecordDetailApi.getEquipmentSpotCheckRecordDetailPage
dialogAllSchemas.value = EquipmentSpotCheckRecordDetail.allSchemas
}
}
1 year ago
const submitSparePartRelation = (formField, searchField, val, formRef, rowRef) => {
const equipmentToolSparePartRelList = val.map((element) => ({
1 year ago
sparePartCode: element.number,
equipmentToolCode: rowRef.code,
type: 'DEVICE'
}))
EquipmentToolSparePartApi.createEquipmentToolSparePartBatch(equipmentToolSparePartRelList).then(
(res) => {
message.success(t('common.createSuccess'))
getList()
}
)
}
/** 初始化 **/
onMounted(async () => {
getList()
importTemplateData.templateUrl = await EquipmentAccountsApi.importTemplate()
})
</script>