✨ feat(select): 增加状态过滤功能,优化选择器提示信息
在 DvCheckPlanSelect 和相关组件中新增状态过滤功能,允许用户根据计划状态筛选可选项。同时,优化了提示信息的拼装逻辑,提升用户体验。pull/871/MERGE
parent
500d20155b
commit
606a9ed6e8
|
|
@ -51,6 +51,7 @@
|
||||||
ref="dialogRef"
|
ref="dialogRef"
|
||||||
:multiple="false"
|
:multiple="false"
|
||||||
:type="type"
|
:type="type"
|
||||||
|
:status="status"
|
||||||
@selected="handleSelected"
|
@selected="handleSelected"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
@ -74,6 +75,7 @@ const props = withDefaults(
|
||||||
clearable?: boolean // 是否允许清空
|
clearable?: boolean // 是否允许清空
|
||||||
placeholder?: string // 占位文字
|
placeholder?: string // 占位文字
|
||||||
type?: number // 计划类型过滤
|
type?: number // 计划类型过滤
|
||||||
|
status?: number // 状态过滤(如仅已启用)
|
||||||
}>(),
|
}>(),
|
||||||
{
|
{
|
||||||
disabled: false,
|
disabled: false,
|
||||||
|
|
|
||||||
|
|
@ -12,8 +12,8 @@
|
||||||
<Dialog title="点检方案选择" v-model="dialogVisible" width="70%">
|
<Dialog title="点检方案选择" v-model="dialogVisible" width="70%">
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<el-alert
|
<el-alert
|
||||||
v-if="type != null"
|
v-if="type != null || status != null"
|
||||||
:title="`仅展示【${getDictLabel(DICT_TYPE.MES_DV_SUBJECT_TYPE, type)}】类型的计划`"
|
:title="alertTitle"
|
||||||
type="info"
|
type="info"
|
||||||
:closable="false"
|
:closable="false"
|
||||||
show-icon
|
show-icon
|
||||||
|
|
@ -143,12 +143,25 @@ const props = withDefaults(
|
||||||
defineProps<{
|
defineProps<{
|
||||||
multiple?: boolean // true 多选(checkbox),false 单选(radio)
|
multiple?: boolean // true 多选(checkbox),false 单选(radio)
|
||||||
type?: number // 过滤特定计划类型
|
type?: number // 过滤特定计划类型
|
||||||
|
status?: number // 过滤特定状态(如已启用 = 1)
|
||||||
}>(),
|
}>(),
|
||||||
{
|
{
|
||||||
multiple: true
|
multiple: true
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/** 拼装 el-alert 提示文字 */
|
||||||
|
const alertTitle = computed(() => {
|
||||||
|
const parts: string[] = []
|
||||||
|
if (props.type != null) {
|
||||||
|
parts.push(`类型【${getDictLabel(DICT_TYPE.MES_DV_SUBJECT_TYPE, props.type)}】`)
|
||||||
|
}
|
||||||
|
if (props.status != null) {
|
||||||
|
parts.push(`状态【${getDictLabel(DICT_TYPE.MES_DV_CHECK_PLAN_STATUS, props.status)}】`)
|
||||||
|
}
|
||||||
|
return `仅展示${parts.join('且')}的方案`
|
||||||
|
})
|
||||||
|
|
||||||
const message = useMessage()
|
const message = useMessage()
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
selected: [rows: DvCheckPlanVO[]]
|
selected: [rows: DvCheckPlanVO[]]
|
||||||
|
|
@ -204,7 +217,8 @@ const queryParams = reactive({
|
||||||
pageSize: 10, // 每页条数
|
pageSize: 10, // 每页条数
|
||||||
code: undefined as string | undefined,
|
code: undefined as string | undefined,
|
||||||
name: undefined as string | undefined,
|
name: undefined as string | undefined,
|
||||||
type: undefined as number | undefined
|
type: undefined as number | undefined,
|
||||||
|
status: undefined as number | undefined
|
||||||
})
|
})
|
||||||
|
|
||||||
/** 查询列表 */
|
/** 查询列表 */
|
||||||
|
|
@ -285,6 +299,7 @@ const open = async (selectedIds?: number[]) => {
|
||||||
queryParams.code = undefined
|
queryParams.code = undefined
|
||||||
queryParams.name = undefined
|
queryParams.name = undefined
|
||||||
queryParams.type = props.type
|
queryParams.type = props.type
|
||||||
|
queryParams.status = props.status
|
||||||
queryParams.pageNo = 1
|
queryParams.pageNo = 1
|
||||||
// 清空上一次的选中状态
|
// 清空上一次的选中状态
|
||||||
selectedRows.value = []
|
selectedRows.value = []
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,11 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="点检计划" prop="planId">
|
<el-form-item label="点检计划" prop="planId">
|
||||||
<DvCheckPlanSelect v-model="formData.planId" :type="MesDvSubjectTypeEnum.CHECK" />
|
<DvCheckPlanSelect
|
||||||
|
v-model="formData.planId"
|
||||||
|
:type="MesDvSubjectTypeEnum.CHECK"
|
||||||
|
:status="MesDvCheckPlanStatusEnum.ENABLED"
|
||||||
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
|
|
@ -73,7 +77,11 @@ import DvMachinerySelect from '@/views/mes/dv/machinery/components/DvMachinerySe
|
||||||
import DvCheckPlanSelect from '@/views/mes/dv/checkplan/components/DvCheckPlanSelect.vue'
|
import DvCheckPlanSelect from '@/views/mes/dv/checkplan/components/DvCheckPlanSelect.vue'
|
||||||
import UserSelectV2 from '@/views/system/user/components/UserSelectV2.vue'
|
import UserSelectV2 from '@/views/system/user/components/UserSelectV2.vue'
|
||||||
import CheckRecordLineList from './CheckRecordLineList.vue'
|
import CheckRecordLineList from './CheckRecordLineList.vue'
|
||||||
import { MesDvCheckRecordStatusEnum, MesDvSubjectTypeEnum } from '@/views/mes/utils/constants'
|
import {
|
||||||
|
MesDvCheckRecordStatusEnum,
|
||||||
|
MesDvSubjectTypeEnum,
|
||||||
|
MesDvCheckPlanStatusEnum
|
||||||
|
} from '@/views/mes/utils/constants'
|
||||||
|
|
||||||
defineOptions({ name: 'CheckRecordForm' })
|
defineOptions({ name: 'CheckRecordForm' })
|
||||||
const emit = defineEmits(['success'])
|
const emit = defineEmits(['success'])
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,11 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="保养计划" prop="planId">
|
<el-form-item label="保养计划" prop="planId">
|
||||||
<DvCheckPlanSelect v-model="formData.planId" :type="MesDvSubjectTypeEnum.MAINTENANCE" />
|
<DvCheckPlanSelect
|
||||||
|
v-model="formData.planId"
|
||||||
|
:type="MesDvSubjectTypeEnum.MAINTENANCE"
|
||||||
|
:status="MesDvCheckPlanStatusEnum.ENABLED"
|
||||||
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
|
|
@ -73,7 +77,11 @@ import DvCheckPlanSelect from '@/views/mes/dv/checkplan/components/DvCheckPlanSe
|
||||||
import UserSelectV2 from '@/views/system/user/components/UserSelectV2.vue'
|
import UserSelectV2 from '@/views/system/user/components/UserSelectV2.vue'
|
||||||
import MaintenRecordLineList from './MaintenRecordLineList.vue'
|
import MaintenRecordLineList from './MaintenRecordLineList.vue'
|
||||||
import { useUserStore } from '@/store/modules/user'
|
import { useUserStore } from '@/store/modules/user'
|
||||||
import { MesDvMaintenRecordStatusEnum, MesDvSubjectTypeEnum } from '@/views/mes/utils/constants'
|
import {
|
||||||
|
MesDvMaintenRecordStatusEnum,
|
||||||
|
MesDvSubjectTypeEnum,
|
||||||
|
MesDvCheckPlanStatusEnum
|
||||||
|
} from '@/views/mes/utils/constants'
|
||||||
|
|
||||||
defineOptions({ name: 'MaintenRecordForm' })
|
defineOptions({ name: 'MaintenRecordForm' })
|
||||||
const emit = defineEmits(['success'])
|
const emit = defineEmits(['success'])
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,12 @@
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
</div>
|
</div>
|
||||||
<!-- 弹窗必须放在 div 外部,否则弹窗内的点击事件会冒泡到 div 触发 handleClick -->
|
<!-- 弹窗必须放在 div 外部,否则弹窗内的点击事件会冒泡到 div 触发 handleClick -->
|
||||||
<MdWorkstationSelectDialog ref="dialogRef" :multiple="false" @selected="handleSelected" />
|
<MdWorkstationSelectDialog
|
||||||
|
ref="dialogRef"
|
||||||
|
:multiple="false"
|
||||||
|
:process-id="processId"
|
||||||
|
@selected="handleSelected"
|
||||||
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
|
@ -58,6 +63,7 @@ defineOptions({ name: 'MdWorkstationSelect', inheritAttrs: false })
|
||||||
const props = withDefaults(
|
const props = withDefaults(
|
||||||
defineProps<{
|
defineProps<{
|
||||||
modelValue?: number // 绑定的工作站 ID
|
modelValue?: number // 绑定的工作站 ID
|
||||||
|
processId?: number // 工序过滤(透传给 Dialog)
|
||||||
disabled?: boolean // 是否禁用
|
disabled?: boolean // 是否禁用
|
||||||
clearable?: boolean // 是否允许清空
|
clearable?: boolean // 是否允许清空
|
||||||
placeholder?: string // 占位文字
|
placeholder?: string // 占位文字
|
||||||
|
|
|
||||||
|
|
@ -110,6 +110,7 @@ defineOptions({ name: 'MdWorkstationSelectDialog' })
|
||||||
const props = withDefaults(
|
const props = withDefaults(
|
||||||
defineProps<{
|
defineProps<{
|
||||||
multiple?: boolean // true 多选(checkbox),false 单选(radio)
|
multiple?: boolean // true 多选(checkbox),false 单选(radio)
|
||||||
|
processId?: number // 工序预过滤(不传则不限制)
|
||||||
}>(),
|
}>(),
|
||||||
{
|
{
|
||||||
multiple: true
|
multiple: true
|
||||||
|
|
@ -222,7 +223,7 @@ const handleQuery = () => {
|
||||||
/** 重置查询条件 */
|
/** 重置查询条件 */
|
||||||
const resetQuery = () => {
|
const resetQuery = () => {
|
||||||
queryParams.code = undefined
|
queryParams.code = undefined
|
||||||
queryParams.processId = undefined
|
queryParams.processId = props.processId // 保持外部传入的工序过滤
|
||||||
queryParams.workshopId = undefined
|
queryParams.workshopId = undefined
|
||||||
queryParams.status = CommonStatusEnum.ENABLE
|
queryParams.status = CommonStatusEnum.ENABLE
|
||||||
handleQuery()
|
handleQuery()
|
||||||
|
|
@ -251,9 +252,9 @@ const confirmSelect = () => {
|
||||||
/** 打开弹窗,可传入已选 ID 用于预选高亮 */
|
/** 打开弹窗,可传入已选 ID 用于预选高亮 */
|
||||||
const open = async (selectedIds?: number[]) => {
|
const open = async (selectedIds?: number[]) => {
|
||||||
dialogVisible.value = true
|
dialogVisible.value = true
|
||||||
// 重置查询条件 + 页码,避免二次打开继承上次过滤上下文
|
// 重置查询条件 + 页码
|
||||||
queryParams.code = undefined
|
queryParams.code = undefined
|
||||||
queryParams.processId = undefined
|
queryParams.processId = props.processId // 外部传入 processId 则默认按工序过滤
|
||||||
queryParams.workshopId = undefined
|
queryParams.workshopId = undefined
|
||||||
queryParams.status = CommonStatusEnum.ENABLE
|
queryParams.status = CommonStatusEnum.ENABLE
|
||||||
queryParams.pageNo = 1
|
queryParams.pageNo = 1
|
||||||
|
|
@ -262,7 +263,6 @@ const open = async (selectedIds?: number[]) => {
|
||||||
selectedRadioId.value = undefined
|
selectedRadioId.value = undefined
|
||||||
currentRadioRow.value = undefined
|
currentRadioRow.value = undefined
|
||||||
preSelectedIds.value = selectedIds ?? []
|
preSelectedIds.value = selectedIds ?? []
|
||||||
// 多选模式清空跨页缓存的勾选
|
|
||||||
await nextTick()
|
await nextTick()
|
||||||
tableRef.value?.clearSelection()
|
tableRef.value?.clearSelection()
|
||||||
await getList()
|
await getList()
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,12 @@
|
||||||
<ProTaskSelect
|
<ProTaskSelect
|
||||||
v-model="formData.taskId"
|
v-model="formData.taskId"
|
||||||
:workOrderId="formData.workOrderId"
|
:workOrderId="formData.workOrderId"
|
||||||
:statuses="[MesProTaskStatusEnum.NORMAL, MesProTaskStatusEnum.START, MesProTaskStatusEnum.PAUSE]"
|
:workstationId="formData.workstationId"
|
||||||
|
:statuses="[
|
||||||
|
MesProTaskStatusEnum.NORMAL,
|
||||||
|
MesProTaskStatusEnum.START,
|
||||||
|
MesProTaskStatusEnum.PAUSE
|
||||||
|
]"
|
||||||
:disabled="isHeaderReadonly || !formData.workOrderId"
|
:disabled="isHeaderReadonly || !formData.workOrderId"
|
||||||
placeholder="请选择任务"
|
placeholder="请选择任务"
|
||||||
@change="handleTaskChange"
|
@change="handleTaskChange"
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,12 @@
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
</div>
|
</div>
|
||||||
<!-- 弹窗必须放在 div 外部,否则弹窗内的点击事件会冒泡到 div 触发 handleClick -->
|
<!-- 弹窗必须放在 div 外部,否则弹窗内的点击事件会冒泡到 div 触发 handleClick -->
|
||||||
<ProTaskSelectDialog ref="dialogRef" :multiple="false" :statuses="statuses" @selected="handleSelected" />
|
<ProTaskSelectDialog
|
||||||
|
ref="dialogRef"
|
||||||
|
:multiple="false"
|
||||||
|
:statuses="statuses"
|
||||||
|
@selected="handleSelected"
|
||||||
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
|
@ -62,6 +67,7 @@ const props = withDefaults(
|
||||||
defineProps<{
|
defineProps<{
|
||||||
modelValue?: number // 绑定的任务 ID
|
modelValue?: number // 绑定的任务 ID
|
||||||
workOrderId?: number // 可选,打开弹窗时默认按此工单过滤
|
workOrderId?: number // 可选,打开弹窗时默认按此工单过滤
|
||||||
|
workstationId?: number // 可选,打开弹窗时默认按此工位过滤
|
||||||
statuses?: number[] // 可选,任务状态列表(IN 查询)
|
statuses?: number[] // 可选,任务状态列表(IN 查询)
|
||||||
disabled?: boolean // 是否禁用
|
disabled?: boolean // 是否禁用
|
||||||
clearable?: boolean // 是否允许清空
|
clearable?: boolean // 是否允许清空
|
||||||
|
|
@ -143,7 +149,7 @@ const handleClick = (e: MouseEvent) => {
|
||||||
}
|
}
|
||||||
// 打开弹窗,传入当前选中 ID 用于预选高亮
|
// 打开弹窗,传入当前选中 ID 用于预选高亮
|
||||||
const selectedIds = props.modelValue != null ? [props.modelValue] : []
|
const selectedIds = props.modelValue != null ? [props.modelValue] : []
|
||||||
dialogRef.value.open(selectedIds, props.workOrderId)
|
dialogRef.value.open(selectedIds, props.workOrderId, props.workstationId)
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 弹窗选中回调 */
|
/** 弹窗选中回调 */
|
||||||
|
|
|
||||||
|
|
@ -278,7 +278,7 @@ const resetQuery = () => {
|
||||||
queryParams.name = undefined
|
queryParams.name = undefined
|
||||||
queryParams.processId = undefined
|
queryParams.processId = undefined
|
||||||
queryParams.workOrderId = undefined
|
queryParams.workOrderId = undefined
|
||||||
queryParams.workstationId = undefined
|
queryParams.workstationId = externalWorkstationId.value // 保持外部传入的工位过滤
|
||||||
queryParams.statuses = props.statuses // 保持 props 传入的状态过滤
|
queryParams.statuses = props.statuses // 保持 props 传入的状态过滤
|
||||||
handleQuery()
|
handleQuery()
|
||||||
}
|
}
|
||||||
|
|
@ -303,15 +303,18 @@ const confirmSelect = () => {
|
||||||
|
|
||||||
// ==================== 打开弹窗 ====================
|
// ==================== 打开弹窗 ====================
|
||||||
|
|
||||||
/** 打开弹窗,可传入已选 ID 用于预选高亮,workOrderId 用于默认过滤工单 */
|
const externalWorkstationId = ref<number | undefined>() // 记录外部传入的 workstationId,用于 resetQuery 时保持过滤条件
|
||||||
const open = async (selectedIds?: number[], workOrderId?: number) => {
|
|
||||||
|
/** 打开弹窗,可传入已选 ID 用于预选高亮,workOrderId / workstationId 用于默认过滤 */
|
||||||
|
const open = async (selectedIds?: number[], workOrderId?: number, workstationId?: number) => {
|
||||||
dialogVisible.value = true
|
dialogVisible.value = true
|
||||||
|
externalWorkstationId.value = workstationId
|
||||||
// 重置查询条件 + 页码,避免二次打开继承上次过滤上下文
|
// 重置查询条件 + 页码,避免二次打开继承上次过滤上下文
|
||||||
queryParams.code = undefined
|
queryParams.code = undefined
|
||||||
queryParams.name = undefined
|
queryParams.name = undefined
|
||||||
queryParams.processId = undefined
|
queryParams.processId = undefined
|
||||||
queryParams.workOrderId = workOrderId ?? undefined // 传入 workOrderId 则默认按工单过滤
|
queryParams.workOrderId = workOrderId ?? undefined // 传入 workOrderId 则默认按工单过滤
|
||||||
queryParams.workstationId = undefined
|
queryParams.workstationId = workstationId ?? undefined // 传入 workstationId 则默认按工位过滤
|
||||||
queryParams.statuses = props.statuses // 固定状态过滤条件(从 props 传入)
|
queryParams.statuses = props.statuses // 固定状态过滤条件(从 props 传入)
|
||||||
queryParams.pageNo = 1
|
queryParams.pageNo = 1
|
||||||
// 清空上一次的选中状态
|
// 清空上一次的选中状态
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,7 @@
|
||||||
ref="dialogRef"
|
ref="dialogRef"
|
||||||
:multiple="false"
|
:multiple="false"
|
||||||
:status="status"
|
:status="status"
|
||||||
|
:type="type"
|
||||||
@selected="handleSelected"
|
@selected="handleSelected"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
@ -65,7 +66,8 @@ const props = withDefaults(
|
||||||
disabled?: boolean // 是否禁用
|
disabled?: boolean // 是否禁用
|
||||||
clearable?: boolean // 是否允许清空
|
clearable?: boolean // 是否允许清空
|
||||||
placeholder?: string // 占位文字
|
placeholder?: string // 占位文字
|
||||||
status?: number // 弹窗打开时的默认状态过滤(透传给 Dialog)
|
status?: number // 弹窗打开时的默认状态过滤
|
||||||
|
type?: number // 工单类型过滤
|
||||||
}>(),
|
}>(),
|
||||||
{
|
{
|
||||||
disabled: false,
|
disabled: false,
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,14 @@
|
||||||
<Dialog title="生产工单选择" v-model="dialogVisible" width="80%">
|
<Dialog title="生产工单选择" v-model="dialogVisible" width="80%">
|
||||||
<!-- 搜索 -->
|
<!-- 搜索 -->
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
|
<el-alert
|
||||||
|
v-if="type != null"
|
||||||
|
:title="`仅展示【${getDictLabel(DICT_TYPE.MES_PRO_WORK_ORDER_TYPE, type)}】类型的工单`"
|
||||||
|
type="info"
|
||||||
|
:closable="false"
|
||||||
|
show-icon
|
||||||
|
class="!mb-10px"
|
||||||
|
/>
|
||||||
<el-form :inline="true" :model="queryParams" label-width="80px">
|
<el-form :inline="true" :model="queryParams" label-width="80px">
|
||||||
<el-form-item label="工单编码">
|
<el-form-item label="工单编码">
|
||||||
<el-input
|
<el-input
|
||||||
|
|
@ -142,7 +150,7 @@
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { dateFormatter2 } from '@/utils/formatTime'
|
import { dateFormatter2 } from '@/utils/formatTime'
|
||||||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
import { DICT_TYPE, getDictLabel, getIntDictOptions } from '@/utils/dict'
|
||||||
import { ProWorkOrderApi, ProWorkOrderVO } from '@/api/mes/pro/workorder'
|
import { ProWorkOrderApi, ProWorkOrderVO } from '@/api/mes/pro/workorder'
|
||||||
import MdItemSelect from '@/views/mes/md/item/components/MdItemSelect.vue'
|
import MdItemSelect from '@/views/mes/md/item/components/MdItemSelect.vue'
|
||||||
import MdClientSelect from '@/views/mes/md/client/components/MdClientSelect.vue'
|
import MdClientSelect from '@/views/mes/md/client/components/MdClientSelect.vue'
|
||||||
|
|
@ -153,6 +161,7 @@ const props = withDefaults(
|
||||||
defineProps<{
|
defineProps<{
|
||||||
multiple?: boolean // true 多选(checkbox),false 单选(radio)
|
multiple?: boolean // true 多选(checkbox),false 单选(radio)
|
||||||
status?: number // 打开弹窗时的默认状态过滤(不传则不预设)
|
status?: number // 打开弹窗时的默认状态过滤(不传则不预设)
|
||||||
|
type?: number // 工单类型过滤(不传则不限制)
|
||||||
}>(),
|
}>(),
|
||||||
{
|
{
|
||||||
multiple: true
|
multiple: true
|
||||||
|
|
@ -216,7 +225,8 @@ const queryParams = reactive({
|
||||||
name: undefined as string | undefined, // 工单名称
|
name: undefined as string | undefined, // 工单名称
|
||||||
productId: undefined as number | undefined, // 产品编号
|
productId: undefined as number | undefined, // 产品编号
|
||||||
clientId: undefined as number | undefined, // 客户编号
|
clientId: undefined as number | undefined, // 客户编号
|
||||||
status: undefined as number | undefined // 工单状态
|
status: undefined as number | undefined, // 工单状态
|
||||||
|
type: undefined as number | undefined // 工单类型
|
||||||
})
|
})
|
||||||
|
|
||||||
/** 查询工单列表 */
|
/** 查询工单列表 */
|
||||||
|
|
@ -270,6 +280,7 @@ const resetQuery = () => {
|
||||||
queryParams.productId = undefined
|
queryParams.productId = undefined
|
||||||
queryParams.clientId = undefined
|
queryParams.clientId = undefined
|
||||||
queryParams.status = props.status
|
queryParams.status = props.status
|
||||||
|
queryParams.type = props.type
|
||||||
handleQuery()
|
handleQuery()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -302,6 +313,7 @@ const open = async (selectedIds?: number[]) => {
|
||||||
queryParams.productId = undefined
|
queryParams.productId = undefined
|
||||||
queryParams.clientId = undefined
|
queryParams.clientId = undefined
|
||||||
queryParams.status = props.status
|
queryParams.status = props.status
|
||||||
|
queryParams.type = props.type
|
||||||
queryParams.pageNo = 1
|
queryParams.pageNo = 1
|
||||||
// 清空上一次的选中状态
|
// 清空上一次的选中状态
|
||||||
selectedRows.value = []
|
selectedRows.value = []
|
||||||
|
|
|
||||||
|
|
@ -88,7 +88,12 @@
|
||||||
<ProTaskSelect
|
<ProTaskSelect
|
||||||
v-model="formData.taskId"
|
v-model="formData.taskId"
|
||||||
:workOrderId="formData.workOrderId"
|
:workOrderId="formData.workOrderId"
|
||||||
:statuses="[MesProTaskStatusEnum.NORMAL, MesProTaskStatusEnum.START, MesProTaskStatusEnum.PAUSE]"
|
:workstationId="formData.workstationId"
|
||||||
|
:statuses="[
|
||||||
|
MesProTaskStatusEnum.NORMAL,
|
||||||
|
MesProTaskStatusEnum.START,
|
||||||
|
MesProTaskStatusEnum.PAUSE
|
||||||
|
]"
|
||||||
placeholder="请选择生产任务"
|
placeholder="请选择生产任务"
|
||||||
class="!w-1/1"
|
class="!w-1/1"
|
||||||
:disabled="isFromPendingTask || (!isFromPendingTask && !formData.workOrderId)"
|
:disabled="isFromPendingTask || (!isFromPendingTask && !formData.workOrderId)"
|
||||||
|
|
|
||||||
|
|
@ -147,7 +147,12 @@
|
||||||
label="装箱单"
|
label="装箱单"
|
||||||
prop="bizId"
|
prop="bizId"
|
||||||
>
|
>
|
||||||
<WmPackageSelect v-model="formData.bizId" @change="handleBizSelect" class="!w-1/1" />
|
<WmPackageSelect
|
||||||
|
v-model="formData.bizId"
|
||||||
|
:childable-only="true"
|
||||||
|
@change="handleBizSelect"
|
||||||
|
class="!w-1/1"
|
||||||
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
<el-form-item
|
||||||
v-else-if="formData.bizType === BarcodeBizTypeEnum.STOCK"
|
v-else-if="formData.bizType === BarcodeBizTypeEnum.STOCK"
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,8 @@ const props = withDefaults(
|
||||||
defineProps<{
|
defineProps<{
|
||||||
modelValue?: number // 绑定的批次 ID
|
modelValue?: number // 绑定的批次 ID
|
||||||
itemId?: number // 默认过滤的物料 ID
|
itemId?: number // 默认过滤的物料 ID
|
||||||
|
clientId?: number // 默认过滤的客户 ID
|
||||||
|
vendorId?: number // 默认过滤的供应商 ID
|
||||||
disabled?: boolean // 是否禁用
|
disabled?: boolean // 是否禁用
|
||||||
clearable?: boolean // 是否允许清空
|
clearable?: boolean // 是否允许清空
|
||||||
placeholder?: string // 占位文字
|
placeholder?: string // 占位文字
|
||||||
|
|
@ -139,7 +141,7 @@ const handleClick = (e: MouseEvent) => {
|
||||||
}
|
}
|
||||||
// 打开弹窗,传入当前选中 ID 用于预选高亮,传入 itemId 用于默认过滤
|
// 打开弹窗,传入当前选中 ID 用于预选高亮,传入 itemId 用于默认过滤
|
||||||
const selectedIds = props.modelValue != null ? [props.modelValue] : []
|
const selectedIds = props.modelValue != null ? [props.modelValue] : []
|
||||||
dialogRef.value.open(selectedIds, props.itemId)
|
dialogRef.value.open(selectedIds, props.itemId, props.clientId, props.vendorId)
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 弹窗选中回调 */
|
/** 弹窗选中回调 */
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,14 @@
|
||||||
<template>
|
<template>
|
||||||
<Dialog title="批次选择" v-model="dialogVisible" width="75%">
|
<Dialog title="批次选择" v-model="dialogVisible" width="75%">
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
|
<el-alert
|
||||||
|
v-if="externalClientId != null || externalVendorId != null"
|
||||||
|
:title="alertTitle"
|
||||||
|
type="info"
|
||||||
|
:closable="false"
|
||||||
|
show-icon
|
||||||
|
class="!mb-10px"
|
||||||
|
/>
|
||||||
<el-form :inline="true" :model="queryParams" label-width="100px">
|
<el-form :inline="true" :model="queryParams" label-width="100px">
|
||||||
<el-form-item label="批次编号">
|
<el-form-item label="批次编号">
|
||||||
<el-input
|
<el-input
|
||||||
|
|
@ -387,8 +395,8 @@ const handleQuery = () => {
|
||||||
const resetQuery = () => {
|
const resetQuery = () => {
|
||||||
queryParams.code = undefined
|
queryParams.code = undefined
|
||||||
queryParams.itemId = undefined
|
queryParams.itemId = undefined
|
||||||
queryParams.vendorId = undefined
|
queryParams.vendorId = externalVendorId.value
|
||||||
queryParams.clientId = undefined
|
queryParams.clientId = externalClientId.value
|
||||||
queryParams.workOrderId = undefined
|
queryParams.workOrderId = undefined
|
||||||
queryParams.taskId = undefined
|
queryParams.taskId = undefined
|
||||||
queryParams.workstationId = undefined
|
queryParams.workstationId = undefined
|
||||||
|
|
@ -422,20 +430,38 @@ const confirmSelect = () => {
|
||||||
dialogVisible.value = false
|
dialogVisible.value = false
|
||||||
}
|
}
|
||||||
|
|
||||||
// ==================== 打开弹窗 ====================
|
const externalClientId = ref<number | undefined>() // 记录外部传入的 clientId
|
||||||
|
const externalVendorId = ref<number | undefined>() // 记录外部传入的 vendorId
|
||||||
|
|
||||||
|
/** 拼装 el-alert 提示文字 */
|
||||||
|
const alertTitle = computed(() => {
|
||||||
|
const parts: string[] = []
|
||||||
|
if (externalClientId.value != null) parts.push('客户')
|
||||||
|
if (externalVendorId.value != null) parts.push('供应商')
|
||||||
|
return `已按${parts.join('/')}预过滤`
|
||||||
|
})
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 打开弹窗
|
* 打开弹窗
|
||||||
* @param selectedIds 已选 ID,用于预选高亮
|
* @param selectedIds 已选 ID,用于预选高亮
|
||||||
* @param itemId 默认过滤的物料 ID(由外层 WmBatchSelect 的 itemId prop 传入)
|
* @param itemId 默认过滤的物料 ID
|
||||||
|
* @param clientId 默认过滤的客户 ID
|
||||||
|
* @param vendorId 默认过滤的供应商 ID
|
||||||
*/
|
*/
|
||||||
const open = async (selectedIds?: number[], itemId?: number) => {
|
const open = async (
|
||||||
|
selectedIds?: number[],
|
||||||
|
itemId?: number,
|
||||||
|
clientId?: number,
|
||||||
|
vendorId?: number
|
||||||
|
) => {
|
||||||
dialogVisible.value = true
|
dialogVisible.value = true
|
||||||
// 重置查询条件 + 页码,避免二次打开继承上次过滤上下文
|
externalClientId.value = clientId
|
||||||
|
externalVendorId.value = vendorId
|
||||||
|
// 重置查询条件 + 页码
|
||||||
queryParams.code = undefined
|
queryParams.code = undefined
|
||||||
queryParams.itemId = itemId ?? undefined // 传入 itemId 则默认按物料过滤
|
queryParams.itemId = itemId ?? undefined
|
||||||
queryParams.vendorId = undefined
|
queryParams.vendorId = vendorId ?? undefined
|
||||||
queryParams.clientId = undefined
|
queryParams.clientId = clientId ?? undefined
|
||||||
queryParams.workOrderId = undefined
|
queryParams.workOrderId = undefined
|
||||||
queryParams.taskId = undefined
|
queryParams.taskId = undefined
|
||||||
queryParams.workstationId = undefined
|
queryParams.workstationId = undefined
|
||||||
|
|
@ -454,7 +480,6 @@ const open = async (selectedIds?: number[], itemId?: number) => {
|
||||||
selectedRadioId.value = undefined
|
selectedRadioId.value = undefined
|
||||||
currentRadioRow.value = undefined
|
currentRadioRow.value = undefined
|
||||||
preSelectedIds.value = selectedIds ?? []
|
preSelectedIds.value = selectedIds ?? []
|
||||||
// 多选模式清空跨页缓存的勾选
|
|
||||||
await nextTick()
|
await nextTick()
|
||||||
tableRef.value?.clearSelection()
|
tableRef.value?.clearSelection()
|
||||||
await getList()
|
await getList()
|
||||||
|
|
|
||||||
|
|
@ -88,7 +88,11 @@
|
||||||
<!-- 非新建模式展示行项目信息(退货物料) -->
|
<!-- 非新建模式展示行项目信息(退货物料) -->
|
||||||
<template v-if="formData.id">
|
<template v-if="formData.id">
|
||||||
<el-divider content-position="center">物料信息</el-divider>
|
<el-divider content-position="center">物料信息</el-divider>
|
||||||
<ReturnSalesLineList :return-id="formData.id" :form-type="formType" />
|
<ReturnSalesLineList
|
||||||
|
:return-id="formData.id"
|
||||||
|
:form-type="formType"
|
||||||
|
:client-id="formData.clientId"
|
||||||
|
/>
|
||||||
</template>
|
</template>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<el-button v-if="isEditable" @click="submitForm" type="primary" :disabled="formLoading">
|
<el-button v-if="isEditable" @click="submitForm" type="primary" :disabled="formLoading">
|
||||||
|
|
|
||||||
|
|
@ -103,6 +103,7 @@
|
||||||
<WmBatchSelect
|
<WmBatchSelect
|
||||||
v-model="formData.batchId"
|
v-model="formData.batchId"
|
||||||
:item-id="formData.itemId"
|
:item-id="formData.itemId"
|
||||||
|
:client-id="props.clientId"
|
||||||
placeholder="请选择批次"
|
placeholder="请选择批次"
|
||||||
class="!w-1/1"
|
class="!w-1/1"
|
||||||
/>
|
/>
|
||||||
|
|
@ -149,6 +150,7 @@ defineOptions({ name: 'ReturnSalesLineList' })
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
returnId: number
|
returnId: number
|
||||||
formType: string
|
formType: string
|
||||||
|
clientId?: number // 客户 ID,用于透传给批次选择器过滤
|
||||||
}>()
|
}>()
|
||||||
|
|
||||||
const { t } = useI18n() // 国际化
|
const { t } = useI18n() // 国际化
|
||||||
|
|
|
||||||
|
|
@ -100,7 +100,11 @@
|
||||||
<!-- 非新建模式展示行项目信息(退货物料) -->
|
<!-- 非新建模式展示行项目信息(退货物料) -->
|
||||||
<template v-if="formData.id">
|
<template v-if="formData.id">
|
||||||
<el-divider content-position="center">物料信息</el-divider>
|
<el-divider content-position="center">物料信息</el-divider>
|
||||||
<ReturnVendorLineList :return-id="formData.id" :form-type="formType" />
|
<ReturnVendorLineList
|
||||||
|
:return-id="formData.id"
|
||||||
|
:form-type="formType"
|
||||||
|
:vendor-id="formData.vendorId"
|
||||||
|
/>
|
||||||
</template>
|
</template>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<el-button v-if="isEditable" @click="submitForm" type="primary" :disabled="formLoading">
|
<el-button v-if="isEditable" @click="submitForm" type="primary" :disabled="formLoading">
|
||||||
|
|
|
||||||
|
|
@ -98,6 +98,7 @@
|
||||||
<WmBatchSelect
|
<WmBatchSelect
|
||||||
v-model="formData.batchId"
|
v-model="formData.batchId"
|
||||||
:item-id="formData.itemId"
|
:item-id="formData.itemId"
|
||||||
|
:vendor-id="props.vendorId"
|
||||||
@change="handleBatchChange"
|
@change="handleBatchChange"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
@ -137,6 +138,7 @@ defineOptions({ name: 'ReturnVendorLineList' })
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
returnId: number
|
returnId: number
|
||||||
formType: string
|
formType: string
|
||||||
|
vendorId?: number // 供应商 ID,用于透传给批次选择器过滤
|
||||||
}>()
|
}>()
|
||||||
|
|
||||||
const { t } = useI18n() // 国际化
|
const { t } = useI18n() // 国际化
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue