<script setup> import {onBeforeMount, onMounted, reactive, ref, unref, computed} from 'vue'; import {useStore, mapGetters, mapState} from "vuex"; import {project_list, prd_list, prd_add, prd_get, prd_update, prd_delete, prd_history} from "@/apis/product.js"; // 注册vuex const store = useStore() // region 表单代码 // 点击搜索时提交的数据 const fromData = reactive({ project: '全部', }) // region 表格数据代码 // 表格展示的数据 const tableData = ref([]) // 过滤条件数据 const projectList = ref([]) const currentPage = ref(1) const pageSize = ref(20) const total = ref(0) const history_dialog_id = ref(1) // 处理翻页 const handleCurrentChange = (newPage) => { currentPage.value = newPage get_table_data(currentPage.value, pageSize.value, fromData.project) } const handleSizeChange = (newPageSize) => { pageSize.value = newPageSize get_table_data(currentPage.value, pageSize.value, fromData.project) } // 处理历史记录对话框 const changeDialogStatus = (id) => { history_dialog_id.value = id console.log('changeDialogStatus', id) get_history(history_dialog_id.value) } // 定义数据源 const history_data = ref([]) // 定义对话框开关 let history_dialog_show = ref(false) // 通过接口获取历史数据 function get_history(id) { prd_history(id).then(res => { console.log('get_history') if (Array.isArray(res)) { history_data.value = [...res] } history_dialog_show.value = true }).catch(err => { console.log(err) }); } const handleClose = () => { history_dialog_show.value = false history_data.value = [] } // 数据提交 点击搜索按键提交数据 const submitSearch = async () => { tableData.value = [] await get_table_data(currentPage.value, pageSize.value, fromData.project).then( res => { if (Array.isArray(res)) { tableData.value = [...res] } else { } } ).catch( err => { } ) } // 通过异步请求获取影院列表数据 async function get_project_data() { projectList.value = [] await project_list().then(res => { if (Array.isArray(res)) { projectList.value = [...res] projectList.value.unshift({'id': 0, 'project_name': '全部', is_delete: false}) } else { } }).catch(err => { console.log(err) } ) } // 通过异步请求获取影院列表数据 async function get_table_data(page_num = currentPage.value, page_size = pageSize.value, project_val = fromData.project) { tableData.value = [] console.log('get_table_data') console.log(project_val) project_val = project_val === '全部' ? '' : project_val console.log(project_val) await prd_list(page_num, page_size, project_val).then(res => { total.value = res['count'] if (Array.isArray(res['results'])) { tableData.value = [...res['results']] console.log(tableData.value) } else { console.log('get_table_data.res is not an array') } }).catch(err => { console.log(err) } ) } // 定义生命周期,在加载时获取一次表格数据 onMounted( async () => { await get_project_data(); await get_table_data(currentPage.value, pageSize.value, fromData.project); } ) // endregion </script> <template> <el-form :model="fromData" :inline="true" class="search_form" > <el-form-item label="所属项目" label-width="90"> <el-select v-model="fromData.project" placeholder="请选择"> <el-option v-for="item in projectList" :key="item['project_name']" :label="item['project_name']" :value="item['project_name']"/> </el-select> </el-form-item> <el-form-item> <el-button type="primary" @click="submitSearch">搜索</el-button> </el-form-item> <!-- <el-button style="margin-right: 0">添加</el-button>--> </el-form> <el-table :data="tableData" style="width: 100%"> <el-table-column prop="project" label="所属项目" min-width="200"></el-table-column> <el-table-column prop="prd_version" label="版本" min-width="200"></el-table-column> <el-table-column prop="prd_doc_link" label="产品原型链接" min-width="300" show-overflow-tooltip> <template v-slot="scope"> <a target="_blank" style="color:#007bff;" v-if="scope.row.prd_doc_link!=null" v-bind:href="scope.row.prd_doc_link"> {{ scope.row.prd_doc_link.length > 30 ? scope.row.prd_doc_link.slice(0, 30) + '...' : scope.row.prd_doc_link }} </a> <!-- <span v-else> {{ scope.row.prd_doc_link }}</span>--> </template> </el-table-column> <el-table-column prop="prd_comment" label="版本描述" min-width="300"> <template #default="{ row }"> <el-tooltip class="item" popper-class="custom-tooltip" effect="dark" :raw-content="true" :content="row.prd_comment.split('\n').join('<br>')" placement="top-end"> <span>{{ row.prd_comment.length > 10 ? row.prd_comment.slice(0, 10) + '...' : row.prd_comment }}</span> </el-tooltip> </template> </el-table-column> <el-table-column prop="update_at" label="最后更新时间" min-width="180"></el-table-column> <el-table-column prop="id" label="历史文档" min-width="120"> <template v-slot="scope"> <el-button type="primary" size="small" @click="changeDialogStatus(scope.row.id)" :disabled="!scope.row.have_history">查看 </el-button> </template> </el-table-column> </el-table> <div class="pagination-container"> <el-pagination v-model:current-page="currentPage" v-model:page-size="pageSize" :page-sizes="[10, 20, 50]" size="small" layout="sizes, prev, pager, next" :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" > </el-pagination> </div> <template> <el-dialog v-model="history_dialog_show" title="历史记录" width="500px" :modal="true" :close-on-click-modal="false" :append-to-body="true" @close="handleClose"> <el-table :data="history_data" style="width: 100%"> <el-table-column prop="update_at" label="版本发布日期" min-width="100"></el-table-column> <el-table-column prop="history_doc_link" label="产品原型链接" min-width="300" show-overflow-tooltip> <template v-slot="scope"> <a target="_blank" style="color:#007bff;" v-if="scope.row.history_doc_link!=null" v-bind:href="scope.row.history_doc_link"> {{ scope.row.history_doc_link.length > 30 ? scope.row.history_doc_link.slice(0, 30) + '...' : scope.row.history_doc_link }} </a> </template> </el-table-column> </el-table> </el-dialog> </template> </template> <style> .pagination-container { display: flex; justify-content: flex-end; margin-top: 20px; } .search_form { display: flex; justify-content: flex-start; } .custom-tooltip { max-width: 500px; /* 设置最大宽度为 300px */ } </style>