检验模板调整

pull/1/head
liutao 1 month ago
parent b4367cea76
commit 4bd0065f8a

@ -1274,7 +1274,9 @@ export default {
dvId: 'Please select device', dvId: 'Please select device',
qrcodeLoadError: 'Failed to load QR code', qrcodeLoadError: 'Failed to load QR code',
qrcodeEmpty: 'No QR code', qrcodeEmpty: 'No QR code',
validatorDeviceCodeRequired: 'Code can not be empty' validatorDeviceCodeRequired: 'Code can not be empty',
gjTitle: 'Select key components',
bjTitle: 'Select spare parts',
}, },
// Critical Component // Critical Component
EquipmentKeyItems: { EquipmentKeyItems: {
@ -2753,7 +2755,9 @@ export default {
validatorNameRequired: 'Name can not be empty', validatorNameRequired: 'Name can not be empty',
validatorTypeRequired: 'Type can not be empty', validatorTypeRequired: 'Type can not be empty',
validatorSampleMethodRequired: 'Sampling method can not be empty', validatorSampleMethodRequired: 'Sampling method can not be empty',
validatorValRequired: 'Value can not be empty' validatorValRequired: 'Value can not be empty',
atIntervals:'at intervals',
extraction:'extraction',
}, },
ZjTask: { ZjTask: {
moduleName: 'Inspection Task', moduleName: 'Inspection Task',

@ -1266,7 +1266,9 @@ export default {
dvId: '请选择设备', dvId: '请选择设备',
qrcodeLoadError: '二维码加载失败', qrcodeLoadError: '二维码加载失败',
qrcodeEmpty: '暂无二维码', qrcodeEmpty: '暂无二维码',
validatorDeviceCodeRequired: '编码不能为空' validatorDeviceCodeRequired: '编码不能为空',
gjTitle: '选择关键件',
bjTitle: '选择备件',
}, },
// 设备关键件 // 设备关键件
EquipmentKeyItems: { EquipmentKeyItems: {
@ -2263,7 +2265,9 @@ export default {
validatorNameRequired: '名称不能为空', validatorNameRequired: '名称不能为空',
validatorTypeRequired: '类型不能为空', validatorTypeRequired: '类型不能为空',
validatorSampleMethodRequired: '抽检方式不能为空', validatorSampleMethodRequired: '抽检方式不能为空',
validatorValRequired: '值不能为空' validatorValRequired: '值不能为空',
atIntervals:'每间隔',
extraction:'抽取',
}, },
ZjTask: { ZjTask: {
moduleName: '检验任务', moduleName: '检验任务',

@ -247,7 +247,7 @@ const getSummaries = (param: SummaryMethodProps) => {
const handleAdd = () => { const handleAdd = () => {
const row = { const row = {
id: undefined, id: undefined,
warehouseId: 11, warehouseId: 10,
productId: undefined, productId: undefined,
productUnitName: undefined, // productUnitName: undefined, //
productBarCode: undefined, // productBarCode: undefined, //

@ -54,7 +54,7 @@
type="warning" type="warning"
plain plain
@click="handleImport" @click="handleImport"
v-hasPermi="['system:user:import']" v-hasPermi="['erp:product-unit:export']"
> >
<Icon icon="ep:upload" /> {{ t('FactoryModeling.ProductUnit.importButtonText') }} <Icon icon="ep:upload" /> {{ t('FactoryModeling.ProductUnit.importButtonText') }}
</el-button> </el-button>
@ -148,7 +148,7 @@ import download from '@/utils/download'
import { ProductUnitApi, ProductUnitVO } from '@/api/erp/product/unit' import { ProductUnitApi, ProductUnitVO } from '@/api/erp/product/unit'
import ProductUnitForm from './ProductUnitForm.vue' import ProductUnitForm from './ProductUnitForm.vue'
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import ProductUnitImportForm from './ProductUnitImportForm.vue'
/** ERP 产品单位列表 */ /** ERP 产品单位列表 */
defineOptions({ name: 'ErpProductUnit' }) defineOptions({ name: 'ErpProductUnit' })

@ -232,7 +232,7 @@
</template> </template>
</Dialog> </Dialog>
<el-dialog v-model="criticalComponentDialogVisible" title="选择关键件" width="1200px" class="device-ledger-transfer-dialog" <el-dialog v-model="criticalComponentDialogVisible" :title="t('EquipmentManagement.EquipmentLedger.gjTitle')" width="1200px" class="device-ledger-transfer-dialog"
append-to-body> append-to-body>
<!-- <div class="device-ledger-transfer"> <!-- <div class="device-ledger-transfer">
<el-transfer <el-transfer
@ -296,7 +296,7 @@
</template> </template>
</el-dialog> </el-dialog>
<el-dialog v-model="beijianDialogVisible" title="选择备件" width="860px" class="device-ledger-transfer-dialog" <el-dialog v-model="beijianDialogVisible" :title="t('EquipmentManagement.EquipmentLedger.bjTitle')" width="860px" class="device-ledger-transfer-dialog"
append-to-body> append-to-body>
<!-- <div class="device-ledger-transfer"> <!-- <div class="device-ledger-transfer">
<el-transfer <el-transfer

@ -33,9 +33,9 @@
<span class="ml-8px">%</span> <span class="ml-8px">%</span>
</template> </template>
<template v-else-if="isGapMethod"> <template v-else-if="isGapMethod">
<span>每间隔</span> <span>{{ t('QualityManagement.ZjSchema.atIntervals') }}</span>
<el-input-number v-model="gapInterval" :min="1" class="!w-120px mx-8px" :controls="false" /> <el-input-number v-model="gapInterval" :min="1" class="!w-120px mx-8px" :controls="false" />
<span>抽取</span> <span>{{ t('QualityManagement.ZjSchema.extraction') }}</span>
<el-input-number v-model="gapCount" :min="1" class="!w-120px mx-8px" :controls="false" /> <el-input-number v-model="gapCount" :min="1" class="!w-120px mx-8px" :controls="false" />
</template> </template>
<template v-else> <template v-else>
@ -46,7 +46,10 @@
</template> </template>
</el-form-item> </el-form-item>
<el-form-item :label="t('QualityManagement.ZjSchema.item')" prop="item"> <el-form-item :label="t('QualityManagement.ZjSchema.item')" prop="item">
<el-row :gutter="8" class="w-full"> <el-input :model-value="displayItemNames" readonly clearable class="device-ledger-selection-input"
:placeholder="t('QualityManagement.ZjSchema.placeholderItem')"
@click="openCriticalComponentDialog" @clear="clearBeijian" />
<!-- <el-row :gutter="8" class="w-full">
<el-col :span="22"> <el-col :span="22">
<el-input <el-input
:model-value="displayItemNames" :model-value="displayItemNames"
@ -59,7 +62,7 @@
{{ t('action.select') }} {{ t('action.select') }}
</el-button> </el-button>
</el-col> </el-col>
</el-row> </el-row>-->
</el-form-item> </el-form-item>
<el-form-item :label="t('QualityManagement.ZjSchema.remark')" prop="remark"> <el-form-item :label="t('QualityManagement.ZjSchema.remark')" prop="remark">
<el-input <el-input
@ -80,10 +83,10 @@
<el-dialog <el-dialog
v-model="itemDialogVisible" v-model="itemDialogVisible"
:title="t('QualityManagement.ZjSchema.selectItemDialogTitle')" :title="t('QualityManagement.ZjSchema.selectItemDialogTitle')"
width="920px" width="1300px"
draggable draggable
> >
<div v-loading="itemLoading"> <!-- <div v-loading="itemLoading">
<div class="formula-config-picklist"> <div class="formula-config-picklist">
<div class="formula-config-panel"> <div class="formula-config-panel">
<div class="formula-config-panel__header"> <div class="formula-config-panel__header">
@ -152,7 +155,70 @@
</el-table> </el-table>
</div> </div>
</div> </div>
</div> </div>-->
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" min-label-width="68px"
style="margin-bottom: 10px">
<el-form-item :label="t('QualityManagement.ZjItem.zjType')" prop="zjType">
<el-select
v-model="queryParams.zjType"
clearable
filterable
:placeholder="t('QualityManagement.ZjItem.placeholderZjType')"
class="!w-240px"
>
<el-option v-for="item in typeList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item :label="t('QualityManagement.ZjItem.name')" prop="name">
<el-input
v-model="queryParams.name"
:placeholder="t('QualityManagement.ZjItem.placeholderName')"
clearable
@keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item :label="t('QualityManagement.ZjItem.remark')" prop="remark">
<el-input
v-model="queryParams.remark"
:placeholder="t('QualityManagement.ZjItem.placeholderRemark')"
clearable
@keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item>
<el-button @click="handleQuery">
<Icon icon="ep:search" class="mr-5px" />
{{ t('common.query') }}
</el-button>
<el-button @click="resetQuery">
<Icon icon="ep:refresh" class="mr-5px" />
{{ t('common.reset') }}
</el-button>
</el-form-item>
</el-form>
<ContentWrap>
<el-table ref="multipleTableRef" v-loading="loading" :data="list" :stripe="true"
@selection-change="handleSelectionChange" @select="handleSelect" @select-all="handleSelectAll" :show-overflow-tooltip="true" row-key="id">
<el-table-column type="selection" width="55" :reserve-selection="true" />
<el-table-column :label="t('QualityManagement.ZjItem.name')" align="center" prop="name" sortable />
<el-table-column :label="t('QualityManagement.ZjItem.tool')" align="center" prop="tool" />
<el-table-column :label="t('QualityManagement.ZjItem.zjType')" align="center" prop="zjTypeName" sortable>
<template #default="scope">
<el-tag>{{ scope.row.zjTypeName }}</el-tag>
</template>
</el-table-column>
<el-table-column :label="t('QualityManagement.ZjItem.standardVal')" align="center" prop="standardVal" />
<el-table-column :label="t('QualityManagement.ZjItem.upperVal')" align="center" prop="upperVal" />
<el-table-column :label="t('QualityManagement.ZjItem.lowerVal')" align="center" prop="lowerVal" />
<el-table-column :label="t('QualityManagement.ZjItem.unit')" align="center" prop="unitName" sortable />
<el-table-column :label="t('QualityManagement.ZjItem.remark')" align="center" prop="remark" />
</el-table>
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
@pagination="getList" />
</ContentWrap>
<template #footer> <template #footer>
<el-button @click="itemDialogVisible = false"> <el-button @click="itemDialogVisible = false">
{{ t('common.cancel') }} {{ t('common.cancel') }}
@ -167,17 +233,30 @@
import { getDictOptions } from '@/utils/dict' import { getDictOptions } from '@/utils/dict'
import { ZjSchemaApi, ZjSchemaVO } from '@/api/mes/zjschema' import { ZjSchemaApi, ZjSchemaVO } from '@/api/mes/zjschema'
import { ZjItemApi, ZjItemVO } from '@/api/mes/zjitem' import { ZjItemApi, ZjItemVO } from '@/api/mes/zjitem'
import {ref} from "vue";
import {ElTable} from "element-plus";
import {ZjTypeApi, ZjTypeVO} from "@/api/mes/zjtype";
/** 检验方案 表单 */ /** 检验方案 表单 */
defineOptions({ name: 'ZjSchemaForm' }) defineOptions({ name: 'ZjSchemaForm' })
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
code: undefined as string | undefined,
name: undefined as string | undefined,
description: undefined as string | undefined,
remark: undefined as string | undefined,
createTime: [] as string[]
})
const typeList = ref<ZjTypeVO[]>([]) //
const { t } = useI18n() // const { t } = useI18n() //
const message = useMessage() // const message = useMessage() //
const loading = ref(true)
const dialogVisible = ref(false) // const dialogVisible = ref(false) //
const dialogTitle = ref('') // const dialogTitle = ref('') //
const formLoading = ref(false) // 12 const formLoading = ref(false) // 12
const formType = ref('') // create - update - const formType = ref('') // create - update -
const queryFormRef = ref()
const formData = ref({ const formData = ref({
type: 'All' as string | undefined, type: 'All' as string | undefined,
name: undefined as string | undefined, name: undefined as string | undefined,
@ -206,7 +285,11 @@ const formRules = reactive({
val: [{ validator: (_: any, __: any, callback: any) => validateVal(callback), trigger: 'blur' }], val: [{ validator: (_: any, __: any, callback: any) => validateVal(callback), trigger: 'blur' }],
}) })
const formRef = ref() // Ref const formRef = ref() // Ref
const list = ref<ZjItemVO[]>([])
const selectedRows = ref<any[]>([])
const total = ref(0)
const multipleTableRef = ref<InstanceType<typeof ElTable>>()
const selectedIds = ref<number[]>([])
const isSampleType = computed(() => { const isSampleType = computed(() => {
const type = formData.value.type const type = formData.value.type
return type === 'Sample' return type === 'Sample'
@ -216,12 +299,12 @@ const isRateMethod = computed(() => formData.value.sampleMethod === 'Rate')
const isGapMethod = computed(() => formData.value.sampleMethod === 'Gap') const isGapMethod = computed(() => formData.value.sampleMethod === 'Gap')
const displayItemNames = computed( () => { const displayItemNames = computed( () => {
if (!selectedItemIds.value.length) return '' if (!ids.value.length)return ''
if (!itemList.value.length) { if (!itemList.value.length) {
return formData.value.item ? String(formData.value.item) : '' return formData.value.item ? String(formData.value.item) : ''
} }
const map = new Map(itemList.value.map((item) => [item.id, item.name])) const map = new Map(itemList.value.map((item) => [item.id, item.name]))
const names = selectedItemIds.value const names = ids.value
.map((id) => map.get(id)) .map((id) => map.get(id))
.filter((name) => name) .filter((name) => name)
return names.join(',') return names.join(',')
@ -303,6 +386,15 @@ watch(
} }
) )
// 1 data
watch(list, (newData, oldData) => {
//
if (newData.length > 0) {
//
setDefaultSelections()
}
}, { deep: true })
const openItemDialog = async () => { const openItemDialog = async () => {
itemDialogVisible.value = true itemDialogVisible.value = true
if (!itemList.value.length) { if (!itemList.value.length) {
@ -320,18 +412,17 @@ const openItemDialog = async () => {
const initSelectedItemIds = () => { const initSelectedItemIds = () => {
if (!formData.value.item) { if (!formData.value.item) {
selectedItemIds.value = [] ids.value = []
return return
} }
const ids = String(formData.value.item) let s = formData.value.item.toString();
.split(',') let allIds =formData.value.item!=undefined?formData.value.item.toString().split(','):[]
.map((v) => Number(v.trim())) ids.value =allIds.map((id) => Number(id))
.filter((v) => !Number.isNaN(v)) selectedItemIds.value = allIds.map((id) => Number(id))
selectedItemIds.value = ids
} }
const confirmSelectItems = () => { const confirmSelectItems = () => {
formData.value.item = selectedItemIds.value.join(',') formData.value.item = ids.value.join(',')
itemDialogVisible.value = false itemDialogVisible.value = false
} }
@ -364,6 +455,7 @@ const open = async (type: string, id?: number) => {
dialogTitle.value = t('action.' + type) dialogTitle.value = t('action.' + type)
formType.value = type formType.value = type
resetForm() resetForm()
initSelectedItems()
// //
if (id) { if (id) {
formLoading.value = true formLoading.value = true
@ -386,6 +478,8 @@ const open = async (type: string, id?: number) => {
} finally { } finally {
formLoading.value = false formLoading.value = false
} }
}else{
ids.value=[]
} }
} }
defineExpose({ open }) // open defineExpose({ open }) // open
@ -449,6 +543,149 @@ const resetForm = () => {
targetCheckedKeys.value = [] targetCheckedKeys.value = []
formRef.value?.resetFields() formRef.value?.resetFields()
} }
const handleQuery = () => {
queryParams.pageNo = 1
getList()
}
const resetQuery = () => {
queryFormRef.value.resetFields()
handleQuery()
}
const getList = async () => {
loading.value = true
try {
const data = await ZjItemApi.getZjItemPage(queryParams)
list.value = data.list
total.value = data.total
//
nextTick(() => {
toggleSelection()
})
} finally {
loading.value = false
}
}
const initSelectedItems = async () => {
if (!itemList.value.length) {
itemLoading.value = true
try {
itemList.value = await ZjItemApi.getZjItemList()
} finally {
itemLoading.value = false
}
}
}
const ids = ref([])
const handleSelectionChange = (rows: ZjItemVO[]) => {
selectedIds.value = rows.map((r) => r.id).filter((id): id is number => typeof id === 'number')
// id
const currentPageIds = rows.map(item => item.id)
//
selectedRows.value = selectedRows.value.filter(
item => !currentPageIds.includes(item.id)
)
//
selectedRows.value.push(...rows)
let a=1;
}
//
const currentSelectedRows = ref([])
// select row selected
const handleSelect = (selection, row) => {
//
const isSelected = selection.includes(row)
if (isSelected) {
// console.log(` : ID=${row.id}, Name=${row.name}`)
ids.value.push(row.id)
} else {
ids.value = ids.value.filter(
item => item !== row.id
)
// console.log(` : ID=${row.id}, Name=${row.name}`)
}
//
currentSelectedRows.value = selection
}
const handleSelectAll = (selection) => {
let initIds=selection?.map((row) => row.id).filter((id) => id !== undefined) ?? []
ids.value =initIds.map((id) => Number(id))
}
const openCriticalComponentDialog = async () => {
itemDialogVisible.value = true
let initIds= formData.value.item!=undefined?formData.value.item.toString().split(","):[]
ids.value=initIds.map((id) => Number(id))
/* initSelectedItemIds()
sourceCheckedKeys.value = []
targetCheckedKeys.value = []*/
setDefaultSelections()
}
//
const toggleSelection = () => {
if (!multipleTableRef.value || !selectedRows.value.length) return
//
list.value.forEach(row => {
//
const isSelected = selectedRows.value.some(item => item.id === row.id)
if (isSelected) {
//
multipleTableRef.value!.toggleRowSelection(row, true)
} else {
//
multipleTableRef.value!.toggleRowSelection(row, false)
}
})
}
const clearBeijian = () => {
formData.value.item = ''
}
//
const setDefaultSelections = () => {
// DOM
nextTick(() => {
if (!multipleTableRef.value) return
multipleTableRef.value.clearSelection()
// const rawSubjectIds = toRaw(formData.value.item!=undefined?formData.value.item.toString().split(","):[])
let initIds= formData.value.item!=undefined?formData.value.item.toString().split(","):[]
const rawSubjectIds =initIds.map((id) => Number(id))
if (rawSubjectIds.length != 0) {
let row = {
id: undefined
}
multipleTableRef.value.toggleRowSelection(row, true)
}
//
list.value.forEach(row => {
let id = row.id;
if (rawSubjectIds.includes(row.id)) {
multipleTableRef.value.toggleRowSelection(row, true)
}
})
})
}
/** 初始化 **/
onMounted(async () => {
typeList.value = await ZjTypeApi.getZjTypeList()
getList()
})
</script> </script>
<style scoped> <style scoped>

Loading…
Cancel
Save