Browse Source

生产计划拆分

master_hella_20240701
陈薪名 8 months ago
parent
commit
5e7b7df950
  1. 73
      src/api/wms/productionMain/index.ts
  2. 11
      src/components/ImportForm/src/ImportForm.vue
  3. 1
      src/utils/dict.ts
  4. 3
      src/views/login/components/LoginForm.vue
  5. 5
      src/views/wms/productionManage/productionplan/productionMain/index.vue
  6. 18
      src/views/wms/productionManage/productionplan/productionMain/productionMain.data.ts
  7. 492
      src/views/wms/productionManage/productionplan/productionMainAssemble/index.vue
  8. 894
      src/views/wms/productionManage/productionplan/productionMainAssemble/productionMainAssemble.data.ts
  9. 492
      src/views/wms/productionManage/productionplan/productionMainAssembleSparePart/index.vue
  10. 894
      src/views/wms/productionManage/productionplan/productionMainAssembleSparePart/productionMainAssembleSparePart.data.ts
  11. 492
      src/views/wms/productionManage/productionplan/productionMainPredictSparePart/index.vue
  12. 894
      src/views/wms/productionManage/productionplan/productionMainPredictSparePart/productionMainPredictSparePart.data.ts

73
src/api/wms/productionMain/index.ts

@ -24,6 +24,43 @@ export interface ProductionMainVO {
// 查询生产计划主列表 // 查询生产计划主列表
export const getProductionMainPage = async (params) => { export const getProductionMainPage = async (params) => {
params.planType = 'predict'
if (params.isSearch) {
delete params.isSearch
const data = {...params}
return await request.post({ url: '/wms/production-main/senior', data })
} else {
return await request.get({ url: `/wms/production-main/page`, params })
}
}
// 查询 —— 装配 主列表
export const getProductionMainAssemblePage = async (params) => {
params.planType = 'assemble'
if (params.isSearch) {
delete params.isSearch
const data = {...params}
return await request.post({ url: '/wms/production-main/senior', data })
} else {
return await request.get({ url: `/wms/production-main/page`, params })
}
}
// 查询 —— 预生产备件 主列表
export const getProductionMainPredictSparePartPage = async (params) => {
params.planType = 'predictSparePart'
if (params.isSearch) {
delete params.isSearch
const data = {...params}
return await request.post({ url: '/wms/production-main/senior', data })
} else {
return await request.get({ url: `/wms/production-main/page`, params })
}
}
// 查询 —— 装配备件 主列表
export const getProductionMainASparePartPage = async (params) => {
params.planType = 'assembleSparePart'
if (params.isSearch) { if (params.isSearch) {
delete params.isSearch delete params.isSearch
const data = {...params} const data = {...params}
@ -58,8 +95,42 @@ export const deleteProductionMain = async (id: number) => {
return await request.delete({ url: `/wms/production-main/delete?id=` + id }) return await request.delete({ url: `/wms/production-main/delete?id=` + id })
} }
// 导出生产计划主 Excel // 导出生产计划主 Excel
export const exportProductionMain = async (params) => { export const exportProductionMain = async (params) => {
params.planType = 'predict'
if (params.isSearch) {
const data = {...params}
return await request.downloadPost({ url: `/wms/production-main/export-excel-senior`, data })
} else {
return await request.download({ url: `/wms/production-main/export-excel`, params })
}
}
// 导出装配计划主 Excel
export const exportProductionMainAssemble = async (params) => {
params.planType = 'assemble'
if (params.isSearch) {
const data = {...params}
return await request.downloadPost({ url: `/wms/production-main/export-excel-senior`, data })
} else {
return await request.download({ url: `/wms/production-main/export-excel`, params })
}
}
// 导出装配备件计划主 Excel
export const exportProductionMainPredictSparePart = async (params) => {
params.planType = 'predictSparePart'
if (params.isSearch) {
const data = {...params}
return await request.downloadPost({ url: `/wms/production-main/export-excel-senior`, data })
} else {
return await request.download({ url: `/wms/production-main/export-excel`, params })
}
}
// 导出预生产备件计划主 Excel
export const exportProductionMainAssembleSparePart = async (params) => {
params.planType = 'assembleSparePart'
if (params.isSearch) { if (params.isSearch) {
const data = {...params} const data = {...params}
return await request.downloadPost({ url: `/wms/production-main/export-excel-senior`, data }) return await request.downloadPost({ url: `/wms/production-main/export-excel-senior`, data })

11
src/components/ImportForm/src/ImportForm.vue

@ -14,6 +14,7 @@
updatePart + updatePart +
'&outFile=' + '&outFile=' +
outFile + outFile +
'&extend=' + extend +
'&fromInventoryStatus=' + fromInventoryStatus + '&fromInventoryStatus=' + fromInventoryStatus +
'&toInventoryStatus=' + toInventoryStatus '&toInventoryStatus=' + toInventoryStatus
" "
@ -171,13 +172,19 @@ const props = defineProps({
required: false, required: false,
default: false default: false
}, },
// //
extend: {
type: String,
required: false,
default: ''
},
// TODO: cxm
fromInventoryStatus: { fromInventoryStatus: {
type: String, type: String,
required: false, required: false,
default: '' default: ''
}, },
// // TODO: cxm
toInventoryStatus: { toInventoryStatus: {
type: String, type: String,
required: false, required: false,

1
src/utils/dict.ts

@ -276,4 +276,5 @@ export enum DICT_TYPE {
PACK_UNIT_TYPE = 'pack_unit_type', // 包装规格类型 PACK_UNIT_TYPE = 'pack_unit_type', // 包装规格类型
TRANSFER_REASON = 'transfer_reason', // 调拨出入库原因 TRANSFER_REASON = 'transfer_reason', // 调拨出入库原因
PURCHASERECEIPT_SOURCE_TYPE="purchasereceipt_source_type",//采购收货数据来源 PURCHASERECEIPT_SOURCE_TYPE="purchasereceipt_source_type",//采购收货数据来源
PLAN_PRODUCTION_TYPE = "plan_production_type" // 生产计划类型
} }

3
src/views/login/components/LoginForm.vue

@ -182,6 +182,7 @@ const getCookie = () => {
const loading = ref() // ElLoading.service const loading = ref() // ElLoading.service
// //
const handleLogin = async (params) => { const handleLogin = async (params) => {
console.log('登录-185')
loginLoading.value = true loginLoading.value = true
try { try {
await getTenantId() await getTenantId()
@ -191,6 +192,7 @@ const handleLogin = async (params) => {
} }
const res = await LoginApi.login(loginData.loginForm) const res = await LoginApi.login(loginData.loginForm)
if (!res) { if (!res) {
console.log('登录-195')
getCode() getCode()
return return
} }
@ -219,6 +221,7 @@ const handleLogin = async (params) => {
const { wsCache } = useCache() const { wsCache } = useCache()
wsCache.set(CACHE_KEY.DEPT, await DeptApi.getSimpleDeptList()) wsCache.set(CACHE_KEY.DEPT, await DeptApi.getSimpleDeptList())
} finally { } finally {
console.log('登录-224')
getCode() getCode()
loginLoading.value = false loginLoading.value = false
loading.value.close() loading.value.close()

5
src/views/wms/productionManage/productionplan/productionMain/index.vue

@ -72,7 +72,7 @@
<!-- 导入 --> <!-- 导入 -->
<ImportForm ref="importFormRef" url="/wms/production-main/import" :importTemplateData="importTemplateData" <ImportForm ref="importFormRef" url="/wms/production-main/import" :importTemplateData="importTemplateData"
@success="importSuccess" :updateIsDisable="true" :coverIsDisable="true" :mode="2" /> @success="importSuccess" :updateIsDisable="true" :coverIsDisable="true" :mode="2" :extend="'predict'" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -84,6 +84,7 @@ import * as defaultButtons from '@/utils/disposition/defaultButtons'
import * as ItemBasicApi from '@/api/wms/itembasic' import * as ItemBasicApi from '@/api/wms/itembasic'
// //
//
defineOptions({ name: 'ProductionMain' }) defineOptions({ name: 'ProductionMain' })
const message = useMessage() // const message = useMessage() //
@ -409,7 +410,7 @@ const handleExport = async () => {
// //
exportLoading.value = true exportLoading.value = true
const data = await ProductionMainApi.exportProductionMain(tableObject.params) const data = await ProductionMainApi.exportProductionMain(tableObject.params)
download.excel(data, '生产计划.xlsx') download.excel(data, '生产计划.xlsx')
} catch { } catch {
} finally { } finally {
exportLoading.value = false exportLoading.value = false

18
src/views/wms/productionManage/productionplan/productionMain/productionMain.data.ts

@ -255,6 +255,24 @@ export const ProductionMain = useCrudSchemas(reactive<CrudSchema[]>([
}, },
isForm: false, isForm: false,
}, },
{
label: '计划类型',
field: 'planType',
dictType: DICT_TYPE.PLAN_PRODUCTION_TYPE,
dictClass: 'string',
isTable: true,
sort: 'custom',
table: {
width: 150
},
form: {
component: 'Select',
value: 'predict',
componentProps: {
disabled: true
}
}
},
{ {
label: '备注', label: '备注',
field: 'remark', field: 'remark',

492
src/views/wms/productionManage/productionplan/productionMainAssemble/index.vue

@ -0,0 +1,492 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<Search :schema="ProductionMain.allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" />
</ContentWrap>
<!-- 列表头部 -->
<TableHead
:HeadButttondata="HeadButttondata"
@button-base-click="buttonBaseClick"
:routeName="routeName"
@updataTableColumns="updataTableColumns"
@searchFormClick="searchFormClick"
:allSchemas="ProductionMain.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"
>
<template #number="{row}">
<el-button type="primary" link @click="openDetail(row, '单据号', row.number)">
<span>{{ row.number }}</span>
</el-button>
</template>
<template #action="{ row }">
<ButtonBase :Butttondata="butttondata(row)" @button-base-click="buttonTableClick($event,row)" />
</template>
</Table>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<BasicForm
ref="formRef"
@success="getList"
:rules="ProductionMainRules"
:formAllSchemas="ProductionMain.allSchemas"
:tableAllSchemas="ProductionDetail.allSchemas"
:tableFormRules="ProductionDetailRules"
:tableData="tableData"
:apiUpdate="ProductionMainApi.updateProductionMain"
:apiCreate="ProductionMainApi.createProductionMain"
:isBusiness="true"
@handleAddTable="handleAddTable"
@handleDeleteTable="handleDeleteTable"
@searchTableSuccess="searchTableSuccess"
@submitForm="submitForm"
/>
<!-- 详情 -->
<Detail
ref="detailRef"
:isBasic="false"
:allSchemas="ProductionMain.allSchemas"
:detailAllSchemas="ProductionDetail.allSchemas"
:detailAllSchemasRules="ProductionDetailRules"
:apiCreate="ProductionDetailApi.createProductionDetail"
:apiUpdate="ProductionDetailApi.updateProductionDetail"
:apiPage="ProductionDetailApi.getProductionDetailPage"
:apiDelete="ProductionDetailApi.deleteProductionDetail"
@searchTableSuccessDetail="searchTableSuccessDetail"
/>
<!-- 导入 -->
<ImportForm ref="importFormRef" url="/wms/production-main/import" :importTemplateData="importTemplateData"
@success="importSuccess" :updateIsDisable="true" :coverIsDisable="true" :mode="2" :extend="'assemble'"/>
</template>
<script setup lang="ts">
import download from '@/utils/download'
import { ProductionMain,ProductionMainRules,ProductionDetail,ProductionDetailRules } from './productionMainAssemble.data'
import * as ProductionMainApi from '@/api/wms/productionMain'
import * as ProductionDetailApi from '@/api/wms/productionDetail'
import * as defaultButtons from '@/utils/disposition/defaultButtons'
import * as ItemBasicApi from '@/api/wms/itembasic'
//
defineOptions({ name: 'ProductionMainAssemble' })
const message = useMessage() //
const { t } = useI18n() //
const route = useRoute() //
const routeName = ref()
routeName.value = route.name
const tableColumns = ref(ProductionMain.allSchemas.tableColumns)
//
const updataTableColumns = (val) => {
tableColumns.value = val
}
//
const searchTableSuccess = (formField, searchField, val, formRef, type, row ) => {
nextTick(async() => {
if (type == 'tableForm') {
//
await ItemBasicApi.getItembasicPage({
code: row['itemCode']
}).then(res => {
row['uom'] = res?.list[0].uom
}).catch(err =>{
console.log(err);
})
row[formField] = val[0][searchField]
} else {
const setV = {}
if(formField == 'workshop'){
setV['workshop'] = val[0]['code']
setV['productionLine'] = ''
if(tableData.value){
tableData.value.forEach(item => {
item.itemCode =''
item.bomVersion = ''
item.uom = ''
})
}
}else{
setV[formField] = val[0][searchField]
}
formRef.setValues(setV)
}
})
}
//
const searchTableSuccessDetail = (formField, searchField, val, formRef ) => {
nextTick(async() => {
const setV = {}
await ItemBasicApi.getItembasicPage({
code: setV['itemCode']
}).then(res => {
setV['uom'] = res.list[0].uom
}).catch(err =>{
console.log(err);
})
setV[formField] = val[0][searchField]
formRef.setValues(setV)
})
}
const { tableObject, tableMethods } = useTable({
getListApi: ProductionMainApi.getProductionMainAssemblePage //
})
//
const { getList, setSearchParams } = tableMethods
//
const HeadButttondata = [
defaultButtons.defaultAddBtn({hasPermi:'wms:production-main:create'}), //
defaultButtons.defaultImportBtn({hasPermi:'wms:production-main:import'}), //
defaultButtons.defaultExportBtn({hasPermi:'wms:production-main:export'}), //
defaultButtons.defaultFreshBtn(null), //
defaultButtons.defaultFilterBtn(null), //
defaultButtons.defaultSetBtn(null), //
// {
// label: '',
// name: 'zdy',
// hide: false,
// type: 'primary',
// icon: 'Select',
// color: ''
// },
]
//
const buttonBaseClick = (val, item) => {
if (val == 'add') { //
openForm('create')
} else if (val == 'import') { //
handleImport()
} else if (val == 'export') { //
handleExport()
} else if (val == 'refresh') { //
if (tableObject.params.filters && tableObject.params.filters.length > 0 ) {
searchFormClick({
filters: tableObject.params.filters
})
} else {
getList()
}
} else if (val == 'filtrate') { //
} else { //
console.log('其他按钮', item)
}
}
//
const isShowMainButton = (row,val) => {
if (val.indexOf(row.status) > -1) {
return false
} else {
return true
}
}
// -
const butttondata = (row) => {
return [
defaultButtons.mainListPlanOpeBtn({hide:isShowMainButton(row,['5']),hasPermi:'wms:production-main:open'}), //
defaultButtons.mainListPlanCloBtn({hide:isShowMainButton(row,['1','2','3','4']),hasPermi:'wms:production-main:close'}), //
defaultButtons.mainListPlanSubBtn({hide:isShowMainButton(row,['1']),hasPermi:'wms:production-main:submit'}), //
defaultButtons.mainListPlanTurBtn({hide:isShowMainButton(row,['2']),hasPermi:'wms:production-main:reject'}), //
defaultButtons.mainListPlanAppBtn({hide:isShowMainButton(row,['2']),hasPermi:'wms:production-main:agree'}), //
defaultButtons.mainListPlanPubBtn({hide:isShowMainButton(row,['3']),hasPermi:'wms:production-main:publish'}), //
defaultButtons.mainListPlanResBtn({hide:isShowMainButton(row,['4']),hasPermi:'wms:production-main:resetting'}), //
defaultButtons.mainListEditBtn({hide:isShowMainButton(row,['1']),hasPermi:'wms:production-main:update'}), //
// defaultButtons.mainListDeleteBtn({hide:isShowMainButton(row,['1']),hasPermi:'wms:production-main:delete'}), //
{
label: '生成备料计划/收货申请',
name: 'scbljh',
hide: isShowMainButton(row,['6']),
type: 'primary',
icon: 'Select',
hasPermi:'wms:production-main:publish',
link: true, //
color: ''
},
]
}
// -
const buttonTableClick = async (val, row) => {
if (val == 'mainPlanOpe') { //
tableObject.loading = true
await ProductionMainApi.open(row.id).then(() => {
message.success(t('common.updateSuccess'))
tableObject.loading = false
getList()
}).catch(err => {
tableObject.loading = false
console.log(err)
})
} else if (val == 'mainPlanClo') { //
await message.confirm('确认要关闭吗?')
tableObject.loading = true
await ProductionMainApi.close(row.id).then(() => {
message.success(t('common.updateSuccess'))
tableObject.loading = false
getList()
}).catch(err => {
tableObject.loading = false
console.log(err)
})
} else if (val == 'mainPlanSub') { //
if (row.available == 'FALSE') return message.warning('当前数据:【不可用】')
await message.confirm('确认要提交审批吗?')
tableObject.loading = true
await ProductionMainApi.submit(row.id).then(() => {
message.success(t('common.updateSuccess'))
tableObject.loading = false
getList()
}).catch(err => {
tableObject.loading = false
console.log(err)
})
} else if (val == 'mainPlanTur') { //
await message.confirm('确认要驳回吗?')
tableObject.loading = true
await ProductionMainApi.reject(row.id).then(() => {
message.success(t('common.updateSuccess'))
tableObject.loading = false
getList()
}).catch(err => {
tableObject.loading = false
console.log(err)
})
} else if (val == 'mainPlanApp') { //
if (row.available == 'FALSE') return message.warning('当前数据:【不可用】')
await message.confirm('确认要审批通过吗?')
tableObject.loading = true
await ProductionMainApi.agree(row.id).then(() => {
message.success(t('common.updateSuccess'))
tableObject.loading = false
getList()
}).catch(err => {
tableObject.loading = false
console.log(err)
})
} else if (val == 'mainPlanPub') { //
if (row.available == 'FALSE') return message.warning('当前数据:【不可用】')
await message.confirm('确认要发布吗?')
//
let isAvailable = true
await ProductionMainApi.getProductionDetail(row.id).then(async res =>{
if (res.length > 0) {
let rs = ''
res.forEach(item => {
rs += item.itemCode + ','
})
await message.confirm('物料:【'+rs +'】目前为不可用状态,是否继续发布?').catch(() => {
isAvailable = false
})
}
})
if (!isAvailable) {
return
}
tableObject.loading = true
await ProductionMainApi.publish(row.id).then(() => {
message.success(t('common.updateSuccess'))
tableObject.loading = false
getList()
}).catch(err => {
tableObject.loading = false
console.log(err)
})
} else if (val == 'mainPlanRes') { //
await message.confirm('确认要重置吗?')
tableObject.loading = true
await ProductionMainApi.resetting(row.id).then(() => {
message.success(t('common.updateSuccess'))
tableObject.loading = false
getList()
}).catch(err => {
tableObject.loading = false
console.log(err)
})
} else if(val == 'scbljh') {
if (row.available == 'FALSE') return message.warning('当前数据:【不可用】')
await message.confirm('确认要生成备料计划/收货申请吗?')
tableObject.loading = true
await ProductionMainApi.generateRequest(row.number).then(() => {
message.success(t('common.createSuccess'))
tableObject.loading = false
getList()
}).catch(err => {
tableObject.loading = false
console.log(err)
})
} else if (val == 'edit') { //
openForm('update', row)
} else if (val == 'delete') { //
handleDelete(row.id)
}
}
/** 添加/修改操作 */
const formRef = ref()
const openForm =async (type: string, row?: number) => {
tableData.value = [] //
// 线
if(type == 'create'){
ProductionMain.allSchemas.formSchema.forEach((itemColumn) =>{
if(itemColumn.field == 'workshop'){
itemColumn.componentProps.isSearchList=true
itemColumn.componentProps.disabled=true
}
if(itemColumn.field == 'productionLine'){
itemColumn.componentProps.isSearchList=true
itemColumn.componentProps.disabled=true
}
})
}
if(type == 'update'){
ProductionMain.allSchemas.formSchema.forEach((itemColumn) =>{
if(itemColumn.field == 'workshop'){
itemColumn.componentProps.isSearchList=false
itemColumn.componentProps.disabled=true
}
if(itemColumn.field == 'productionLine'){
itemColumn.componentProps.isSearchList=false
itemColumn.componentProps.disabled=true
}
})
}
formRef.value.open(type, row)
}
/** 详情操作 */
const detailRef = ref()
const openDetail = (row: any, titleName: any, titleValue: any) => {
detailRef.value.openDetail(row, titleName, titleValue,'planProductionMain')
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
tableObject.loading = true
//
await ProductionMainApi.deleteProductionMain(id)
message.success(t('common.delSuccess'))
tableObject.loading = false
//
await getList()
} catch {}finally{
tableObject.loading = false
}
}
/** 导出按钮操作 */
const exportLoading = ref(false) //
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await ProductionMainApi.exportProductionMainAssemble(tableObject.params)
download.excel(data, '装配计划.xlsx')
} catch {
} finally {
exportLoading.value = false
}
}
/**
* tableForm方法
*/
const tableFormKeys = {}
ProductionDetail.allSchemas.tableFormColumns.forEach(item => {
tableFormKeys[item.field] = item.default ? item.default : ''
})
const tableData = ref([])
//
const handleAddTable = () => {
tableData.value.push(JSON.parse(JSON.stringify(tableFormKeys)))
}
//
const handleDeleteTable = (item, index) => {
tableData.value.splice(index, 1)
}
//
const submitForm = async (formType, data) => {
if(tableData.value.find(item => (item.planQty <= 0))) {
message.warning('数量必须大于0')
formRef.value.formLoading = false
return
}
try {
if (formType === 'create') {
data.subList = tableData.value //
await ProductionMainApi.createProductionMain(data)
message.success(t('common.createSuccess'))
} else {
await ProductionMainApi.updateProductionMain(data)
message.success(t('common.updateSuccess'))
}
formRef.value.dialogVisible = false
//
getList()
} finally {
formRef.value.formLoading = 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() //
}
/** 初始化 **/
onMounted(async () => {
getList()
importTemplateData.templateUrl = await ProductionMainApi.importTemplate()
})
</script>

894
src/views/wms/productionManage/productionplan/productionMainAssemble/productionMainAssemble.data.ts

@ -0,0 +1,894 @@
import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
import { dateFormatter,dateFormatter2 } from '@/utils/formatTime'
import * as WorkMainApi from '@/api/wms/workMain'
import * as WorkDetailApi from '@/api/wms/workDetail'
import { WorkDetail, WorkMain } from '../workMain/workMain.data'
import * as WorkshopApi from '@/api/wms/workshop'
import { Workshop } from '@/views/wms/basicDataManage/factoryModeling/workshop/workshop.data'
import * as ProductionlineApi from '@/api/wms/productionline'
import { Productionline } from '@/views/wms/basicDataManage/factoryModeling/productionline/productionline.data'
import * as ShiftApi from '@/api/wms/shift'
import { Shift } from '@/views/wms/basicDataManage/orderManage/shift/shift.data'
import * as TeamApi from '@/api/wms/team'
import { Team } from '@/views/wms/basicDataManage/orderManage/team/team.data'
import * as ProductionlineitemApi from '@/api/wms/productionlineitem'
import { Productionlineitem } from '@/views/wms/basicDataManage/itemManage/productionlineitem/productionlineitem.data'
import * as BomApi from '@/api/wms/bom'
import { Bom } from '@/views/wms/basicDataManage/itemManage/bom/bom.data'
import * as getPlansettingApi from '@/api/wms/plansetting/index'
const { t } = useI18n() // 国际化
// 获取自动提交自动通过自动执行,跳过任务直接删生成记录的默认值
const queryParams = {
pageSize:10,
pageNo:1,
code:'ProductionPlan'
}
const data = await getPlansettingApi.getPlansettingPage(queryParams)
const plansettingData =data?.list[0]||{}
/**
* @returns {Array}
*/
export const ProductionMain = useCrudSchemas(reactive<CrudSchema[]>([
{
label: '单据号',
field: 'number',
sort: 'custom',
table: {
width: 180,
fixed: 'left'
},
isForm: false,
isSearch: true,
},
{
label: '状态',
field: 'status',
sort: 'custom',
dictType: DICT_TYPE.PLAN_STATUS,
dictClass: 'string',
isTable: true,
table: {
width: 150
},
// form: {
// value: '1',
// componentProps: {
// disabled: true
// }
// },
isForm:false,
isSearch: true,
},
{
label: '顺序',
field: 'displayOrder',
sort: 'custom',
table: {
width: 150
},
form: {
componentProps: {
maxlength: 50
}
}
},
{
label: '车间',
field: 'workshop',
sort: 'custom',
table: {
width: 150
},
form: {
// labelMessage: '信息提示说明!!!',
componentProps: {
isSearchList: true,
searchListPlaceholder: '请选择车间',
searchField: 'code',
searchTitle: '车间信息',
searchAllSchemas: Workshop.allSchemas,
searchPage: WorkshopApi.getWorkshopPage,
searchCondition:[{
key: 'available',
value: 'TRUE',
isMainValue: false
}]
}
}
},
{
label: '生产线',
field: 'productionLine',
sort: 'custom',
table: {
width: 150
},
form: {
// labelMessage: '信息提示说明!!!',
componentProps: {
isSearchList: true,
searchListPlaceholder: '请选择生产线',
searchField: 'code',
searchTitle: '生产线信息',
searchAllSchemas: Productionline.allSchemas,
searchPage: ProductionlineApi.getProductionlinePage,
searchCondition:[{
key: 'available',
value: 'TRUE',
isMainValue: false
},{
key: 'workshopCode',
value: 'workshop',
message: '请填写车间代码!',
isMainValue: true
}]
}
}
},
{
label: '班次',
field: 'shift',
sort: 'custom',
table: {
width: 150
},
form: {
// labelMessage: '信息提示说明!!!',
componentProps: {
isSearchList: true,
searchListPlaceholder: '请选择班次',
searchField: 'code',
searchTitle: '班次信息',
searchAllSchemas: Shift.allSchemas,
searchPage: ShiftApi.getShiftPage,
searchCondition:[{
key: 'available',
value: 'TRUE',
isMainValue: false
}]
}
}
},
{
label: '班组',
field: 'team',
sort: 'custom',
table: {
width: 150
},
form: {
// labelMessage: '信息提示说明!!!',
componentProps: {
isSearchList: true,
searchListPlaceholder: '请选择班组',
searchField: 'code',
searchTitle: '班组信息',
searchAllSchemas: Team.allSchemas,
searchPage: TeamApi.getTeamPage,
searchCondition:[{
key: 'available',
value: 'TRUE',
isMainValue: false
}]
}
}
},
{
label: '计划日期',
field: 'planDate',
formatter: dateFormatter2,
detail: {
dateFormat: 'YYYY-MM-DD'
},
sort: 'custom',
table: {
width: 120
},
form: {
component: 'DatePicker',
componentProps: {
style: {width: '100%'},
type: 'date',
dateFormat: 'YYYY-MM-DD',
valueFormat: 'x',
}
},
},
{
label: '开始时间',
field: 'beginTime',
formatter: dateFormatter,
detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss'
},
sort: 'custom',
table: {
width: 180
},
form: {
component: 'DatePicker',
componentProps: {
style: {width: '100%'},
type: 'datetime',
dateFormat: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'x',
}
},
},
{
label: '结束时间',
field: 'endTime',
formatter: dateFormatter,
detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss'
},
sort: 'custom',
table: {
width: 180
},
form: {
component: 'DatePicker',
componentProps: {
style: {width: '100%'},
type: 'datetime',
dateFormat: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'x',
}
},
},
{
label: '业务类型',
field: 'businessType',
sort: 'custom',
table: {
width: 150
},
form: {
value: 'ProductReceipt',
componentProps: {
disabled: true
}
},
isForm: false,
},
{
label: '计划类型',
field: 'planType',
dictType: DICT_TYPE.PLAN_PRODUCTION_TYPE,
dictClass: 'string',
isTable: true,
sort: 'custom',
table: {
width: 150
},
form: {
component: 'Select',
value: 'assemble',
componentProps: {
disabled: true
}
}
},
{
label: '备注',
field: 'remark',
sort: 'custom',
table: {
width: 150
},
isTable: false,
},
{
label: '是否可用',
field: 'available',
dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string',
isSearch: true,
isTable: true,
sort: 'custom',
table: {
width: 150
},
form: {
component: 'Switch',
value: 'TRUE',
componentProps: {
inactiveValue: 'FALSE',
activeValue: 'TRUE'
}
}
},
{
label: '自动提交',
field: 'autoCommit',
dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string',
isTable: true,
sort: 'custom',
table: {
width: 150
},
form: {
component: 'Switch',
value: plansettingData.autoCommit,
componentProps: {
inactiveValue: 'FALSE',
activeValue: 'TRUE',
disabled: true
}
}
},
{
label: '自动通过',
field: 'autoAgree',
dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string',
isTable: true,
sort: 'custom',
table: {
width: 150
},
form: {
component: 'Switch',
value: plansettingData.autoAgree,
componentProps: {
inactiveValue: 'FALSE',
activeValue: 'TRUE',
disabled: true
}
}
},
{
label: '自动执行',
field: 'autoExecute',
dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string',
isTable: true,
sort: 'custom',
table: {
width: 150
},
form: {
component: 'Switch',
value: plansettingData.autoExecute,
componentProps: {
inactiveValue: 'FALSE',
activeValue: 'TRUE',
disabled: true
}
}
},
// {
// label: '开始时间',
// field: 'beginTime',
// formatter: dateFormatter,
// detail: {
// dateFormat: 'YYYY-MM-DD HH:mm:ss'
// },
// sort: 'custom',
// table: {
// width: 180
// },
// form: {
// component: 'DatePicker',
// componentProps: {
// style: {width: '100%'},
// type: 'datetime',
// dateFormat: 'YYYY-MM-DD HH:mm:ss',
// valueFormat: 'x',
// }
// },
// isForm: false,
// },
// {
// label: '结束时间',
// field: 'endTime',
// formatter: dateFormatter,
// detail: {
// dateFormat: 'YYYY-MM-DD HH:mm:ss'
// },
// sort: 'custom',
// table: {
// width: 180
// },
// form: {
// component: 'DatePicker',
// componentProps: {
// style: {width: '100%'},
// type: 'datetime',
// dateFormat: 'YYYY-MM-DD HH:mm:ss',
// valueFormat: 'x',
// }
// },
// isForm: false,
// },
// {
// label: '订单号',
// field: 'woNumber',
// sort: 'custom',
// table: {
// width: 150
// },
// form: {
// // labelMessage: '信息提示说明!!!',
// componentProps: {
// isSearchList: true,
// searchListPlaceholder: '请选择订单号',
// searchField: 'number',
// searchTitle: '生产订单信息',
// searchAllSchemas: WorkMain.allSchemas,
// searchPage: WorkMainApi.getWorkMainPage
// }
// },
// isTable: false,
// isForm: false,
// },
// {
// label: '订单行',
// field: 'woLine',
// sort: 'custom',
// table: {
// width: 150
// },
// form: {
// // labelMessage: '信息提示说明!!!',
// componentProps: {
// isSearchList: true,
// searchListPlaceholder: '请选择订单行',
// searchField: 'lineNumber',
// searchTitle: '生产订单信息',
// searchAllSchemas: WorkDetail.allSchemas,
// searchPage: WorkDetailApi.getWorkDetailPage
// }
// },
// isTable: false,
// isForm: false,
// },
{
label: '创建者',
field: 'creator',
sort: 'custom',
table: {
width: 150
},
isForm: false,
},
{
label: '创建时间',
field: 'createTime',
formatter: dateFormatter,
detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss'
},
sort: 'custom',
table: {
width: 180
},
form: {
component: 'DatePicker',
componentProps: {
style: {width: '100%'},
type: 'datetime',
dateFormat: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'x',
}
},
isForm: false,
},
{
label: '最后更新者',
field: 'updater',
sort: 'custom',
table: {
width: 150
},
isForm: false,
},
{
label: '最后更新时间',
field: 'updateTime',
formatter: dateFormatter,
detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss'
},
sort: 'custom',
table: {
width: 180
},
form: {
component: 'DatePicker',
componentProps: {
style: {width: '100%'},
type: 'datetime',
dateFormat: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'x',
}
},
isForm: false,
},
{
label: '操作',
field: 'action',
isDetail: false,
isForm: false ,
table: {
width: 220,
fixed: 'right'
},
}
]))
//表单校验
export const ProductionMainRules = reactive({
displayOrder: [
{ required: true, message: '请输入顺序', trigger: 'blur' },
// { max: 50, message: '不得超过50个字符', trigger: 'blur' }
],
workshop: [
{ required: true, message: '请选择车间', trigger: 'change' }
],
productionLine: [
{ required: true, message: '请选择生产线', trigger: 'change' }
],
shift: [
{ required: true, message: '请选择班次', trigger: 'change' }
],
team: [
{ required: true, message: '请选择班组', trigger: 'change' }
],
planDate: [
{ required: true, message: '请输入计划日期', trigger: 'blur' }
],
available: [
{ required: true, message: '请选择是否可用', trigger: 'change' }
],
status: [
{ required: true, message: '请选择状态', trigger: 'change' }
],
beginTime: [
{ required: true, message: '请输入开始时间', trigger: 'blur' }
],
endTime: [
{ required: true, message: '请输入结束时间', trigger: 'blur' }
],
remark: [
{ max: 50, message: '不得超过50个字符', trigger: 'blur' }
],
})
/**
* @returns {Array}
*/
export const ProductionDetail = useCrudSchemas(reactive<CrudSchema[]>([
{
label: '物料代码',
field: 'itemCode',
sort: 'custom',
table: {
width: 150
},
form: {
// labelMessage: '信息提示说明!!!',
componentProps: {
isSearchList: true, // 开启查询弹窗
searchListPlaceholder: '请选择物料代码', // 输入框占位文本
searchField: 'itemCode', // 查询弹窗赋值字段
searchTitle: '生产线物料关系信息', // 查询弹窗标题
searchAllSchemas: Productionlineitem.allSchemas, // 查询弹窗所需类
searchPage: ProductionlineitemApi.getProductionlineitemPage, // 查询弹窗所需分页方法
searchCondition: [{
key:'productionLineCode',
value:'productionLine',
message: '请填写生产线代码!',
isMainValue: true
},{
key: 'available',
value: 'TRUE',
isMainValue: false
}],
}
},
tableForm:{
isInpuFocusShow: true,
searchListPlaceholder: '请选择物料代码', // 输入框占位文本
searchField: 'itemCode', // 查询弹窗赋值字段
searchTitle: '生产线物料关系信息', // 查询弹窗标题
searchAllSchemas: Productionlineitem.allSchemas, // 查询弹窗所需类
searchPage: ProductionlineitemApi.getProductionlineitemPage, // 查询弹窗所需分页方法
searchCondition: [{
key:'productionLineCode',
value:'productionLine',
message: '请填写生产线代码!',
isMainValue: true
},{
key: 'available',
value: 'TRUE',
isMainValue: false
}],
},
},
{
label: 'Bom版本',
field: 'bomVersion',
sort: 'custom',
table: {
width: 150
},
form: {
// labelMessage: '信息提示说明!!!',
componentProps: {
isSearchList: true, // 开启查询弹窗
searchListPlaceholder: '请选择Bom版本', // 输入框占位文本
searchField: 'version', // 查询弹窗赋值字段
searchTitle: '物料清单信息', // 查询弹窗标题
searchAllSchemas: Bom.allSchemas, // 查询弹窗所需类
searchPage: BomApi.getBomPage, // 查询弹窗所需分页方法
searchCondition: [{
key:'productItemCode',
value:'itemCode',
message: '请填写物料代码!',
isMainValue: true
},{
key: 'available',
value: 'TRUE',
isMainValue: false
}]
}
},
tableForm:{
isInpuFocusShow: true,
searchListPlaceholder: '请选择Bom版本', // 输入框占位文本
searchField: 'version', // 查询弹窗赋值字段
searchTitle: '物料清单信息', // 查询弹窗标题
searchAllSchemas: Bom.allSchemas, // 查询弹窗所需类
searchPage: BomApi.getBomPage, // 查询弹窗所需分页方法
searchCondition: [{
key:'productItemCode',
value:'itemCode',
message: '请填写物料代码!',
isMainValue: true
},{
key: 'available',
value: 'TRUE',
isMainValue: false
}]
},
},
{
label: '合格数量',
field: 'goodQty',
sort: 'custom',
table: {
width: 150
},
form: {
component: 'InputNumber',
componentProps: {
min: 1,
precision: 6
}
},
tableForm: {
type: 'InputNumber',
min: 1,
precision: 6
},
isTableForm: false,
isForm: false
},
{
label: '不合格数量',
field: 'notGoodQty',
sort: 'custom',
table: {
width: 150
},
form: {
component: 'InputNumber',
componentProps: {
min: 1,
precision: 6
}
},
tableForm: {
type: 'InputNumber',
min: 1,
precision: 6
},
isTableForm: false,
isForm: false
},
{
label: '单据号',
field: 'number',
sort: 'custom',
table: {
width: 180
},
isTableForm: false,
form: {
componentProps: {
disabled: true
}
}
},
{
label: '备注',
field: 'remark',
sort: 'custom',
table: {
width: 150
},
},
{
label: '创建时间',
field: 'createTime',
formatter: dateFormatter,
detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss'
},
sort: 'custom',
table: {
width: 180
},
form: {
component: 'DatePicker',
componentProps: {
style: {width: '100%'},
type: 'datetime',
dateFormat: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'x',
}
},
isTableForm: false,
isForm: false,
},
{
label: '创建者',
field: 'creator',
sort: 'custom',
table: {
width: 150
},
isTableForm: false,
isForm: false,
},
{
label: '计划数量',
field: 'planQty',
sort: 'custom',
table: {
width: 150
},
form: {
component: 'InputNumber',
componentProps: {
min: 0,
precision: 6
}
},
tableForm: {
type: 'InputNumber',
min: 0,
precision: 6
},
},
{
label: '计量单位',
field: 'uom',
dictType: DICT_TYPE.UOM,
dictClass: 'string',
isSearch: true,
isTable: true,
sort: 'custom',
table: {
width: 150
},
tableForm:{
type: 'Select'
}
},
{
label: '最后更新时间',
field: 'updateTime',
formatter: dateFormatter,
detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss'
},
sort: 'custom',
table: {
width: 180
},
form: {
component: 'DatePicker',
componentProps: {
style: {width: '100%'},
type: 'datetime',
dateFormat: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'x',
}
},
isTableForm: false,
isForm: false,
},
{
label: '最后更新者',
field: 'updater',
sort: 'custom',
table: {
width: 150
},
isTableForm: false,
isForm: false,
},
{
label: '是否可用',
field: 'available',
dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string',
isSearch: true,
isTable: true,
sort: 'custom',
table: {
width: 150
},
form: {
component: 'Switch',
value: 'TRUE',
componentProps: {
inactiveValue: 'FALSE',
activeValue: 'TRUE'
}
},
tableForm: {
type: 'Select',
default: 'TRUE'
},
// isTableForm: false,
// isForm: false
},
{
label: '操作',
field: 'action',
isDetail: false,
isForm: false ,
table: {
width: 150,
fixed: 'right'
},
isTableForm:false,
}
]))
//表单校验
export const ProductionDetailRules = reactive({
bomVersion: [
{ required: true, message: '请输入Bom版本', trigger: 'blur' }
],
// goodQty: [
// { required: true, message: '请输入合格数量', trigger: 'blur' }
// ],
// notGoodQty: [
// { required: true, message: '请输入不合格数量', trigger: 'blur' }
// ],
available: [
{ required: true, message: '请选择是否可用', trigger: 'change' }
],
uom: [
{ required: true, message: '请选择计量单位', trigger: 'change' }
],
planQty: [
{ required: true, message: '请输入计划数量', trigger: 'blur' }
],
itemCode: [
{ required: true, message: '请选择物料代码', trigger: 'change' }
],
remark: [
{ max: 50, message: '不得超过50个字符', trigger: 'blur' }
],
})

492
src/views/wms/productionManage/productionplan/productionMainAssembleSparePart/index.vue

@ -0,0 +1,492 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<Search :schema="ProductionMain.allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" />
</ContentWrap>
<!-- 列表头部 -->
<TableHead
:HeadButttondata="HeadButttondata"
@button-base-click="buttonBaseClick"
:routeName="routeName"
@updataTableColumns="updataTableColumns"
@searchFormClick="searchFormClick"
:allSchemas="ProductionMain.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"
>
<template #number="{row}">
<el-button type="primary" link @click="openDetail(row, '单据号', row.number)">
<span>{{ row.number }}</span>
</el-button>
</template>
<template #action="{ row }">
<ButtonBase :Butttondata="butttondata(row)" @button-base-click="buttonTableClick($event,row)" />
</template>
</Table>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<BasicForm
ref="formRef"
@success="getList"
:rules="ProductionMainRules"
:formAllSchemas="ProductionMain.allSchemas"
:tableAllSchemas="ProductionDetail.allSchemas"
:tableFormRules="ProductionDetailRules"
:tableData="tableData"
:apiUpdate="ProductionMainApi.updateProductionMain"
:apiCreate="ProductionMainApi.createProductionMain"
:isBusiness="true"
@handleAddTable="handleAddTable"
@handleDeleteTable="handleDeleteTable"
@searchTableSuccess="searchTableSuccess"
@submitForm="submitForm"
/>
<!-- 详情 -->
<Detail
ref="detailRef"
:isBasic="false"
:allSchemas="ProductionMain.allSchemas"
:detailAllSchemas="ProductionDetail.allSchemas"
:detailAllSchemasRules="ProductionDetailRules"
:apiCreate="ProductionDetailApi.createProductionDetail"
:apiUpdate="ProductionDetailApi.updateProductionDetail"
:apiPage="ProductionDetailApi.getProductionDetailPage"
:apiDelete="ProductionDetailApi.deleteProductionDetail"
@searchTableSuccessDetail="searchTableSuccessDetail"
/>
<!-- 导入 -->
<ImportForm ref="importFormRef" url="/wms/production-main/import" :importTemplateData="importTemplateData"
@success="importSuccess" :updateIsDisable="true" :coverIsDisable="true" :mode="2" :extend="'assembleSparePart'"/>
</template>
<script setup lang="ts">
import download from '@/utils/download'
import { ProductionMain,ProductionMainRules,ProductionDetail,ProductionDetailRules } from './productionMainAssembleSparePart.data'
import * as ProductionMainApi from '@/api/wms/productionMain'
import * as ProductionDetailApi from '@/api/wms/productionDetail'
import * as defaultButtons from '@/utils/disposition/defaultButtons'
import * as ItemBasicApi from '@/api/wms/itembasic'
//
defineOptions({ name: 'ProductionMainASparePart' })
const message = useMessage() //
const { t } = useI18n() //
const route = useRoute() //
const routeName = ref()
routeName.value = route.name
const tableColumns = ref(ProductionMain.allSchemas.tableColumns)
//
const updataTableColumns = (val) => {
tableColumns.value = val
}
//
const searchTableSuccess = (formField, searchField, val, formRef, type, row ) => {
nextTick(async() => {
if (type == 'tableForm') {
//
await ItemBasicApi.getItembasicPage({
code: row['itemCode']
}).then(res => {
row['uom'] = res?.list[0].uom
}).catch(err =>{
console.log(err);
})
row[formField] = val[0][searchField]
} else {
const setV = {}
if(formField == 'workshop'){
setV['workshop'] = val[0]['code']
setV['productionLine'] = ''
if(tableData.value){
tableData.value.forEach(item => {
item.itemCode =''
item.bomVersion = ''
item.uom = ''
})
}
}else{
setV[formField] = val[0][searchField]
}
formRef.setValues(setV)
}
})
}
//
const searchTableSuccessDetail = (formField, searchField, val, formRef ) => {
nextTick(async() => {
const setV = {}
await ItemBasicApi.getItembasicPage({
code: setV['itemCode']
}).then(res => {
setV['uom'] = res.list[0].uom
}).catch(err =>{
console.log(err);
})
setV[formField] = val[0][searchField]
formRef.setValues(setV)
})
}
const { tableObject, tableMethods } = useTable({
getListApi: ProductionMainApi.getProductionMainASparePartPage //
})
//
const { getList, setSearchParams } = tableMethods
//
const HeadButttondata = [
defaultButtons.defaultAddBtn({hasPermi:'wms:production-main:create'}), //
defaultButtons.defaultImportBtn({hasPermi:'wms:production-main:import'}), //
defaultButtons.defaultExportBtn({hasPermi:'wms:production-main:export'}), //
defaultButtons.defaultFreshBtn(null), //
defaultButtons.defaultFilterBtn(null), //
defaultButtons.defaultSetBtn(null), //
// {
// label: '',
// name: 'zdy',
// hide: false,
// type: 'primary',
// icon: 'Select',
// color: ''
// },
]
//
const buttonBaseClick = (val, item) => {
if (val == 'add') { //
openForm('create')
} else if (val == 'import') { //
handleImport()
} else if (val == 'export') { //
handleExport()
} else if (val == 'refresh') { //
if (tableObject.params.filters && tableObject.params.filters.length > 0 ) {
searchFormClick({
filters: tableObject.params.filters
})
} else {
getList()
}
} else if (val == 'filtrate') { //
} else { //
console.log('其他按钮', item)
}
}
//
const isShowMainButton = (row,val) => {
if (val.indexOf(row.status) > -1) {
return false
} else {
return true
}
}
// -
const butttondata = (row) => {
return [
defaultButtons.mainListPlanOpeBtn({hide:isShowMainButton(row,['5']),hasPermi:'wms:production-main:open'}), //
defaultButtons.mainListPlanCloBtn({hide:isShowMainButton(row,['1','2','3','4']),hasPermi:'wms:production-main:close'}), //
defaultButtons.mainListPlanSubBtn({hide:isShowMainButton(row,['1']),hasPermi:'wms:production-main:submit'}), //
defaultButtons.mainListPlanTurBtn({hide:isShowMainButton(row,['2']),hasPermi:'wms:production-main:reject'}), //
defaultButtons.mainListPlanAppBtn({hide:isShowMainButton(row,['2']),hasPermi:'wms:production-main:agree'}), //
defaultButtons.mainListPlanPubBtn({hide:isShowMainButton(row,['3']),hasPermi:'wms:production-main:publish'}), //
defaultButtons.mainListPlanResBtn({hide:isShowMainButton(row,['4']),hasPermi:'wms:production-main:resetting'}), //
defaultButtons.mainListEditBtn({hide:isShowMainButton(row,['1']),hasPermi:'wms:production-main:update'}), //
// defaultButtons.mainListDeleteBtn({hide:isShowMainButton(row,['1']),hasPermi:'wms:production-main:delete'}), //
{
label: '生成备料计划/收货申请',
name: 'scbljh',
hide: isShowMainButton(row,['6']),
type: 'primary',
icon: 'Select',
hasPermi:'wms:production-main:publish',
link: true, //
color: ''
},
]
}
// -
const buttonTableClick = async (val, row) => {
if (val == 'mainPlanOpe') { //
tableObject.loading = true
await ProductionMainApi.open(row.id).then(() => {
message.success(t('common.updateSuccess'))
tableObject.loading = false
getList()
}).catch(err => {
tableObject.loading = false
console.log(err)
})
} else if (val == 'mainPlanClo') { //
await message.confirm('确认要关闭吗?')
tableObject.loading = true
await ProductionMainApi.close(row.id).then(() => {
message.success(t('common.updateSuccess'))
tableObject.loading = false
getList()
}).catch(err => {
tableObject.loading = false
console.log(err)
})
} else if (val == 'mainPlanSub') { //
if (row.available == 'FALSE') return message.warning('当前数据:【不可用】')
await message.confirm('确认要提交审批吗?')
tableObject.loading = true
await ProductionMainApi.submit(row.id).then(() => {
message.success(t('common.updateSuccess'))
tableObject.loading = false
getList()
}).catch(err => {
tableObject.loading = false
console.log(err)
})
} else if (val == 'mainPlanTur') { //
await message.confirm('确认要驳回吗?')
tableObject.loading = true
await ProductionMainApi.reject(row.id).then(() => {
message.success(t('common.updateSuccess'))
tableObject.loading = false
getList()
}).catch(err => {
tableObject.loading = false
console.log(err)
})
} else if (val == 'mainPlanApp') { //
if (row.available == 'FALSE') return message.warning('当前数据:【不可用】')
await message.confirm('确认要审批通过吗?')
tableObject.loading = true
await ProductionMainApi.agree(row.id).then(() => {
message.success(t('common.updateSuccess'))
tableObject.loading = false
getList()
}).catch(err => {
tableObject.loading = false
console.log(err)
})
} else if (val == 'mainPlanPub') { //
if (row.available == 'FALSE') return message.warning('当前数据:【不可用】')
await message.confirm('确认要发布吗?')
//
let isAvailable = true
await ProductionMainApi.getProductionDetail(row.id).then(async res =>{
if (res.length > 0) {
let rs = ''
res.forEach(item => {
rs += item.itemCode + ','
})
await message.confirm('物料:【'+rs +'】目前为不可用状态,是否继续发布?').catch(() => {
isAvailable = false
})
}
})
if (!isAvailable) {
return
}
tableObject.loading = true
await ProductionMainApi.publish(row.id).then(() => {
message.success(t('common.updateSuccess'))
tableObject.loading = false
getList()
}).catch(err => {
tableObject.loading = false
console.log(err)
})
} else if (val == 'mainPlanRes') { //
await message.confirm('确认要重置吗?')
tableObject.loading = true
await ProductionMainApi.resetting(row.id).then(() => {
message.success(t('common.updateSuccess'))
tableObject.loading = false
getList()
}).catch(err => {
tableObject.loading = false
console.log(err)
})
} else if(val == 'scbljh') {
if (row.available == 'FALSE') return message.warning('当前数据:【不可用】')
await message.confirm('确认要生成备料计划/收货申请吗?')
tableObject.loading = true
await ProductionMainApi.generateRequest(row.number).then(() => {
message.success(t('common.createSuccess'))
tableObject.loading = false
getList()
}).catch(err => {
tableObject.loading = false
console.log(err)
})
} else if (val == 'edit') { //
openForm('update', row)
} else if (val == 'delete') { //
handleDelete(row.id)
}
}
/** 添加/修改操作 */
const formRef = ref()
const openForm =async (type: string, row?: number) => {
tableData.value = [] //
// 线
if(type == 'create'){
ProductionMain.allSchemas.formSchema.forEach((itemColumn) =>{
if(itemColumn.field == 'workshop'){
itemColumn.componentProps.isSearchList=true
itemColumn.componentProps.disabled=true
}
if(itemColumn.field == 'productionLine'){
itemColumn.componentProps.isSearchList=true
itemColumn.componentProps.disabled=true
}
})
}
if(type == 'update'){
ProductionMain.allSchemas.formSchema.forEach((itemColumn) =>{
if(itemColumn.field == 'workshop'){
itemColumn.componentProps.isSearchList=false
itemColumn.componentProps.disabled=true
}
if(itemColumn.field == 'productionLine'){
itemColumn.componentProps.isSearchList=false
itemColumn.componentProps.disabled=true
}
})
}
formRef.value.open(type, row)
}
/** 详情操作 */
const detailRef = ref()
const openDetail = (row: any, titleName: any, titleValue: any) => {
detailRef.value.openDetail(row, titleName, titleValue,'planProductionMain')
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
tableObject.loading = true
//
await ProductionMainApi.deleteProductionMain(id)
message.success(t('common.delSuccess'))
tableObject.loading = false
//
await getList()
} catch {}finally{
tableObject.loading = false
}
}
/** 导出按钮操作 */
const exportLoading = ref(false) //
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await ProductionMainApi.exportProductionMainAssembleSparePart(tableObject.params)
download.excel(data, '装配备件计划.xlsx')
} catch {
} finally {
exportLoading.value = false
}
}
/**
* tableForm方法
*/
const tableFormKeys = {}
ProductionDetail.allSchemas.tableFormColumns.forEach(item => {
tableFormKeys[item.field] = item.default ? item.default : ''
})
const tableData = ref([])
//
const handleAddTable = () => {
tableData.value.push(JSON.parse(JSON.stringify(tableFormKeys)))
}
//
const handleDeleteTable = (item, index) => {
tableData.value.splice(index, 1)
}
//
const submitForm = async (formType, data) => {
if(tableData.value.find(item => (item.planQty <= 0))) {
message.warning('数量必须大于0')
formRef.value.formLoading = false
return
}
try {
if (formType === 'create') {
data.subList = tableData.value //
await ProductionMainApi.createProductionMain(data)
message.success(t('common.createSuccess'))
} else {
await ProductionMainApi.updateProductionMain(data)
message.success(t('common.updateSuccess'))
}
formRef.value.dialogVisible = false
//
getList()
} finally {
formRef.value.formLoading = 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() //
}
/** 初始化 **/
onMounted(async () => {
getList()
importTemplateData.templateUrl = await ProductionMainApi.importTemplate()
})
</script>

894
src/views/wms/productionManage/productionplan/productionMainAssembleSparePart/productionMainAssembleSparePart.data.ts

@ -0,0 +1,894 @@
import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
import { dateFormatter,dateFormatter2 } from '@/utils/formatTime'
import * as WorkMainApi from '@/api/wms/workMain'
import * as WorkDetailApi from '@/api/wms/workDetail'
import { WorkDetail, WorkMain } from '../workMain/workMain.data'
import * as WorkshopApi from '@/api/wms/workshop'
import { Workshop } from '@/views/wms/basicDataManage/factoryModeling/workshop/workshop.data'
import * as ProductionlineApi from '@/api/wms/productionline'
import { Productionline } from '@/views/wms/basicDataManage/factoryModeling/productionline/productionline.data'
import * as ShiftApi from '@/api/wms/shift'
import { Shift } from '@/views/wms/basicDataManage/orderManage/shift/shift.data'
import * as TeamApi from '@/api/wms/team'
import { Team } from '@/views/wms/basicDataManage/orderManage/team/team.data'
import * as ProductionlineitemApi from '@/api/wms/productionlineitem'
import { Productionlineitem } from '@/views/wms/basicDataManage/itemManage/productionlineitem/productionlineitem.data'
import * as BomApi from '@/api/wms/bom'
import { Bom } from '@/views/wms/basicDataManage/itemManage/bom/bom.data'
import * as getPlansettingApi from '@/api/wms/plansetting/index'
const { t } = useI18n() // 国际化
// 获取自动提交自动通过自动执行,跳过任务直接删生成记录的默认值
const queryParams = {
pageSize:10,
pageNo:1,
code:'ProductionPlan'
}
const data = await getPlansettingApi.getPlansettingPage(queryParams)
const plansettingData =data?.list[0]||{}
/**
* @returns {Array}
*/
export const ProductionMain = useCrudSchemas(reactive<CrudSchema[]>([
{
label: '单据号',
field: 'number',
sort: 'custom',
table: {
width: 180,
fixed: 'left'
},
isForm: false,
isSearch: true,
},
{
label: '状态',
field: 'status',
sort: 'custom',
dictType: DICT_TYPE.PLAN_STATUS,
dictClass: 'string',
isTable: true,
table: {
width: 150
},
// form: {
// value: '1',
// componentProps: {
// disabled: true
// }
// },
isForm:false,
isSearch: true,
},
{
label: '顺序',
field: 'displayOrder',
sort: 'custom',
table: {
width: 150
},
form: {
componentProps: {
maxlength: 50
}
}
},
{
label: '车间',
field: 'workshop',
sort: 'custom',
table: {
width: 150
},
form: {
// labelMessage: '信息提示说明!!!',
componentProps: {
isSearchList: true,
searchListPlaceholder: '请选择车间',
searchField: 'code',
searchTitle: '车间信息',
searchAllSchemas: Workshop.allSchemas,
searchPage: WorkshopApi.getWorkshopPage,
searchCondition:[{
key: 'available',
value: 'TRUE',
isMainValue: false
}]
}
}
},
{
label: '生产线',
field: 'productionLine',
sort: 'custom',
table: {
width: 150
},
form: {
// labelMessage: '信息提示说明!!!',
componentProps: {
isSearchList: true,
searchListPlaceholder: '请选择生产线',
searchField: 'code',
searchTitle: '生产线信息',
searchAllSchemas: Productionline.allSchemas,
searchPage: ProductionlineApi.getProductionlinePage,
searchCondition:[{
key: 'available',
value: 'TRUE',
isMainValue: false
},{
key: 'workshopCode',
value: 'workshop',
message: '请填写车间代码!',
isMainValue: true
}]
}
}
},
{
label: '班次',
field: 'shift',
sort: 'custom',
table: {
width: 150
},
form: {
// labelMessage: '信息提示说明!!!',
componentProps: {
isSearchList: true,
searchListPlaceholder: '请选择班次',
searchField: 'code',
searchTitle: '班次信息',
searchAllSchemas: Shift.allSchemas,
searchPage: ShiftApi.getShiftPage,
searchCondition:[{
key: 'available',
value: 'TRUE',
isMainValue: false
}]
}
}
},
{
label: '班组',
field: 'team',
sort: 'custom',
table: {
width: 150
},
form: {
// labelMessage: '信息提示说明!!!',
componentProps: {
isSearchList: true,
searchListPlaceholder: '请选择班组',
searchField: 'code',
searchTitle: '班组信息',
searchAllSchemas: Team.allSchemas,
searchPage: TeamApi.getTeamPage,
searchCondition:[{
key: 'available',
value: 'TRUE',
isMainValue: false
}]
}
}
},
{
label: '计划日期',
field: 'planDate',
formatter: dateFormatter2,
detail: {
dateFormat: 'YYYY-MM-DD'
},
sort: 'custom',
table: {
width: 120
},
form: {
component: 'DatePicker',
componentProps: {
style: {width: '100%'},
type: 'date',
dateFormat: 'YYYY-MM-DD',
valueFormat: 'x',
}
},
},
{
label: '开始时间',
field: 'beginTime',
formatter: dateFormatter,
detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss'
},
sort: 'custom',
table: {
width: 180
},
form: {
component: 'DatePicker',
componentProps: {
style: {width: '100%'},
type: 'datetime',
dateFormat: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'x',
}
},
},
{
label: '结束时间',
field: 'endTime',
formatter: dateFormatter,
detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss'
},
sort: 'custom',
table: {
width: 180
},
form: {
component: 'DatePicker',
componentProps: {
style: {width: '100%'},
type: 'datetime',
dateFormat: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'x',
}
},
},
{
label: '业务类型',
field: 'businessType',
sort: 'custom',
table: {
width: 150
},
form: {
value: 'ProductReceipt',
componentProps: {
disabled: true
}
},
isForm: false,
},
{
label: '计划类型',
field: 'planType',
dictType: DICT_TYPE.PLAN_PRODUCTION_TYPE,
dictClass: 'string',
isTable: true,
sort: 'custom',
table: {
width: 150
},
form: {
component: 'Select',
value: 'assembleSparePart',
componentProps: {
disabled: true
}
}
},
{
label: '备注',
field: 'remark',
sort: 'custom',
table: {
width: 150
},
isTable: false,
},
{
label: '是否可用',
field: 'available',
dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string',
isSearch: true,
isTable: true,
sort: 'custom',
table: {
width: 150
},
form: {
component: 'Switch',
value: 'TRUE',
componentProps: {
inactiveValue: 'FALSE',
activeValue: 'TRUE'
}
}
},
{
label: '自动提交',
field: 'autoCommit',
dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string',
isTable: true,
sort: 'custom',
table: {
width: 150
},
form: {
component: 'Switch',
value: plansettingData.autoCommit,
componentProps: {
inactiveValue: 'FALSE',
activeValue: 'TRUE',
disabled: true
}
}
},
{
label: '自动通过',
field: 'autoAgree',
dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string',
isTable: true,
sort: 'custom',
table: {
width: 150
},
form: {
component: 'Switch',
value: plansettingData.autoAgree,
componentProps: {
inactiveValue: 'FALSE',
activeValue: 'TRUE',
disabled: true
}
}
},
{
label: '自动执行',
field: 'autoExecute',
dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string',
isTable: true,
sort: 'custom',
table: {
width: 150
},
form: {
component: 'Switch',
value: plansettingData.autoExecute,
componentProps: {
inactiveValue: 'FALSE',
activeValue: 'TRUE',
disabled: true
}
}
},
// {
// label: '开始时间',
// field: 'beginTime',
// formatter: dateFormatter,
// detail: {
// dateFormat: 'YYYY-MM-DD HH:mm:ss'
// },
// sort: 'custom',
// table: {
// width: 180
// },
// form: {
// component: 'DatePicker',
// componentProps: {
// style: {width: '100%'},
// type: 'datetime',
// dateFormat: 'YYYY-MM-DD HH:mm:ss',
// valueFormat: 'x',
// }
// },
// isForm: false,
// },
// {
// label: '结束时间',
// field: 'endTime',
// formatter: dateFormatter,
// detail: {
// dateFormat: 'YYYY-MM-DD HH:mm:ss'
// },
// sort: 'custom',
// table: {
// width: 180
// },
// form: {
// component: 'DatePicker',
// componentProps: {
// style: {width: '100%'},
// type: 'datetime',
// dateFormat: 'YYYY-MM-DD HH:mm:ss',
// valueFormat: 'x',
// }
// },
// isForm: false,
// },
// {
// label: '订单号',
// field: 'woNumber',
// sort: 'custom',
// table: {
// width: 150
// },
// form: {
// // labelMessage: '信息提示说明!!!',
// componentProps: {
// isSearchList: true,
// searchListPlaceholder: '请选择订单号',
// searchField: 'number',
// searchTitle: '生产订单信息',
// searchAllSchemas: WorkMain.allSchemas,
// searchPage: WorkMainApi.getWorkMainPage
// }
// },
// isTable: false,
// isForm: false,
// },
// {
// label: '订单行',
// field: 'woLine',
// sort: 'custom',
// table: {
// width: 150
// },
// form: {
// // labelMessage: '信息提示说明!!!',
// componentProps: {
// isSearchList: true,
// searchListPlaceholder: '请选择订单行',
// searchField: 'lineNumber',
// searchTitle: '生产订单信息',
// searchAllSchemas: WorkDetail.allSchemas,
// searchPage: WorkDetailApi.getWorkDetailPage
// }
// },
// isTable: false,
// isForm: false,
// },
{
label: '创建者',
field: 'creator',
sort: 'custom',
table: {
width: 150
},
isForm: false,
},
{
label: '创建时间',
field: 'createTime',
formatter: dateFormatter,
detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss'
},
sort: 'custom',
table: {
width: 180
},
form: {
component: 'DatePicker',
componentProps: {
style: {width: '100%'},
type: 'datetime',
dateFormat: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'x',
}
},
isForm: false,
},
{
label: '最后更新者',
field: 'updater',
sort: 'custom',
table: {
width: 150
},
isForm: false,
},
{
label: '最后更新时间',
field: 'updateTime',
formatter: dateFormatter,
detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss'
},
sort: 'custom',
table: {
width: 180
},
form: {
component: 'DatePicker',
componentProps: {
style: {width: '100%'},
type: 'datetime',
dateFormat: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'x',
}
},
isForm: false,
},
{
label: '操作',
field: 'action',
isDetail: false,
isForm: false ,
table: {
width: 220,
fixed: 'right'
},
}
]))
//表单校验
export const ProductionMainRules = reactive({
displayOrder: [
{ required: true, message: '请输入顺序', trigger: 'blur' },
// { max: 50, message: '不得超过50个字符', trigger: 'blur' }
],
workshop: [
{ required: true, message: '请选择车间', trigger: 'change' }
],
productionLine: [
{ required: true, message: '请选择生产线', trigger: 'change' }
],
shift: [
{ required: true, message: '请选择班次', trigger: 'change' }
],
team: [
{ required: true, message: '请选择班组', trigger: 'change' }
],
planDate: [
{ required: true, message: '请输入计划日期', trigger: 'blur' }
],
available: [
{ required: true, message: '请选择是否可用', trigger: 'change' }
],
status: [
{ required: true, message: '请选择状态', trigger: 'change' }
],
beginTime: [
{ required: true, message: '请输入开始时间', trigger: 'blur' }
],
endTime: [
{ required: true, message: '请输入结束时间', trigger: 'blur' }
],
remark: [
{ max: 50, message: '不得超过50个字符', trigger: 'blur' }
],
})
/**
* @returns {Array}
*/
export const ProductionDetail = useCrudSchemas(reactive<CrudSchema[]>([
{
label: '物料代码',
field: 'itemCode',
sort: 'custom',
table: {
width: 150
},
form: {
// labelMessage: '信息提示说明!!!',
componentProps: {
isSearchList: true, // 开启查询弹窗
searchListPlaceholder: '请选择物料代码', // 输入框占位文本
searchField: 'itemCode', // 查询弹窗赋值字段
searchTitle: '生产线物料关系信息', // 查询弹窗标题
searchAllSchemas: Productionlineitem.allSchemas, // 查询弹窗所需类
searchPage: ProductionlineitemApi.getProductionlineitemPage, // 查询弹窗所需分页方法
searchCondition: [{
key:'productionLineCode',
value:'productionLine',
message: '请填写生产线代码!',
isMainValue: true
},{
key: 'available',
value: 'TRUE',
isMainValue: false
}],
}
},
tableForm:{
isInpuFocusShow: true,
searchListPlaceholder: '请选择物料代码', // 输入框占位文本
searchField: 'itemCode', // 查询弹窗赋值字段
searchTitle: '生产线物料关系信息', // 查询弹窗标题
searchAllSchemas: Productionlineitem.allSchemas, // 查询弹窗所需类
searchPage: ProductionlineitemApi.getProductionlineitemPage, // 查询弹窗所需分页方法
searchCondition: [{
key:'productionLineCode',
value:'productionLine',
message: '请填写生产线代码!',
isMainValue: true
},{
key: 'available',
value: 'TRUE',
isMainValue: false
}],
},
},
{
label: 'Bom版本',
field: 'bomVersion',
sort: 'custom',
table: {
width: 150
},
form: {
// labelMessage: '信息提示说明!!!',
componentProps: {
isSearchList: true, // 开启查询弹窗
searchListPlaceholder: '请选择Bom版本', // 输入框占位文本
searchField: 'version', // 查询弹窗赋值字段
searchTitle: '物料清单信息', // 查询弹窗标题
searchAllSchemas: Bom.allSchemas, // 查询弹窗所需类
searchPage: BomApi.getBomPage, // 查询弹窗所需分页方法
searchCondition: [{
key:'productItemCode',
value:'itemCode',
message: '请填写物料代码!',
isMainValue: true
},{
key: 'available',
value: 'TRUE',
isMainValue: false
}]
}
},
tableForm:{
isInpuFocusShow: true,
searchListPlaceholder: '请选择Bom版本', // 输入框占位文本
searchField: 'version', // 查询弹窗赋值字段
searchTitle: '物料清单信息', // 查询弹窗标题
searchAllSchemas: Bom.allSchemas, // 查询弹窗所需类
searchPage: BomApi.getBomPage, // 查询弹窗所需分页方法
searchCondition: [{
key:'productItemCode',
value:'itemCode',
message: '请填写物料代码!',
isMainValue: true
},{
key: 'available',
value: 'TRUE',
isMainValue: false
}]
},
},
{
label: '合格数量',
field: 'goodQty',
sort: 'custom',
table: {
width: 150
},
form: {
component: 'InputNumber',
componentProps: {
min: 1,
precision: 6
}
},
tableForm: {
type: 'InputNumber',
min: 1,
precision: 6
},
isTableForm: false,
isForm: false
},
{
label: '不合格数量',
field: 'notGoodQty',
sort: 'custom',
table: {
width: 150
},
form: {
component: 'InputNumber',
componentProps: {
min: 1,
precision: 6
}
},
tableForm: {
type: 'InputNumber',
min: 1,
precision: 6
},
isTableForm: false,
isForm: false
},
{
label: '单据号',
field: 'number',
sort: 'custom',
table: {
width: 180
},
isTableForm: false,
form: {
componentProps: {
disabled: true
}
}
},
{
label: '备注',
field: 'remark',
sort: 'custom',
table: {
width: 150
},
},
{
label: '创建时间',
field: 'createTime',
formatter: dateFormatter,
detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss'
},
sort: 'custom',
table: {
width: 180
},
form: {
component: 'DatePicker',
componentProps: {
style: {width: '100%'},
type: 'datetime',
dateFormat: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'x',
}
},
isTableForm: false,
isForm: false,
},
{
label: '创建者',
field: 'creator',
sort: 'custom',
table: {
width: 150
},
isTableForm: false,
isForm: false,
},
{
label: '计划数量',
field: 'planQty',
sort: 'custom',
table: {
width: 150
},
form: {
component: 'InputNumber',
componentProps: {
min: 0,
precision: 6
}
},
tableForm: {
type: 'InputNumber',
min: 0,
precision: 6
},
},
{
label: '计量单位',
field: 'uom',
dictType: DICT_TYPE.UOM,
dictClass: 'string',
isSearch: true,
isTable: true,
sort: 'custom',
table: {
width: 150
},
tableForm:{
type: 'Select'
}
},
{
label: '最后更新时间',
field: 'updateTime',
formatter: dateFormatter,
detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss'
},
sort: 'custom',
table: {
width: 180
},
form: {
component: 'DatePicker',
componentProps: {
style: {width: '100%'},
type: 'datetime',
dateFormat: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'x',
}
},
isTableForm: false,
isForm: false,
},
{
label: '最后更新者',
field: 'updater',
sort: 'custom',
table: {
width: 150
},
isTableForm: false,
isForm: false,
},
{
label: '是否可用',
field: 'available',
dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string',
isSearch: true,
isTable: true,
sort: 'custom',
table: {
width: 150
},
form: {
component: 'Switch',
value: 'TRUE',
componentProps: {
inactiveValue: 'FALSE',
activeValue: 'TRUE'
}
},
tableForm: {
type: 'Select',
default: 'TRUE'
},
// isTableForm: false,
// isForm: false
},
{
label: '操作',
field: 'action',
isDetail: false,
isForm: false ,
table: {
width: 150,
fixed: 'right'
},
isTableForm:false,
}
]))
//表单校验
export const ProductionDetailRules = reactive({
bomVersion: [
{ required: true, message: '请输入Bom版本', trigger: 'blur' }
],
// goodQty: [
// { required: true, message: '请输入合格数量', trigger: 'blur' }
// ],
// notGoodQty: [
// { required: true, message: '请输入不合格数量', trigger: 'blur' }
// ],
available: [
{ required: true, message: '请选择是否可用', trigger: 'change' }
],
uom: [
{ required: true, message: '请选择计量单位', trigger: 'change' }
],
planQty: [
{ required: true, message: '请输入计划数量', trigger: 'blur' }
],
itemCode: [
{ required: true, message: '请选择物料代码', trigger: 'change' }
],
remark: [
{ max: 50, message: '不得超过50个字符', trigger: 'blur' }
],
})

