Browse Source

维修工单

master
张立 1 year ago
parent
commit
8e83c350a8
  1. 1
      .env.development
  2. 5
      src/api/eam/basic/item/index.ts
  3. 51
      src/api/eam/device/deviceMaintenanceDetail/index.ts
  4. 7
      src/components/BasicForm/src/BasicForm.vue
  5. 74
      src/components/Detail/src/Detail.vue
  6. 87
      src/components/SearchTable/src/SearchTable.vue
  7. 11
      src/components/TableForm/src/TableForm.vue
  8. 1
      src/utils/dict.ts
  9. 37
      src/utils/disposition/tabsList.ts
  10. 26
      src/views/eam/basic/item/item.data.ts
  11. 3
      src/views/eam/device/deviceAccounts/deviceAccounts.data.ts
  12. 20
      src/views/eam/device/deviceAccounts/index.vue
  13. 192
      src/views/eam/device/deviceMaintenanceMain/deviceMaintenanceMain.data.ts
  14. 390
      src/views/eam/device/deviceMaintenanceMain/index.vue

1
.env.development

@ -5,6 +5,7 @@ VITE_DEV=false
# 请求路径 # 请求路径
VITE_BASE_URL='http://localhost:12080' VITE_BASE_URL='http://localhost:12080'
# VITE_BASE_URL='http://192.168.0.165:12080'
# 上传路径 # 上传路径
VITE_UPLOAD_URL='http://localhost:12080/admin-api/infra/file/upload' VITE_UPLOAD_URL='http://localhost:12080/admin-api/infra/file/upload'

5
src/api/eam/basic/item/index.ts

