Compare commits

...

2 Commits

@ -2,6 +2,9 @@ server {
listen 8088; listen 8088;
server_name localhost; server_name localhost;
# 关键允许上传最大100MB
client_max_body_size 100m;
location /admin-api/ { location /admin-api/ {
proxy_pass http://besure_server:48081; proxy_pass http://besure_server:48081;
proxy_set_header Host $host; proxy_set_header Host $host;

@ -151,6 +151,10 @@ export const DeviceApi = {
getDeviceAttributePage: async (params) => { getDeviceAttributePage: async (params) => {
return await request.get({ url: `/iot/device/device-attribute/page`, params }) return await request.get({ url: `/iot/device/device-attribute/page`, params })
}, },
// 获得设备属性列表
getDeviceAttributeList: async (deviceId: number) => {
return await request.get({ url: `/iot/device/device-attribute/list?deviceId=` + deviceId })
},
getDeviceContactModelPage: async () => { getDeviceContactModelPage: async () => {
return await request.get({ url: `/iot/device-contact-model/page` }) return await request.get({ url: `/iot/device-contact-model/page` })

@ -178,7 +178,6 @@ export const RecipeConfigApi = {
getRecipePointDetailPage: async (params: any) => { getRecipePointDetailPage: async (params: any) => {
return await request.get({ url: `/iot/recipe-device-attribute/page`, params }) return await request.get({ url: `/iot/recipe-device-attribute/page`, params })
}, },
updateRecipeDeviceAttribute: async (data: { recipeId: string | number; ids: number[] }) => { updateRecipeDeviceAttribute: async (data: { recipeId: string | number; ids: number[] }) => {
return await request.put({ url: `/iot/recipe-device-attribute/update`, data }) return await request.put({ url: `/iot/recipe-device-attribute/update`, data })
}, },

@ -23,6 +23,10 @@ export const DvSubjectApi = {
return await request.get({ url: `/mes/mold-subject/page`, params }) return await request.get({ url: `/mes/mold-subject/page`, params })
}, },
getMoldSubjectAllList: async () => {
return await request.get({ url: `/mes/mold-subject/getAllList` })
},
// 查询维保项目详情 // 查询维保项目详情
getDvSubject: async (id: number) => { getDvSubject: async (id: number) => {
return await request.get({ url: `/mes/mold-subject/get?id=` + id }) return await request.get({ url: `/mes/mold-subject/get?id=` + id })

@ -1104,6 +1104,7 @@ export default {
operate: 'Operate', operate: 'Operate',
index: 'No.', index: 'No.',
deviceList: 'Device List', deviceList: 'Device List',
moldList: 'Mold List',
dateRange: 'Date Range', dateRange: 'Date Range',
operableUsers: 'Operable Users', operableUsers: 'Operable Users',
createWorkOrder: 'Create Work Order', createWorkOrder: 'Create Work Order',
@ -1111,6 +1112,7 @@ export default {
placeholderTaskType: 'Please select type', placeholderTaskType: 'Please select type',
placeholderProjectForm: 'Please select project form', placeholderProjectForm: 'Please select project form',
placeholderDeviceList: 'Please select device list', placeholderDeviceList: 'Please select device list',
placeholderMoldList: 'Please select mold list',
placeholderStartDate: 'Please select start date', placeholderStartDate: 'Please select start date',
placeholderEndDate: 'Please select end date', placeholderEndDate: 'Please select end date',
placeholderDateRange: 'Please select date range', placeholderDateRange: 'Please select date range',

@ -1098,6 +1098,7 @@ export default {
operate: '操作', operate: '操作',
index: '序号', index: '序号',
deviceList: '设备列表', deviceList: '设备列表',
moldList: '模具列表',
dateRange: '起止日期', dateRange: '起止日期',
operableUsers: '可操作人', operableUsers: '可操作人',
createWorkOrder: '新增工单管理', createWorkOrder: '新增工单管理',
@ -1105,6 +1106,7 @@ export default {
placeholderTaskType: '请选择类型', placeholderTaskType: '请选择类型',
placeholderProjectForm: '请选择项目表单', placeholderProjectForm: '请选择项目表单',
placeholderDeviceList: '请选择设备列表', placeholderDeviceList: '请选择设备列表',
placeholderMoldList: '请选择模具列表',
placeholderStartDate: '请选择开始日期', placeholderStartDate: '请选择开始日期',
placeholderEndDate: '请选择结束日期', placeholderEndDate: '请选择结束日期',
placeholderDateRange: '请选择起止日期', placeholderDateRange: '请选择起止日期',

@ -10,16 +10,15 @@
> >
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="t('SparePartsManagement.SpareInfo.name')" prop="name"> <el-form-item :label="t('SparePartsManagement.SpareInfo.code')" prop="barCode">
<el-input v-model="formData.name" :placeholder="t('SparePartsManagement.SpareInfo.placeholderName')" /> <el-input v-model="formData.barCode" :placeholder="t('SparePartsManagement.SpareInfo.placeholderCode')" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="t('SparePartsManagement.SpareInfo.code')" prop="barCode"> <el-form-item :label="t('SparePartsManagement.SpareInfo.name')" prop="name">
<el-input v-model="formData.barCode" :placeholder="t('SparePartsManagement.SpareInfo.placeholderCode')" /> <el-input v-model="formData.name" :placeholder="t('SparePartsManagement.SpareInfo.placeholderName')" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="t('SparePartsManagement.SpareInfo.unit')" prop="unitId"> <el-form-item :label="t('SparePartsManagement.SpareInfo.unit')" prop="unitId">
<el-select v-model="formData.unitId" clearable :placeholder="t('SparePartsManagement.SpareInfo.placeholderUnit')" class="w-1/1"> <el-select v-model="formData.unitId" clearable :placeholder="t('SparePartsManagement.SpareInfo.placeholderUnit')" class="w-1/1">
@ -32,25 +31,12 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-form-item :label="t('SparePartsManagement.SpareInfo.status')" prop="status">
<el-radio-group v-model="formData.status">
<el-radio
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key="dict.value"
:label="dict.value"
>
{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="t('SparePartsManagement.SpareInfo.standard')" prop="standard"> <el-form-item :label="t('SparePartsManagement.SpareInfo.standard')" prop="standard">
<el-input v-model="formData.standard" :placeholder="t('SparePartsManagement.SpareInfo.placeholderStandard')" /> <el-input v-model="formData.standard" :placeholder="t('SparePartsManagement.SpareInfo.placeholderStandard')" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <!-- <el-col :span="12">
<el-form-item :label="t('SparePartsManagement.SpareInfo.expiryDay')" prop="expiryDay"> <el-form-item :label="t('SparePartsManagement.SpareInfo.expiryDay')" prop="expiryDay">
<el-input-number <el-input-number
v-model="formData.expiryDay" v-model="formData.expiryDay"
@ -60,7 +46,7 @@
class="!w-1/1" class="!w-1/1"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col> -->
<!-- <el-col :span="12"> <!-- <el-col :span="12">
<el-form-item label="采购价格" prop="purchasePrice"> <el-form-item label="采购价格" prop="purchasePrice">
<el-input-number <el-input-number
@ -83,9 +69,22 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-form-item :label="t('SparePartsManagement.SpareInfo.status')" prop="status">
<el-radio-group v-model="formData.status">
<el-radio
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key="dict.value"
:label="dict.value"
>
{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item :label="t('SparePartsManagement.SpareInfo.remark')" prop="remark"> <el-form-item :label="t('SparePartsManagement.SpareInfo.remark')" prop="remark">
<el-input type="textarea" v-model="formData.remark" :placeholder="t('SparePartsManagement.SpareInfo.placeholderRemark')" /> <el-input type="textarea" v-model="formData.remark" :placeholder="t('SparePartsManagement.SpareInfo.placeholderRemark')"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>

@ -207,7 +207,7 @@ const resetQuery = () => {
/** 添加/修改操作 */ /** 添加/修改操作 */
const formRef = ref() const formRef = ref()
const openForm = (type: string, id?: number) => { const openForm = (type: string, id?: number) => {
if (!queryParams.brand) { if (type == 'create' && !queryParams.brand) {
message.error('请选择一个模具型号') message.error('请选择一个模具型号')
return return
} }

@ -68,7 +68,7 @@
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
@row-click="handleRowClick" @row-click="handleRowClick"
> >
<el-table-column type="selection" width="55" reserve-selection /> <!-- <el-table-column type="selection" width="55" reserve-selection /> -->
<el-table-column <el-table-column
:label="t('RecipeManagement.RecipeConfig.tableRecipeCodeColumn')" :label="t('RecipeManagement.RecipeConfig.tableRecipeCodeColumn')"
align="center" align="center"
@ -146,6 +146,7 @@ ref="detailRef" :visible="detailVisible"
v-model="dialogForm.recipeCode" v-model="dialogForm.recipeCode"
:placeholder="t('RecipeManagement.RecipeConfig.dialogRecipeCodePlaceholder')" :placeholder="t('RecipeManagement.RecipeConfig.dialogRecipeCodePlaceholder')"
clearable clearable
:disabled="dialogMode == 'update'"
/> />
</el-form-item> </el-form-item>
<el-form-item :label="t('RecipeManagement.RecipeConfig.dialogNameLabel')" prop="name"> <el-form-item :label="t('RecipeManagement.RecipeConfig.dialogNameLabel')" prop="name">
@ -187,6 +188,7 @@ ref="detailRef" :visible="detailVisible"
filterable filterable
class="!w-full" class="!w-full"
:loading="deviceLoading" :loading="deviceLoading"
:disabled="dialogMode == 'update'"
> >
<el-option v-for="item in deviceOptions" :key="item.value" :label="item.label" :value="item.value" /> <el-option v-for="item in deviceOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
@ -660,7 +662,7 @@ const buildTransferLabel = (item: any) => {
} }
const loadConfigCandidatesByDevice = async (deviceId: number) => { const loadConfigCandidatesByDevice = async (deviceId: number) => {
const data = await DeviceApi.getDeviceAttributePage({ pageNo: 1, pageSize: 100, deviceId }) const data = await DeviceApi.getDeviceAttributeList(deviceId)
const list = (data?.list ?? data?.data ?? []) as any[] const list = (data?.list ?? data?.data ?? []) as any[]
const deviceItems = (list ?? []) const deviceItems = (list ?? [])
.map((item: any) => { .map((item: any) => {

@ -99,12 +99,12 @@
<span>{{ scope.row.recipeName ?? '-' }}</span> <span>{{ scope.row.recipeName ?? '-' }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <!-- <el-table-column
:label="t('RecipeManagement.RecipeLibrary.tableCreatorColumn')" :label="t('RecipeManagement.RecipeLibrary.tableCreatorColumn')"
align="center" align="center"
prop="creator" prop="creator"
width="120" width="120"
/> /> -->
<el-table-column <el-table-column
:label="t('RecipeManagement.RecipeLibrary.tableCreateTimeColumn')" :label="t('RecipeManagement.RecipeLibrary.tableCreateTimeColumn')"
align="center" align="center"
@ -166,6 +166,7 @@
v-model="dialogForm.code" v-model="dialogForm.code"
:placeholder="t('RecipeManagement.RecipeLibrary.dialogCodePlaceholder')" :placeholder="t('RecipeManagement.RecipeLibrary.dialogCodePlaceholder')"
clearable clearable
:disabled="dialogType == 'update'"
/> />
</el-form-item> </el-form-item>
<el-form-item :label="t('RecipeManagement.RecipeLibrary.dialogNameLabel')" prop="name"> <el-form-item :label="t('RecipeManagement.RecipeLibrary.dialogNameLabel')" prop="name">
@ -182,11 +183,12 @@
clearable clearable
filterable filterable
class="!w-full" class="!w-full"
:disabled="dialogType == 'update'"
> >
<el-option v-for="opt in recipeOptions" :key="String(opt.value)" :label="opt.label" :value="opt.value" /> <el-option v-for="opt in recipeOptions" :key="String(opt.value)" :label="opt.label" :value="opt.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('RecipeManagement.RecipeLibrary.dialogSourceLabel')" prop="source"> <!-- <el-form-item :label="t('RecipeManagement.RecipeLibrary.dialogSourceLabel')" prop="source">
<el-select <el-select
v-model="dialogForm.source" v-model="dialogForm.source"
:placeholder="t('RecipeManagement.RecipeLibrary.dialogSourcePlaceholder')" :placeholder="t('RecipeManagement.RecipeLibrary.dialogSourcePlaceholder')"
@ -200,7 +202,7 @@
:value="opt.value" :value="opt.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item> -->
</el-form> </el-form>
<template #footer> <template #footer>
<el-button @click="dialogVisible = false"> <el-button @click="dialogVisible = false">

@ -62,13 +62,14 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('DataCollection.Device.ratio')" prop="ratio"> <el-form-item :label="t('DataCollection.Device.ratio')" prop="ratio">
<el-input <el-input-number
v-model="formData.ratio" v-model="formData.ratio"
:placeholder="t('DataCollection.Device.placeholderRatio')" :placeholder="t('DataCollection.Device.placeholderRatio')"
:min="0.00" :min="0.00"
:decision="2" :decision="2"
:step="0.01" :step="0.01"
class="!w-full" class="!w-full"
:disabled = "!ratioEnabled"
/> />
</el-form-item> </el-form-item>
<el-form-item :label="t('DataCollection.Device.remark')" prop="remark"> <el-form-item :label="t('DataCollection.Device.remark')" prop="remark">
@ -123,7 +124,7 @@ const formData = ref({
dataType: undefined as string | undefined, dataType: undefined as string | undefined,
address: undefined as string | undefined, address: undefined as string | undefined,
dataUnit: undefined as string | undefined, dataUnit: undefined as string | undefined,
ratio: undefined as string | undefined, ratio: undefined as number | undefined,
remark: undefined as string | undefined, remark: undefined as string | undefined,
deviceId: undefined as number | undefined deviceId: undefined as number | undefined
}) })

@ -5,7 +5,7 @@
:model="queryParams" :model="queryParams"
ref="queryFormRef" ref="queryFormRef"
:inline="true" :inline="true"
label-width="120px" label-width="68px"
> >
<el-form-item :label="t('DataCollection.Device.attributeCode')" prop="attributeCode"> <el-form-item :label="t('DataCollection.Device.attributeCode')" prop="attributeCode">
<el-input <el-input

@ -1,7 +1,7 @@
<template> <template>
<ContentWrap> <ContentWrap>
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="120px"> <el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
<el-form-item :label="t('DataCollection.Device.deviceCode')" prop="deviceCode"> <el-form-item :label="t('DataCollection.Device.deviceCode')" prop="deviceCode">
<el-input <el-input
v-model="queryParams.deviceCode" v-model="queryParams.deviceCode"

@ -63,7 +63,8 @@
:min="0.00" :min="0.00"
:decision="2" :decision="2"
:step="0.01" :step="0.01"
class="!w-full"/> class="!w-full"
:disabled = "!ratioEnabled"/>
</el-form-item> </el-form-item>
<el-form-item :label="t('DataCollection.DeviceModel.remark')" prop="remark"> <el-form-item :label="t('DataCollection.DeviceModel.remark')" prop="remark">
<el-input <el-input
@ -130,6 +131,57 @@ const formRules = reactive({
const formRef = ref() // Ref const formRef = ref() // Ref
const unitList = ref<ProductUnitVO[]>([]) // const unitList = ref<ProductUnitVO[]>([]) //
const ratioEnabledTypes = new Set([
'uint8',
'uint16',
'uint32',
'uint64',
'int8',
'int16',
'int32',
'float32',
'float64'
])
const ratioEnabled = computed(() => {
const v = formData.value.dataType
if (!v) return false
return ratioEnabledTypes.has(v)
})
const buildSubmitData = () => {
const {
id,
attributeCode,
attributeName,
attributeType,
typeName,
dataType,
address,
dataUnit,
ratio,
remark,
deviceModelId
} = formData.value
const data: any = {
attributeCode,
attributeName,
attributeType,
typeName,
dataType,
address,
dataUnit,
ratio: ratioEnabled.value ? ratio : undefined,
remark,
deviceModelId
}
if (formType.value === 'update') {
data.id = id
}
return data
}
/** 打开弹窗 */ /** 打开弹窗 */
const open = async (type: string, id: number, modelId: number) => { const open = async (type: string, id: number, modelId: number) => {
dialogVisible.value = true dialogVisible.value = true
@ -174,7 +226,7 @@ const submitForm = async () => {
// //
formLoading.value = true formLoading.value = true
try { try {
const data = formData.value const data = buildSubmitData()
if (formType.value === 'create') { if (formType.value === 'create') {
await DeviceModelAttributeApi.createDeviceModelAttribute(data) await DeviceModelAttributeApi.createDeviceModelAttribute(data)
message.success(t('common.createSuccess')) message.success(t('common.createSuccess'))

@ -5,7 +5,6 @@
:model="queryParams" :model="queryParams"
ref="queryFormRef" ref="queryFormRef"
:inline="true" :inline="true"
label-width="auto"
> >
<el-form-item :label="t('DataCollection.RunReport.searchDeviceCodeLabel')" prop="deviceCode"> <el-form-item :label="t('DataCollection.RunReport.searchDeviceCodeLabel')" prop="deviceCode">
<el-input <el-input
@ -193,6 +192,6 @@ onMounted(() => {
<style scoped lang="scss"> <style scoped lang="scss">
.run-report-form :deep(.el-form-item__label) { .run-report-form :deep(.el-form-item__label) {
min-width: 120px; min-width: 100px;
} }
</style> </style>

@ -72,7 +72,7 @@ const formType = ref<'create' | 'update'>('create')
const subjectOptions = ref<DvSubjectVO[]>([]) const subjectOptions = ref<DvSubjectVO[]>([])
const ensureSubjectOptionsLoaded = async () => { const ensureSubjectOptionsLoaded = async () => {
if (subjectOptions.value.length) return if (subjectOptions.value.length) return
const res = await DvSubjectApi.getDvSubjectPage({}) const res = await DvSubjectApi.getMoldSubjectAllList()
const list = Array.isArray(res) ? res : res?.list const list = Array.isArray(res) ? res : res?.list
subjectOptions.value = (list ?? []) as DvSubjectVO[] subjectOptions.value = (list ?? []) as DvSubjectVO[]
} }

@ -1,6 +1,6 @@
<template> <template>
<ContentWrap> <ContentWrap>
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="110px"> <el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
<el-form-item :label="t('MoldManagement.MoldInspectionPlan.planName')" prop="planName"> <el-form-item :label="t('MoldManagement.MoldInspectionPlan.planName')" prop="planName">
<el-input <el-input
v-model="queryParams.planName" v-model="queryParams.planName"

@ -10,13 +10,13 @@
<el-radio :label="2">{{ t('EquipmentManagement.TaskManagement.taskTypeMaintain') }}</el-radio> <el-radio :label="2">{{ t('EquipmentManagement.TaskManagement.taskTypeMaintain') }}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item :label="t('EquipmentManagement.TaskManagement.deviceList')" prop="moldList"> <el-form-item :label="t('EquipmentManagement.TaskManagement.moldList')" prop="moldList">
<el-select <el-select
v-model="formData.moldList" v-model="formData.moldList"
multiple multiple
filterable filterable
clearable clearable
:placeholder="t('EquipmentManagement.TaskManagement.placeholderDeviceList')" :placeholder="t('EquipmentManagement.TaskManagement.placeholderMoldList')"
class="!w-full" class="!w-full"
> >
<el-option v-for="item in deviceOptions" :key="String(item.id)" :label="item.name" :value="String(item.id)" /> <el-option v-for="item in deviceOptions" :key="String(item.id)" :label="item.name" :value="String(item.id)" />
@ -124,11 +124,11 @@ const toCommaSeparatedIds = (value: any): string | undefined => {
const ensureOptionsLoaded = async () => { const ensureOptionsLoaded = async () => {
const [deviceRes, planRes, userRes] = await Promise.all([ const [deviceRes, planRes, userRes] = await Promise.all([
MoldBrandApi.getMoldPage({}), MoldBrandApi.getMoldAllList(),
PlanMaintenanceApi.getPlanMaintenancePage({}), PlanMaintenanceApi.getPlanMaintenancePage({}),
getSimpleUserList() getSimpleUserList()
]) ])
deviceOptions.value = (deviceRes?.list ?? []) as DeviceOption[] deviceOptions.value = (deviceRes ?? []) as DeviceOption[]
planOptions.value = (planRes?.list ?? []) as PlanOption[] planOptions.value = (planRes?.list ?? []) as PlanOption[]
users.value = userRes ?? [] users.value = userRes ?? []
} }

@ -5,7 +5,7 @@
:model="queryParams" :model="queryParams"
ref="queryFormRef" ref="queryFormRef"
:inline="true" :inline="true"
label-width="110px" label-width="68px"
> >
<el-form-item :label="t('EquipmentManagement.TaskManagement.name')" prop="name"> <el-form-item :label="t('EquipmentManagement.TaskManagement.name')" prop="name">
<el-input <el-input
@ -67,7 +67,7 @@
:show-overflow-tooltip="true" :show-overflow-tooltip="true"
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
> >
<el-table-column type="selection" width="55" /> <!-- <el-table-column type="selection" width="55" /> -->
<el-table-column :label="t('EquipmentManagement.TaskManagement.index')" type="index" align="center" width="70" /> <el-table-column :label="t('EquipmentManagement.TaskManagement.index')" type="index" align="center" width="70" />
<el-table-column :label="t('EquipmentManagement.TaskManagement.name')" align="center" prop="name" min-width="140" /> <el-table-column :label="t('EquipmentManagement.TaskManagement.name')" align="center" prop="name" min-width="140" />
<el-table-column :label="t('EquipmentManagement.TaskManagement.taskType')" align="center" prop="taskType" width="90"> <el-table-column :label="t('EquipmentManagement.TaskManagement.taskType')" align="center" prop="taskType" width="90">

Loading…
Cancel
Save