Compare commits
4 Commits
605462cc33
...
b002c50d81
| Author | SHA1 | Date | |
|---|---|---|---|
| b002c50d81 | |||
| c0175e13fe | |||
| fa0af40ec7 | |||
| 1499d2d45c |
@ -597,6 +597,8 @@ import { Plus, Document, Refresh, Setting, Rank, Camera, Link, Download, Bell, C
|
|||||||
import { ElMessage, ElMessageBox, ElLoading } from 'element-plus';
|
import { ElMessage, ElMessageBox, ElLoading } from 'element-plus';
|
||||||
import type { FormInstance, FormRules } from 'element-plus';
|
import type { FormInstance, FormRules } from 'element-plus';
|
||||||
import { useUserStore } from '@/stores/user';
|
import { useUserStore } from '@/stores/user';
|
||||||
|
import { useRoute } from 'vue-router';
|
||||||
|
const route = useRoute();
|
||||||
|
|
||||||
import {
|
import {
|
||||||
listMaterialBase,
|
listMaterialBase,
|
||||||
@ -1589,6 +1591,43 @@ onMounted(() => {
|
|||||||
initColumnPermissions();
|
initColumnPermissions();
|
||||||
getList();
|
getList();
|
||||||
getOptionsList();
|
getOptionsList();
|
||||||
|
|
||||||
|
// 【优化】:处理外部跳转自动打开编辑弹窗
|
||||||
|
console.log('--- 准备检测外部跳转参数 ---', route.query);
|
||||||
|
if (route.query.edit_id) {
|
||||||
|
const editId = Number(route.query.edit_id);
|
||||||
|
console.log('检测到 edit_id:', editId);
|
||||||
|
|
||||||
|
// 为了防止 API 不支持直接传 id,我们改用 keyword 搜索(因为大部分 list 接口都支持 keyword)
|
||||||
|
// 或者直接请求列表,拿到第一页数据进行比对
|
||||||
|
listMaterialBase({ page: 1, pageSize: 50, id: editId }).then((res: any) => {
|
||||||
|
// 1. 尝试获取各种可能的数据结构
|
||||||
|
let rawData = res?.data?.list ?? res?.data?.items ?? res?.data ?? [];
|
||||||
|
|
||||||
|
// 2. 如果后端聪明地直接返回了单条数据(对象),把它包装成数组
|
||||||
|
if (!Array.isArray(rawData) && typeof rawData === 'object' && rawData !== null) {
|
||||||
|
rawData = [rawData];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. 终极兜底,确保 rows 绝对是数组
|
||||||
|
const rows = Array.isArray(rawData) ? rawData : [];
|
||||||
|
console.log('兼容处理后的数组数据:', rows);
|
||||||
|
|
||||||
|
// 4. 寻找目标行并弹窗
|
||||||
|
const targetRow = rows.find((r: any) => r.id === editId) || rows[0];
|
||||||
|
|
||||||
|
if (targetRow) {
|
||||||
|
console.log('找到目标物料,准备弹窗:', targetRow);
|
||||||
|
setTimeout(() => {
|
||||||
|
handleEdit(targetRow);
|
||||||
|
}, 800);
|
||||||
|
} else {
|
||||||
|
console.warn('未在返回数据中找到该物料');
|
||||||
|
}
|
||||||
|
}).catch((error: any) => {
|
||||||
|
console.error('自动获取物料详情失败', error);
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@ -266,6 +266,16 @@
|
|||||||
<div style="display: flex; align-items: center;">
|
<div style="display: flex; align-items: center;">
|
||||||
<el-icon class="icon"><Box/></el-icon>
|
<el-icon class="icon"><Box/></el-icon>
|
||||||
<span>1. 基础信息</span>
|
<span>1. 基础信息</span>
|
||||||
|
|
||||||
|
<el-link
|
||||||
|
v-if="form.base_id"
|
||||||
|
type="primary"
|
||||||
|
:underline="false"
|
||||||
|
style="margin-left: 15px; font-size: 13px;"
|
||||||
|
@click="openMaterialInNewTab"
|
||||||
|
>
|
||||||
|
<el-icon style="margin-right: 4px"><EditPen /></el-icon>前往修改基础信息
|
||||||
|
</el-link>
|
||||||
</div>
|
</div>
|
||||||
<span class="sub-title" v-if="dialogStatus === 'create'"> (请先搜索锁定物料)</span>
|
<span class="sub-title" v-if="dialogStatus === 'create'"> (请先搜索锁定物料)</span>
|
||||||
</div>
|
</div>
|
||||||
@ -666,7 +676,9 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {ref, reactive, onMounted, watch, computed} from 'vue'
|
import {ref, reactive, onMounted, watch, computed} from 'vue'
|
||||||
import {Plus, Setting, Refresh, Search, Lock, Box, House, InfoFilled, Link, Printer, Camera, Delete, Picture} from '@element-plus/icons-vue'
|
import {Plus, Setting, Refresh, Search, Lock, Box, House, InfoFilled, Link, Printer, Camera, Delete, Picture, EditPen} from '@element-plus/icons-vue'
|
||||||
|
import { useRouter } from 'vue-router'
|
||||||
|
const router = useRouter()
|
||||||
import {ElMessage, ElMessageBox, ElLoading} from 'element-plus'
|
import {ElMessage, ElMessageBox, ElLoading} from 'element-plus'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import request from '@/utils/request'
|
import request from '@/utils/request'
|
||||||
@ -1394,6 +1406,20 @@ const handleUpdate = (row: any) => {
|
|||||||
visible.value = true
|
visible.value = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 在新标签页打开基础信息编辑
|
||||||
|
const openMaterialInNewTab = () => {
|
||||||
|
if (!form.base_id) {
|
||||||
|
return ElMessage.warning('请先选择一个物料')
|
||||||
|
}
|
||||||
|
const routeUrl = router.resolve({
|
||||||
|
path: '/material',
|
||||||
|
query: {
|
||||||
|
edit_id: form.base_id
|
||||||
|
}
|
||||||
|
})
|
||||||
|
window.open(routeUrl.href, '_blank')
|
||||||
|
}
|
||||||
|
|
||||||
const submitForm = async () => {
|
const submitForm = async () => {
|
||||||
if (!formRef.value) return
|
if (!formRef.value) return
|
||||||
await formRef.value.validate(async (valid: boolean) => {
|
await formRef.value.validate(async (valid: boolean) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user