@ -62,3 +62,8 @@ export const deleteItem = async (id : number) => {
export const exportItem = async (params) => { export const exportItem = async (params) => {
return await request.download({ url: `/eam/item/export-excel`, params }) return await request.download({ url: `/eam/item/export-excel`, params })
} }
// 修改备件
export const getItemList = async (params) => {
return await request.get({ url: `/eam/item/getListByNumber`, params })
}

51
src/api/eam/device/deviceMaintenanceDetail/index.ts

@ -0,0 +1,51 @@
import request from '@/config/axios'
export interface DeviceMaintenanceDetailVO {
describes: string
describes1: string
workOut: string
maintenances: string
}
// 查询维修工单子列表
export const getDeviceMaintenanceDetailPage = async (params) => {
if (params.isSearch) {
delete params.isSearch
const data = {...params}
return await request.post({ url: '/wms/purchasereceipt-request-detail/senior', data })
} else {
return await request.get({ url: `/admin-api/eam/device-maintenance-detail/page`, params })
}
}
// 查询维修工单子详情
export const getPurchasereceiptRequestDetail = async (id: number) => {
return await request.get({ url: `/eam/device-maintenance-detail/get?id=` + id })
}
// 新增维修工单子
export const createDeviceMaintenanceDetail = async (data: DeviceMaintenanceDetailVO) => {
return await request.post({ url: `/eam/device-maintenance-detail/create`, data })
}
// 修改维修工单子
export const updateDeviceMaintenanceDetail = async (data: DeviceMaintenanceDetailVO) => {
return await request.put({ url: `/eam/device-maintenance-detail/update`, data })
}
// 删除维修工单子
export const deleteDeviceMaintenanceDetail = async (id: number) => {
return await request.delete({ url: `/eam/device-maintenance-detail/delete?id=` + id })
}
// 导出维修工单子 Excel
export const exportPurchasereceiptRequestDetail = async (params) => {
return await request.download({ url: `/wms/purchasereceipt-request-detail/export-excel`, params })
}
// 下载用户导入模板
export const importTemplate = () => {
return request.download({ url: '/wms/purchasereceipt-request-detail/get-import-template' })
}

7
src/components/BasicForm/src/BasicForm.vue

@ -281,6 +281,7 @@ const opensearchTable = (
) => { ) => {
const _searchCondition = {} const _searchCondition = {}
// //
console.log('searchCondition',searchCondition)
if (searchCondition && searchCondition.length > 0) { if (searchCondition && searchCondition.length > 0) {
// //
let filters: any[] = [] let filters: any[] = []
@ -288,6 +289,7 @@ const opensearchTable = (
// searchCondition.forEach((item) => { // searchCondition.forEach((item) => {
// row // row
if (searchCondition[i].isMainValue) { if (searchCondition[i].isMainValue) {
_searchCondition[searchCondition[i].key] = formRef.value.formModel[searchCondition[i].value] _searchCondition[searchCondition[i].key] = formRef.value.formModel[searchCondition[i].value]
? formRef.value.formModel[searchCondition[i].value] ? formRef.value.formModel[searchCondition[i].value]
: props.detailData : props.detailData
@ -296,6 +298,10 @@ const opensearchTable = (
? row[searchCondition[i].value] ? row[searchCondition[i].value]
: '' : ''
// //
console.log(11)
console.log(_searchCondition)
console.log(formRef.value.formModel)
console.log(11)
let isNull = false let isNull = false
if (_searchCondition[searchCondition[i].key] == '' || _searchCondition[searchCondition[i].key] == undefined) { if (_searchCondition[searchCondition[i].key] == '' || _searchCondition[searchCondition[i].key] == undefined) {
isNull = true isNull = true
@ -510,6 +516,7 @@ const handleAddTable = () => {
} }
// //
const inpuFocus = (headerItem, row, index) => { const inpuFocus = (headerItem, row, index) => {
console.log('headerItem',headerItem)
opensearchTable( opensearchTable(
headerItem.field, headerItem.field,
headerItem.tableForm.searchField, headerItem.tableForm.searchField,

74
src/components/Detail/src/Detail.vue

@ -28,7 +28,7 @@
<Tabs :tabsList="tabsList" :current="current" @change="change" /> <Tabs :tabsList="tabsList" :current="current" @change="change" />
<div class="flex"> <div class="flex">
<!-- 详情 --> <!-- 详情 -->
<ContentWrap class="w-[73%]"> <ContentWrap class="w-[100%]">
<!-- 列表头部 --> <!-- 列表头部 -->
<TableHead <TableHead
v-if="!isBasic" v-if="!isBasic"
@ -98,20 +98,6 @@
</template> </template>
</DetailTable> </DetailTable>
</ContentWrap> </ContentWrap>
<!-- <ContentWrap class="w-[27%] ml-16px">
<Annex
:annexData="annexData"
@handleAnnexSuccess="handleAnnexSuccess"
@deleteAnnexSuccess="deleteAnnexSuccess"
:upData="remarksData.data"
/>
<Remarks
:remarksData="remarksData"
class="mt-20px"
@remarksSubmitScuess="remarksSubmitScuess"
/>
<ChangeRecord :changeRecordData="changeRecordData" class="mt-20px" />
</ContentWrap> -->
</div> </div>
</el-drawer> </el-drawer>
<!-- 表单弹窗添加/修改 --> <!-- 表单弹窗添加/修改 -->
@ -301,41 +287,7 @@ if (props.isBasic == true) {
if (tabsList.value) { if (tabsList.value) {
} }
//
const annexData = reactive({
annexList: []
})
//
const remarksData = reactive({
remarksList: [],
data: {}
})
//
const changeRecordData = reactive({
changeRecordList: []
})
const detailData = ref({}) //
//
const getFileList = async () => {
detailLoading.value = true
try {
annexData.annexList = await FileApi.getFileList(remarksData.data)
} finally {
detailLoading.value = false
}
}
/** 添加附件 */
const handleAnnexSuccess = () => {
getFileList()
getChangeRecordList()
}
//
const deleteAnnexSuccess = async () => {
getFileList()
getChangeRecordList()
}
// Tabs // Tabs
const current = ref(0) const current = ref(0)
@ -357,15 +309,12 @@ const HeadButttondata = ref()
const buttondata = ref() const buttondata = ref()
/** 打开弹窗 */ /** 打开弹窗 */
const detailData = ref()
const titleNameRef = ref() const titleNameRef = ref()
const titleValueRef = ref() const titleValueRef = ref()
const openDetail = async (row: any, titleName: any, titleValue: any, tableName: any) => { const openDetail = async (row: any, titleName: any, titleValue: any, tableName: any) => {
titleNameRef.value = titleName titleNameRef.value = titleName
titleValueRef.value = titleValue titleValueRef.value = titleValue
remarksData.data = {
tableId: row.id,
tableName: tableName
}
// //
if (!props.isBasic) { if (!props.isBasic) {
// id // id
@ -452,25 +401,6 @@ const openDetail = async (row: any, titleName: any, titleValue: any, tableName:
} }
defineExpose({ openDetail }) // open defineExpose({ openDetail }) // open
//
const getRemarkList = async () => {
detailLoading.value = true
try {
remarksData.remarksList = await RemarkApi.getRemarkPage(remarksData.data)
} finally {
detailLoading.value = false
}
}
//
const remarksSubmitScuess = async (remark) => {
detailLoading.value = false
getRemarkList()
getChangeRecordList()
}
//
const getChangeRecordList = async () => {
changeRecordData.changeRecordList = await RemarkApi.getChangeRecordPage(remarksData.data)
}
const tableObjectRef = ref() const tableObjectRef = ref()
const tableMethodsRef = ref() const tableMethodsRef = ref()

87
src/components/SearchTable/src/SearchTable.vue

@ -1,31 +1,20 @@
<template> <template>
<Dialog :title="dialogTitle" v-model="searchDialogVisible" :width="'80%'"> <Dialog :title="dialogTitle" v-model="searchDialogVisible" :width="'80%'">
<!-- 搜索工作栏 -->
<!-- <Search :schema="searchSchema" @search="setSearchParamsRef" @reset="setSearchParamsRef" /> -->
<!-- 列表头部 -->
<TableHead
:HeadButttondata="HeadButttondata"
:routeName="routeName"
@searchFormClick="searchFormClick"
:allSchemas="allSchemasRef"
/>
<ContentWrap> <ContentWrap>
<Table <Table
ref="searchTableRef" ref="searchTableRef"
:columns="tableColumns" :columns="tableColumns"
:data="tableObjectRef.tableList" :data="tableObjectRef.tableList"
:loading="tableObjectRef.loading" :loading="tableObjectRef.loading"
:pagination="{
total: tableObjectRef.total
}"
v-model:pageSize="tableObjectRef.pageSize"
v-model:currentPage="tableObjectRef.currentPage"
v-model:sort="tableObjectRef.sort"
:selection="true" :selection="true"
:reserveSelection="true" :reserveSelection="true"
row-key="id" row-key="number"
/> >
<template #qty="{ row }">
<el-input v-model="row.qty" type="number" placeholder="请输入数量" />
</template>
</Table>
</ContentWrap> </ContentWrap>
<template #footer> <template #footer>
<div class="flex items-center"> <div class="flex items-center">
@ -49,15 +38,15 @@ const searchDialogVisible = ref(false) // 弹窗的是否展示
const dialogTitle = ref('') // const dialogTitle = ref('') //
const formLoading = ref(false) // 12 const formLoading = ref(false) // 12
//
const HeadButttondata = [
defaultButtons.defaultFilterBtn(null), //
]
/** 打开弹窗 */ /** 打开弹窗 */
const getListRef = ref() const getListRef = ref()
const setSearchParamsRef = ref() const setSearchParamsRef = ref()
const tableObjectRef = ref() const tableObjectRef = ref({
tableList:'',
loading:false,
params:{}
})
const getPage:any = ref() const getPage:any = ref()
const searchSchema = ref() const searchSchema = ref()
const tableColumns = ref() const tableColumns = ref()
@ -72,6 +61,7 @@ const open = (titleName: any, allSchemas: any,getApiPage: any, formField: any, s
searchDialogVisible.value = true searchDialogVisible.value = true
formFieldRef.value = formField formFieldRef.value = formField
searchFieldRef.value = searchField searchFieldRef.value = searchField
allSchemasRef.value = allSchemas allSchemasRef.value = allSchemas
searchSchema.value = allSchemas.searchSchema searchSchema.value = allSchemas.searchSchema
tableColumns.value = allSchemas.tableColumns.filter(item => (item.field !== 'action')) tableColumns.value = allSchemas.tableColumns.filter(item => (item.field !== 'action'))
@ -79,53 +69,20 @@ const open = (titleName: any, allSchemas: any,getApiPage: any, formField: any, s
typeRef.value = type typeRef.value = type
rowRef.value = row rowRef.value = row
multipleBol.value = multiple multipleBol.value = multiple
// dialogTitle.value = t('action.' + type)
dialogTitle.value = titleName dialogTitle.value = titleName
const {tableObject, tableMethods } = useTable({ const getList = async () => {
getListApi: getPage.value // await getPage.value().then((res)=>{
tableObjectRef.value.tableList = res
}) })
tableObjectRef.value = tableObject
searchConditionRef.value = searchCondition searchConditionRef.value = searchCondition
if (searchCondition) tableObjectRef.value.params = searchCondition; if (searchCondition) tableObjectRef.value.params = searchCondition;
}
console.log(tableObjectRef.value)
//
const { getList } = tableMethods
// setSearchParamsRef.value = setSearchParams
setSearchParamsRef.value = tableObject.params
getListRef.value = getList
getList() getList()
} }
//
const searchFormClick = (searchData) => {
// console.log(99, rowRef.value)
// console.log(100, searchData)
// console.log(101, searchConditionRef.value)
// 20240104 searchData.filters
if (searchConditionRef.value) {
Object.keys(searchConditionRef.value).forEach(key => {
if (searchData.filters) {
searchData.filters.push({
action: "==",
column: key,
value: searchConditionRef.value[key]
})
// }
} else {
searchData.filters = [{
action: "==",
column: key,
value: searchConditionRef.value[key]
}]
}
});
}
tableObjectRef.value.params = {
isSearch: true,
filters: searchData.filters
}
getListRef.value() //
}
defineExpose({ open }) // open defineExpose({ open }) // open
@ -153,9 +110,15 @@ const submitForm = async () => {
return return
} }
} }
let isQtyNone = selections.filter(item=>!item.qty)
if(isQtyNone&&isQtyNone.length>0){
message.warning('请填写数量')
formLoading.value = false
return
}
try { try {
searchDialogVisible.value = false searchDialogVisible.value = false
console.log(selections)
// //
emit('searchTableSuccess', formFieldRef.value, searchFieldRef.value, selections, typeRef.value, rowRef.value) emit('searchTableSuccess', formFieldRef.value, searchFieldRef.value, selections, typeRef.value, rowRef.value)
} finally { } finally {

11
src/components/TableForm/src/TableForm.vue

@ -115,8 +115,8 @@
@change="formSelectChange(headerItem.field, $event,row)"> @change="formSelectChange(headerItem.field, $event,row)">
<el-option <el-option
v-for="op in initSelectOptions(headerItem)" v-for="op in initSelectOptions(headerItem)"
:label="op.label" :label="headerItem?.tableForm?.optionsAlias?.labelField? op[headerItem?.tableForm?.optionsAlias?.labelField]:op.label"
:value="op.value" :value="headerItem?.tableForm?.optionsAlias?.valueField? op[headerItem?.tableForm?.optionsAlias?.valueField]:op.value"
:key="op.value" /> :key="op.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -347,10 +347,17 @@ const emit = defineEmits([
]) ])
// | type = radio | type = select // | type = radio | type = select
const initSelectOptions = (item) => { const initSelectOptions = (item) => {
// if(!item.dictType ){
// console.log( item.tableForm.initOptions)
// item.tableForm.initOptions.for
// }
return item.dictType ? getStrDictOptions(item.dictType) : item.tableForm.initOptions return item.dictType ? getStrDictOptions(item.dictType) : item.tableForm.initOptions
} }
// //
const formSelectChange = (field, val,row) => { const formSelectChange = (field, val,row) => {
console.log(field)
console.log(val)
console.log(row)
emit('formSelectChange', field, val,row) emit('formSelectChange', field, val,row)
} }

1
src/utils/dict.ts

@ -276,6 +276,7 @@ export enum DICT_TYPE {
DEVICE_MOLD_TYPE = 'device_mold_type', // 设备/模具类型 DEVICE_MOLD_TYPE = 'device_mold_type', // 设备/模具类型
TRANSACTION_TYPE = 'transaction_Type', // 事务类型 TRANSACTION_TYPE = 'transaction_Type', // 事务类型
RESULT = 'result', // 维修结果 RESULT = 'result', // 维修结果
MAINTENANCE_SHIFT = 'maintenance_shift',//班次
FAULT_TYPE = 'fault_type',//故障类型 FAULT_TYPE = 'fault_type',//故障类型
WEI_XIU_ORDER_STATUS = 'wei_xiu_order_status',//维修单状态 WEI_XIU_ORDER_STATUS = 'wei_xiu_order_status',//维修单状态
BASIC_STATUS = 'basic_status',//设备模具状态 BASIC_STATUS = 'basic_status',//设备模具状态

37
src/utils/disposition/tabsList.ts

@ -1,40 +1,31 @@
// 页面tabs标签 // 页面tabs标签
export const ItemBasicTabsList = [{ export const ItemBasicTabsList = [{
label: "供应商物品", label: "设备信息",
prop: 'SupplierItems', prop: 'info',
}, },
{ {
label: "客户物品", label: "设备图片",
prop: 'CustomerItems', prop: 'Image',
}, },
{ {
label: "采购订单", label: "关联文档",
prop: 'PurchaseOrder', prop: 'Word',
}, },
{ {
label: "要货计划", label: "关联备件",
prop: 'PurchasingPlan', prop: 'Part',
}, },
{ {
label: "库存余额", label: "报修记录",
prop: 'InventoryBalance', prop: 'deviceReportRecord',
}, },
{ {
label: "预计入库存", label: "维修记录",
prop: 'ExpectedIn', prop: 'RepairRecord',
},{ },{
label: "预计出库存", label: "保养记录",
prop: 'ExpectedOut', prop: 'MaintenanceRecord',
}, },
] ]
export const PurchasereceiptRequestTabsList = [{
label: "收货明细",
prop: 'receiptDetail',
},
{
label: "缺货明细",
prop: 'scarceGoodsDetail',
}
]

26
src/views/eam/basic/item/item.data.ts

@ -186,3 +186,29 @@ export const Item = useCrudSchemas(reactive<CrudSchema[]>([
} }
} }
])) ]))
export const ItemSearchTable = useCrudSchemas(reactive<CrudSchema[]>([
{
label: '备件编号',
field: 'number',
sort: 'custom',
isSearch: true,
isForm: false,
table: {
fixed: 'left'
},
},
{
label: '备件名称',
field: 'name',
sort: 'custom',
isSearch: true,
table: {
},
},
{
label: '数量',
field: 'qty',
sort: 'custom',
}
]))

3
src/views/eam/device/deviceAccounts/deviceAccounts.data.ts

@ -57,6 +57,9 @@ export const DeviceAccounts = useCrudSchemas(reactive<CrudSchema[]>([
type: 'datetime', type: 'datetime',
valueFormat: 'x' valueFormat: 'x'
} }
},
detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss'
} }
}, },
{ {

20
src/views/eam/device/deviceAccounts/index.vue

@ -27,9 +27,9 @@
v-model:currentPage="tableObject.currentPage" v-model:currentPage="tableObject.currentPage"
v-model:sort="tableObject.sort" v-model:sort="tableObject.sort"
> >
<template #code="{row}"> <template #number="{row}">
<el-button type="primary" link @click="openDetail(row, '代码', row.code)"> <el-button type="primary" link @click="openDetail(row, '编号', row.number)">
<span>{{ row.code }}</span> <span>{{ row.number }}</span>
</el-button> </el-button>
</template> </template>
<template #action="{ row }"> <template #action="{ row }">
@ -57,7 +57,18 @@
/> />
<!-- 详情 --> <!-- 详情 -->
<Detail ref="detailRef" :isBasic="true" :allSchemas="DeviceAccounts.allSchemas" /> <!-- <Detail ref="detailRef" :isBasic="true" :allSchemas="DeviceAccounts.allSchemas" /> -->
<Detail
ref="detailRef"
:tabs="ItemBasicTabsList"
:isBasic="true"
:allSchemas="DeviceAccounts.allSchemas"
@changeTabs="changeTabs"
:detailAllSchemas="detailAllSchemas"
:apiPage="apiPage"
:tabsExtend="tabsExtend"
:tableObjectExtend="tableObjectExtend"
/>
<!-- 导入 --> <!-- 导入 -->
<ImportForm ref="importFormRef" url="/eam/device-accounts/import" :importTemplateData="importTemplateData" @success="importSuccess" /> <ImportForm ref="importFormRef" url="/eam/device-accounts/import" :importTemplateData="importTemplateData" @success="importSuccess" />
@ -70,6 +81,7 @@ import { Item } from '@/views/eam/basic/item/item.data'
import { createDeviceItemBatch,getDeviceItemPage } from '@/api/eam/basic/rel' import { createDeviceItemBatch,getDeviceItemPage } from '@/api/eam/basic/rel'
import * as DeviceAccountsApi from '@/api/eam/device/deviceAccounts' import * as DeviceAccountsApi from '@/api/eam/device/deviceAccounts'
import * as defaultButtons from '@/utils/disposition/defaultButtons' import * as defaultButtons from '@/utils/disposition/defaultButtons'
import { ItemBasicTabsList } from '@/utils/disposition/tabsList'
import TableHead from '@/components/TableHead/src/TableHead.vue' import TableHead from '@/components/TableHead/src/TableHead.vue'
import ImportForm from '@/components/ImportForm/src/ImportForm.vue' import ImportForm from '@/components/ImportForm/src/ImportForm.vue'
import Detail from '@/components/Detail/src/Detail.vue' import Detail from '@/components/Detail/src/Detail.vue'

192
src/views/eam/device/deviceMaintenanceMain/deviceMaintenanceMain.data.ts

@ -3,6 +3,8 @@ import { selectAllFactoryArea } from '@/api/system/dept'
import * as DeviceAccountsApi from '@/api/eam/device/deviceAccounts' import * as DeviceAccountsApi from '@/api/eam/device/deviceAccounts'
import { useUserStore } from '@/store/modules/user' import { useUserStore } from '@/store/modules/user'
import { selecUserByType } from '@/api/system/dept' import { selecUserByType } from '@/api/system/dept'
import { ItemSearchTable } from '../../basic/item/item.data'
import * as ItemApi from '@/api/eam/basic/item'
const userStore = useUserStore() const userStore = useUserStore()
const factoryList = await selectAllFactoryArea() const factoryList = await selectAllFactoryArea()
const deviceList = await DeviceAccountsApi.getDeviceAccountsNoPage({}) const deviceList = await DeviceAccountsApi.getDeviceAccountsNoPage({})
@ -14,10 +16,10 @@ export const DeviceMaintenanceMainRules = reactive({
deviceNumber: [required], deviceNumber: [required],
factoryAreaNumber: [required], factoryAreaNumber: [required],
maintenance: [required], maintenance: [required],
status: [required],
type: [required], type: [required],
siteId: [required], classes: [required],
concurrencyStamp: [required], faultType: [required],
describes : [required],
}) })
export const DeviceMaintenanceMain = useCrudSchemas(reactive<CrudSchema[]>([ export const DeviceMaintenanceMain = useCrudSchemas(reactive<CrudSchema[]>([
@ -84,9 +86,6 @@ export const DeviceMaintenanceMain = useCrudSchemas(reactive<CrudSchema[]>([
width: '150', width: '150',
}, },
api: () => factoryList, api: () => factoryList,
formatter: (_: Recordable, __: TableColumn, cellValue: number) => {
return factoryList.find((account) => account.id == cellValue)?.name
},
search: { search: {
show: true, show: true,
component: 'Select', component: 'Select',
@ -118,21 +117,6 @@ export const DeviceMaintenanceMain = useCrudSchemas(reactive<CrudSchema[]>([
table: { table: {
width: '150', width: '150',
}, },
api: () => userList,
formatter: (_: Recordable, __: TableColumn, cellValue: number) => {
return userList.find((account) => account.id == cellValue)?.name
},
search: {
show: true,
component: 'Select',
api: () => userList,
componentProps: {
optionsAlias: {
labelField: 'name',
valueField: 'id'
}
}
},
form: { form: {
component: 'Select', component: 'Select',
api: () => userList, api: () => userList,
@ -146,42 +130,50 @@ export const DeviceMaintenanceMain = useCrudSchemas(reactive<CrudSchema[]>([
}, },
} }
}, },
// {
// label: '报修人联系电话',
// field: 'maintenancePhone',
// sort: 'custom',
// },
{ {
label: '状态', label: '类型设备',
field: 'status', field: 'type',
sort: 'custom', sort: 'custom',
table: { table: {
width: '150', width: '150',
}, },
isSearch: true, isSearch: true,
isForm: false, isForm: true,
dictType: DICT_TYPE.WEI_XIU_ORDER_STATUS, dictType: DICT_TYPE.DEVICE_MOLD_TYPE,
dictClass: 'string', dictClass: 'string',
form: {
component: 'Select',
componentProps: {
disabled: true,
}
},
},
{
label: '班次',
field: 'classes',
sort: 'custom',
table: {
width: '150',
},
isSearch: true,
dictType: DICT_TYPE.MAINTENANCE_SHIFT,
dictClass: 'number',
form: { form: {
component: 'Select' component: 'Select'
}, },
}, },
{ {
label: '类型设备', label: '故障类型',
field: 'type', field: 'faultType',
sort: 'custom', sort: 'custom',
table: { table: {
width: '150', width: '150',
}, },
isSearch: true, isSearch: true,
isForm: true, dictType: DICT_TYPE.FAULT_TYPE,
dictType: DICT_TYPE.DEVICE_MOLD_TYPE,
dictClass: 'string', dictClass: 'string',
form: { form: {
component: 'Select', component: 'Select'
componentProps: {
disabled: true,
}
}, },
}, },
{ {
@ -196,26 +188,6 @@ export const DeviceMaintenanceMain = useCrudSchemas(reactive<CrudSchema[]>([
}, },
}, },
// {
// label: '地点ID',
// field: 'siteId',
// sort: 'custom',
// },
// {
// label: '是否可用',
// field: 'available',
// sort: 'custom',
// dictType: DICT_TYPE.TRUE_FALSE,
// dictClass: 'string',
// form: {
// component: 'Switch',
// value: 'TRUE',
// componentProps: {
// inactiveValue: 'FALSE',
// activeValue: 'TRUE'
// }
// },
// },
{ {
label: '操作', label: '操作',
field: 'action', field: 'action',
@ -223,6 +195,110 @@ export const DeviceMaintenanceMain = useCrudSchemas(reactive<CrudSchema[]>([
table: { table: {
width: 300, width: 300,
fixed: 'right' fixed: 'right'
},
isDetail:false
} }
]))
export const DeviceMaintenanceDetail = useCrudSchemas(reactive<CrudSchema[]>([
{
label: '故障描述',
field: 'describes',
sort: 'custom',
table: {
width: '150',
},
isForm: false,
isSearch: false,
isTable: false,
},
{
label: '故障真因',
field: 'describes1',
sort: 'custom',
table: {
width: '150',
},
isForm: false,
isSearch: false,
isTable: false,
},
{
label: '解决措施',
field: 'workOut',
sort: 'custom',
table: {
width: '150',
},
isForm: false,
isSearch: false,
isTable: false,
},
{
label: '维修人',
field: 'maintenances',
sort: 'custom',
table: {
width: '150',
},
api: () => userList,
formatter: (_: Recordable, __: TableColumn, cellValue: number) => {
return userList.find((account) => account.id == cellValue)?.name
},
search: {
show: true,
component: 'Select',
api: () => userList,
componentProps: {
optionsAlias: {
labelField: 'name',
valueField: 'id'
}
}
},
tableForm: {
type: 'Select',
initOptions: userList,
multiple:true,
collapseTags:true,
collapseTagsTooltip:true,
optionsAlias: {
labelField: 'name',
valueField: 'id'
} }
}
},
{
label: '备件',
field: 'itemNUmbers',
sort: 'custom',
table: {
width: '150',
},
tableForm:{
isInpuFocusShow: true, // 开启查询弹窗
searchListPlaceholder: '请选择备件',
searchField: 'itemNUmbers',
searchTitle: '备件',
multiple:true,
searchAllSchemas: ItemSearchTable.allSchemas,
searchPage: ItemApi.getItemList,
searchCondition: [{
key: 'deviceNumber',
value: 'deviceNumber',
message: '请选择设备模具编号!',
isMainValue: true
}]
},
isForm: false,
isSearch: false,
isTable: false,
},
])) ]))
// 表单校验
export const DeviceMaintenanceDetailRules = reactive({
describes: [required],
describes1: [required],
workOut: [required],
maintenance: [required],
itemNUmbers: [required],
})

390
src/views/eam/device/deviceMaintenanceMain/index.vue

@ -1,78 +1,168 @@
<template> <template>
<ContentWrap> <ContentWrap>
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<Search :schema="DeviceMaintenanceMain.allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" /> <Search
:schema="DeviceMaintenanceMain.allSchemas.searchSchema"
@search="setSearchParams"
@reset="setSearchParams"
/>
</ContentWrap> </ContentWrap>
<!-- 列表头部 --> <!-- 列表头部 -->
<TableHead :HeadButttondata="HeadButttondata" @button-base-click="buttonBaseClick" :routeName="routeName" <TableHead
@updataTableColumns="updataTableColumns" @searchFormClick="searchFormClick" :HeadButttondata="HeadButttondata"
:allSchemas="DeviceMaintenanceMain.allSchemas" /> @button-base-click="buttonBaseClick"
:routeName="routeName"
@updataTableColumns="updataTableColumns"
@searchFormClick="searchFormClick"
:allSchemas="DeviceMaintenanceMain.allSchemas"
/>
<!-- 列表 --> <!-- 列表 -->
<ContentWrap> <ContentWrap>
<Table :columns="tableColumns" :data="tableObject.tableList" :loading="tableObject.loading" :pagination="{ <Table
:columns="tableColumns"
:data="tableObject.tableList"
:loading="tableObject.loading"
:pagination="{
total: tableObject.total total: tableObject.total
}" v-model:pageSize="tableObject.pageSize" v-model:currentPage="tableObject.currentPage" }"
v-model:sort="tableObject.sort"> v-model:pageSize="tableObject.pageSize"
<template #code="{ row }"> v-model:currentPage="tableObject.currentPage"
<el-button type="primary" link @click="openDetail(row, '代码', row.code)"> v-model:sort="tableObject.sort"
<span>{{ row.code }}</span> >
<template #number="{ row }">
<el-button type="primary" link @click="openDetail(row, '代码', row.number)">
<span>{{ row.number }}</span>
</el-button> </el-button>
</template> </template>
<template #action="{ row }"> <template #action="{ row }">
<ButtonBase :Butttondata="butttondata(row)" @button-base-click="buttonTableClick($event, row)" /> <ButtonBase
:Butttondata="butttondata(row)"
@button-base-click="buttonTableClick($event, row)"
/>
</template> </template>
</Table> </Table>
</ContentWrap> </ContentWrap>
<!-- 表单弹窗添加/修改 --> <!-- 表单弹窗添加/修改 -->
<BasicForm ref="basicFormRef" @success="formsSuccess" :rules="DeviceMaintenanceMainRules" <BasicForm
:formAllSchemas="DeviceMaintenanceMain.allSchemas" :apiUpdate="DeviceMaintenanceMainApi.updateDeviceMaintenanceMain" ref="formRef"
:apiCreate="DeviceMaintenanceMainApi.createDeviceMaintenanceMain" @searchTableSuccess="searchTableSuccess" :rules="DeviceMaintenanceMainRules"
:isBusiness="false" @onChange="onChange" /> :formAllSchemas="DeviceMaintenanceMain.allSchemas"
:tableAllSchemas="DeviceMaintenanceDetail.allSchemas"
:tableFormRules="DeviceMaintenanceDetailRules"
:tableData="tableData"
:apiUpdate="DeviceMaintenanceMainApi.updateDeviceMaintenanceMain"
:apiCreate="DeviceMaintenanceMainApi.createDeviceMaintenanceMain"
:isBusiness="true"
@onChange="onChange"
@handleAddTable="handleAddTable"
@handleDeleteTable="handleDeleteTable"
@searchTableSuccess="searchTableSuccess"
@submitForm="submitForm"
/>
<!-- 详情 --> <!-- 详情 -->
<Detail ref="detailRef" :isBasic="true" :allSchemas="DeviceMaintenanceMain.allSchemas" /> <!-- <Detail ref="detailRef" :isBasic="true" :allSchemas="DeviceMaintenanceMain.allSchemas" /> -->
<Detail
ref="detailRef"
:isBasic="true"
:allSchemas="DeviceMaintenanceMain.allSchemas"
:detailAllSchemas="DeviceMaintenanceDetail.allSchemas"
:detailAllSchemasRules="DeviceMaintenanceDetailRules"
:apiCreate="DeviceMaintenanceDetailApi.createPurchasereturnRequestDetail"
:apiUpdate="DeviceMaintenanceDetailApi.updatePurchasereturnRequestDetail"
:apiPage="DeviceMaintenanceDetailApi.getPurchasereturnRequestDetailPage"
:apiDelete="DeviceMaintenanceDetailApi.deletePurchasereturnRequestDetail"
:Echo="Echo"
@searchTableSuccessDetail="searchTableSuccessDetail"
@detailOpenForm="detailOpenForm"
:detailValidate="detailValidate"
/>
<!-- 导入 --> <!-- 导入 -->
<ImportForm ref="importFormRef" url="/eam/device-maintenance-main/import" :importTemplateData="importTemplateData" <ImportForm
@success="importSuccess" /> ref="importFormRef"
url="/eam/device-maintenance-main/import"
:importTemplateData="importTemplateData"
@success="importSuccess"
/>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import download from '@/utils/download' import download from '@/utils/download'
import { DeviceMaintenanceMain, DeviceMaintenanceMainRules } from './deviceMaintenanceMain.data' import {
DeviceMaintenanceMain,
DeviceMaintenanceMainRules,
DeviceMaintenanceDetail,
DeviceMaintenanceDetailRules
} from './deviceMaintenanceMain.data'
import * as DeviceMaintenanceMainApi from '@/api/eam/device/deviceMaintenanceMain' import * as DeviceMaintenanceMainApi from '@/api/eam/device/deviceMaintenanceMain'
import * as DeviceMaintenanceDetailApi from '@/api/eam/device/deviceMaintenanceDetail'
import * as defaultButtons from '@/utils/disposition/defaultButtons' import * as defaultButtons from '@/utils/disposition/defaultButtons'
import { useUserStore } from '@/store/modules/user' import { useUserStore } from '@/store/modules/user'
// import TableHead from '@/components/TableHead/src/TableHead.vue'
// import ImportForm from '@/components/ImportForm/src/ImportForm.vue'
// import Detail from '@/components/Detail/src/Detail.vue'
defineOptions({ name: 'DeviceMaintenanceMain' }) defineOptions({ name: 'DeviceMaintenanceMain' })
const message = useMessage() // const message = useMessage() //
const { t } = useI18n() // const { t } = useI18n() //
const userStore = useUserStore() // const userStore = useUserStore() //
const route = useRoute() // const route = useRoute() //
const routeName = ref() const routeName = ref()
const basicFormRef = ref() const formRef = ref()
routeName.value = route.name routeName.value = route.name
const tableColumns = ref(DeviceMaintenanceMain.allSchemas.tableColumns) const tableColumns = ref(DeviceMaintenanceMain.allSchemas.tableColumns)
const apiPage = ref(DeviceMaintenanceDetailApi.getDeviceMaintenanceDetailPage)
const detailAllSchemas = ref(DeviceMaintenanceDetail.allSchemas)
const tableData = ref([])
//
const updataTableColumns = (val) => {
tableColumns.value = val
}
const itemNUmbers = ref()
// //
const searchTableSuccess = (formField, searchField, val, formRef) => { const searchTableSuccess = (formField, searchField, val, formRef, type, row) => {
nextTick(() => {
if (type == 'tableForm') {
//
if (formField == 'itemNUmbers') {
let str = ''
val.forEach((element) => {
str += element.name + ':' + element.qty + ','
})
str = str.substring(0, str.length - 1)
row['itemNUmbers'] = str
row['itemNUmbers1'] = val
}
} else {
// const setV = {}
// setV[formField] = val[0][searchField]
// setV['supplierCode'] = val[0]['code']
// formRef.setValues(setV)
}
})
}
//
const searchTableSuccessDetail = (formField, searchField, val, formRef) => {
nextTick(() => { nextTick(() => {
const setV = {} const setV = {}
setV[formField] = val[0][searchField] setV[formField] = val[0][searchField]
if (formField == 'itemCode') {
setV['itemCode'] = val[0]['code']
} else {
setV['poNumber'] = val[0]['number']
setV['poLine'] = val[0]['lineNumber']
}
formRef.setValues(setV) formRef.setValues(setV)
}) })
} }
// //
const updataTableColumns = (val) => { // const Echo = ['ppNumber','poLine', 'batch', 'altBatch', 'itemCode', 'itemName', 'itemDesc1', 'itemDesc2', 'projectCode', 'qty', 'uom']
tableColumns.value = val const Echo = []
}
const { tableObject, tableMethods } = useTable({ const { tableObject, tableMethods } = useTable({
getListApi: DeviceMaintenanceMainApi.getDeviceMaintenanceMainPage // getListApi: DeviceMaintenanceMainApi.getDeviceMaintenanceMainPage //
@ -83,84 +173,94 @@ const { getList, setSearchParams } = tableMethods
// //
const HeadButttondata = [ const HeadButttondata = [
// defaultButtons.defaultAddBtn({hasPermi:'eam:deviceMaintenanceMain:create'}), // defaultButtons.defaultAddBtn({
// defaultButtons.defaultImportBtn({hasPermi:'eam:deviceMaintenanceMain:import'}), // hide: !userStore?.userSelfInfo?.posts?.some((item) => item.code == 'worker')
// defaultButtons.defaultExportBtn({ hasPermi: 'eam:deviceMaintenanceMain:export' }), // }), //
defaultButtons.defaultAddBtn({ hide: !(userStore?.userSelfInfo?.posts?.some((item) => item.code == 'worker')) }), //
defaultButtons.defaultFreshBtn(null), // defaultButtons.defaultFreshBtn(null), //
defaultButtons.defaultFilterBtn(null), // defaultButtons.defaultFilterBtn(null), //
defaultButtons.defaultSetBtn(null), // defaultButtons.defaultSetBtn(null) //
// {
// label: '',
// name: 'zdy',
// hide: false,
// type: 'primary',
// icon: 'Select',
// color: ''
// },
] ]
// //
const buttonBaseClick = (val, item) => { const buttonBaseClick = (val, item) => {
if (val == 'add') { // if (val == 'add') {
DeviceMaintenanceMain.allSchemas.formSchema[0].componentProps.disabled = false; //
DeviceMaintenanceMain.allSchemas.formSchema[2].componentProps.disabled = true; DeviceMaintenanceMain.allSchemas.formSchema[3].value = 'DEVICE'
DeviceMaintenanceMain.allSchemas.formSchema[3].componentProps.disabled = true;
DeviceMaintenanceMain.allSchemas.formSchema[3].value = 'DEVICE';
openForm('create') openForm('create')
} else if (val == 'import') { // } else if (val == 'import') {
//
handleImport() handleImport()
} else if (val == 'export') { // } else if (val == 'export') {
//
handleExport() handleExport()
} else if (val == 'refresh') { // } else if (val == 'refresh') {
//
getList() getList()
} else if (val == 'filtrate') { // } else if (val == 'filtrate') {
} else { // //
} else {
//
console.log('其他按钮', item) console.log('其他按钮', item)
} }
} }
//
const isShowMainButton = (row, val) => {
if (val.indexOf(row.status) > -1) {
return false
} else {
return true
}
}
// - // -
const butttondata = (row) => { const butttondata = (row) => {
return [ return [
// defaultButtons.mainListEditBtn({hasPermi:'eam:deviceMaintenanceMain:update'}), //
// defaultButtons.mainListDeleteBtn({hasPermi:'eam:deviceMaintenanceMain:delete'}), //
defaultButtons.mainListEditBtn(null), // defaultButtons.mainListEditBtn(null), //
// defaultButtons.mainListDeleteBtn(null), // defaultButtons.acceptOrderBtn({
// defaultButtons.backoutBtn(null), // hide: !(
defaultButtons.mainListDetailBtn(null), // row.status == 'PENDING' &&
defaultButtons.acceptOrderBtn({ hide: !(row.status == 'PENDING' && userStore?.userSelfInfo?.posts?.some((item) => item.code == 'worker')) }), // userStore?.userSelfInfo?.posts?.some((item) => item.code == 'worker')
defaultButtons.turnOrderBtn({ hide: !(row.status == 'PECEIVED' && row.maintenance == userStore.getUser.id) }), // )
defaultButtons.repairBtn({ hide: !(row.status == 'PECEIVED' && row.maintenance == userStore.getUser.id) }), // }), //
defaultButtons.verifyOrderBtn({ hide: !(row.status == 'COMPLETED' && userStore?.userSelfInfo?.posts?.some((item) => item.code == 'engineer')) }), // defaultButtons.turnOrderBtn({
defaultButtons.finishOrderBtn({ hide: !(row.status == 'PECEIVED' && row.maintenance == userStore.getUser.id) }), // hide: !(row.status == 'PECEIVED' && row.maintenance == userStore.getUser.id)
}), //
defaultButtons.repairBtn({
hide: !(row.status == 'PECEIVED' && row.maintenance == userStore.getUser.id)
}), //
defaultButtons.verifyOrderBtn({
hide: !(
row.status == 'COMPLETED' &&
userStore?.userSelfInfo?.posts?.some((item) => item.code == 'engineer')
)
}), //
defaultButtons.finishOrderBtn({
hide: !(row.status == 'PECEIVED' && row.maintenance == userStore.getUser.id)
}) //
] ]
} }
const onChange = (field, cur, item) => { const onChange = (field, cur, item) => {
//
console.log(field)
console.log(cur)
if (field == 'deviceNumber') { if (field == 'deviceNumber') {
DeviceMaintenanceMain.allSchemas.formSchema[1].componentProps.disabled = true; // DeviceMaintenanceMain.allSchemas.formSchema[1].componentProps.disabled = true
DeviceMaintenanceMain.allSchemas.formSchema[2].componentProps.disabled = true; // DeviceMaintenanceMain.allSchemas.formSchema[2].componentProps.disabled = true
basicFormRef.value.formRef.formModel.factoryAreaNumber = Number(item.componentProps.options.find(item => item.number == cur).factoryAreaNumber) formRef.value.formRef.formModel.factoryAreaNumber = Number(
basicFormRef.value.formRef.formModel.maintenance = String(userStore?.getUser?.id) item.componentProps.options.find((item) => item.number == cur).factoryAreaNumber
)
formRef.value.formRef.formModel.maintenance = String(userStore?.getUser?.id)
} }
} }
// - // -
const buttonTableClick = async (val, row) => { const buttonTableClick = async (val, row) => {
if (val == 'edit') { // DeviceMaintenanceMain.allSchemas.formSchema[0].componentProps.disabled = false
if (val == 'edit') {
//
openForm('update', row) openForm('update', row)
DeviceMaintenanceMain.allSchemas.formSchema[0].componentProps.disabled = true; DeviceMaintenanceMain.allSchemas.formSchema[0].componentProps.disabled = true
} else if (val == 'delete') { // } else if (val == 'delete') {
//
handleDelete(row.id) handleDelete(row.id)
} else if (val == 'acceptOrder') { } else if (val == 'acceptOrder') {
acceptOrder(row) acceptOrder(row)
} else if (val == 'turnOrder') { } else if (val == 'turnOrder') {
DeviceMaintenanceMain.allSchemas.formSchema[3].componentProps.disabled = false;
DeviceMaintenanceMain.allSchemas.formSchema[2].componentProps.disabled = false;
DeviceMaintenanceMain.allSchemas.formSchema[1].componentProps.disabled = true;
DeviceMaintenanceMain.allSchemas.formSchema[0].componentProps.disabled = true;
openForm('turnOrder', row) openForm('turnOrder', row)
} }
} }
@ -168,42 +268,14 @@ const buttonTableClick = async (val, row) => {
/** 添加/修改操作 */ /** 添加/修改操作 */
const openForm = (type: string, row?: any) => { const openForm = (type: string, row?: any) => {
basicFormRef.value.open(type, row) tableData.value = [] //
} formRef.value.open(type, row)
// form
const formsSuccess = async (formType, data) => {
var isHave = DeviceMaintenanceMain.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('失效时间要大于生效时间')
return;
}
}
if (data.activeTime == 0) data.activeTime = null;
if (data.expireTime == 0) data.expireTime = null;
if (formType === 'create') {
data.status = 'PECEIVED'
await DeviceMaintenanceMainApi.createDeviceMaintenanceMain(data)
message.success(t('common.createSuccess'))
} else if (formType === 'turnOrder') {
await DeviceMaintenanceMainApi.orderTurnTo(data)
message.success(t('common.updateSuccess'))
} else {
await DeviceMaintenanceMainApi.updateDeviceMaintenanceMain(data)
message.success(t('common.updateSuccess'))
}
basicFormRef.value.dialogVisible = false
getList()
} }
/** 详情操作 */ /** 详情操作 */
const detailRef = ref() const detailRef = ref()
const openDetail = (row: any, titleName: any, titleValue: any) => { const openDetail = (row: any, titleName: any, titleValue: any) => {
detailRef.value.openDetail(row, titleName, titleValue, 'basicDeviceMaintenanceMain') detailRef.value.openDetail(row, titleName, titleValue,'DeviceMaintenanceMain')
} }
/** 删除按钮操作 */ /** 删除按钮操作 */
@ -216,7 +288,7 @@ const handleDelete = async (id: number) => {
message.success(t('common.delSuccess')) message.success(t('common.delSuccess'))
// //
await getList() await getList()
} catch { } } catch {}
} }
/** 导出按钮操作 */ /** 导出按钮操作 */
@ -261,28 +333,99 @@ const searchFormClick = (searchData) => {
// //
function acceptOrder(row) { function acceptOrder(row) {
DeviceMaintenanceMainApi.orderStepChange(row); DeviceMaintenanceMainApi.orderStepChange(row)
} }
// //
function turnOrder() { function turnOrder() {}
}
// //
function finishOrder() { function finishOrder() {}
}
// //
function verifyOrder() { function verifyOrder() {}
}
// //
function repair() { function repair() {}
}
// //
function mainListDetail() { function mainListDetail() {}
/**
* tableForm方法
*/
const tableFormKeys = {}
DeviceMaintenanceDetail.allSchemas.tableFormColumns.forEach((item) => {
tableFormKeys[item.field] = item.default ? item.default : ''
})
//
const handleAddTable = () => {
tableData.value.push(JSON.parse(JSON.stringify(tableFormKeys)))
}
//
const handleDeleteTable = (item, index) => {
tableData.value.splice(index, 1)
}
//
const submitForm = async (formType, data) => {
data.subList = tableData.value.map((item) => {
return {
describes: item.describes,
describes1: item.describes1,
itemNUmbers: item.itemNUmbers1,
maintenances: item.maintenances.join(','),
workOut: item.workOut,
}
}) //
console.log(data.subList)
try {
if (formType === 'create') {
await DeviceMaintenanceMainApi.createDeviceMaintenanceMain(data)
message.success(t('common.createSuccess'))
} else {
await DeviceMaintenanceMainApi.updateDeviceMaintenanceMain(data)
message.success(t('common.updateSuccess'))
}
formRef.value.dialogVisible = false
//
getList()
} finally {
formRef.value.formLoading = false
}
}
const detailOpenForm = (type, row) =>{
console.log("type",type);
console.log("row",row);
DeviceMaintenanceDetail.allSchemas.tableFormColumns.map((item) => {
// if(purchaseReceiptRecordNumberRef.value == ''){
// if (item.field == 'itemCode') {
// item.form.componentProps.disabled = true
// item.form.componentProps.isSearchList = true
// }
// if(item.field == 'poLine'){
// item.form.componentProps.disabled = true
// item.form.componentProps.isSearchList = false
// }
// }else{
// if (item.field == 'itemCode') {
// item.form.componentProps.disabled = true
// item.form.componentProps.isSearchList = false
// }
// if(item.field == 'poLine'){
// item.form.componentProps.disabled = true
// item.form.componentProps.isSearchList = true
// }
// }
})
}
// /
const detailValidate = (data) => {
let tag = false;
if(data.qty <= 0){
message.warning('数量必须大于0')
tag = false;
return tag;
}else {
tag = true;
return tag;
}
} }
/** 初始化 **/ /** 初始化 **/
@ -290,5 +433,4 @@ onMounted(async () => {
getList() getList()
importTemplateData.templateUrl = await DeviceMaintenanceMainApi.importTemplate() importTemplateData.templateUrl = await DeviceMaintenanceMainApi.importTemplate()
}) })
</script> </script>

Loading…
Cancel
Save