492
src/views/wms/productionManage/productionplan/productionMainPredictSparePart/index.vue

@ -0,0 +1,492 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<Search :schema="ProductionMain.allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" />
</ContentWrap>
<!-- 列表头部 -->
<TableHead
:HeadButttondata="HeadButttondata"
@button-base-click="buttonBaseClick"
:routeName="routeName"
@updataTableColumns="updataTableColumns"
@searchFormClick="searchFormClick"
:allSchemas="ProductionMain.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"
>
<template #number="{row}">
<el-button type="primary" link @click="openDetail(row, '单据号', row.number)">
<span>{{ row.number }}</span>
</el-button>
</template>
<template #action="{ row }">
<ButtonBase :Butttondata="butttondata(row)" @button-base-click="buttonTableClick($event,row)" />
</template>
</Table>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<BasicForm
ref="formRef"
@success="getList"
:rules="ProductionMainRules"
:formAllSchemas="ProductionMain.allSchemas"
:tableAllSchemas="ProductionDetail.allSchemas"
:tableFormRules="ProductionDetailRules"
:tableData="tableData"
:apiUpdate="ProductionMainApi.updateProductionMain"
:apiCreate="ProductionMainApi.createProductionMain"
:isBusiness="true"
@handleAddTable="handleAddTable"
@handleDeleteTable="handleDeleteTable"
@searchTableSuccess="searchTableSuccess"
@submitForm="submitForm"
/>
<!-- 详情 -->
<Detail
ref="detailRef"
:isBasic="false"
:allSchemas="ProductionMain.allSchemas"
:detailAllSchemas="ProductionDetail.allSchemas"
:detailAllSchemasRules="ProductionDetailRules"
:apiCreate="ProductionDetailApi.createProductionDetail"
:apiUpdate="ProductionDetailApi.updateProductionDetail"
:apiPage="ProductionDetailApi.getProductionDetailPage"
:apiDelete="ProductionDetailApi.deleteProductionDetail"
@searchTableSuccessDetail="searchTableSuccessDetail"
/>
<!-- 导入 -->
<ImportForm ref="importFormRef" url="/wms/production-main/import" :importTemplateData="importTemplateData"
@success="importSuccess" :updateIsDisable="true" :coverIsDisable="true" :mode="2" :extend="'assembleSparePart'"/>
</template>
<script setup lang="ts">
import download from '@/utils/download'
import { ProductionMain,ProductionMainRules,ProductionDetail,ProductionDetailRules } from './productionMainPredictSparePart.data'
import * as ProductionMainApi from '@/api/wms/productionMain'
import * as ProductionDetailApi from '@/api/wms/productionDetail'
import * as defaultButtons from '@/utils/disposition/defaultButtons'
import * as ItemBasicApi from '@/api/wms/itembasic'
//
defineOptions({ name: 'ProductionMainPredictSparePart' })
const message = useMessage() //
const { t } = useI18n() //
const route = useRoute() //
const routeName = ref()
routeName.value = route.name
const tableColumns = ref(ProductionMain.allSchemas.tableColumns)
//
const updataTableColumns = (val) => {
tableColumns.value = val
}
//
const searchTableSuccess = (formField, searchField, val, formRef, type, row ) => {
nextTick(async() => {
if (type == 'tableForm') {
//
await ItemBasicApi.getItembasicPage({
code: row['itemCode']
}).then(res => {
row['uom'] = res?.list[0].uom
}).catch(err =>{
console.log(err);
})
row[formField] = val[0][searchField]
} else {
const setV = {}
if(formField == 'workshop'){
setV['workshop'] = val[0]['code']
setV['productionLine'] = ''
if(tableData.value){
tableData.value.forEach(item => {
item.itemCode =''
item.bomVersion = ''
item.uom = ''
})
}
}else{
setV[formField] = val[0][searchField]
}
formRef.setValues(setV)
}
})
}
//
const searchTableSuccessDetail = (formField, searchField, val, formRef ) => {
nextTick(async() => {
const setV = {}
await ItemBasicApi.getItembasicPage({
code: setV['itemCode']
}).then(res => {
setV['uom'] = res.list[0].uom
}).catch(err =>{
console.log(err);
})
setV[formField] = val[0][searchField]
formRef.setValues(setV)
})
}
const { tableObject, tableMethods } = useTable({
getListApi: ProductionMainApi.getProductionMainPredictSparePartPage //
})
//
const { getList, setSearchParams } = tableMethods
//
const HeadButttondata = [
defaultButtons.defaultAddBtn({hasPermi:'wms:production-main:create'}), //
defaultButtons.defaultImportBtn({hasPermi:'wms:production-main:import'}), //
defaultButtons.defaultExportBtn({hasPermi:'wms:production-main:export'}), //
defaultButtons.defaultFreshBtn(null), //
defaultButtons.defaultFilterBtn(null), //
defaultButtons.defaultSetBtn(null), //
// {
// label: '',
// name: 'zdy',
// hide: false,
// type: 'primary',
// icon: 'Select',
// color: ''
// },
]
//
const buttonBaseClick = (val, item) => {
if (val == 'add') { //
openForm('create')
} else if (val == 'import') { //
handleImport()
} else if (val == 'export') { //
handleExport()
} else if (val == 'refresh') { //
if (tableObject.params.filters && tableObject.params.filters.length > 0 ) {
searchFormClick({
filters: tableObject.params.filters
})
} else {
getList()
}
} else if (val == 'filtrate') { //
} else { //
console.log('其他按钮', item)
}
}
//
const isShowMainButton = (row,val) => {
if (val.indexOf(row.status) > -1) {
return false
} else {
return true
}
}
// -
const butttondata = (row) => {
return [
defaultButtons.mainListPlanOpeBtn({hide:isShowMainButton(row,['5']),hasPermi:'wms:production-main:open'}), //
defaultButtons.mainListPlanCloBtn({hide:isShowMainButton(row,['1','2','3','4']),hasPermi:'wms:production-main:close'}), //
defaultButtons.mainListPlanSubBtn({hide:isShowMainButton(row,['1']),hasPermi:'wms:production-main:submit'}), //
defaultButtons.mainListPlanTurBtn({hide:isShowMainButton(row,['2']),hasPermi:'wms:production-main:reject'}), //
defaultButtons.mainListPlanAppBtn({hide:isShowMainButton(row,['2']),hasPermi:'wms:production-main:agree'}), //
defaultButtons.mainListPlanPubBtn({hide:isShowMainButton(row,['3']),hasPermi:'wms:production-main:publish'}), //
defaultButtons.mainListPlanResBtn({hide:isShowMainButton(row,['4']),hasPermi:'wms:production-main:resetting'}), //
defaultButtons.mainListEditBtn({hide:isShowMainButton(row,['1']),hasPermi:'wms:production-main:update'}), //
// defaultButtons.mainListDeleteBtn({hide:isShowMainButton(row,['1']),hasPermi:'wms:production-main:delete'}), //
{
label: '生成备料计划/收货申请',
name: 'scbljh',
hide: isShowMainButton(row,['6']),
type: 'primary',
icon: 'Select',
hasPermi:'wms:production-main:publish',
link: true, //
color: ''
},
]
}
// -
const buttonTableClick = async (val, row) => {
if (val == 'mainPlanOpe') { //
tableObject.loading = true
await ProductionMainApi.open(row.id).then(() => {
message.success(t('common.updateSuccess'))
tableObject.loading = false
getList()
}).catch(err => {
tableObject.loading = false
console.log(err)
})
} else if (val == 'mainPlanClo') { //
await message.confirm('确认要关闭吗?')
tableObject.loading = true
await ProductionMainApi.close(row.id).then(() => {
message.success(t('common.updateSuccess'))
tableObject.loading = false
getList()
}).catch(err => {
tableObject.loading = false
console.log(err)
})
} else if (val == 'mainPlanSub') { //
if (row.available == 'FALSE') return message.warning('当前数据:【不可用】')
await message.confirm('确认要提交审批吗?')
tableObject.loading = true
await ProductionMainApi.submit(row.id).then(() => {
message.success(t('common.updateSuccess'))
tableObject.loading = false
getList()
}).catch(err => {
tableObject.loading = false
console.log(err)
})
} else if (val == 'mainPlanTur') { //
await message.confirm('确认要驳回吗?')
tableObject.loading = true
await ProductionMainApi.reject(row.id).then(() => {
message.success(t('common.updateSuccess'))
tableObject.loading = false
getList()
}).catch(err => {
tableObject.loading = false
console.log(err)
})
} else if (val == 'mainPlanApp') { //
if (row.available == 'FALSE') return message.warning('当前数据:【不可用】')
await message.confirm('确认要审批通过吗?')
tableObject.loading = true
await ProductionMainApi.agree(row.id).then(() => {
message.success(t('common.updateSuccess'))
tableObject.loading = false
getList()
}).catch(err => {
tableObject.loading = false
console.log(err)
})
} else if (val == 'mainPlanPub') { //
if (row.available == 'FALSE') return message.warning('当前数据:【不可用】')
await message.confirm('确认要发布吗?')
//
let isAvailable = true
await ProductionMainApi.getProductionDetail(row.id).then(async res =>{
if (res.length > 0) {
let rs = ''
res.forEach(item => {
rs += item.itemCode + ','
})
await message.confirm('物料:【'+rs +'】目前为不可用状态,是否继续发布?').catch(() => {
isAvailable = false
})
}
})
if (!isAvailable) {
return
}
tableObject.loading = true
await ProductionMainApi.publish(row.id).then(() => {
message.success(t('common.updateSuccess'))
tableObject.loading = false
getList()
}).catch(err => {
tableObject.loading = false
console.log(err)
})
} else if (val == 'mainPlanRes') { //
await message.confirm('确认要重置吗?')
tableObject.loading = true
await ProductionMainApi.resetting(row.id).then(() => {
message.success(t('common.updateSuccess'))
tableObject.loading = false
getList()
}).catch(err => {
tableObject.loading = false
console.log(err)
})
} else if(val == 'scbljh') {
if (row.available == 'FALSE') return message.warning('当前数据:【不可用】')
await message.confirm('确认要生成备料计划/收货申请吗?')
tableObject.loading = true
await ProductionMainApi.generateRequest(row.number).then(() => {
message.success(t('common.createSuccess'))
tableObject.loading = false
getList()
}).catch(err => {
tableObject.loading = false
console.log(err)
})
} else if (val == 'edit') { //
openForm('update', row)
} else if (val == 'delete') { //
handleDelete(row.id)
}
}
/** 添加/修改操作 */
const formRef = ref()
const openForm =async (type: string, row?: number) => {
tableData.value = [] //
// 线
if(type == 'create'){
ProductionMain.allSchemas.formSchema.forEach((itemColumn) =>{
if(itemColumn.field == 'workshop'){
itemColumn.componentProps.isSearchList=true
itemColumn.componentProps.disabled=true
}
if(itemColumn.field == 'productionLine'){
itemColumn.componentProps.isSearchList=true
itemColumn.componentProps.disabled=true
}
})
}
if(type == 'update'){
ProductionMain.allSchemas.formSchema.forEach((itemColumn) =>{
if(itemColumn.field == 'workshop'){
itemColumn.componentProps.isSearchList=false
itemColumn.componentProps.disabled=true
}
if(itemColumn.field == 'productionLine'){
itemColumn.componentProps.isSearchList=false
itemColumn.componentProps.disabled=true
}
})
}
formRef.value.open(type, row)
}
/** 详情操作 */
const detailRef = ref()
const openDetail = (row: any, titleName: any, titleValue: any) => {
detailRef.value.openDetail(row, titleName, titleValue,'planProductionMain')
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
tableObject.loading = true
//
await ProductionMainApi.deleteProductionMain(id)
message.success(t('common.delSuccess'))
tableObject.loading = false
//
await getList()
} catch {}finally{
tableObject.loading = false
}
}
/** 导出按钮操作 */
const exportLoading = ref(false) //
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await ProductionMainApi.exportProductionMainPredictSparePart(tableObject.params)
download.excel(data, '预生产备件计划.xlsx')
} catch {
} finally {
exportLoading.value = false
}
}
/**
* tableForm方法
*/
const tableFormKeys = {}
ProductionDetail.allSchemas.tableFormColumns.forEach(item => {
tableFormKeys[item.field] = item.default ? item.default : ''
})
const tableData = ref([])
//
const handleAddTable = () => {
tableData.value.push(JSON.parse(JSON.stringify(tableFormKeys)))
}
//
const handleDeleteTable = (item, index) => {
tableData.value.splice(index, 1)
}
//
const submitForm = async (formType, data) => {
if(tableData.value.find(item => (item.planQty <= 0))) {
message.warning('数量必须大于0')
formRef.value.formLoading = false
return
}
try {
if (formType === 'create') {
data.subList = tableData.value //
await ProductionMainApi.createProductionMain(data)
message.success(t('common.createSuccess'))
} else {
await ProductionMainApi.updateProductionMain(data)
message.success(t('common.updateSuccess'))
}
formRef.value.dialogVisible = false
//
getList()
} finally {
formRef.value.formLoading = 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() //
}
/** 初始化 **/
onMounted(async () => {
getList()
importTemplateData.templateUrl = await ProductionMainApi.importTemplate()
})
</script>

894
src/views/wms/productionManage/productionplan/productionMainPredictSparePart/productionMainPredictSparePart.data.ts

@ -0,0 +1,894 @@
import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
import { dateFormatter,dateFormatter2 } from '@/utils/formatTime'
import * as WorkMainApi from '@/api/wms/workMain'
import * as WorkDetailApi from '@/api/wms/workDetail'
import { WorkDetail, WorkMain } from '../workMain/workMain.data'
import * as WorkshopApi from '@/api/wms/workshop'
import { Workshop } from '@/views/wms/basicDataManage/factoryModeling/workshop/workshop.data'
import * as ProductionlineApi from '@/api/wms/productionline'
import { Productionline } from '@/views/wms/basicDataManage/factoryModeling/productionline/productionline.data'
import * as ShiftApi from '@/api/wms/shift'
import { Shift } from '@/views/wms/basicDataManage/orderManage/shift/shift.data'
import * as TeamApi from '@/api/wms/team'
import { Team } from '@/views/wms/basicDataManage/orderManage/team/team.data'
import * as ProductionlineitemApi from '@/api/wms/productionlineitem'
import { Productionlineitem } from '@/views/wms/basicDataManage/itemManage/productionlineitem/productionlineitem.data'
import * as BomApi from '@/api/wms/bom'
import { Bom } from '@/views/wms/basicDataManage/itemManage/bom/bom.data'
import * as getPlansettingApi from '@/api/wms/plansetting/index'
const { t } = useI18n() // 国际化
// 获取自动提交自动通过自动执行,跳过任务直接删生成记录的默认值
const queryParams = {
pageSize:10,
pageNo:1,
code:'ProductionPlan'
}
const data = await getPlansettingApi.getPlansettingPage(queryParams)
const plansettingData =data?.list[0]||{}
/**
* @returns {Array}
*/
export const ProductionMain = useCrudSchemas(reactive<CrudSchema[]>([
{
label: '单据号',
field: 'number',
sort: 'custom',
table: {
width: 180,
fixed: 'left'
},
isForm: false,
isSearch: true,
},
{
label: '状态',
field: 'status',
sort: 'custom',
dictType: DICT_TYPE.PLAN_STATUS,
dictClass: 'string',
isTable: true,
table: {
width: 150
},
// form: {
// value: '1',
// componentProps: {
// disabled: true
// }
// },
isForm:false,
isSearch: true,
},
{
label: '顺序',
field: 'displayOrder',
sort: 'custom',
table: {
width: 150
},
form: {
componentProps: {
maxlength: 50
}
}
},
{
label: '车间',
field: 'workshop',
sort: 'custom',
table: {
width: 150
},
form: {
// labelMessage: '信息提示说明!!!',
componentProps: {
isSearchList: true,
searchListPlaceholder: '请选择车间',
searchField: 'code',
searchTitle: '车间信息',
searchAllSchemas: Workshop.allSchemas,
searchPage: WorkshopApi.getWorkshopPage,
searchCondition:[{
key: 'available',
value: 'TRUE',
isMainValue: false
}]
}
}
},
{
label: '生产线',
field: 'productionLine',
sort: 'custom',
table: {
width: 150
},
form: {
// labelMessage: '信息提示说明!!!',
componentProps: {
isSearchList: true,
searchListPlaceholder: '请选择生产线',
searchField: 'code',
searchTitle: '生产线信息',
searchAllSchemas: Productionline.allSchemas,
searchPage: ProductionlineApi.getProductionlinePage,
searchCondition:[{
key: 'available',
value: 'TRUE',
isMainValue: false
},{
key: 'workshopCode',
value: 'workshop',
message: '请填写车间代码!',
isMainValue: true
}]
}
}
},
{
label: '班次',
field: 'shift',
sort: 'custom',
table: {
width: 150
},
form: {
// labelMessage: '信息提示说明!!!',
componentProps: {
isSearchList: true,
searchListPlaceholder: '请选择班次',
searchField: 'code',
searchTitle: '班次信息',
searchAllSchemas: Shift.allSchemas,
searchPage: ShiftApi.getShiftPage,
searchCondition:[{
key: 'available',
value: 'TRUE',
isMainValue: false
}]
}
}
},
{
label: '班组',
field: 'team',
sort: 'custom',
table: {
width: 150
},
form: {
// labelMessage: '信息提示说明!!!',
componentProps: {
isSearchList: true,
searchListPlaceholder: '请选择班组',
searchField: 'code',
searchTitle: '班组信息',
searchAllSchemas: Team.allSchemas,
searchPage: TeamApi.getTeamPage,
searchCondition:[{
key: 'available',
value: 'TRUE',
isMainValue: false
}]
}
}
},
{
label: '计划日期',
field: 'planDate',
formatter: dateFormatter2,
detail: {
dateFormat: 'YYYY-MM-DD'
},
sort: 'custom',
table: {
width: 120
},
form: {
component: 'DatePicker',
componentProps: {
style: {width: '100%'},
type: 'date',
dateFormat: 'YYYY-MM-DD',
valueFormat: 'x',
}
},
},
{
label: '开始时间',
field: 'beginTime',
formatter: dateFormatter,
detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss'
},
sort: 'custom',
table: {
width: 180
},
form: {
component: 'DatePicker',
componentProps: {
style: {width: '100%'},
type: 'datetime',
dateFormat: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'x',
}
},
},
{
label: '结束时间',
field: 'endTime',
formatter: dateFormatter,
detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss'
},
sort: 'custom',
table: {
width: 180
},
form: {
component: 'DatePicker',
componentProps: {
style: {width: '100%'},
type: 'datetime',
dateFormat: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'x',
}
},
},
{
label: '业务类型',
field: 'businessType',
sort: 'custom',
table: {
width: 150
},
form: {
value: 'ProductReceipt',
componentProps: {
disabled: true
}
},
isForm: false,
},
{
label: '计划类型',
field: 'planType',
dictType: DICT_TYPE.PLAN_PRODUCTION_TYPE,
dictClass: 'string',
isTable: true,
sort: 'custom',
table: {
width: 150
},
form: {
component: 'Select',
value: 'predictSparePart',
componentProps: {
disabled: true
}
}
},
{
label: '备注',
field: 'remark',
sort: 'custom',
table: {
width: 150
},
isTable: false,
},
{
label: '是否可用',
field: 'available',
dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string',
isSearch: true,
isTable: true,
sort: 'custom',
table: {
width: 150
},
form: {
component: 'Switch',
value: 'TRUE',
componentProps: {
inactiveValue: 'FALSE',
activeValue: 'TRUE'
}
}
},
{
label: '自动提交',
field: 'autoCommit',
dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string',
isTable: true,
sort: 'custom',
table: {
width: 150
},
form: {
component: 'Switch',
value: plansettingData.autoCommit,
componentProps: {
inactiveValue: 'FALSE',
activeValue: 'TRUE',
disabled: true
}
}
},
{
label: '自动通过',
field: 'autoAgree',
dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string',
isTable: true,
sort: 'custom',
table: {
width: 150
},
form: {
component: 'Switch',
value: plansettingData.autoAgree,
componentProps: {
inactiveValue: 'FALSE',
activeValue: 'TRUE',
disabled: true
}
}
},
{
label: '自动执行',
field: 'autoExecute',
dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string',
isTable: true,
sort: 'custom',
table: {
width: 150
},
form: {
component: 'Switch',
value: plansettingData.autoExecute,
componentProps: {
inactiveValue: 'FALSE',
activeValue: 'TRUE',
disabled: true
}
}
},
// {
// label: '开始时间',
// field: 'beginTime',
// formatter: dateFormatter,
// detail: {
// dateFormat: 'YYYY-MM-DD HH:mm:ss'
// },
// sort: 'custom',
// table: {
// width: 180
// },
// form: {
// component: 'DatePicker',
// componentProps: {
// style: {width: '100%'},
// type: 'datetime',
// dateFormat: 'YYYY-MM-DD HH:mm:ss',
// valueFormat: 'x',
// }
// },
// isForm: false,
// },
// {
// label: '结束时间',
// field: 'endTime',
// formatter: dateFormatter,
// detail: {
// dateFormat: 'YYYY-MM-DD HH:mm:ss'
// },
// sort: 'custom',
// table: {
// width: 180
// },
// form: {
// component: 'DatePicker',
// componentProps: {
// style: {width: '100%'},
// type: 'datetime',
// dateFormat: 'YYYY-MM-DD HH:mm:ss',
// valueFormat: 'x',
// }
// },
// isForm: false,
// },
// {
// label: '订单号',
// field: 'woNumber',
// sort: 'custom',
// table: {
// width: 150
// },
// form: {
// // labelMessage: '信息提示说明!!!',
// componentProps: {
// isSearchList: true,
// searchListPlaceholder: '请选择订单号',
// searchField: 'number',
// searchTitle: '生产订单信息',
// searchAllSchemas: WorkMain.allSchemas,
// searchPage: WorkMainApi.getWorkMainPage
// }
// },
// isTable: false,
// isForm: false,
// },
// {
// label: '订单行',
// field: 'woLine',
// sort: 'custom',
// table: {
// width: 150
// },
// form: {
// // labelMessage: '信息提示说明!!!',
// componentProps: {
// isSearchList: true,
// searchListPlaceholder: '请选择订单行',
// searchField: 'lineNumber',
// searchTitle: '生产订单信息',
// searchAllSchemas: WorkDetail.allSchemas,
// searchPage: WorkDetailApi.getWorkDetailPage
// }
// },
// isTable: false,
// isForm: false,
// },
{
label: '创建者',
field: 'creator',
sort: 'custom',
table: {
width: 150
},
isForm: false,
},
{
label: '创建时间',
field: 'createTime',
formatter: dateFormatter,
detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss'
},
sort: 'custom',
table: {
width: 180
},
form: {
component: 'DatePicker',
componentProps: {
style: {width: '100%'},
type: 'datetime',
dateFormat: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'x',
}
},
isForm: false,
},
{
label: '最后更新者',
field: 'updater',
sort: 'custom',
table: {
width: 150
},
isForm: false,
},
{
label: '最后更新时间',
field: 'updateTime',
formatter: dateFormatter,
detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss'
},
sort: 'custom',
table: {
width: 180
},
form: {
component: 'DatePicker',
componentProps: {
style: {width: '100%'},
type: 'datetime',
dateFormat: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'x',
}
},
isForm: false,
},
{
label: '操作',
field: 'action',
isDetail: false,
isForm: false ,
table: {
width: 220,
fixed: 'right'
},
}
]))
//表单校验
export const ProductionMainRules = reactive({
displayOrder: [
{ required: true, message: '请输入顺序', trigger: 'blur' },
// { max: 50, message: '不得超过50个字符', trigger: 'blur' }
],
workshop: [
{ required: true, message: '请选择车间', trigger: 'change' }
],
productionLine: [
{ required: true, message: '请选择生产线', trigger: 'change' }
],
shift: [
{ required: true, message: '请选择班次', trigger: 'change' }
],
team: [
{ required: true, message: '请选择班组', trigger: 'change' }
],
planDate: [
{ required: true, message: '请输入计划日期', trigger: 'blur' }
],
available: [
{ required: true, message: '请选择是否可用', trigger: 'change' }
],
status: [
{ required: true, message: '请选择状态', trigger: 'change' }
],
beginTime: [
{ required: true, message: '请输入开始时间', trigger: 'blur' }
],
endTime: [
{ required: true, message: '请输入结束时间', trigger: 'blur' }
],
remark: [
{ max: 50, message: '不得超过50个字符', trigger: 'blur' }
],
})
/**
* @returns {Array}
*/
export const ProductionDetail = useCrudSchemas(reactive<CrudSchema[]>([
{
label: '物料代码',
field: 'itemCode',
sort: 'custom',
table: {
width: 150
},
form: {
// labelMessage: '信息提示说明!!!',
componentProps: {
isSearchList: true, // 开启查询弹窗
searchListPlaceholder: '请选择物料代码', // 输入框占位文本
searchField: 'itemCode', // 查询弹窗赋值字段
searchTitle: '生产线物料关系信息', // 查询弹窗标题
searchAllSchemas: Productionlineitem.allSchemas, // 查询弹窗所需类
searchPage: ProductionlineitemApi.getProductionlineitemPage, // 查询弹窗所需分页方法
searchCondition: [{
key:'productionLineCode',
value:'productionLine',
message: '请填写生产线代码!',
isMainValue: true
},{
key: 'available',
value: 'TRUE',
isMainValue: false
}],
}
},
tableForm:{
isInpuFocusShow: true,
searchListPlaceholder: '请选择物料代码', // 输入框占位文本
searchField: 'itemCode', // 查询弹窗赋值字段
searchTitle: '生产线物料关系信息', // 查询弹窗标题
searchAllSchemas: Productionlineitem.allSchemas, // 查询弹窗所需类
searchPage: ProductionlineitemApi.getProductionlineitemPage, // 查询弹窗所需分页方法
searchCondition: [{
key:'productionLineCode',
value:'productionLine',
message: '请填写生产线代码!',
isMainValue: true
},{
key: 'available',
value: 'TRUE',
isMainValue: false
}],
},
},
{
label: 'Bom版本',
field: 'bomVersion',
sort: 'custom',
table: {
width: 150
},
form: {
// labelMessage: '信息提示说明!!!',
componentProps: {
isSearchList: true, // 开启查询弹窗
searchListPlaceholder: '请选择Bom版本', // 输入框占位文本
searchField: 'version', // 查询弹窗赋值字段
searchTitle: '物料清单信息', // 查询弹窗标题
searchAllSchemas: Bom.allSchemas, // 查询弹窗所需类
searchPage: BomApi.getBomPage, // 查询弹窗所需分页方法
searchCondition: [{
key:'productItemCode',
value:'itemCode',
message: '请填写物料代码!',
isMainValue: true
},{
key: 'available',
value: 'TRUE',
isMainValue: false
}]
}
},
tableForm:{
isInpuFocusShow: true,
searchListPlaceholder: '请选择Bom版本', // 输入框占位文本
searchField: 'version', // 查询弹窗赋值字段
searchTitle: '物料清单信息', // 查询弹窗标题
searchAllSchemas: Bom.allSchemas, // 查询弹窗所需类
searchPage: BomApi.getBomPage, // 查询弹窗所需分页方法
searchCondition: [{
key:'productItemCode',
value:'itemCode',
message: '请填写物料代码!',
isMainValue: true
},{
key: 'available',
value: 'TRUE',
isMainValue: false
}]
},
},
{
label: '合格数量',
field: 'goodQty',
sort: 'custom',
table: {
width: 150
},
form: {
component: 'InputNumber',
componentProps: {
min: 1,
precision: 6
}
},
tableForm: {
type: 'InputNumber',
min: 1,
precision: 6
},
isTableForm: false,
isForm: false
},
{
label: '不合格数量',
field: 'notGoodQty',
sort: 'custom',
table: {
width: 150
},
form: {
component: 'InputNumber',
componentProps: {
min: 1,
precision: 6
}
},
tableForm: {
type: 'InputNumber',
min: 1,
precision: 6
},
isTableForm: false,
isForm: false
},
{
label: '单据号',
field: 'number',
sort: 'custom',
table: {
width: 180
},
isTableForm: false,
form: {
componentProps: {
disabled: true
}
}
},
{
label: '备注',
field: 'remark',
sort: 'custom',
table: {
width: 150
},
},
{
label: '创建时间',
field: 'createTime',
formatter: dateFormatter,
detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss'
},
sort: 'custom',
table: {
width: 180
},
form: {
component: 'DatePicker',
componentProps: {
style: {width: '100%'},
type: 'datetime',
dateFormat: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'x',
}
},
isTableForm: false,
isForm: false,
},
{
label: '创建者',
field: 'creator',
sort: 'custom',
table: {
width: 150
},
isTableForm: false,
isForm: false,
},
{
label: '计划数量',
field: 'planQty',
sort: 'custom',
table: {
width: 150
},
form: {
component: 'InputNumber',
componentProps: {
min: 0,
precision: 6
}
},
tableForm: {
type: 'InputNumber',
min: 0,
precision: 6
},
},
{
label: '计量单位',
field: 'uom',
dictType: DICT_TYPE.UOM,
dictClass: 'string',
isSearch: true,
isTable: true,
sort: 'custom',
table: {
width: 150
},
tableForm:{
type: 'Select'
}
},
{
label: '最后更新时间',
field: 'updateTime',
formatter: dateFormatter,
detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss'
},
sort: 'custom',
table: {
width: 180
},
form: {
component: 'DatePicker',
componentProps: {
style: {width: '100%'},
type: 'datetime',
dateFormat: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'x',
}
},
isTableForm: false,
isForm: false,
},
{
label: '最后更新者',
field: 'updater',
sort: 'custom',
table: {
width: 150
},
isTableForm: false,
isForm: false,
},
{
label: '是否可用',
field: 'available',
dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string',
isSearch: true,
isTable: true,
sort: 'custom',
table: {
width: 150
},
form: {
component: 'Switch',
value: 'TRUE',
componentProps: {
inactiveValue: 'FALSE',
activeValue: 'TRUE'
}
},
tableForm: {
type: 'Select',
default: 'TRUE'
},
// isTableForm: false,
// isForm: false
},
{
label: '操作',
field: 'action',
isDetail: false,
isForm: false ,
table: {
width: 150,
fixed: 'right'
},
isTableForm:false,
}
]))
//表单校验
export const ProductionDetailRules = reactive({
bomVersion: [
{ required: true, message: '请输入Bom版本', trigger: 'blur' }
],
// goodQty: [
// { required: true, message: '请输入合格数量', trigger: 'blur' }
// ],
// notGoodQty: [
// { required: true, message: '请输入不合格数量', trigger: 'blur' }
// ],
available: [
{ required: true, message: '请选择是否可用', trigger: 'change' }
],
uom: [
{ required: true, message: '请选择计量单位', trigger: 'change' }
],
planQty: [
{ required: true, message: '请输入计划数量', trigger: 'blur' }
],
itemCode: [
{ required: true, message: '请选择物料代码', trigger: 'change' }
],
remark: [
{ max: 50, message: '不得超过50个字符', trigger: 'blur' }
],
})
Loading…
Cancel
Save