前端展示的是否质检是否入库
This commit is contained in:
parent
cb67fc53a2
commit
0542bb739e
@ -45,6 +45,8 @@ export interface OrderItem {
|
||||
|
||||
starter?: number
|
||||
|
||||
mainCode?: string
|
||||
|
||||
orderCode?: string
|
||||
|
||||
routeCode?: string
|
||||
|
||||
@ -89,6 +89,10 @@ export interface KingdeeProcessRoute {
|
||||
planStartTime: string | null
|
||||
/** 计划结束时间 yyyy-MM-dd HH:mm:ss */
|
||||
planFinishTime: string | null
|
||||
/** 是否质检 1是 0否(后端按控制码推导后返回) */
|
||||
qualityInspection?: number | null
|
||||
/** 是否入库 1是 0否(后端:仅末序为 1) */
|
||||
storageEntry?: number | null
|
||||
}
|
||||
|
||||
/** 解析工序名称,兼容旧字段及后端误映射 */
|
||||
|
||||
@ -1,4 +1,8 @@
|
||||
import { normalizeKingdeeProcessRoute, type KingdeePrdMo, type KingdeeProcessRoute } from '@/api/orderProject'
|
||||
import {
|
||||
normalizeKingdeeProcessRoute,
|
||||
type KingdeePrdMo,
|
||||
type KingdeeProcessRoute,
|
||||
} from '@/api/orderProject'
|
||||
|
||||
export type KingdeeMoTableRow = Omit<KingdeePrdMo, 'children'> & { processRoutes: KingdeeProcessRoute[] }
|
||||
|
||||
@ -11,6 +15,9 @@ export function mapKingdeeMoListToTableRows(data: KingdeePrdMo[]): KingdeeMoTabl
|
||||
...r,
|
||||
planStartTime: r.planStartTime ?? null,
|
||||
planFinishTime: r.planFinishTime ?? null,
|
||||
// 质检/入库由后端查询金蝶时已写入,前端原样带出
|
||||
qualityInspection: r.qualityInspection ?? null,
|
||||
storageEntry: r.storageEntry ?? null,
|
||||
}))
|
||||
return { ...rest, processRoutes: routes }
|
||||
})
|
||||
|
||||
@ -54,7 +54,7 @@
|
||||
<script setup lang="ts">
|
||||
import { ref, h, computed, defineProps, onMounted, watch, defineEmits} from 'vue'
|
||||
import { NButton, NSpace, NIcon, NTag, NDatePicker, NDataTable, useMessage, useDialog, type DataTableColumns } from 'naive-ui'
|
||||
import { type KingdeePrdMo, type KingdeeProcessRoute } from '@/api/orderProject'
|
||||
import { type KingdeePrdMo, type KingdeeProcessRoute, resolveProcessName } from '@/api/orderProject'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { CalendarOutline } from '@vicons/ionicons5'
|
||||
|
||||
@ -72,20 +72,27 @@ const props = defineProps({
|
||||
selectedId:{
|
||||
type: Number,
|
||||
default: null
|
||||
},
|
||||
/** 父页面查询/重读数据时的加载状态 */
|
||||
loading: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
})
|
||||
|
||||
onMounted(() => {
|
||||
kingdeeTableData.value = props.kingdeeTableData as KingdeeMoTableRow[]
|
||||
kingdeeTableData.value = (props.kingdeeTableData as KingdeeMoTableRow[]) || []
|
||||
})
|
||||
|
||||
watch(()=>props.kingdeeTableData,()=>{
|
||||
kingdeeTableData.value = props.kingdeeTableData as KingdeeMoTableRow[]
|
||||
},{ deep: true } )
|
||||
|
||||
watch(() => props.kingdeeTableData, () => {
|
||||
kingdeeTableData.value = (props.kingdeeTableData as KingdeeMoTableRow[]) || []
|
||||
}, { deep: true })
|
||||
|
||||
const kingdeeModalVisible = ref(false)
|
||||
const kingdeeLoading = ref(false)
|
||||
/** 子组件自身操作(保存/同步)的加载状态 */
|
||||
const actionLoading = ref(false)
|
||||
/** 表格与按钮共用:父级查询 loading 或本地操作 loading */
|
||||
const kingdeeLoading = computed(() => props.loading || actionLoading.value)
|
||||
/** 主表行:工序仅存 processRoutes,避免 children 触发树形重复行 */
|
||||
type KingdeeMoTableRow = Omit<KingdeePrdMo, 'children'> & { processRoutes: KingdeeProcessRoute[] }
|
||||
const kingdeeTableData = ref<KingdeeMoTableRow[]>([])
|
||||
@ -93,7 +100,7 @@ const kingdeeExpandedKeys = ref<Array<string | number>>([])
|
||||
// const kingdeeCurrentProjectId = ref<number | null>(null) // 记录当前正在查询的订单ID
|
||||
const kingdeeTableMaxHeight = 'min(78vh, 720px)'
|
||||
const kingdeeMoScrollX = 1820
|
||||
const kingdeeProcessScrollX = 1360
|
||||
const kingdeeProcessScrollX = 1540
|
||||
|
||||
const kingdeeMoColumns: DataTableColumns<KingdeeMoTableRow> = [
|
||||
{
|
||||
@ -155,7 +162,12 @@ const kingdeeProcessColumns: DataTableColumns<KingdeeProcessRoute> = [
|
||||
return row.operNumber != null ? String(row.operNumber) : '-'
|
||||
}
|
||||
},
|
||||
{ title: '工序名称', key: 'processProperty', width: 100, align: 'center' },
|
||||
{
|
||||
title: '工序名称', key: 'processName', width: 100, align: 'center',
|
||||
render(row) {
|
||||
return resolveProcessName(row) || '-'
|
||||
}
|
||||
},
|
||||
{ title: '工序说明', key: 'operDescription', width: 140, ellipsis: { tooltip: true } },
|
||||
{ title: '工作中心', key: 'workCenterName', width: 110, align: 'center', ellipsis: { tooltip: true } },
|
||||
{ title: '生产车间', key: 'departmentName', width: 110, align: 'center', ellipsis: { tooltip: true } },
|
||||
@ -179,6 +191,28 @@ const kingdeeProcessColumns: DataTableColumns<KingdeeProcessRoute> = [
|
||||
},
|
||||
{ title: '活动单位', key: 'activityUnit', width: 80, align: 'center' },
|
||||
{ title: '控制码', key: 'optCtrlCodeName', width: 120, align: 'center', ellipsis: { tooltip: true } },
|
||||
{
|
||||
title: '是否质检', key: 'qualityInspection', width: 88, align: 'center',
|
||||
render(row) {
|
||||
const yes = Number(row.qualityInspection) === 1
|
||||
return h(NTag, { size: 'small', type: yes ? 'success' : 'default', bordered: false }, {
|
||||
default: () => (yes ? '是' : '否'),
|
||||
})
|
||||
}
|
||||
},
|
||||
{
|
||||
title: '是否入库', key: 'storageEntry', width: 88, align: 'center',
|
||||
render(row) {
|
||||
const yes = Number(row.storageEntry) === 1
|
||||
return h(NTag, {
|
||||
size: 'small',
|
||||
type: yes ? 'warning' : 'default',
|
||||
bordered: false,
|
||||
}, {
|
||||
default: () => (yes ? '是' : '否'),
|
||||
})
|
||||
}
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
@ -302,7 +336,7 @@ function handleGanttSchedule() {
|
||||
async function handleSyncOrderAndPlan() {
|
||||
if (!props.selectedId) return
|
||||
|
||||
kingdeeLoading.value = true
|
||||
actionLoading.value = true
|
||||
try {
|
||||
// 恢复数据结构,将 processRoutes 转换为 children
|
||||
const draftData = kingdeeTableData.value.map(mo => {
|
||||
@ -320,7 +354,7 @@ async function handleSyncOrderAndPlan() {
|
||||
} catch (error) {
|
||||
// 错误拦截器已处理
|
||||
} finally {
|
||||
kingdeeLoading.value = false
|
||||
actionLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
@ -336,15 +370,8 @@ const reCrawlReorderForm = () => {
|
||||
positiveText: '确定',
|
||||
negativeText: '取消',
|
||||
onPositiveClick: () => {
|
||||
kingdeeLoading.value = true
|
||||
try {
|
||||
// 加载态由父组件 reCrawlReorderForm 的 kingdeeLoading 控制
|
||||
emit('reCrawlCallback', props.selectedId, true)
|
||||
message.success('重启读取成功')
|
||||
} catch (error) {
|
||||
// 错误拦截器已处理
|
||||
} finally {
|
||||
kingdeeLoading.value = false
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
@ -356,7 +383,7 @@ const handleSaveDraft = () => {
|
||||
// // 暂存金蝶生产订单数据(草稿)
|
||||
if (!props.selectedId) return
|
||||
|
||||
kingdeeLoading.value = true
|
||||
actionLoading.value = true
|
||||
try {
|
||||
const draftData = kingdeeTableData.value.map(mo => {
|
||||
const { processRoutes, ...rest } = mo
|
||||
@ -367,7 +394,7 @@ const handleSaveDraft = () => {
|
||||
} catch (error) {
|
||||
// 错误拦截器已处理
|
||||
} finally {
|
||||
kingdeeLoading.value = false
|
||||
actionLoading.value = false
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -4,6 +4,9 @@
|
||||
<!-- 搜索表单 -->
|
||||
<div class="search-form">
|
||||
<n-form inline :model="searchForm" label-placement="left">
|
||||
<n-form-item label="生产令号">
|
||||
<n-input v-model:value="searchForm.productionCode" placeholder="请输入生产令号" clearable />
|
||||
</n-form-item>
|
||||
<n-form-item label="物料编码">
|
||||
<n-input v-model:value="searchForm.code" placeholder="请输入物料编码" clearable />
|
||||
</n-form-item>
|
||||
@ -371,6 +374,7 @@
|
||||
<KingdeeVue
|
||||
:kingdeeTableData="kingdeeTableData"
|
||||
:selectedId="kingdeeOrderOtemId"
|
||||
:loading="kingdeeLoading"
|
||||
@close-modal="kingdeeModalVisible = false"
|
||||
@holdTemporarilyCallback="holdTemporarilySave"
|
||||
@synchronizationCallback="synchronizationSave"
|
||||
@ -381,16 +385,18 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, h, onMounted } from 'vue'
|
||||
import { NButton, NSpace, NIcon, useMessage, useDialog, type UploadCustomRequestOptions} from 'naive-ui'
|
||||
import { ref, reactive, h, computed, onMounted } from 'vue'
|
||||
import { NButton, NSpace, NIcon, NTag, useMessage, useDialog, type UploadCustomRequestOptions} from 'naive-ui'
|
||||
import { orderItemApi, type OrderItem } from '@/api/orderItem'
|
||||
import { useUserStore } from '@/stores/user'
|
||||
import { VueDraggable } from 'vue-draggable-plus'
|
||||
|
||||
import KingdeeVue from '@/views/biz/kingdee/index.vue'
|
||||
|
||||
import { type KingdeePrdMo, type KingdeeProcessRoute } from '@/api/orderProject'
|
||||
import { type KingdeePrdMo } from '@/api/orderProject'
|
||||
import { mapKingdeeMoListToTableRows, type KingdeeMoTableRow } from '@/utils/kingdeeSchedule'
|
||||
import { userApi } from '@/api/system'
|
||||
import { dictDataApi } from '@/api/org'
|
||||
|
||||
const message = useMessage()
|
||||
const dialog = useDialog()
|
||||
@ -407,6 +413,7 @@ const hasPermission = (permission: string) => userStore.hasPermission(permission
|
||||
|
||||
// 搜索表单
|
||||
const searchForm = reactive<any>({
|
||||
productionCode: '',
|
||||
code: '',
|
||||
projectName: '',
|
||||
orderCode: '',
|
||||
@ -466,25 +473,30 @@ const defaultFormData = {
|
||||
const formData = reactive<any>({ ...defaultFormData })
|
||||
|
||||
// 字典选项(下拉框/单选框/复选框关联字典时使用)
|
||||
const workshopList = ref<{ label: string; value: any; class: any }[]>([])
|
||||
|
||||
// 表单校验规则
|
||||
const formRules = {
|
||||
}
|
||||
|
||||
// 表格列
|
||||
const columns = [
|
||||
// 表格列(computed:字典异步加载后能触发表格重渲染)
|
||||
const columns = computed(() => [
|
||||
{
|
||||
type: 'selection'
|
||||
},
|
||||
{
|
||||
align:'center',
|
||||
title: '产品名称',
|
||||
key: 'projectName',
|
||||
// ellipsis: {
|
||||
// tooltip: true
|
||||
// }
|
||||
minWidth: 150,
|
||||
title: '生产令号',
|
||||
key: 'productionCode',
|
||||
width: '140'
|
||||
},
|
||||
{
|
||||
align:'center',
|
||||
title: '订单编号',
|
||||
key: 'orderCode',
|
||||
width:"120"
|
||||
},
|
||||
|
||||
{
|
||||
align:'center',
|
||||
title: '物料名称',
|
||||
@ -497,12 +509,7 @@ const columns = [
|
||||
key: 'code',
|
||||
width:"120"
|
||||
},
|
||||
{
|
||||
align:'center',
|
||||
title: '订单编号',
|
||||
key: 'orderCode',
|
||||
width:"120"
|
||||
},
|
||||
|
||||
{
|
||||
align:'center',
|
||||
title: '工艺路线编码',
|
||||
@ -513,43 +520,58 @@ const columns = [
|
||||
align:'center',
|
||||
title: '生产车间',
|
||||
key: 'proWorkshop',
|
||||
width:"120"
|
||||
},
|
||||
{
|
||||
align:'center',
|
||||
title: '产品序列',
|
||||
key: 'sort',
|
||||
width:"120"
|
||||
width:"120",
|
||||
render(row: any) {
|
||||
const val = row.proWorkshop
|
||||
// 兼容存 dictValue 或车间名称(金蝶同步写入的是 WorkShopName)
|
||||
const opt = workshopList.value.find(o =>
|
||||
o.value === val ||
|
||||
String(o.value) === String(val) ||
|
||||
o.label === val ||
|
||||
String(o.label) === String(val)
|
||||
)
|
||||
if (!opt) return val ?? '-'
|
||||
const tagType = opt.class && ['default', 'primary', 'info', 'success', 'warning', 'error'].includes(opt.class)
|
||||
? opt.class
|
||||
: 'info'
|
||||
return h(NTag, { type: tagType, size: 'small' }, { default: () => opt.label })
|
||||
}
|
||||
},
|
||||
// {
|
||||
// align:'center',
|
||||
// title: '产品序列',
|
||||
// key: 'sort',
|
||||
// width:"120"
|
||||
// },
|
||||
{
|
||||
align:'center',
|
||||
title: '生产数量',
|
||||
key: 'quantity',
|
||||
width:"120"
|
||||
},
|
||||
{
|
||||
align:'center',
|
||||
title: '是否半成品',
|
||||
key: 'sfProduct',
|
||||
width:"120"
|
||||
},
|
||||
{
|
||||
align:'center',
|
||||
title: '是否采购',
|
||||
key: 'procurement',
|
||||
width:"120"
|
||||
},
|
||||
// {
|
||||
// align:'center',
|
||||
// title: '是否半成品',
|
||||
// key: 'sfProduct',
|
||||
// width:"120"
|
||||
// },
|
||||
// {
|
||||
// align:'center',
|
||||
// title: '是否采购',
|
||||
// key: 'procurement',
|
||||
// width:"120"
|
||||
// },
|
||||
{
|
||||
align:'center',
|
||||
title: '开始时间',
|
||||
key: 'beginTime',
|
||||
width:"120"
|
||||
width:"160"
|
||||
},
|
||||
{
|
||||
align:'center',
|
||||
title: '结束时间',
|
||||
key: 'endTime',
|
||||
width:"120"
|
||||
width:"160"
|
||||
},
|
||||
{
|
||||
align:'center',
|
||||
@ -612,15 +634,15 @@ const columns = [
|
||||
{ default: () => '编辑'}
|
||||
))
|
||||
}
|
||||
if(hasPermission('biz:orderItem:assign')){
|
||||
buttons.push(h(NButton, {
|
||||
size: 'small',
|
||||
type:'success',
|
||||
ghost:true,
|
||||
onClick: () => { disphand(row) } },
|
||||
{ default: () => '派工'}
|
||||
))
|
||||
}
|
||||
// if(hasPermission('biz:orderItem:assign')){
|
||||
// buttons.push(h(NButton, {
|
||||
// size: 'small',
|
||||
// type:'success',
|
||||
// ghost:true,
|
||||
// onClick: () => { disphand(row) } },
|
||||
// { default: () => '派工'}
|
||||
// ))
|
||||
// }
|
||||
if(hasPermission('biz:orderItem:reorderForm')){
|
||||
buttons.push(h(NButton, {
|
||||
size: 'small',
|
||||
@ -644,7 +666,7 @@ const columns = [
|
||||
// ])
|
||||
}
|
||||
}
|
||||
]
|
||||
])
|
||||
|
||||
//根据内容设置表格滚动条
|
||||
let scrollX = ref(0)
|
||||
@ -666,6 +688,7 @@ async function loadData() {
|
||||
const res = await orderItemApi.page({
|
||||
page: pagination.page,
|
||||
pageSize: pagination.pageSize,
|
||||
productionCode: searchForm.productionCode || undefined,
|
||||
code: searchForm.code,
|
||||
projectName: searchForm.projectName,
|
||||
orderCode: searchForm.orderCode,
|
||||
@ -689,6 +712,7 @@ function handleSearch() {
|
||||
|
||||
// 重置
|
||||
function handleReset() {
|
||||
searchForm.productionCode = ''
|
||||
searchForm.code = ''
|
||||
searchForm.projectName = ''
|
||||
searchForm.orderCode = ''
|
||||
@ -800,22 +824,14 @@ const kingdeeModalVisible = ref(false)
|
||||
const kingdeeModalTitle = ref('金蝶生产订单')
|
||||
const kingdeeLoading = ref(false)
|
||||
|
||||
type KingdeeMoTableRow = Omit<KingdeePrdMo, 'children'> & { processRoutes: KingdeeProcessRoute[] }
|
||||
const kingdeeTableData = ref<KingdeeMoTableRow[]>([])
|
||||
// const kingdeeExpandedKeys = ref<Array<string | number>>([])
|
||||
|
||||
async function reCrawlReorderForm(id:number,reCrawl:Boolean){
|
||||
kingdeeLoading.value = true
|
||||
try {
|
||||
const data = await orderItemApi.preCreationInfo(id, {reCrawl:reCrawl})
|
||||
kingdeeTableData.value = (Array.isArray(data) ? data : []).map((mo) => {
|
||||
const { children, ...rest } = mo
|
||||
const routes = [...(children ?? [])].sort((a, b) => (a.operNumber ?? 0) - (b.operNumber ?? 0)).map((r) => ({
|
||||
...r,
|
||||
planStartTime: r.planStartTime ?? null,
|
||||
planFinishTime: r.planFinishTime ?? null,
|
||||
}))
|
||||
return { ...rest, processRoutes: routes }
|
||||
})
|
||||
kingdeeTableData.value = mapKingdeeMoListToTableRows(Array.isArray(data) ? data : [])
|
||||
} finally {
|
||||
kingdeeLoading.value = false
|
||||
}
|
||||
@ -829,9 +845,8 @@ async function handleReorderForm(row:OrderItem, reCrawl:Boolean){
|
||||
kingdeeOrderOtemId.value = row.id
|
||||
kingdeeModalTitle.value = `金蝶生产订单${row.code ? ` - ${row.code}` : ''}`
|
||||
kingdeeModalVisible.value = true
|
||||
kingdeeLoading.value = true
|
||||
reCrawlReorderForm(row.id, false)
|
||||
kingdeeLoading.value = false
|
||||
kingdeeTableData.value = []
|
||||
await reCrawlReorderForm(row.id, reCrawl)
|
||||
}
|
||||
|
||||
// 暂存金蝶生产订单数据(草稿)
|
||||
@ -1102,6 +1117,7 @@ async function handleExport() {
|
||||
try {
|
||||
const params: Record<string, any> = {}
|
||||
if (selectedIds.value.length > 0) params.ids = selectedIds.value
|
||||
if (searchForm.productionCode) params.productionCode = searchForm.productionCode
|
||||
if (searchForm.code) params.code = searchForm.code
|
||||
if (searchForm.projectName) params.projectName = searchForm.projectName
|
||||
if (searchForm.orderCode) params.orderCode = searchForm.orderCode
|
||||
@ -1159,6 +1175,10 @@ async function handleImportUpload({ file }: UploadCustomRequestOptions) {
|
||||
|
||||
// 加载字典选项
|
||||
async function loadDictOptions() {
|
||||
try {
|
||||
const data = await dictDataApi.listByType('work_shop')
|
||||
workshopList.value = data.map(d => ({ label: d.dictLabel, value: (Number(d.dictValue) || d.dictValue), class: d.listClass }))
|
||||
} catch {}
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
|
||||
@ -151,6 +151,7 @@
|
||||
<KingdeeVue
|
||||
:kingdeeTableData="kingdeeTableData"
|
||||
:selectedId="kingdeeCurrentProjectId"
|
||||
:loading="kingdeeLoading"
|
||||
@close-modal="kingdeeModalVisible = false"
|
||||
@holdTemporarilyCallback="handleSaveDraft"
|
||||
@synchronizationCallback="handleSyncOrderAndPlan"
|
||||
@ -194,7 +195,8 @@
|
||||
import { ref, reactive, h, computed, onMounted, watch } from 'vue'
|
||||
import { NButton, NSpace, NIcon, NTag, NDatePicker, NDataTable, NUpload, useMessage, useDialog, type DataTableColumns, type UploadCustomRequestOptions } from 'naive-ui'
|
||||
import { SearchOutline, RefreshOutline, AddOutline, TrashOutline, CreateOutline, CloudUploadOutline, DownloadOutline, EyeOutline, CalendarOutline } from '@vicons/ionicons5'
|
||||
import { orderProjectApi, type OrderProject, type KingdeePrdMo, type KingdeeProcessRoute, normalizeKingdeeProcessRoute } from '@/api/orderProject'
|
||||
import { orderProjectApi, type OrderProject, type KingdeePrdMo, type KingdeeProcessRoute } from '@/api/orderProject'
|
||||
import { mapKingdeeMoListToTableRows } from '@/utils/kingdeeSchedule'
|
||||
import { dictDataApi } from '@/api/org'
|
||||
import { useUserStore } from '@/stores/user'
|
||||
|
||||
@ -660,21 +662,14 @@ function handleGanttSchedule() {
|
||||
}
|
||||
|
||||
async function reCrawlReorderForm(id:number,reCrawl:Boolean){
|
||||
kingdeeLoading.value = true
|
||||
try {
|
||||
const data = await orderProjectApi.getKingdeeOrder(id,{reCrawl:reCrawl})
|
||||
kingdeeTableData.value = (Array.isArray(data) ? data : []).map((mo) => {
|
||||
const { children, ...rest } = mo
|
||||
const routes = [...(children ?? [])]
|
||||
.sort((a, b) => (a.operNumber ?? 0) - (b.operNumber ?? 0))
|
||||
.map((r) => normalizeKingdeeProcessRoute({
|
||||
...r,
|
||||
planStartTime: r.planStartTime ?? null,
|
||||
planFinishTime: r.planFinishTime ?? null,
|
||||
}))
|
||||
return { ...rest, processRoutes: routes }
|
||||
})
|
||||
kingdeeTableData.value = mapKingdeeMoListToTableRows(Array.isArray(data) ? data : [])
|
||||
if (kingdeeTableData.value.length === 0) {
|
||||
message.info('未查询到金蝶生产订单数据')
|
||||
} else if (reCrawl) {
|
||||
message.success('重新读取成功')
|
||||
}
|
||||
} finally {
|
||||
kingdeeLoading.value = false
|
||||
|
||||
@ -20,7 +20,8 @@ export default defineConfig({
|
||||
port: 3000,
|
||||
proxy: {
|
||||
'/api': {
|
||||
target:'http://192.168.12.4:8888/',
|
||||
target:'http://192.168.12.12:8888/', //'http://192.168.5.230:8888',
|
||||
//target:'http://192.168.12.4:8888/',
|
||||
//target:'http://192.168.12.230:8888',
|
||||
//target:'http://192.168.5.230:8888',
|
||||
//target:'http://192.168.5.232:8888/',
|
||||
|
||||
Loading…
Reference in New Issue
Block a user