heli-mes/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/subproject.vue
2025-04-29 15:45:35 +08:00

150 lines
5.1 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<Dialog :title="dialogTitle" v-model="dialogVisible" width="80%">
<ContentWrap class="borderxx">
<el-form class="-mb-15px" :model="queryReqVo" :inline="true" label-width="108px">
<el-form-item label=" 项目编号:" label-width="150px">
<el-input v-model="queryReqVo.projectCode" placeholder="项目编号" class="!w-240px" v-bind:disabled="!chkboxEnable" />
</el-form-item>
<el-form-item label=" 项目名称:" label-width="150px">
<el-input v-model="queryReqVo.projectName" placeholder="项目名称" class="!w-240px" v-bind:disabled="!chkboxEnable" />
</el-form-item>
<el-form-item label="子项目名称">
<el-input v-model="queryReqVo.projectSubName" placeholder="子项目名称" class="!w-240px" v-bind:disabled="!chkboxEnable" />
</el-form-item>
<el-form-item>
<el-button @click="handleQuery" type="primary" v-bind:disabled="!chkboxEnable">
<Icon icon="ep:search" class="mr-5px" /> 搜索
</el-button><el-button @click="resetQuery" v-bind:disabled="!chkboxEnable">
<Icon icon="ep:refresh" class="mr-5px" /> 重置
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<el-card class="hl-table">
<el-table ref="multipleTable" :data="list" v-loading="formLoading" class="hl-table" @selection-change="handleSelectionChange" :row-key="getRowKeys" :reserve-selection="true" selection min-width="1800">
<el-table-column type="selection" width="55" />
<el-table-column label="序号" type="index" min-width="120" align="center" />
<el-table-column prop="projectCode" label="项目编号" min-width="120" align="center" />
<el-table-column prop="projectName" label="项目名称" min-width="140" align="center" />
<el-table-column prop="projectSubName" label="子项目名称" min-width="120" align="center" />
</el-table>
<!-- 分页 -->
<Pagination :total="total" v-model:page="queryReqVo.pageNo" v-model:limit="queryReqVo.pageSize" @pagination="getList()" />
</el-card>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import * as ProjectOrderApi from '@/api/heli/projectorder'
import { ElTable } from 'element-plus'
//:selectable="row=>row.disabled || chkboxEnable"
const chkboxEnable = ref(true)
const queryEnable = ref(true)
const { t } = useI18n() // 国际化
const message = useMessage() // 消息弹窗
const dialogVisible = ref(false) // 弹窗的是否展示
const dialogTitle = ref('') // 弹窗的标题
const formLoading = ref(false) // 表单的加载中1修改时的数据加载2提交的按钮禁用
const list = ref([]) // 列表的数据
const total = ref(0) // 列表的总页数
const multipleTable = ref<InstanceType<typeof ElTable>>()
const multipleSelection = ref([])
const handleSelectionChange = (val) => {
if (val.length > 1) {
multipleTable.value.clearSelection()
multipleTable.value.toggleRowSelection(val.pop())
} else {
multipleSelection.value = val.pop()
}
}
const clickRow = (row: any) => {
if (row) {
multipleTable.value!.toggleRowSelection(row, undefined)
} else {
multipleTable.value!.clearSelection()
}
}
//指定key值,数据更新之后保留之前选中的数据
const getRowKeys = (row) => {
return row.projectSubId
}
const queryReqVo: any = reactive({
pageNo: 1,
pageSize: 10,
projectCode: undefined,
projectName: undefined,
projectSubName: undefined
})
/** 搜索按钮操作 */
const handleQuery = async () => {
queryReqVo.pageNo = 1
getList()
}
/** 重置按钮操作 */
const resetQuery = () => {
queryReqVo.projectCode = ''
queryReqVo.projectName = ''
queryReqVo.projectSubName = ''
handleQuery()
}
const getList = async () => {
formLoading.value = true
try {
const data = await ProjectOrderApi.getProjectOrderSubPage(queryReqVo)
list.value = data.list
total.value = data.total
} finally {
formLoading.value = false
}
}
/** 打开弹窗 */
const currScope = ref()
const open = async (scope) => {
currScope.value = scope
dialogVisible.value = true
dialogTitle.value = '子项目列表'
getList()
chkboxEnable.value = true
// list.value.forEach((row) => {
// setTimeout(() => {
// multipleTable.value.toggleRowSelection(row, !chkboxEnable.value) //让页面显示选中的数据
// }, 0)
// })
try {
// 获取物料库存实时列表
} finally {
formLoading.value = false
}
}
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
/** 提交表单 */
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
const submitForm = async () => {
// 提交请求
formLoading.value = true
try {
dialogVisible.value = false
// 发送操作成功的事件
emit('success', multipleSelection.value,currScope)
} finally {
formLoading.value = false
}
}
</script>