提交
This commit is contained in:
1 parent
66609c0e21
commit
0b50eff3d8
93 files changed
+40172
-30060
No files matched your search
@@ -69,6 +69,24 @@ export function fetchReassignProductionTask(
|
||||
})
|
||||
}
|
||||
|
||||
export function fetchDispatchProductionTaskSteps(
|
||||
taskId: string,
|
||||
data: {
|
||||
steps: Array<{
|
||||
stepId: string
|
||||
assigneeUserIds: string[]
|
||||
plannedStartTime?: string | null
|
||||
}>
|
||||
},
|
||||
operateScope?: ProductionTaskOperateScope
|
||||
) {
|
||||
return request.put<any>({
|
||||
url: `/web/admin/production-tasks/${taskId}/steps/dispatch`,
|
||||
data,
|
||||
params: scopeQuery(operateScope)
|
||||
})
|
||||
}
|
||||
|
||||
export function fetchProductionTaskDetail(id: string) {
|
||||
return request.get<any>({ url: `/web/admin/production-tasks/${id}` })
|
||||
}
|
||||
|
||||
@@ -150,27 +150,38 @@ export function fetchDeleteProductionWorkOrder(id: string) {
|
||||
return request.del({ url: `/web/admin/production-work-orders/${id}` })
|
||||
}
|
||||
|
||||
export interface ProductionCellProductOption {
|
||||
export interface ProductionQcDispatchOption {
|
||||
id: string
|
||||
cellProductId?: string
|
||||
productCode?: string
|
||||
productName?: string
|
||||
productTypeName?: string
|
||||
passage?: string
|
||||
storageSlotName?: string
|
||||
stepOutputId?: string
|
||||
taskId?: string
|
||||
taskNo?: string
|
||||
taskName?: string
|
||||
stepId?: string
|
||||
processName?: string
|
||||
outputTypeId?: string
|
||||
outputTypeName?: string
|
||||
outputName?: string
|
||||
outputBarcode?: string
|
||||
cellProductId?: string
|
||||
}
|
||||
|
||||
export function fetchProductionWorkOrderCellProductOptions(workOrderId: string) {
|
||||
return request.get<ProductionCellProductOption[]>({
|
||||
/** @deprecated 使用 ProductionQcDispatchOption */
|
||||
export type ProductionCellProductOption = ProductionQcDispatchOption
|
||||
|
||||
export function fetchProductionWorkOrderQcDispatchOptions(workOrderId: string) {
|
||||
return request.get<ProductionQcDispatchOption[]>({
|
||||
url: `/web/admin/production-work-orders/${workOrderId}/cell-product-options`
|
||||
})
|
||||
}
|
||||
|
||||
/** @deprecated 使用 fetchProductionWorkOrderQcDispatchOptions */
|
||||
export function fetchProductionWorkOrderCellProductOptions(workOrderId: string) {
|
||||
return fetchProductionWorkOrderQcDispatchOptions(workOrderId)
|
||||
}
|
||||
|
||||
export function fetchCreateQcFromProduction(
|
||||
workOrderId: string,
|
||||
data: { cellProductId: string; productionTaskId?: string; remark?: string }
|
||||
data: { productionStepOutputId: string; remark?: string }
|
||||
) {
|
||||
return request.post({
|
||||
url: `/web/admin/production-work-orders/${workOrderId}/qc-work-orders`,
|
||||
|
||||
@@ -138,6 +138,7 @@ export type QcWorkOrder = {
|
||||
productionWorkOrderId?: string
|
||||
productionWorkOrderNo?: string
|
||||
productionTaskId?: string
|
||||
productionStepOutputId?: string
|
||||
protocolStatus?: string
|
||||
protocolStatusLabel?: string
|
||||
paymentSummary?: QcProtocolPaymentSummary | null
|
||||
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "label": "useTaskStepEditor.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L1"}, {"id": "production_work_order_usetaskstepeditor_parsetaskattachmentsfromurls", "label": "parseTaskAttachmentsFromUrls()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L43"}, {"id": "production_work_order_usetaskstepeditor_toapiflag", "label": "toApiFlag()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L53"}, {"id": "production_work_order_usetaskstepeditor_fromapiflag", "label": "fromApiFlag()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L57"}, {"id": "production_work_order_usetaskstepeditor_normalizestepsubtables", "label": "normalizeStepSubTables()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L60"}, {"id": "production_work_order_usetaskstepeditor_parseordernum", "label": "parseOrderNum()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L77"}, {"id": "production_work_order_usetaskstepeditor_usetaskstepeditor", "label": "useTaskStepEditor()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L84"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_task", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L18", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_admin", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L27", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_work_order", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L28", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_sample_reception", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L29", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_equipment_select", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L30", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_process_material_ui", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L31", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_Line truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_taskexecutiondialog_vue", "label": "TaskExecutionDialog.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/TaskExecutionDialog.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchqcworkorderdialog_vue", "label": "DispatchQcWorkOrderDialog.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchQcWorkOrderDialog.vue", "source_location": "L1"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchqcworkorderdialog_vue", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchQcWorkOrderDialog.vue", "source_location": "L114", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchqcworkorderdialog_vue", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchQcWorkOrderDialog.vue", "source_location": "L115", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchqcworkorderdialog_vue", "target": "icons_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchQcWorkOrderDialog.vue", "source_location": "L116", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchqcworkorderdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_task", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchQcWorkOrderDialog.vue", "source_location": "L117", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchqcworkorderdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_work_order", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchQcWorkOrderDialog.vue", "source_location": "L118", "weight": 1.0}], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_task_ts", "label": "production-task.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L1"}, {"id": "api_production_task_scopequery", "label": "scopeQuery()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L5"}, {"id": "api_production_task_fetchcreateproductiontask", "label": "fetchCreateProductionTask()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L9"}, {"id": "api_production_task_fetchproductiontasklist", "label": "fetchProductionTaskList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L13"}, {"id": "api_production_task_fetchmyproductiontasks", "label": "fetchMyProductionTasks()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L31"}, {"id": "api_production_task_fetchforwardproductiontask", "label": "fetchForwardProductionTask()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L50"}, {"id": "api_production_task_fetchreassignproductiontask", "label": "fetchReassignProductionTask()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L62"}, {"id": "api_production_task_fetchdispatchproductiontasksteps", "label": "fetchDispatchProductionTaskSteps()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L72"}, {"id": "api_production_task_fetchproductiontaskdetail", "label": "fetchProductionTaskDetail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L88"}, {"id": "api_production_task_fetchupdateproductiontask", "label": "fetchUpdateProductionTask()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L92"}, {"id": "api_production_task_fetchupdateproductiontaskstatus", "label": "fetchUpdateProductionTaskStatus()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L96"}, {"id": "api_production_task_fetchdeleteproductiontask", "label": "fetchDeleteProductionTask()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L108"}, {"id": "api_production_task_fetchaddtaskstep", "label": "fetchAddTaskStep()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L112"}, {"id": "api_production_task_fetchupdatetaskstep", "label": "fetchUpdateTaskStep()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L124"}, {"id": "api_production_task_fetchdeletetaskstep", "label": "fetchDeleteTaskStep()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L137"}, {"id": "api_production_task_fetchreplacestepreagents", "label": "fetchReplaceStepReagents()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L148"}, {"id": "api_production_task_fetchreplacestepconsumables", "label": "fetchReplaceStepConsumables()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L161"}, {"id": "api_production_task_fetchreplacestepconfiguredreagents", "label": "fetchReplaceStepConfiguredReagents()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L174"}, {"id": "api_production_task_fetchreplacestepdatacollection", "label": "fetchReplaceStepDataCollection()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L187"}, {"id": "api_production_task_fetchsettaskinputs", "label": "fetchSetTaskInputs()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L200"}, {"id": "api_production_task_fetchsettaskoutputs", "label": "fetchSetTaskOutputs()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L212"}, {"id": "api_production_task_fetchreordertasksteps", "label": "fetchReorderTaskSteps()", "file_type": "code", "source_file": "/Users/wuzilong/Line truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_work_order_ts", "label": "production-work-order.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L1"}, {"id": "api_production_work_order_fetchproductionworkorderlist", "label": "fetchProductionWorkOrderList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L83"}, {"id": "api_production_work_order_fetchproductionworkorderdetail", "label": "fetchProductionWorkOrderDetail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L105"}, {"id": "api_production_work_order_fetchcompleteproductionworkorder", "label": "fetchCompleteProductionWorkOrder()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L109"}, {"id": "api_production_work_order_fetchcreateproductionworkorder", "label": "fetchCreateProductionWorkOrder()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L113"}, {"id": "api_production_work_order_fetchconfigureproductionworkorder", "label": "fetchConfigureProductionWorkOrder()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L126"}, {"id": "api_production_work_order_fetchupdateproductionworkorder", "label": "fetchUpdateProductionWorkOrder()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L142"}, {"id": "api_production_work_order_fetchdeleteproductionworkorder", "label": "fetchDeleteProductionWorkOrder()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L149"}, {"id": "api_production_work_order_fetchproductionworkorderqcdispatchoptions", "label": "fetchProductionWorkOrderQcDispatchOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L171"}, {"id": "api_production_work_order_fetchproductionworkordercellproductoptions", "label": "fetchProductionWorkOrderCellProductOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L178"}, {"id": "api_production_work_order_fetchcreateqcfromproduction", "label": "fetchCreateQcFromProduction()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L182"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_work_order_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_http", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_work_order_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_work_order", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_work_order_ts", "target": "api_production_work_order_fetchproductionworkorderlist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L83", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_work_order_ts", "target": "api_production_work_order_fetchproductionworkorderdetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L105", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_work_order_ts", "target": "api_production_work_order_fetchcompleteproductionworkorder", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L109", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_work_order_ts", "target": "api_production_work_order_fetchcreateproductionworkorder", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L113", "weight": 1.0}, {"source": "users_wuzilong_Line truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_productionworkordercardlist_vue", "label": "ProductionWorkOrderCardList.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/ProductionWorkOrderCardList.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchstepdialog_vue", "label": "DispatchStepDialog.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchStepDialog.vue", "source_location": "L1"}, {"id": "production_work_order_dispatchstepdialog_mergeduseroptions", "label": "mergedUserOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchStepDialog.vue", "source_location": "L115"}, {"id": "production_work_order_dispatchstepdialog_remotesearchusers", "label": "remoteSearchUsers()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchStepDialog.vue", "source_location": "L122"}, {"id": "production_work_order_dispatchstepdialog_onuserselectvisible", "label": "onUserSelectVisible()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchStepDialog.vue", "source_location": "L139"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchstepdialog_vue", "target": "production_work_order_dispatchstepdialog_mergeduseroptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchStepDialog.vue", "source_location": "L115", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchstepdialog_vue", "target": "production_work_order_dispatchstepdialog_remotesearchusers", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchStepDialog.vue", "source_location": "L122", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchstepdialog_vue", "target": "production_work_order_dispatchstepdialog_onuserselectvisible", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchStepDialog.vue", "source_location": "L139", "weight": 1.0}, {"source": "production_work_order_dispatchstepdialog_onuserselectvisible", "target": "production_work_order_dispatchstepdialog_remotesearchusers", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchStepDialog.vue", "source_location": "L140", "weight": 1.0}], "raw_calls": [{"caller_nid": "production_work_order_dispatchstepdialog_mergeduseroptions", "callee": "values", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchStepDialog.vue", "source_location": "L119"}, {"caller_nid": "production_work_order_dispatchstepdialog_remotesearchusers", "callee": "fetchUserList", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchStepDialog.vue", "source_location": "L125"}, {"caller_nid": "production_work_order_dispatchstepdialog_remotesearchusers", "callee": "trim", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchStepDialog.vue", "source_location": "L128"}]}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "label": "useTaskStepEditor.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L1"}, {"id": "production_work_order_usetaskstepeditor_parsetaskattachmentsfromurls", "label": "parseTaskAttachmentsFromUrls()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L45"}, {"id": "production_work_order_usetaskstepeditor_toapiflag", "label": "toApiFlag()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L55"}, {"id": "production_work_order_usetaskstepeditor_fromapiflag", "label": "fromApiFlag()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L59"}, {"id": "production_work_order_usetaskstepeditor_normalizestepsubtables", "label": "normalizeStepSubTables()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L62"}, {"id": "production_work_order_usetaskstepeditor_parseordernum", "label": "parseOrderNum()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L90"}, {"id": "production_work_order_usetaskstepeditor_usetaskstepeditor", "label": "useTaskStepEditor()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L97"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_task", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_admin", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L19", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L20", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_admin", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L29", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_work_order", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L30", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_sample_reception", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L31", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_equipment_select", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L32", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_Line truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_stepdetailpanel_vue", "label": "StepDetailPanel.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L1"}, {"id": "production_work_order_stepdetailpanel_for", "label": "for()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L990"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_stepdetailpanel_vue", "target": "production_work_order_stepdetailpanel_for", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L990", "weight": 1.0}], "raw_calls": [{"caller_nid": "production_work_order_stepdetailpanel_for", "callee": "push", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L992"}, {"caller_nid": "production_work_order_stepdetailpanel_for", "callee": "decodeURIComponent", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L995"}, {"caller_nid": "production_work_order_stepdetailpanel_for", "callee": "pop", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L995"}, {"caller_nid": "production_work_order_stepdetailpanel_for", "callee": "split", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L995"}, {"caller_nid": "production_work_order_stepdetailpanel_for", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L995"}]}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_productionworkordercardlist_vue", "label": "ProductionWorkOrderCardList.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/ProductionWorkOrderCardList.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchtaskdialog_vue", "label": "DispatchTaskDialog.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L1"}, {"id": "production_work_order_dispatchtaskdialog_resolvecreatedtaskid", "label": "resolveCreatedTaskId()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L264"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchtaskdialog_vue", "target": "vue_draggable_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L208", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchtaskdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_task", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L209", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchtaskdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_labels", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L210", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchtaskdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L211", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchtaskdialog_vue", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L212", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchtaskdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L213", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchtaskdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_stepdetailpanel_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L214", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchtaskdialog_vue", "target": "production_work_order_dispatchtaskdialog_resolvecreatedtaskid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L264", "weight": 1.0}], "raw_calls": [{"caller_nid": "production_work_order_dispatchtaskdialog_resolvecreatedtaskid", "callee": "trim", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L266"}, {"caller_nid": "production_work_order_dispatchtaskdialog_resolvecreatedtaskid", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L266"}]}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_stepdetailpanel_vue", "label": "StepDetailPanel.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L1"}, {"id": "production_work_order_stepdetailpanel_for", "label": "for()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L912"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_stepdetailpanel_vue", "target": "production_work_order_stepdetailpanel_for", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L912", "weight": 1.0}], "raw_calls": [{"caller_nid": "production_work_order_stepdetailpanel_for", "callee": "push", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L914"}, {"caller_nid": "production_work_order_stepdetailpanel_for", "callee": "decodeURIComponent", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L917"}, {"caller_nid": "production_work_order_stepdetailpanel_for", "callee": "pop", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L917"}, {"caller_nid": "production_work_order_stepdetailpanel_for", "callee": "split", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L917"}, {"caller_nid": "production_work_order_stepdetailpanel_for", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L917"}]}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchqcworkorderdialog_vue", "label": "DispatchQcWorkOrderDialog.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchQcWorkOrderDialog.vue", "source_location": "L1"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchqcworkorderdialog_vue", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchQcWorkOrderDialog.vue", "source_location": "L109", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchqcworkorderdialog_vue", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchQcWorkOrderDialog.vue", "source_location": "L110", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchqcworkorderdialog_vue", "target": "icons_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchQcWorkOrderDialog.vue", "source_location": "L111", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchqcworkorderdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_work_order", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchQcWorkOrderDialog.vue", "source_location": "L112", "weight": 1.0}], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/index.vue", "source_location": "L1"}, {"id": "production_work_order_index_refreshactivetab", "label": "refreshActiveTab()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/index.vue", "source_location": "L148"}, {"id": "production_work_order_index_handletabchange", "label": "handleTabChange()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/index.vue", "source_location": "L153"}, {"id": "production_work_order_index_handleaddtemporary", "label": "handleAddTemporary()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/index.vue", "source_location": "L164"}, {"id": "production_work_order_index_submitadd", "label": "submitAdd()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/index.vue", "source_location": "L169"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_index_vue", "target": "vue_router", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/index.vue", "source_location": "L111", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_index_vue", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/index.vue", "source_location": "L112", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_index_vue", "target": "icons_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/index.vue", "source_location": "L113", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_work_order", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/index.vue", "source_location": "L114", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_work_order_tabs", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/index.vue", "source_location": "L121", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_tabs_productionworkordertabpanel_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/index.vue", "source_location": "L126", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchtaskdialog_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/index.vue", "source_location": "L127", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchstepdialog_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/index.vue", "source_location": "L128", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchqcworkorderdialog_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/index.vue", "source_location": "L129", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_vieLine truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_workordertasksublist_vue", "label": "WorkOrderTaskSubList.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/WorkOrderTaskSubList.vue", "source_location": "L1"}, {"id": "production_work_order_workordertasksublist_iscurrentassignee", "label": "isCurrentAssignee()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/WorkOrderTaskSubList.vue", "source_location": "L270"}, {"id": "production_work_order_workordertasksublist_isminehistoryrow", "label": "isMineHistoryRow()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/WorkOrderTaskSubList.vue", "source_location": "L278"}, {"id": "production_work_order_workordertasksublist_canenterexecution", "label": "canEnterExecution()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/WorkOrderTaskSubList.vue", "source_location": "L284"}, {"id": "production_work_order_workordertasksublist_canforwardtask", "label": "canForwardTask()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/WorkOrderTaskSubList.vue", "source_location": "L291"}, {"id": "production_work_order_workordertasksublist_canreassigntask", "label": "canReassignTask()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/WorkOrderTaskSubList.vue", "source_location": "L295"}, {"id": "production_work_order_workordertasksublist_candispatchsteps", "label": "canDispatchSteps()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/WorkOrderTaskSubList.vue", "source_location": "L299"}, {"id": "production_work_order_workordertasksublist_canedittask", "label": "canEditTask()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/WorkOrderTaskSubList.vue", "source_location": "L304"}, {"id": "production_work_order_workordertasksublist_candeletetask", "label": "canDeleteTask()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/WorkOrderTaskSubList.vue", "source_location": "L310"}, {"id": "production_work_order_workordertasksublist_hasmoretaskactions", "label": "hasMoreTaskActions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/WorkOrderTaskSubList.vue", "source_location": "L315"}, {"id": "production_work_order_workordertasksublist_loaddata", "label": "loadData()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/WorkOrderTaskSubList.vue", "source_location": "L320"}, {"id": "production_work_order_workordertasksublist_handletaskmutationsuccess", "label": "handleTaskMutationSuccess()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/WorkOrderTaskSubList.vue", "source_location": "L352"}, {"id": "production_work_order_workordertasksublist_handledispatch", "label": "handleDispatch()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/WorkOrderTaskSubList.vue", "source_location": "L359"}, {"id": "production_work_order_workordertasksublist_handleneedstepdispatch", "label": "handleNeedStepDispatch()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/WorkOrderTaskSubList.vue", "source_location": "L373"}, {"id": "production_work_order_workordertasksublist_openstepdispatch", "label": "openStepDispatch()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/WorkOrderTaskSubList.vue", "source_location": "L379"}, {"id": "production_work_order_workordertasksublist_handleenterexecution", "label": "handleEnterExecution()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/WorkOrderTaskSubList.vue", "source_location": "L390"}, {"id": "production_work_order_workordertasksublist_handleviewdetail", "label": "handleViewDetail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/WorkOrderTaskSubList.vue", "source_location": "L397"}, {"id": "production_work_order_workordertasksublist_handledropdowncommand", "label": "handleDropdownCommand()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-adLine truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_operations_storage_facility_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/operations/storage-facility/index.vue", "source_location": "L1"}, {"id": "storage_facility_index_if", "label": "if()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/operations/storage-facility/index.vue", "source_location": "L945"}, {"id": "storage_facility_index_push", "label": "push()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/operations/storage-facility/index.vue", "source_location": "L948"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_operations_storage_facility_index_vue", "target": "storage_facility_index_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/operations/storage-facility/index.vue", "source_location": "L945", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_operations_storage_facility_index_vue", "target": "storage_facility_index_push", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/operations/storage-facility/index.vue", "source_location": "L948", "weight": 1.0}], "raw_calls": [{"caller_nid": "storage_facility_index_if", "callee": "set", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/operations/storage-facility/index.vue", "source_location": "L946"}]}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchtaskdialog_vue", "label": "DispatchTaskDialog.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L1"}, {"id": "production_work_order_dispatchtaskdialog_resolvecreatedtaskid", "label": "resolveCreatedTaskId()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L264"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchtaskdialog_vue", "target": "vue_draggable_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L208", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchtaskdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_task", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L209", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchtaskdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_labels", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L210", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchtaskdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L211", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchtaskdialog_vue", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L212", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchtaskdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L213", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchtaskdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_stepdetailpanel_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L214", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchtaskdialog_vue", "target": "production_work_order_dispatchtaskdialog_resolvecreatedtaskid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L264", "weight": 1.0}], "raw_calls": [{"caller_nid": "production_work_order_dispatchtaskdialog_resolvecreatedtaskid", "callee": "trim", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L266"}, {"caller_nid": "production_work_order_dispatchtaskdialog_resolvecreatedtaskid", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L266"}]}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_work_order_ts", "label": "qc-work-order.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L1"}, {"id": "api_qc_work_order_fetchqcworkorderlist", "label": "fetchQcWorkOrderList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L181"}, {"id": "api_qc_work_order_fetchqcworkorderdetail", "label": "fetchQcWorkOrderDetail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L201"}, {"id": "api_qc_work_order_fetchconfigureqcworkorder", "label": "fetchConfigureQcWorkOrder()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L207"}, {"id": "api_qc_work_order_fetchcreateqcworkorder", "label": "fetchCreateQcWorkOrder()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L224"}, {"id": "api_qc_work_order_fetchupdateqcworkorder", "label": "fetchUpdateQcWorkOrder()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L239"}, {"id": "api_qc_work_order_fetchdeleteqcworkorder", "label": "fetchDeleteQcWorkOrder()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L249"}, {"id": "api_qc_work_order_fetchoutboundqcdetail", "label": "fetchOutboundQcDetail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L322"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_work_order_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_http", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_work_order_ts", "target": "api_qc_work_order_fetchqcworkorderlist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L181", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_work_order_ts", "target": "api_qc_work_order_fetchqcworkorderdetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L201", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_work_order_ts", "target": "api_qc_work_order_fetchconfigureqcworkorder", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L207", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_work_order_ts", "target": "api_qc_work_order_fetchcreateqcworkorder", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L224", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_work_order_ts", "target": "api_qc_work_order_fetchupdateqcworkorder", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L239", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_work_order_ts", "target": "api_qc_work_order_fetchdeleteqcworkorder", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L249", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_work_order_ts", "target": "api_qc_work_order_fetchoutboundqcdetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L322", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_qc_work_order_fetchqcworkorderlist", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L195"}, {"caller_nid": "api_qc_work_order_fetchqcworkorderdetail", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L202"}, {"caller_nid": "api_qc_work_order_fetchconfigureqcworkorder", "callee": "post", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L218"}, {"caller_nid": "api_qc_work_order_fetchcreateqcworkoLine truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "label": "useTaskStepEditor.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L1"}, {"id": "production_work_order_usetaskstepeditor_parsetaskattachmentsfromurls", "label": "parseTaskAttachmentsFromUrls()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L45"}, {"id": "production_work_order_usetaskstepeditor_toapiflag", "label": "toApiFlag()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L55"}, {"id": "production_work_order_usetaskstepeditor_fromapiflag", "label": "fromApiFlag()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L59"}, {"id": "production_work_order_usetaskstepeditor_normalizestepsubtables", "label": "normalizeStepSubTables()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L62"}, {"id": "production_work_order_usetaskstepeditor_parseordernum", "label": "parseOrderNum()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L90"}, {"id": "production_work_order_usetaskstepeditor_usetaskstepeditor", "label": "useTaskStepEditor()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L97"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_task", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_admin", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L19", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L20", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_admin", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L29", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_work_order", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L30", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_sample_reception", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L31", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_equipment_select", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L32", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_Line truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_productionworkordercardlist_vue", "label": "ProductionWorkOrderCardList.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/ProductionWorkOrderCardList.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_stepdetailpanel_vue", "label": "StepDetailPanel.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L1"}, {"id": "production_work_order_stepdetailpanel_for", "label": "for()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L987"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_stepdetailpanel_vue", "target": "production_work_order_stepdetailpanel_for", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L987", "weight": 1.0}], "raw_calls": [{"caller_nid": "production_work_order_stepdetailpanel_for", "callee": "push", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L989"}, {"caller_nid": "production_work_order_stepdetailpanel_for", "callee": "decodeURIComponent", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L992"}, {"caller_nid": "production_work_order_stepdetailpanel_for", "callee": "pop", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L992"}, {"caller_nid": "production_work_order_stepdetailpanel_for", "callee": "split", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L992"}, {"caller_nid": "production_work_order_stepdetailpanel_for", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L992"}]}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "label": "useTaskStepEditor.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L1"}, {"id": "production_work_order_usetaskstepeditor_parsetaskattachmentsfromurls", "label": "parseTaskAttachmentsFromUrls()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L45"}, {"id": "production_work_order_usetaskstepeditor_toapiflag", "label": "toApiFlag()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L55"}, {"id": "production_work_order_usetaskstepeditor_fromapiflag", "label": "fromApiFlag()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L59"}, {"id": "production_work_order_usetaskstepeditor_normalizestepsubtables", "label": "normalizeStepSubTables()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L62"}, {"id": "production_work_order_usetaskstepeditor_parseordernum", "label": "parseOrderNum()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L90"}, {"id": "production_work_order_usetaskstepeditor_usetaskstepeditor", "label": "useTaskStepEditor()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L97"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_task", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_admin", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L19", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L20", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_admin", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L29", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_work_order", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L30", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_sample_reception", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L31", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_equipment_select", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L32", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_Line truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchtaskdialog_vue", "label": "DispatchTaskDialog.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L1"}, {"id": "production_work_order_dispatchtaskdialog_resolvecreatedtaskid", "label": "resolveCreatedTaskId()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L264"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchtaskdialog_vue", "target": "vue_draggable_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L208", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchtaskdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_task", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L209", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchtaskdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_labels", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L210", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchtaskdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L211", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchtaskdialog_vue", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L212", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchtaskdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L213", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchtaskdialog_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_stepdetailpanel_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L214", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchtaskdialog_vue", "target": "production_work_order_dispatchtaskdialog_resolvecreatedtaskid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L264", "weight": 1.0}], "raw_calls": [{"caller_nid": "production_work_order_dispatchtaskdialog_resolvecreatedtaskid", "callee": "trim", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L266"}, {"caller_nid": "production_work_order_dispatchtaskdialog_resolvecreatedtaskid", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L266"}]}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_work_order_card_meta_ts", "label": "production-work-order-card-meta.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-card-meta.ts", "source_location": "L1"}, {"id": "utils_production_work_order_card_meta_formatoutboundschedulesortno", "label": "formatOutboundScheduleSortNo()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-card-meta.ts", "source_location": "L40"}, {"id": "utils_production_work_order_card_meta_formatoutboundscheduletotalcount", "label": "formatOutboundScheduleTotalCount()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-card-meta.ts", "source_location": "L46"}, {"id": "utils_production_work_order_card_meta_parsereceptiontime", "label": "parseReceptionTime()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-card-meta.ts", "source_location": "L52"}, {"id": "utils_production_work_order_card_meta_receptionover24hourslabel", "label": "receptionOver24HoursLabel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-card-meta.ts", "source_location": "L59"}, {"id": "utils_production_work_order_card_meta_receptionover24hourstagtype", "label": "receptionOver24HoursTagType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-card-meta.ts", "source_location": "L66"}, {"id": "utils_production_work_order_card_meta_protocolstatuslabelfortab", "label": "protocolStatusLabelForTab()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-card-meta.ts", "source_location": "L73"}, {"id": "utils_production_work_order_card_meta_protocolstatustagtypefortab", "label": "protocolStatusTagTypeForTab()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-card-meta.ts", "source_location": "L82"}, {"id": "utils_production_work_order_card_meta_buildinboundmetafields", "label": "buildInboundMetaFields()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-card-meta.ts", "source_location": "L91"}, {"id": "utils_production_work_order_card_meta_getcardmetaconfig", "label": "getCardMetaConfig()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-card-meta.ts", "source_location": "L263"}, {"id": "utils_production_work_order_card_meta_getcardmetaconfigforlegacytab", "label": "getCardMetaConfigForLegacyTab()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-card-meta.ts", "source_location": "L267"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_work_order_card_meta_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_work_order", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-card-meta.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_work_order_card_meta_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_qc_labels", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-card-meta.ts", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_work_order_card_meta_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_status_tag_registry", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-card-meta.ts", "source_location": "L3", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_work_order_card_meta_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_status_tag_registry", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-card-meta.ts", "source_location": "L9", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_work_order_card_meta_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_production_work_order_tabs", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/production-work-order-card-meta.ts", "source_location": "L10", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utLine truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_storage_slot_options_ts", "label": "storage-slot-options.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L1"}, {"id": "utils_storage_slot_options_getstoragefacilityordernum", "label": "getStorageFacilityOrderNum()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L16"}, {"id": "utils_storage_slot_options_getstorageslotordernum", "label": "getStorageSlotOrderNum()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L22"}, {"id": "utils_storage_slot_options_decodeslotlayoutorder", "label": "decodeSlotLayoutOrder()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L31"}, {"id": "utils_storage_slot_options_parselegacyrowcolslotcode", "label": "parseLegacyRowColSlotCode()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L40"}, {"id": "utils_storage_slot_options_parsestorageslotcode", "label": "parseStorageSlotCode()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L47"}, {"id": "utils_storage_slot_options_buildnodecodepathfromflat", "label": "buildNodeCodePathFromFlat()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L54"}, {"id": "utils_storage_slot_options_buildfullslotcodefromflat", "label": "buildFullSlotCodeFromFlat()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L78"}, {"id": "utils_storage_slot_options_comparestoragefacilityslots", "label": "compareStorageFacilitySlots()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L90"}, {"id": "utils_storage_slot_options_sortstoragefacilityslots", "label": "sortStorageFacilitySlots()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L118"}, {"id": "utils_storage_slot_options_isstorageslotavailable", "label": "isStorageSlotAvailable()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L122"}, {"id": "utils_storage_slot_options_collectleaffacilitynodesintreeorder", "label": "collectLeafFacilityNodesInTreeOrder()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L131"}, {"id": "utils_storage_slot_options_mapslotstoselectoptions", "label": "mapSlotsToSelectOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L183"}, {"id": "utils_storage_slot_options_loadstorageslotselectoptions", "label": "loadStorageSlotSelectOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L211"}, {"id": "utils_storage_slot_options_remotesearchstorageslotselectoptions", "label": "remoteSearchStorageSlotSelectOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L249"}, {"id": "utils_storage_slot_options_ensurestorageslotsinoptions", "label": "ensureStorageSlotsInOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L274"}, {"id": "utils_storage_slot_options_filterstorageslotselectoptions", "label": "filterStorageSlotSelectOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L293"}, {"id": "utils_storage_slot_options_validateuniquestorageslotids", "label": "validateUniqueStorageSlotIds()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L307"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_storage_slot_options_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_tree_path", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/storage-slot-options.ts", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_storage_slot_options_ts", "target": "users_wuzilong_work_00code_Line truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_task_ts", "label": "production-task.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L1"}, {"id": "api_production_task_scopequery", "label": "scopeQuery()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L5"}, {"id": "api_production_task_fetchcreateproductiontask", "label": "fetchCreateProductionTask()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L9"}, {"id": "api_production_task_fetchproductiontasklist", "label": "fetchProductionTaskList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L13"}, {"id": "api_production_task_fetchmyproductiontasks", "label": "fetchMyProductionTasks()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L31"}, {"id": "api_production_task_fetchforwardproductiontask", "label": "fetchForwardProductionTask()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L50"}, {"id": "api_production_task_fetchreassignproductiontask", "label": "fetchReassignProductionTask()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L62"}, {"id": "api_production_task_fetchdispatchproductiontasksteps", "label": "fetchDispatchProductionTaskSteps()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L72"}, {"id": "api_production_task_fetchproductiontaskdetail", "label": "fetchProductionTaskDetail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L90"}, {"id": "api_production_task_fetchupdateproductiontask", "label": "fetchUpdateProductionTask()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L94"}, {"id": "api_production_task_fetchupdateproductiontaskstatus", "label": "fetchUpdateProductionTaskStatus()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L98"}, {"id": "api_production_task_fetchdeleteproductiontask", "label": "fetchDeleteProductionTask()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L110"}, {"id": "api_production_task_fetchaddtaskstep", "label": "fetchAddTaskStep()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L114"}, {"id": "api_production_task_fetchupdatetaskstep", "label": "fetchUpdateTaskStep()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L126"}, {"id": "api_production_task_fetchdeletetaskstep", "label": "fetchDeleteTaskStep()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L139"}, {"id": "api_production_task_fetchreplacestepreagents", "label": "fetchReplaceStepReagents()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L150"}, {"id": "api_production_task_fetchreplacestepconsumables", "label": "fetchReplaceStepConsumables()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L163"}, {"id": "api_production_task_fetchreplacestepconfiguredreagents", "label": "fetchReplaceStepConfiguredReagents()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L176"}, {"id": "api_production_task_fetchreplacestepdatacollection", "label": "fetchReplaceStepDataCollection()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L189"}, {"id": "api_production_task_fetchsettaskinputs", "label": "fetchSetTaskInputs()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L202"}, {"id": "api_production_task_fetchsettaskoutputs", "label": "fetchSetTaskOutputs()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-task.ts", "source_location": "L214"}, {"id": "api_production_task_fetchreordertasksteps", "label": "fetchReorderTaskSteps()", "file_type": "code", "source_file": "/Users/wuzilong/Line truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_stepdetailpanel_vue", "label": "StepDetailPanel.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L1"}, {"id": "production_work_order_stepdetailpanel_for", "label": "for()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L987"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_stepdetailpanel_vue", "target": "production_work_order_stepdetailpanel_for", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L987", "weight": 1.0}], "raw_calls": [{"caller_nid": "production_work_order_stepdetailpanel_for", "callee": "push", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L989"}, {"caller_nid": "production_work_order_stepdetailpanel_for", "callee": "decodeURIComponent", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L992"}, {"caller_nid": "production_work_order_stepdetailpanel_for", "callee": "pop", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L992"}, {"caller_nid": "production_work_order_stepdetailpanel_for", "callee": "split", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L992"}, {"caller_nid": "production_work_order_stepdetailpanel_for", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/StepDetailPanel.vue", "source_location": "L992"}]}
|
||||
@@ -89,10 +89,7 @@ function protocolStatusTagTypeForTab(
|
||||
}
|
||||
|
||||
function buildInboundMetaFields(tabKey: ProductionWorkOrderTabKey): CardMetaField[] {
|
||||
const fields: CardMetaField[] = [
|
||||
{ label: '样本编码', getValue: (row) => row.sampleCode || '—' },
|
||||
{ label: '实验室入库编码', getValue: (row) => row.labStorageCode || '—' }
|
||||
]
|
||||
const fields: CardMetaField[] = []
|
||||
if (tabKey === 'inbound_cell_storage') {
|
||||
fields.push({
|
||||
label: '来源类型',
|
||||
@@ -120,6 +117,9 @@ function buildInboundMetaFields(tabKey: ProductionWorkOrderTabKey): CardMetaFiel
|
||||
},
|
||||
{ label: '接收时间', getValue: (row) => row.receptionTime || '—' },
|
||||
{ label: '创建时间', getValue: (row) => row.createTime || '—' },
|
||||
{ label: '工单号', getValue: (row) => row.workOrderNo || '—' },
|
||||
{ label: '样本编码', getValue: (row) => row.sampleCode || '—' },
|
||||
{ label: '实验室入库编码', getValue: (row) => row.labStorageCode || '—' },
|
||||
{
|
||||
label: '备注',
|
||||
getValue: (row) => row.remark || '—',
|
||||
|
||||
@@ -25,11 +25,29 @@ export function getStorageSlotOrderNum(slot: Record<string, unknown>): number {
|
||||
return Number.isFinite(parsed) ? parsed : 0
|
||||
}
|
||||
|
||||
/** 解析 slotCode「{prefix}{row}-{col}」 */
|
||||
export function parseStorageSlotCode(code: string): { row: number; col: number } | null {
|
||||
/** 货架布局 order_num 步长(row * STRIDE + col) */
|
||||
export const SLOT_LAYOUT_ROW_STRIDE = 1000
|
||||
|
||||
export function decodeSlotLayoutOrder(orderNum: number): { row: number; col: number } {
|
||||
const order = Number(orderNum) || 0
|
||||
if (order >= SLOT_LAYOUT_ROW_STRIDE) {
|
||||
return { row: Math.trunc(order / SLOT_LAYOUT_ROW_STRIDE), col: order % SLOT_LAYOUT_ROW_STRIDE }
|
||||
}
|
||||
return { row: 0, col: order }
|
||||
}
|
||||
|
||||
/** 解析旧版 slotCode「{prefix}{row}-{col}」;纯数字序号返回 null */
|
||||
export function parseLegacyRowColSlotCode(code: string): { row: number; col: number; prefix: string } | null {
|
||||
const match = (code || '').trim().match(/^(.*?)(\d+)-(\d+)$/)
|
||||
if (!match) return null
|
||||
return { row: parseInt(match[2], 10), col: parseInt(match[3], 10) }
|
||||
return { prefix: match[1], row: parseInt(match[2], 10), col: parseInt(match[3], 10) }
|
||||
}
|
||||
|
||||
/** @deprecated 兼容旧调用;新数据请用 decodeSlotLayoutOrder + 序号 slotCode */
|
||||
export function parseStorageSlotCode(code: string): { row: number; col: number } | null {
|
||||
const legacy = parseLegacyRowColSlotCode(code)
|
||||
if (legacy) return { row: legacy.row, col: legacy.col }
|
||||
return null
|
||||
}
|
||||
|
||||
/** 从根到节点的 node_code 路径,用 `-` 连接 */
|
||||
@@ -68,17 +86,25 @@ export function buildFullSlotCodeFromFlat(
|
||||
return local || path
|
||||
}
|
||||
|
||||
/** 盒内格位:order_num → 行 → 列 → 编码 */
|
||||
/** 盒内格位:order_num → 布局行列 → 序号 */
|
||||
export function compareStorageFacilitySlots(
|
||||
a: Record<string, unknown>,
|
||||
b: Record<string, unknown>
|
||||
): number {
|
||||
const orderDiff = getStorageSlotOrderNum(a) - getStorageSlotOrderNum(b)
|
||||
if (orderDiff !== 0) return orderDiff
|
||||
const oa = getStorageSlotOrderNum(a)
|
||||
const ob = getStorageSlotOrderNum(b)
|
||||
if (oa >= SLOT_LAYOUT_ROW_STRIDE && ob >= SLOT_LAYOUT_ROW_STRIDE) {
|
||||
const da = decodeSlotLayoutOrder(oa)
|
||||
const db = decodeSlotLayoutOrder(ob)
|
||||
if (da.row !== db.row) return da.row - db.row
|
||||
if (da.col !== db.col) return da.col - db.col
|
||||
}
|
||||
const codeA = String(a.slotCode ?? a.slot_code ?? '')
|
||||
const codeB = String(b.slotCode ?? b.slot_code ?? '')
|
||||
const pa = parseStorageSlotCode(codeA)
|
||||
const pb = parseStorageSlotCode(codeB)
|
||||
const pa = parseLegacyRowColSlotCode(codeA)
|
||||
const pb = parseLegacyRowColSlotCode(codeB)
|
||||
if (pa && pb) {
|
||||
if (pa.row !== pb.row) return pa.row - pb.row
|
||||
if (pa.col !== pb.col) return pa.col - pb.col
|
||||
|
||||
@@ -135,7 +135,7 @@
|
||||
<div class="shelf-cells">
|
||||
<div
|
||||
class="shelf-cell shelf-cell--add"
|
||||
title="在此行前面增加格子"
|
||||
title="在此行末尾增加格子"
|
||||
@click="handleAddSlotInRow(ri)"
|
||||
>
|
||||
<span class="add-icon">+</span>
|
||||
@@ -215,11 +215,11 @@
|
||||
<el-form-item label="节点名称" prop="nodeName">
|
||||
<el-input v-model="nodeFormData.nodeName" placeholder="请输入节点名称" />
|
||||
</el-form-item>
|
||||
<el-form-item prop="nodeCode">
|
||||
<el-form-item>
|
||||
<template #label>
|
||||
节点编号<span class="form-label-tip">单段字母或数字,不含连字符</span>
|
||||
节点编号<span class="form-label-tip">可选</span>
|
||||
</template>
|
||||
<el-input v-model="nodeFormData.nodeCode" placeholder="如 1、03、A" />
|
||||
<el-input v-model="nodeFormData.nodeCode" placeholder="可不填" />
|
||||
</el-form-item>
|
||||
<el-form-item label="节点类型">
|
||||
<el-select v-model="nodeFormData.nodeType" placeholder="请选择节点类型">
|
||||
@@ -278,15 +278,17 @@
|
||||
<el-form
|
||||
ref="slotFormRef"
|
||||
:model="slotFormData"
|
||||
:rules="slotFormRules"
|
||||
label-position="top"
|
||||
class="storage-dialog-form"
|
||||
scroll-to-error
|
||||
:scroll-into-view-options="{ behavior: 'smooth', block: 'center' }"
|
||||
>
|
||||
<div class="form-grid-2">
|
||||
<el-form-item label="本地编码(行-列)" prop="slotCode">
|
||||
<el-input v-model="slotFormData.slotCode" placeholder="如 1-3" />
|
||||
<el-form-item>
|
||||
<template #label>
|
||||
本地编码(序号)<span class="form-label-tip">可选</span>
|
||||
</template>
|
||||
<el-input v-model="slotFormData.slotCode" placeholder="可不填" />
|
||||
</el-form-item>
|
||||
<el-form-item label="格子状态">
|
||||
<el-select v-model="slotFormData.slotStatus" placeholder="请选择状态">
|
||||
@@ -357,9 +359,9 @@
|
||||
将生成 <strong>{{ batchForm.rows * batchForm.cols }}</strong> 个格子({{
|
||||
batchForm.rows
|
||||
}}
|
||||
行 × {{ batchForm.cols }} 列)
|
||||
行 × {{ batchForm.cols }} 列),本地序号从 <strong>1</strong> 起依次编号
|
||||
<template v-if="batchPreviewCode">
|
||||
,示例编号:<strong>{{ batchPreviewCode }}</strong>
|
||||
,示例完整编号:<strong>{{ batchPreviewCode }}</strong>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
@@ -625,22 +627,24 @@
|
||||
<el-form
|
||||
ref="occupancySlotFormRef"
|
||||
:model="occupancySlotFormData"
|
||||
:rules="occupancySlotFormRules"
|
||||
label-position="top"
|
||||
class="storage-dialog-form"
|
||||
scroll-to-error
|
||||
:scroll-into-view-options="{ behavior: 'smooth', block: 'center' }"
|
||||
>
|
||||
<div class="form-grid-2">
|
||||
<el-form-item label="完整编号" class="form-col-span-2">
|
||||
<div class="form-grid-3">
|
||||
<el-form-item label="完整编号">
|
||||
<el-input
|
||||
:model-value="currentSlot?.fullSlotCode || '—'"
|
||||
readonly
|
||||
placeholder="保存后自动生成"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="本地编码(行-列)" prop="slotCode">
|
||||
<el-input v-model="occupancySlotFormData.slotCode" placeholder="如 1-3" />
|
||||
<el-form-item>
|
||||
<template #label>
|
||||
本地编码(序号)<span class="form-label-tip">可选</span>
|
||||
</template>
|
||||
<el-input v-model="occupancySlotFormData.slotCode" placeholder="可不填" />
|
||||
</el-form-item>
|
||||
<el-form-item label="格子状态">
|
||||
<el-select v-model="occupancySlotFormData.slotStatus" placeholder="请选择状态">
|
||||
@@ -734,7 +738,13 @@
|
||||
fetchRemoveOccupancy
|
||||
} from '@/api/admin'
|
||||
import { buildTreePathLabelFromFlat } from '@/utils/tree-path'
|
||||
import { buildNodeCodePathFromFlat } from '@/utils/storage-slot-options'
|
||||
import {
|
||||
buildNodeCodePathFromFlat,
|
||||
decodeSlotLayoutOrder,
|
||||
getStorageSlotOrderNum,
|
||||
parseLegacyRowColSlotCode,
|
||||
SLOT_LAYOUT_ROW_STRIDE
|
||||
} from '@/utils/storage-slot-options'
|
||||
|
||||
defineOptions({ name: 'StorageFacility' })
|
||||
|
||||
@@ -877,7 +887,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
// ==================== 货架行计算(按 slotCode 中的行号分组) ====================
|
||||
// ==================== 货架行计算(按 order_num 布局分组) ====================
|
||||
const batchForm = reactive({
|
||||
rows: 4,
|
||||
cols: 6
|
||||
@@ -886,23 +896,51 @@
|
||||
const batchPreviewCode = computed(() => {
|
||||
if (!selectedNode.value?.id) return ''
|
||||
const path = buildNodeCodePathFromFlat(selectedNode.value.id, flatList.value)
|
||||
if (!path) return ''
|
||||
return `${path}-1-1`
|
||||
const total = Number(batchForm.rows) * Number(batchForm.cols)
|
||||
const local = total <= 1 ? '1' : `1…${total}`
|
||||
return path ? `${path}-${local}` : local
|
||||
})
|
||||
|
||||
/** 解析 slotCode "{prefix}{row}-{col}" 格式,提取行号和列号 */
|
||||
const parseSlotCode = (code: string): { prefix: string; row: number; col: number } | null => {
|
||||
const match = code.match(/^(.*?)(\d+)-(\d+)$/)
|
||||
if (!match) return null
|
||||
return { prefix: match[1], row: parseInt(match[2], 10), col: parseInt(match[3], 10) }
|
||||
}
|
||||
const sortSlotsForShelf = (slots: any[]) =>
|
||||
[...slots].sort((a, b) => {
|
||||
const oa = getStorageSlotOrderNum(a)
|
||||
const ob = getStorageSlotOrderNum(b)
|
||||
if (oa !== ob) return oa - ob
|
||||
const na = parseInt(String(a.slotCode || ''), 10) || 0
|
||||
const nb = parseInt(String(b.slotCode || ''), 10) || 0
|
||||
return na - nb
|
||||
})
|
||||
|
||||
const shelfRows = computed(() => {
|
||||
const sorted = sortSlotsForShelf(slotList.value)
|
||||
const hasLayoutOrder = sorted.some((slot) => getStorageSlotOrderNum(slot) >= SLOT_LAYOUT_ROW_STRIDE)
|
||||
|
||||
if (hasLayoutOrder) {
|
||||
const rowMap = new Map<number, any[]>()
|
||||
for (const slot of sorted) {
|
||||
const { row } = decodeSlotLayoutOrder(getStorageSlotOrderNum(slot))
|
||||
if (!rowMap.has(row)) rowMap.set(row, [])
|
||||
rowMap.get(row)!.push(slot)
|
||||
}
|
||||
return [...rowMap.entries()]
|
||||
.sort(([a], [b]) => a - b)
|
||||
.map(([rowNum, cells], index) => ({
|
||||
label: String(index + 1),
|
||||
rowNum,
|
||||
prefix: '',
|
||||
cells: cells.sort(
|
||||
(a, b) =>
|
||||
decodeSlotLayoutOrder(getStorageSlotOrderNum(a)).col -
|
||||
decodeSlotLayoutOrder(getStorageSlotOrderNum(b)).col
|
||||
)
|
||||
}))
|
||||
}
|
||||
|
||||
// 兼容旧版「行-列」本地编码
|
||||
const rowMap = new Map<number, { prefix: string; cells: any[] }>()
|
||||
const ungrouped: any[] = []
|
||||
|
||||
for (const slot of slotList.value) {
|
||||
const parsed = parseSlotCode(slot.slotCode || '')
|
||||
for (const slot of sorted) {
|
||||
const parsed = parseLegacyRowColSlotCode(slot.slotCode || '')
|
||||
if (parsed) {
|
||||
if (!rowMap.has(parsed.row)) {
|
||||
rowMap.set(parsed.row, { prefix: parsed.prefix, cells: [] })
|
||||
@@ -913,14 +951,11 @@
|
||||
}
|
||||
}
|
||||
|
||||
// 按行号排序,每个行内按列号排序
|
||||
const result: { label: string; cells: any[]; rowNum: number; prefix: string }[] = []
|
||||
const sortedEntries = [...rowMap.entries()].sort(([a], [b]) => a - b)
|
||||
|
||||
for (const [rowNum, data] of sortedEntries) {
|
||||
for (const [rowNum, data] of [...rowMap.entries()].sort(([a], [b]) => a - b)) {
|
||||
data.cells.sort((a, b) => {
|
||||
const pa = parseSlotCode(a.slotCode || '')
|
||||
const pb = parseSlotCode(b.slotCode || '')
|
||||
const pa = parseLegacyRowColSlotCode(a.slotCode || '')
|
||||
const pb = parseLegacyRowColSlotCode(b.slotCode || '')
|
||||
return (pa?.col ?? 0) - (pb?.col ?? 0)
|
||||
})
|
||||
result.push({
|
||||
@@ -931,7 +966,6 @@
|
||||
})
|
||||
}
|
||||
|
||||
// 无法解析编码的格子归入末尾
|
||||
if (ungrouped.length > 0) {
|
||||
result.push({
|
||||
label: String(result.length + 1),
|
||||
@@ -962,22 +996,8 @@
|
||||
remark: ''
|
||||
})
|
||||
|
||||
const validateNodeCode = (_rule: unknown, value: string, callback: (err?: Error) => void) => {
|
||||
const v = (value || '').trim()
|
||||
if (!v) {
|
||||
callback(new Error('请输入节点编号'))
|
||||
return
|
||||
}
|
||||
if (!/^[A-Za-z0-9]+$/.test(v)) {
|
||||
callback(new Error('编号只能包含字母和数字,不能含连字符'))
|
||||
return
|
||||
}
|
||||
callback()
|
||||
}
|
||||
|
||||
const nodeFormRules = {
|
||||
nodeName: [{ required: true, message: '请输入节点名称', trigger: 'blur' }],
|
||||
nodeCode: [{ required: true, validator: validateNodeCode, trigger: 'blur' }]
|
||||
nodeName: [{ required: true, message: '请输入节点名称', trigger: 'blur' }]
|
||||
}
|
||||
|
||||
const handleAddRoot = () => {
|
||||
@@ -1106,10 +1126,6 @@
|
||||
remark: ''
|
||||
})
|
||||
|
||||
const slotFormRules = {
|
||||
slotCode: [{ required: true, message: '请输入格子编码', trigger: 'blur' }]
|
||||
}
|
||||
|
||||
const handleEditSlot = (row: any) => {
|
||||
isSlotEdit.value = true
|
||||
slotDialogTitle.value = '编辑格子'
|
||||
@@ -1218,25 +1234,17 @@
|
||||
// ==================== 单独新增行/格子 ====================
|
||||
const addSlotLoading = ref(false)
|
||||
|
||||
/** 在指定行前面追加一个格子 */
|
||||
/** 在指定行末尾追加一个格子 */
|
||||
const handleAddSlotInRow = async (rowIndex: number) => {
|
||||
if (!selectedNode.value?.id || addSlotLoading.value) return
|
||||
const row = shelfRows.value[rowIndex]
|
||||
if (!row) return
|
||||
|
||||
// 计算该行下一个列号
|
||||
let nextCol = 1
|
||||
for (const cell of row.cells) {
|
||||
const parsed = parseSlotCode(cell.slotCode || '')
|
||||
if (parsed && parsed.col >= nextCol) nextCol = parsed.col + 1
|
||||
}
|
||||
|
||||
const slotCode = `${row.rowNum}-${nextCol}`
|
||||
addSlotLoading.value = true
|
||||
try {
|
||||
await fetchCreateStorageSlot({
|
||||
facilityNodeId: selectedNode.value.id,
|
||||
slotCode,
|
||||
atRowNum: row.rowNum,
|
||||
slotStatus: '空'
|
||||
})
|
||||
ElMessage.success('新增格子成功')
|
||||
@@ -1356,9 +1364,6 @@
|
||||
slotStatus: '空',
|
||||
remark: ''
|
||||
})
|
||||
const occupancySlotFormRules = {
|
||||
slotCode: [{ required: true, message: '请输入格子编码', trigger: 'blur' }]
|
||||
}
|
||||
|
||||
const handleOccupancySlotSave = async () => {
|
||||
await occupancySlotFormRef.value?.validate?.()
|
||||
|
||||
+93
-28
@@ -30,23 +30,55 @@
|
||||
v-loading="optionsLoading"
|
||||
>
|
||||
<div class="form-grid-2">
|
||||
<el-form-item label="细胞产品" prop="cellProductId" class="form-col-span-2">
|
||||
<el-form-item label="生产任务" prop="taskId" class="form-col-span-2">
|
||||
<el-select
|
||||
v-model="form.cellProductId"
|
||||
placeholder="请选择细胞产品"
|
||||
v-model="form.taskId"
|
||||
placeholder="请选择生产任务"
|
||||
filterable
|
||||
style="width: 100%"
|
||||
:disabled="!productOptions.length"
|
||||
:disabled="!productionTasks.length"
|
||||
@change="handleTaskChange"
|
||||
>
|
||||
<el-option
|
||||
v-for="opt in productOptions"
|
||||
v-for="opt in taskOptions"
|
||||
:key="opt.taskId"
|
||||
:label="formatTaskOptionLabel(opt)"
|
||||
:value="opt.taskId"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="步骤产出物" prop="stepOutputId" class="form-col-span-2">
|
||||
<template #label
|
||||
>步骤产出物<span class="form-label-tip">类型为有效物且已填写条码</span></template
|
||||
>
|
||||
<el-select
|
||||
v-model="form.stepOutputId"
|
||||
placeholder="请选择步骤产出物"
|
||||
filterable
|
||||
style="width: 100%"
|
||||
:disabled="!form.taskId || !filteredOutputOptions.length"
|
||||
>
|
||||
<el-option
|
||||
v-for="opt in filteredOutputOptions"
|
||||
:key="opt.id"
|
||||
:label="formatProductOptionLabel(opt)"
|
||||
:label="formatStepOutputOptionLabel(opt)"
|
||||
:value="opt.id"
|
||||
/>
|
||||
</el-select>
|
||||
<p v-if="!optionsLoading && !productOptions.length" class="hint-muted">
|
||||
暂无产出细胞产品,请先完成生产任务并录入输出。
|
||||
<p v-if="!optionsLoading && !productionTasks.length" class="hint-muted">
|
||||
该生产工单下暂无生产任务,请先派发生产任务。
|
||||
</p>
|
||||
<p
|
||||
v-else-if="!optionsLoading && productionTasks.length && !dispatchOptions.length"
|
||||
class="hint-muted"
|
||||
>
|
||||
暂无可派发产出物,请先在生产任务执行中录入类型为「有效物」且含条码的步骤产出。
|
||||
</p>
|
||||
<p
|
||||
v-else-if="!optionsLoading && form.taskId && !filteredOutputOptions.length"
|
||||
class="hint-muted"
|
||||
>
|
||||
该任务下暂无符合条件的步骤产出物。
|
||||
</p>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" class="form-col-span-2">
|
||||
@@ -69,7 +101,6 @@
|
||||
class="btn-main"
|
||||
type="primary"
|
||||
:loading="submitting"
|
||||
:disabled="!productOptions.length"
|
||||
@click="handleSubmit"
|
||||
>
|
||||
<el-icon><Check /></el-icon>确定
|
||||
@@ -83,13 +114,20 @@
|
||||
import type { FormInstance, FormRules } from 'element-plus'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { Close, Check } from '@element-plus/icons-vue'
|
||||
import { fetchProductionTaskList } from '@/api/production-task'
|
||||
import {
|
||||
fetchProductionWorkOrderCellProductOptions,
|
||||
fetchProductionWorkOrderQcDispatchOptions,
|
||||
fetchCreateQcFromProduction,
|
||||
type ProductionWorkOrderItem,
|
||||
type ProductionCellProductOption
|
||||
type ProductionQcDispatchOption
|
||||
} from '@/api/production-work-order'
|
||||
|
||||
interface ProductionTaskOption {
|
||||
taskId: string
|
||||
taskNo?: string
|
||||
taskName?: string
|
||||
}
|
||||
|
||||
defineOptions({ name: 'DispatchQcWorkOrderDialog' })
|
||||
|
||||
const props = defineProps<{
|
||||
@@ -108,41 +146,70 @@
|
||||
})
|
||||
|
||||
const formRef = ref<FormInstance>()
|
||||
const form = reactive({ cellProductId: '', remark: '' })
|
||||
const form = reactive({ taskId: '', stepOutputId: '', remark: '' })
|
||||
const rules: FormRules = {
|
||||
cellProductId: [{ required: true, message: '请选择细胞产品', trigger: 'change' }]
|
||||
taskId: [{ required: true, message: '请选择生产任务', trigger: 'change' }],
|
||||
stepOutputId: [{ required: true, message: '请选择步骤产出物', trigger: 'change' }]
|
||||
}
|
||||
const productOptions = ref<ProductionCellProductOption[]>([])
|
||||
const dispatchOptions = ref<ProductionQcDispatchOption[]>([])
|
||||
const productionTasks = ref<ProductionTaskOption[]>([])
|
||||
const optionsLoading = ref(false)
|
||||
const submitting = ref(false)
|
||||
|
||||
function formatProductOptionLabel(opt: ProductionCellProductOption) {
|
||||
const taskOptions = computed(() => productionTasks.value)
|
||||
|
||||
const filteredOutputOptions = computed(() =>
|
||||
dispatchOptions.value.filter((opt) => opt.taskId === form.taskId)
|
||||
)
|
||||
|
||||
function formatTaskOptionLabel(opt: ProductionTaskOption) {
|
||||
const parts = [opt.taskNo, opt.taskName].filter(Boolean)
|
||||
return parts.join(' · ') || opt.taskId || '—'
|
||||
}
|
||||
|
||||
function formatStepOutputOptionLabel(opt: ProductionQcDispatchOption) {
|
||||
const parts = [
|
||||
opt.productCode,
|
||||
opt.productName,
|
||||
opt.productTypeName ? `(${opt.productTypeName})` : '',
|
||||
opt.passage ? `P${opt.passage}` : '',
|
||||
opt.storageSlotName ? `@${opt.storageSlotName}` : ''
|
||||
opt.processName,
|
||||
opt.outputName,
|
||||
opt.outputBarcode ? `条码 ${opt.outputBarcode}` : ''
|
||||
].filter(Boolean)
|
||||
const base = parts.join(' ') || opt.id
|
||||
return opt.taskNo ? `${base} · ${opt.taskNo}` : base
|
||||
return parts.join(' · ') || opt.id
|
||||
}
|
||||
|
||||
function handleTaskChange() {
|
||||
form.stepOutputId = ''
|
||||
formRef.value?.clearValidate(['stepOutputId'])
|
||||
}
|
||||
|
||||
async function loadOptions() {
|
||||
if (!props.workOrderRow?.id) {
|
||||
productOptions.value = []
|
||||
dispatchOptions.value = []
|
||||
productionTasks.value = []
|
||||
return
|
||||
}
|
||||
optionsLoading.value = true
|
||||
try {
|
||||
productOptions.value = (await fetchProductionWorkOrderCellProductOptions(props.workOrderRow.id)) || []
|
||||
const [dispatchRes, tasksRes] = await Promise.all([
|
||||
fetchProductionWorkOrderQcDispatchOptions(props.workOrderRow.id),
|
||||
fetchProductionTaskList({ workOrderId: props.workOrderRow.id, pageSize: 100 })
|
||||
])
|
||||
dispatchOptions.value = dispatchRes || []
|
||||
productionTasks.value = (tasksRes?.list || []).map((task: Record<string, any>) => ({
|
||||
taskId: task.id,
|
||||
taskNo: task.taskNo,
|
||||
taskName: task.taskName
|
||||
}))
|
||||
if (productionTasks.value.length === 1) {
|
||||
form.taskId = productionTasks.value[0].taskId
|
||||
}
|
||||
} finally {
|
||||
optionsLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
function resetForm() {
|
||||
form.cellProductId = ''
|
||||
form.taskId = ''
|
||||
form.stepOutputId = ''
|
||||
form.remark = ''
|
||||
formRef.value?.clearValidate()
|
||||
}
|
||||
@@ -157,10 +224,8 @@
|
||||
await formRef.value?.validate()
|
||||
submitting.value = true
|
||||
try {
|
||||
const selected = productOptions.value.find((o) => o.id === form.cellProductId)
|
||||
await fetchCreateQcFromProduction(props.workOrderRow.id, {
|
||||
cellProductId: form.cellProductId,
|
||||
productionTaskId: selected?.taskId,
|
||||
productionStepOutputId: form.stepOutputId,
|
||||
remark: form.remark || undefined
|
||||
})
|
||||
ElMessage.success(
|
||||
|
||||
@@ -0,0 +1,220 @@
|
||||
<!-- 生产任务 · 工艺步骤派发 / 调整派发 -->
|
||||
<template>
|
||||
<el-dialog
|
||||
v-model="dialogVisible"
|
||||
:title="dialogTitle"
|
||||
width="860px"
|
||||
class="dialog-form-layout dispatch-step-dialog"
|
||||
align-center
|
||||
modal-class="protocol-dialog-mask"
|
||||
append-to-body
|
||||
destroy-on-close
|
||||
:close-on-click-modal="false"
|
||||
@close="handleClose"
|
||||
>
|
||||
<p v-if="taskName" class="dispatch-step-dialog__task-name">任务:{{ taskName }}</p>
|
||||
<el-table v-loading="loading" :data="rows" stripe class="list-table dispatch-step-table">
|
||||
<el-table-column label="序号" min-width="64" align="center">
|
||||
<template #default="{ $index }">{{ $index + 1 }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="processName" label="工序名称" min-width="140" show-overflow-tooltip />
|
||||
<el-table-column label="负责人" min-width="220">
|
||||
<template #default="{ row }">
|
||||
<el-select
|
||||
v-model="row.assigneeUserIds"
|
||||
multiple
|
||||
filterable
|
||||
remote
|
||||
reserve-keyword
|
||||
collapse-tags
|
||||
collapse-tags-tooltip
|
||||
placeholder="选择负责人"
|
||||
style="width: 100%"
|
||||
:loading="userLoading"
|
||||
:remote-method="remoteSearchUsers"
|
||||
@visible-change="onUserSelectVisible"
|
||||
>
|
||||
<el-option
|
||||
v-for="u in mergedUserOptions(row)"
|
||||
:key="u.id"
|
||||
:label="`${u.nickName}(${u.userNo})`"
|
||||
:value="u.id"
|
||||
/>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="计划开始时间" min-width="200">
|
||||
<template #default="{ row }">
|
||||
<el-date-picker
|
||||
v-model="row.plannedStartTime"
|
||||
type="datetime"
|
||||
placeholder="可选"
|
||||
format="YYYY-MM-DD HH:mm"
|
||||
value-format="YYYY-MM-DDTHH:mm:00"
|
||||
style="width: 100%"
|
||||
clearable
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<p class="form-label-tip dispatch-step-dialog__hint">至少为一个步骤指定负责人;未派发的步骤仅管理员可见。</p>
|
||||
<template #footer>
|
||||
<el-button class="btn-ghost" @click="handleClose">
|
||||
<el-icon><Close /></el-icon>取消
|
||||
</el-button>
|
||||
<el-button class="btn-main" type="primary" :loading="submitting" @click="handleSubmit">
|
||||
<el-icon><Check /></el-icon>确定
|
||||
</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { computed, ref, watch } from 'vue'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { Close, Check } from '@element-plus/icons-vue'
|
||||
import { fetchUserList } from '@/api/admin'
|
||||
import { fetchProductionTaskDetail, fetchDispatchProductionTaskSteps } from '@/api/production-task'
|
||||
|
||||
defineOptions({ name: 'DispatchStepDialog' })
|
||||
|
||||
const props = defineProps<{
|
||||
visible: boolean
|
||||
taskId: string
|
||||
taskName?: string
|
||||
}>()
|
||||
|
||||
const emit = defineEmits<{
|
||||
(e: 'update:visible', val: boolean): void
|
||||
(e: 'success'): void
|
||||
}>()
|
||||
|
||||
const dialogVisible = computed({
|
||||
get: () => props.visible,
|
||||
set: (val) => emit('update:visible', val)
|
||||
})
|
||||
|
||||
const dialogTitle = computed(() => (hasAnyAssignee.value ? '调整步骤派发' : '步骤派发'))
|
||||
|
||||
const loading = ref(false)
|
||||
const submitting = ref(false)
|
||||
const userLoading = ref(false)
|
||||
const userOptions = ref<Api.User.UserItem[]>([])
|
||||
|
||||
type StepDispatchRow = {
|
||||
stepId: string
|
||||
processName: string
|
||||
assigneeUserIds: string[]
|
||||
plannedStartTime: string | null
|
||||
presetUsers: Api.User.UserItem[]
|
||||
}
|
||||
|
||||
const rows = ref<StepDispatchRow[]>([])
|
||||
const hasAnyAssignee = ref(false)
|
||||
|
||||
function mergedUserOptions(row: StepDispatchRow) {
|
||||
const map = new Map<string, Api.User.UserItem>()
|
||||
for (const u of userOptions.value) map.set(u.id, u)
|
||||
for (const u of row.presetUsers) map.set(u.id, u)
|
||||
return [...map.values()]
|
||||
}
|
||||
|
||||
async function remoteSearchUsers(query: string) {
|
||||
userLoading.value = true
|
||||
try {
|
||||
const res = await fetchUserList({
|
||||
page: 1,
|
||||
pageSize: 50,
|
||||
keyword: query?.trim() || undefined,
|
||||
status: '1'
|
||||
})
|
||||
userOptions.value = res.list || []
|
||||
} catch {
|
||||
userOptions.value = []
|
||||
} finally {
|
||||
userLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
function onUserSelectVisible(visible: boolean) {
|
||||
if (visible) void remoteSearchUsers('')
|
||||
}
|
||||
|
||||
async function loadSteps() {
|
||||
if (!props.taskId) {
|
||||
rows.value = []
|
||||
return
|
||||
}
|
||||
loading.value = true
|
||||
try {
|
||||
const detail = await fetchProductionTaskDetail(props.taskId)
|
||||
const steps = (detail?.steps || []) as Record<string, any>[]
|
||||
hasAnyAssignee.value = steps.some((s) => (s.assigneeUserIds || []).length > 0)
|
||||
rows.value = steps.map((s) => ({
|
||||
stepId: s.id,
|
||||
processName: s.processName || '未命名步骤',
|
||||
assigneeUserIds: [...(s.assigneeUserIds || [])],
|
||||
plannedStartTime: s.plannedStartTime || null,
|
||||
presetUsers: (s.assignees || []).map((a: Record<string, any>) => ({
|
||||
id: a.userId,
|
||||
nickName: a.nickName,
|
||||
userNo: a.userNo
|
||||
})) as Api.User.UserItem[]
|
||||
}))
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
function handleClose() {
|
||||
dialogVisible.value = false
|
||||
rows.value = []
|
||||
}
|
||||
|
||||
async function handleSubmit() {
|
||||
if (!props.taskId) return
|
||||
const payload = rows.value
|
||||
.filter((r) => r.assigneeUserIds.length > 0)
|
||||
.map((r) => ({
|
||||
stepId: r.stepId,
|
||||
assigneeUserIds: r.assigneeUserIds,
|
||||
plannedStartTime: r.plannedStartTime
|
||||
}))
|
||||
if (!payload.length) {
|
||||
ElMessage.warning('请至少为一个步骤指定负责人')
|
||||
return
|
||||
}
|
||||
submitting.value = true
|
||||
try {
|
||||
await fetchDispatchProductionTaskSteps(props.taskId, { steps: payload })
|
||||
ElMessage.success('步骤派发成功')
|
||||
emit('success')
|
||||
handleClose()
|
||||
} finally {
|
||||
submitting.value = false
|
||||
}
|
||||
}
|
||||
|
||||
watch(
|
||||
() => props.visible,
|
||||
(val) => {
|
||||
if (val) {
|
||||
void remoteSearchUsers('')
|
||||
void loadSteps()
|
||||
}
|
||||
}
|
||||
)
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.dispatch-step-dialog__task-name {
|
||||
margin: 0 0 12px;
|
||||
font-size: 14px;
|
||||
color: var(--mint-text-muted, #64748b);
|
||||
}
|
||||
|
||||
.dispatch-step-dialog__hint {
|
||||
display: block;
|
||||
margin-top: 12px;
|
||||
}
|
||||
</style>
|
||||
@@ -33,27 +33,6 @@
|
||||
<el-form-item label="任务名称" prop="taskName" class="form-col-span-2">
|
||||
<el-input v-model="form.taskName" placeholder="请输入任务名称" maxlength="200" />
|
||||
</el-form-item>
|
||||
<el-form-item label="负责人" prop="assigneeUserId" class="form-col-span-2">
|
||||
<el-select
|
||||
v-model="form.assigneeUserId"
|
||||
filterable
|
||||
remote
|
||||
reserve-keyword
|
||||
clearable
|
||||
placeholder="输入姓名检索负责人"
|
||||
style="width: 100%"
|
||||
:loading="userLoading"
|
||||
:remote-method="remoteSearchUsers"
|
||||
@visible-change="onUserSelectVisible"
|
||||
>
|
||||
<el-option
|
||||
v-for="u in userOptions"
|
||||
:key="u.id"
|
||||
:label="`${u.nickName}(${u.userNo})`"
|
||||
:value="u.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="工艺路线" class="form-col-span-2">
|
||||
<template #label
|
||||
>工艺路线<span class="form-label-tip">可选,不选则从零创建工艺过程</span></template
|
||||
@@ -228,7 +207,6 @@
|
||||
import { Rank, Plus, CopyDocument, Delete, Close, Check } from '@element-plus/icons-vue'
|
||||
import { VueDraggable as draggable } from 'vue-draggable-plus'
|
||||
import { fetchCreateProductionTask } from '@/api/production-task'
|
||||
import { fetchUserList } from '@/api/admin'
|
||||
import { productionTaskTypeForWorkOrder } from '@/utils/production-labels'
|
||||
import { fetchProcessRouteList } from '@/api/production'
|
||||
import type { FormInstance, FormRules } from 'element-plus'
|
||||
@@ -247,6 +225,7 @@
|
||||
const emit = defineEmits<{
|
||||
(e: 'update:visible', val: boolean): void
|
||||
(e: 'success'): void
|
||||
(e: 'needStepDispatch', payload: { taskId: string; taskName: string }): void
|
||||
}>()
|
||||
|
||||
const dialogVisible = computed({
|
||||
@@ -260,19 +239,15 @@
|
||||
|
||||
const formRef = ref<FormInstance>()
|
||||
const routeOptions = ref<any[]>([])
|
||||
const userOptions = ref<Api.User.UserItem[]>([])
|
||||
const userLoading = ref(false)
|
||||
const routeLoading = ref(false)
|
||||
const form = reactive({
|
||||
taskName: '',
|
||||
assigneeUserId: '',
|
||||
routeId: '',
|
||||
description: '',
|
||||
remark: ''
|
||||
})
|
||||
const rules: FormRules = {
|
||||
taskName: [{ required: true, message: '请输入任务名称', trigger: 'blur' }],
|
||||
assigneeUserId: [{ required: true, message: '请选择负责人', trigger: 'change' }]
|
||||
taskName: [{ required: true, message: '请输入任务名称', trigger: 'blur' }]
|
||||
}
|
||||
|
||||
const editor = useTaskStepEditor()
|
||||
@@ -297,27 +272,6 @@
|
||||
return editor.initEditor(taskId, options)
|
||||
}
|
||||
|
||||
async function remoteSearchUsers(query: string) {
|
||||
userLoading.value = true
|
||||
try {
|
||||
const res = await fetchUserList({
|
||||
page: 1,
|
||||
pageSize: 50,
|
||||
keyword: query?.trim() || undefined,
|
||||
status: '1'
|
||||
})
|
||||
userOptions.value = res.list || []
|
||||
} catch {
|
||||
userOptions.value = []
|
||||
} finally {
|
||||
userLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
function onUserSelectVisible(visible: boolean) {
|
||||
if (visible) void remoteSearchUsers('')
|
||||
}
|
||||
|
||||
async function remoteSearchRoutes(query: string) {
|
||||
routeLoading.value = true
|
||||
try {
|
||||
@@ -344,7 +298,6 @@
|
||||
phase.value = 'form'
|
||||
createdTaskName.value = ''
|
||||
form.taskName = ''
|
||||
form.assigneeUserId = ''
|
||||
form.routeId = ''
|
||||
form.description = ''
|
||||
form.remark = ''
|
||||
@@ -361,7 +314,6 @@
|
||||
work_order_id: props.workOrderRow.id,
|
||||
task_type: productionTaskTypeForWorkOrder(props.workOrderRow.workOrderType),
|
||||
task_name: form.taskName,
|
||||
assigneeUserId: form.assigneeUserId,
|
||||
route_id: form.routeId,
|
||||
description: form.description || undefined,
|
||||
remark: form.remark || undefined
|
||||
@@ -379,6 +331,9 @@
|
||||
} else {
|
||||
ElMessage.success('任务已创建,可编辑步骤')
|
||||
}
|
||||
if (expectSteps && stepCount > 0) {
|
||||
emit('needStepDispatch', { taskId, taskName: form.taskName })
|
||||
}
|
||||
emit('success')
|
||||
} catch {
|
||||
/* global error handling */
|
||||
@@ -399,7 +354,6 @@
|
||||
// 新建任务:走阶段一表单(已在编辑阶段时不重置,避免生成任务后被 watch 打回表单)
|
||||
phase.value = 'form'
|
||||
form.taskName = ''
|
||||
form.assigneeUserId = ''
|
||||
form.routeId = ''
|
||||
form.description = ''
|
||||
form.remark = ''
|
||||
@@ -410,7 +364,7 @@
|
||||
form.taskName = `${props.workOrderRow.workOrderNo}任务`
|
||||
}
|
||||
void remoteSearchRoutes('')
|
||||
void remoteSearchUsers('')
|
||||
void editor.remoteSearchStepAssigneeUsers('')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+89
-18
@@ -14,7 +14,7 @@
|
||||
@change="(val) => handleCardSelect(row, Boolean(val))"
|
||||
/>
|
||||
<span class="production-work-order-card__index">{{ cardIndex(idx) }}</span>
|
||||
<span class="production-work-order-card__no">{{ row.workOrderNo || '—' }}</span>
|
||||
<span class="production-work-order-card__no">{{ cardTitleLabel(row) }}</span>
|
||||
<el-tag :type="productionWoStatusTag(row.workOrderStatus).type" size="small">
|
||||
{{ productionWoStatusTag(row.workOrderStatus).label }}
|
||||
</el-tag>
|
||||
@@ -174,18 +174,38 @@
|
||||
</section>
|
||||
</div>
|
||||
</header>
|
||||
<QcWorkOrderProtocolPaymentPanel
|
||||
v-if="showProtocolFeeSummary(row)"
|
||||
:summary="row.paymentSummary"
|
||||
compact
|
||||
class="production-work-order-card__fee-in-head"
|
||||
/>
|
||||
<QcWorkOrderFeeSummaryBar
|
||||
v-if="showOutboundFeeSummary(row)"
|
||||
variant="basic-experiment"
|
||||
:fee-summary="row.feeSummary"
|
||||
class="production-work-order-card__fee-in-head"
|
||||
/>
|
||||
<template v-if="hasFeeInfo(row)">
|
||||
<div
|
||||
v-if="isMineMode && !isFeeExpanded(row.id)"
|
||||
class="production-work-order-card__fee-toggle-bar"
|
||||
>
|
||||
<el-button class="btn-ghost" @click="toggleFeeExpand(row.id)">
|
||||
<el-icon><ArrowDown /></el-icon>展开费用
|
||||
</el-button>
|
||||
</div>
|
||||
<template v-if="!isMineMode || isFeeExpanded(row.id)">
|
||||
<QcWorkOrderProtocolPaymentPanel
|
||||
v-if="showProtocolFeeSummary(row)"
|
||||
:summary="row.paymentSummary"
|
||||
compact
|
||||
class="production-work-order-card__fee-in-head"
|
||||
/>
|
||||
<QcWorkOrderFeeSummaryBar
|
||||
v-if="showOutboundFeeSummary(row)"
|
||||
variant="basic-experiment"
|
||||
:fee-summary="row.feeSummary"
|
||||
class="production-work-order-card__fee-in-head"
|
||||
/>
|
||||
</template>
|
||||
<div
|
||||
v-if="isMineMode && isFeeExpanded(row.id)"
|
||||
class="production-work-order-card__fee-toggle-bar production-work-order-card__fee-toggle-bar--after-fee"
|
||||
>
|
||||
<el-button class="btn-ghost" @click="toggleFeeExpand(row.id)">
|
||||
<el-icon><ArrowUp /></el-icon>收起
|
||||
</el-button>
|
||||
</div>
|
||||
</template>
|
||||
<section class="production-work-order-card__tasks">
|
||||
<WorkOrderTaskSubList
|
||||
embedded
|
||||
@@ -218,8 +238,8 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { computed } from 'vue'
|
||||
import { View, Position, Document, Check, More, EditPen, Delete } from '@element-plus/icons-vue'
|
||||
import { computed, ref } from 'vue'
|
||||
import { View, Position, Document, Check, More, EditPen, Delete, ArrowDown, ArrowUp } from '@element-plus/icons-vue'
|
||||
import type { ProductionWorkOrderItem } from '@/api/production-work-order'
|
||||
import type { OutboundQcDetailProduct } from '@/api/qc-work-order'
|
||||
import type { ProductionWorkOrderCardMetaConfig } from '@/utils/production-work-order-card-meta'
|
||||
@@ -256,12 +276,42 @@
|
||||
|
||||
const isMineMode = computed(() => props.pageMode === 'mine')
|
||||
|
||||
const expandedFeeIds = ref<Set<string>>(new Set())
|
||||
|
||||
function isFeeExpanded(id: string) {
|
||||
return expandedFeeIds.value.has(id)
|
||||
}
|
||||
|
||||
function toggleFeeExpand(id: string) {
|
||||
const next = new Set(expandedFeeIds.value)
|
||||
if (next.has(id)) {
|
||||
next.delete(id)
|
||||
} else {
|
||||
next.add(id)
|
||||
}
|
||||
expandedFeeIds.value = next
|
||||
}
|
||||
|
||||
const cardMeta = computed(
|
||||
() =>
|
||||
props.cardMetaConfig ??
|
||||
getCardMetaConfigForLegacyTab(props.activeTypeTab || 'inbound')
|
||||
)
|
||||
|
||||
const INBOUND_SAMPLE_TITLE_TAB_KEYS = new Set([
|
||||
'inbound_cell_storage',
|
||||
'inbound_research_donation'
|
||||
])
|
||||
|
||||
function cardTitleLabel(row: ProductionWorkOrderItem) {
|
||||
if (INBOUND_SAMPLE_TITLE_TAB_KEYS.has(cardMeta.value.tabKey)) {
|
||||
const lab = (row.labStorageCode || '').trim() || '—'
|
||||
const sample = (row.sampleCode || '').trim() || '—'
|
||||
return `${lab} - ${sample}`
|
||||
}
|
||||
return row.workOrderNo || '—'
|
||||
}
|
||||
|
||||
const emit = defineEmits<{
|
||||
view: [row: ProductionWorkOrderItem]
|
||||
dispatch: [row: ProductionWorkOrderItem]
|
||||
@@ -293,6 +343,10 @@
|
||||
return cardMeta.value.showOutboundFeeSummary && !!row.feeSummary
|
||||
}
|
||||
|
||||
function hasFeeInfo(row: ProductionWorkOrderItem) {
|
||||
return showProtocolFeeSummary(row) || showOutboundFeeSummary(row)
|
||||
}
|
||||
|
||||
function cellProducts(row: ProductionWorkOrderItem): OutboundQcDetailProduct[] {
|
||||
return row.products?.length ? row.products : []
|
||||
}
|
||||
@@ -331,9 +385,9 @@
|
||||
|
||||
function dispatchQcTooltip(row: ProductionWorkOrderItem) {
|
||||
if (!cardMeta.value.allowDispatchQc) return ''
|
||||
if (row.workOrderStatus === 'dpz') return '请先派发并完成生产任务,录入输出细胞产品后再派发质检'
|
||||
if (row.workOrderStatus === 'dpz') return '请先派发生产任务,并在步骤中录入有效物产出及条码后再派发质检'
|
||||
if (row.workOrderStatus === 'yzf') return '已作废工单不可派发质检'
|
||||
return '请先完成生产任务并录入输出细胞产品'
|
||||
return '请先在生产任务步骤中录入类型为有效物且含条码的产出物'
|
||||
}
|
||||
|
||||
function canComplete(row: ProductionWorkOrderItem) {
|
||||
@@ -447,12 +501,28 @@
|
||||
|
||||
.production-work-order-card__no {
|
||||
font-size: 15px;
|
||||
font-weight: 600;
|
||||
font-weight: 700;
|
||||
color: #1e293b;
|
||||
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.production-work-order-card__fee-toggle-bar {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
gap: 8px;
|
||||
padding: 8px 16px;
|
||||
border-top: 1px solid #e2e8f0;
|
||||
background: #fff;
|
||||
|
||||
&--after-fee {
|
||||
border-top: none;
|
||||
border-bottom: 1px solid #e2e8f0;
|
||||
}
|
||||
}
|
||||
|
||||
.production-work-order-card__meta {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
|
||||
@@ -476,6 +546,7 @@
|
||||
dd {
|
||||
margin: 0;
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
line-height: 1.4;
|
||||
color: #334155;
|
||||
word-break: break-word;
|
||||
|
||||
@@ -13,7 +13,11 @@
|
||||
{{ editor.stepStatusTag(editor.selectedStep.value.stepStatus || 'dzx').label }}
|
||||
</el-tag>
|
||||
<el-button
|
||||
v-if="editor.selectedStep.value.stepStatus === 'dzx'"
|
||||
v-if="
|
||||
editor.mode.value === 'execution' &&
|
||||
editor.canEditStep(editor.selectedStep.value) &&
|
||||
editor.selectedStep.value.stepStatus === 'dzx'
|
||||
"
|
||||
class="btn-main task-exec-toolbar-btn"
|
||||
type="primary"
|
||||
:loading="editor.stepActionLoading.value"
|
||||
@@ -23,7 +27,11 @@
|
||||
<el-icon><VideoPlay /></el-icon>执行此步骤
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="editor.selectedStep.value.stepStatus === 'jxz'"
|
||||
v-if="
|
||||
editor.mode.value === 'execution' &&
|
||||
editor.canEditStep(editor.selectedStep.value) &&
|
||||
editor.selectedStep.value.stepStatus === 'jxz'
|
||||
"
|
||||
class="btn-main task-exec-toolbar-btn"
|
||||
type="success"
|
||||
:loading="editor.stepActionLoading.value"
|
||||
@@ -34,6 +42,10 @@
|
||||
</el-button>
|
||||
</template>
|
||||
<el-button
|
||||
v-if="
|
||||
editor.canEditStep(editor.selectedStep.value) ||
|
||||
(editor.canEditStepDispatch() && !readonly)
|
||||
"
|
||||
class="btn-main task-exec-toolbar-btn"
|
||||
type="primary"
|
||||
:loading="editor.manualSaveLoading.value"
|
||||
@@ -100,6 +112,81 @@
|
||||
:disabled="readonly"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-if="editor.canEditStepDispatch() && !readonly"
|
||||
label="负责人"
|
||||
class="step-form-col-half"
|
||||
>
|
||||
<el-select
|
||||
v-model="editor.selectedStep.value.assigneeUserIds"
|
||||
multiple
|
||||
filterable
|
||||
remote
|
||||
reserve-keyword
|
||||
collapse-tags
|
||||
collapse-tags-tooltip
|
||||
placeholder="选择负责人(可多选)"
|
||||
style="width: 100%"
|
||||
:loading="editor.stepAssigneeUserOptionsLoading.value"
|
||||
:remote-method="editor.remoteSearchStepAssigneeUsers"
|
||||
@visible-change="editor.onStepAssigneeSelectVisible"
|
||||
>
|
||||
<el-option
|
||||
v-for="u in editor.mergedStepAssigneeUserOptions(editor.selectedStep.value)"
|
||||
:key="u.id"
|
||||
:label="`${u.nickName}(${u.userNo})`"
|
||||
:value="u.id"
|
||||
/>
|
||||
</el-select>
|
||||
<p
|
||||
v-if="!(editor.selectedStep.value.assigneeUserIds || []).length"
|
||||
class="form-tip"
|
||||
>
|
||||
未派发;保存后可在本处或「步骤派发」中指定负责人
|
||||
</p>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-else-if="editor.mode.value === 'edit' || editor.mode.value === 'execution'"
|
||||
label="负责人"
|
||||
class="step-form-col-half"
|
||||
>
|
||||
<template v-if="(editor.selectedStep.value.assignees || []).length">
|
||||
<el-tag
|
||||
v-for="a in editor.selectedStep.value.assignees"
|
||||
:key="a.userId"
|
||||
size="small"
|
||||
class="step-assignee-readonly-tag"
|
||||
>
|
||||
{{ a.nickName || a.userNo || a.userId }}
|
||||
</el-tag>
|
||||
</template>
|
||||
<span v-else class="form-tip">未派发</span>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-if="editor.canEditStepDispatch() && !readonly"
|
||||
label="计划开始时间"
|
||||
class="step-form-col-half"
|
||||
>
|
||||
<template #label
|
||||
>计划开始时间<span class="form-label-tip">仅展示与排序,不限制执行</span></template
|
||||
>
|
||||
<el-date-picker
|
||||
v-model="editor.selectedStep.value.plannedStartTime"
|
||||
type="datetime"
|
||||
placeholder="可选"
|
||||
format="YYYY-MM-DD HH:mm"
|
||||
value-format="YYYY-MM-DDTHH:mm:00"
|
||||
style="width: 100%"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-else-if="editor.mode.value === 'edit' || editor.mode.value === 'execution'"
|
||||
label="计划开始时间"
|
||||
class="step-form-col-half"
|
||||
>
|
||||
<span>{{ editor.selectedStep.value.plannedStartTime || '—' }}</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="描述" class="step-form-col-half">
|
||||
<el-input
|
||||
v-model="editor.selectedStep.value.description"
|
||||
@@ -946,6 +1033,10 @@
|
||||
grid-column: 1 / -1;
|
||||
}
|
||||
|
||||
.step-assignee-readonly-tag {
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
.step-sop-attachment-row {
|
||||
margin-top: -4px;
|
||||
|
||||
|
||||
@@ -155,7 +155,7 @@
|
||||
<div class="execution-step-list-header">
|
||||
<h3>工序步骤</h3>
|
||||
<span class="execution-progress-badge"
|
||||
>{{ editor.completedStepCount.value }}/{{ editor.stepList.value.length }}</span
|
||||
>{{ editor.completedStepCount.value }}/{{ editor.executionStepList.value.length }}</span
|
||||
>
|
||||
</div>
|
||||
<div class="execution-step-list-body">
|
||||
@@ -227,12 +227,13 @@
|
||||
@end="editor.onStepDragEnd"
|
||||
>
|
||||
<div
|
||||
v-for="(element, index) in editor.stepList.value"
|
||||
v-for="(element, index) in editor.executionStepList.value"
|
||||
:key="element.id"
|
||||
class="route-config-step-card"
|
||||
:class="{
|
||||
'is-active': editor.selectedStepId.value === element.id,
|
||||
'is-done': element.stepStatus === 'ywc'
|
||||
'is-done': element.stepStatus === 'ywc',
|
||||
'is-readonly': !editor.canEditStep(element)
|
||||
}"
|
||||
@click="editor.selectStep(element)"
|
||||
>
|
||||
@@ -277,7 +278,7 @@
|
||||
</div>
|
||||
</draggable>
|
||||
|
||||
<div v-if="!editor.stepList.value.length" class="execution-step-list-empty">
|
||||
<div v-if="!editor.executionStepList.value.length" class="execution-step-list-empty">
|
||||
<el-icon :size="32" color="#a8d4c4"><Plus /></el-icon>
|
||||
<p>从左侧拖拽工序到此处,添加任务步骤</p>
|
||||
</div>
|
||||
@@ -716,6 +717,10 @@
|
||||
.route-config-step-card.is-done {
|
||||
opacity: 0.6;
|
||||
}
|
||||
.route-config-step-card.is-readonly:not(.is-active) {
|
||||
opacity: 0.72;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/* 右侧详情面板 */
|
||||
.execution-detail-panel {
|
||||
|
||||
@@ -96,11 +96,8 @@
|
||||
<el-dropdown-item v-if="canEnterExecution(row)" command="view">
|
||||
<el-icon><View /></el-icon>查看
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item v-if="canForwardTask(row)" command="forward">
|
||||
<el-icon><Share /></el-icon>转发任务
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item v-if="canReassignTask(row)" command="reassign">
|
||||
<el-icon><User /></el-icon>改派负责人
|
||||
<el-dropdown-item v-if="canDispatchSteps(row)" command="stepDispatch">
|
||||
<el-icon><Position /></el-icon>步骤派发
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item v-if="canEditTask(row)" command="editInfo">
|
||||
<el-icon><EditPen /></el-icon>编辑信息
|
||||
@@ -158,24 +155,24 @@
|
||||
:task-name="executionTaskName"
|
||||
:readonly="executionReadonly"
|
||||
:operate-scope="operateScope"
|
||||
:allow-forward="canForwardInDialog"
|
||||
:allow-forward="false"
|
||||
append-to-body
|
||||
@success="handleTaskMutationSuccess"
|
||||
/>
|
||||
|
||||
<ForwardTaskDialog
|
||||
v-model:visible="forwardVisible"
|
||||
:task-id="forwardTaskId"
|
||||
:mode="forwardMode"
|
||||
:operate-scope="operateScope"
|
||||
@success="handleTaskMutationSuccess"
|
||||
/>
|
||||
|
||||
<DispatchTaskDialog
|
||||
v-if="workOrder"
|
||||
v-model:visible="dispatchVisible"
|
||||
:work-order-row="workOrder"
|
||||
@success="handleTaskMutationSuccess"
|
||||
@need-step-dispatch="handleNeedStepDispatch"
|
||||
/>
|
||||
|
||||
<DispatchStepDialog
|
||||
v-model:visible="stepDispatchVisible"
|
||||
:task-id="stepDispatchTaskId"
|
||||
:task-name="stepDispatchTaskName"
|
||||
@success="handleTaskMutationSuccess"
|
||||
/>
|
||||
|
||||
<DispatchTaskDialog
|
||||
@@ -204,9 +201,7 @@
|
||||
Position,
|
||||
EditPen,
|
||||
More,
|
||||
Delete,
|
||||
Share,
|
||||
User
|
||||
Delete
|
||||
} from '@element-plus/icons-vue'
|
||||
import {
|
||||
fetchProductionTaskList,
|
||||
@@ -215,8 +210,8 @@
|
||||
type ProductionTaskOperateScope
|
||||
} from '@/api/production-task'
|
||||
import TaskExecutionDialog from './TaskExecutionDialog.vue'
|
||||
import ForwardTaskDialog from './ForwardTaskDialog.vue'
|
||||
import DispatchTaskDialog from './DispatchTaskDialog.vue'
|
||||
import DispatchStepDialog from './DispatchStepDialog.vue'
|
||||
import EditTaskInfoDialog from './EditTaskInfoDialog.vue'
|
||||
import { useUserStore } from '@/store/modules/user'
|
||||
import {
|
||||
@@ -274,7 +269,10 @@
|
||||
|
||||
function isCurrentAssignee(row: Record<string, any>) {
|
||||
const uid = String(userStore.info?.id || userStore.info?.userId || '').trim()
|
||||
return uid && String(row.currentAssigneeUserId || '') === uid
|
||||
if (!uid) return false
|
||||
if (String(row.currentAssigneeUserId || '') === uid) return true
|
||||
if (isMineMode.value && props.listMode !== 'mine-history' && !row.handoverTime) return true
|
||||
return false
|
||||
}
|
||||
|
||||
function isMineHistoryRow(row: Record<string, any>) {
|
||||
@@ -290,14 +288,17 @@
|
||||
return row.taskStatus === 'dpz' || row.taskStatus === 'jxz'
|
||||
}
|
||||
|
||||
function canForwardTask(row: Record<string, any>) {
|
||||
if (isMineHistoryRow(row)) return false
|
||||
if (isMineMode.value) return isCurrentAssignee(row)
|
||||
return operateScope.value === 'manage'
|
||||
function canForwardTask(_row: Record<string, any>) {
|
||||
return false
|
||||
}
|
||||
|
||||
function canReassignTask(row: Record<string, any>) {
|
||||
return !isMineMode.value && operateScope.value === 'manage'
|
||||
function canReassignTask(_row: Record<string, any>) {
|
||||
return false
|
||||
}
|
||||
|
||||
function canDispatchSteps(row: Record<string, any>) {
|
||||
if (isMineMode.value) return false
|
||||
return row.taskStatus === 'dpz' || row.taskStatus === 'jxz'
|
||||
}
|
||||
|
||||
function canEditTask(row: Record<string, any>) {
|
||||
@@ -313,7 +314,7 @@
|
||||
|
||||
function hasMoreTaskActions(row: Record<string, any>) {
|
||||
if (canEnterExecution(row)) return true
|
||||
return canEditTask(row) || canDeleteTask(row)
|
||||
return canEditTask(row) || canDeleteTask(row) || canDispatchSteps(row)
|
||||
}
|
||||
|
||||
async function loadData() {
|
||||
@@ -365,17 +366,31 @@
|
||||
|
||||
const dispatchVisible = ref(false)
|
||||
|
||||
const stepDispatchVisible = ref(false)
|
||||
const stepDispatchTaskId = ref('')
|
||||
const stepDispatchTaskName = ref('')
|
||||
|
||||
function handleNeedStepDispatch(payload: { taskId: string; taskName: string }) {
|
||||
stepDispatchTaskId.value = payload.taskId
|
||||
stepDispatchTaskName.value = payload.taskName
|
||||
stepDispatchVisible.value = true
|
||||
}
|
||||
|
||||
function openStepDispatch(row: Record<string, any>) {
|
||||
stepDispatchTaskId.value = row.id
|
||||
stepDispatchTaskName.value = row.taskName || ''
|
||||
stepDispatchVisible.value = true
|
||||
}
|
||||
|
||||
const executionDialogVisible = ref(false)
|
||||
const executionTaskId = ref('')
|
||||
const executionTaskName = ref('')
|
||||
const executionReadonly = ref(false)
|
||||
const canForwardInDialog = ref(false)
|
||||
|
||||
function handleEnterExecution(row: Record<string, any>) {
|
||||
executionTaskId.value = row.id
|
||||
executionTaskName.value = row.taskName || ''
|
||||
executionReadonly.value = false
|
||||
canForwardInDialog.value = canForwardTask(row)
|
||||
executionDialogVisible.value = true
|
||||
}
|
||||
|
||||
@@ -383,14 +398,9 @@
|
||||
executionTaskId.value = row.id
|
||||
executionTaskName.value = row.taskName || ''
|
||||
executionReadonly.value = true
|
||||
canForwardInDialog.value = false
|
||||
executionDialogVisible.value = true
|
||||
}
|
||||
|
||||
const forwardVisible = ref(false)
|
||||
const forwardTaskId = ref('')
|
||||
const forwardMode = ref<'forward' | 'reassign'>('forward')
|
||||
|
||||
const editInfoVisible = ref(false)
|
||||
const editInfoTaskId = ref('')
|
||||
|
||||
@@ -412,15 +422,8 @@
|
||||
editRouteTaskName.value = row.taskName || ''
|
||||
editRouteVisible.value = true
|
||||
break
|
||||
case 'forward':
|
||||
forwardTaskId.value = row.id
|
||||
forwardMode.value = 'forward'
|
||||
forwardVisible.value = true
|
||||
break
|
||||
case 'reassign':
|
||||
forwardTaskId.value = row.id
|
||||
forwardMode.value = 'reassign'
|
||||
forwardVisible.value = true
|
||||
case 'stepDispatch':
|
||||
openStepDispatch(row)
|
||||
break
|
||||
case 'delete':
|
||||
handleDelete(row)
|
||||
|
||||
@@ -72,6 +72,14 @@
|
||||
v-model:visible="dispatchVisible"
|
||||
:work-order-row="dispatchRow"
|
||||
@success="refreshActiveTab"
|
||||
@need-step-dispatch="handleNeedStepDispatch"
|
||||
/>
|
||||
|
||||
<DispatchStepDialog
|
||||
v-model:visible="stepDispatchVisible"
|
||||
:task-id="stepDispatchTaskId"
|
||||
:task-name="stepDispatchTaskName"
|
||||
@success="refreshActiveTab"
|
||||
/>
|
||||
|
||||
<DispatchQcWorkOrderDialog
|
||||
@@ -117,6 +125,7 @@
|
||||
} from '@/utils/production-work-order-tabs'
|
||||
import ProductionWorkOrderTabPanel from './tabs/ProductionWorkOrderTabPanel.vue'
|
||||
import DispatchTaskDialog from './DispatchTaskDialog.vue'
|
||||
import DispatchStepDialog from './DispatchStepDialog.vue'
|
||||
import DispatchQcWorkOrderDialog from './DispatchQcWorkOrderDialog.vue'
|
||||
import WorkOrderRemarkDialog from '@/components/business/work-order-remark-dialog/index.vue'
|
||||
import SampleReceptionDialog from './SampleReceptionDialog.vue'
|
||||
@@ -210,6 +219,16 @@
|
||||
|
||||
const dispatchVisible = ref(false)
|
||||
const dispatchRow = ref<ProductionWorkOrderItem | null>(null)
|
||||
const stepDispatchVisible = ref(false)
|
||||
const stepDispatchTaskId = ref('')
|
||||
const stepDispatchTaskName = ref('')
|
||||
|
||||
function handleNeedStepDispatch(payload: { taskId: string; taskName: string }) {
|
||||
stepDispatchTaskId.value = payload.taskId
|
||||
stepDispatchTaskName.value = payload.taskName
|
||||
stepDispatchVisible.value = true
|
||||
}
|
||||
|
||||
function handleOpenDispatch(row: ProductionWorkOrderItem) {
|
||||
dispatchRow.value = row
|
||||
dispatchVisible.value = true
|
||||
|
||||
@@ -13,8 +13,10 @@ import {
|
||||
fetchUpdateProductionTaskStatus,
|
||||
fetchUpdateProductionTask,
|
||||
fetchSetTaskInputs,
|
||||
fetchSetTaskOutputs
|
||||
fetchSetTaskOutputs,
|
||||
fetchDispatchProductionTaskSteps
|
||||
} from '@/api/production-task'
|
||||
import { fetchUserList } from '@/api/admin'
|
||||
import {
|
||||
fetchAllProcesses,
|
||||
fetchAllProcessCategories,
|
||||
@@ -37,6 +39,7 @@ import {
|
||||
} from '@/api/production-material'
|
||||
import type { FinanceAttachmentItem } from '@/components/business/protocol-finance-confirm-fields/finance-attachments'
|
||||
import { financeAttachmentsToUrlString } from '@/components/business/protocol-finance-confirm-fields/finance-attachments'
|
||||
import { useUserStore } from '@/store/modules/user'
|
||||
|
||||
// ── helpers ──────────────────────────────────────────────────────────
|
||||
function parseTaskAttachmentsFromUrls(urls: string): FinanceAttachmentItem[] {
|
||||
@@ -57,9 +60,20 @@ function fromApiFlag(val: boolean | number | string | undefined): boolean {
|
||||
return val === true || val === 1 || val === '1'
|
||||
}
|
||||
function normalizeStepSubTables(step: Record<string, any>) {
|
||||
const assigneeUserIds = (step.assigneeUserIds || []).length
|
||||
? [...step.assigneeUserIds]
|
||||
: (step.assignees || [])
|
||||
.map((a: Record<string, any>) => a.userId)
|
||||
.filter((id: string) => String(id || '').trim())
|
||||
const plannedStartTime = step.plannedStartTime || null
|
||||
return {
|
||||
...step,
|
||||
equipmentIds: parseEquipmentIds(step.equipmentIds || step.equipmentName),
|
||||
assigneeUserIds,
|
||||
assignees: step.assignees || [],
|
||||
plannedStartTime,
|
||||
_snapshotAssigneeUserIds: [...assigneeUserIds],
|
||||
_snapshotPlannedStartTime: plannedStartTime || '',
|
||||
reagents: (step.reagents || []).map((r: Record<string, any>) => ({
|
||||
...r,
|
||||
isKeyMaterial: fromApiFlag(r.isKeyMaterial)
|
||||
@@ -81,11 +95,46 @@ function parseOrderNum(value: unknown): number {
|
||||
|
||||
// ── composable ───────────────────────────────────────────────────────
|
||||
export function useTaskStepEditor() {
|
||||
const userStore = useUserStore()
|
||||
const operateScope = ref<import('@/api/production-task').ProductionTaskOperateScope | undefined>(
|
||||
undefined
|
||||
)
|
||||
const taskId = ref('')
|
||||
const stepList = ref<Record<string, any>[]>([])
|
||||
|
||||
function canEditStep(step: Record<string, any> | null | undefined): boolean {
|
||||
if (!step) return false
|
||||
if (operateScope.value !== 'mine') return true
|
||||
const uid = String(userStore.info?.id || userStore.info?.userId || '').trim()
|
||||
const ids: string[] = step.assigneeUserIds || []
|
||||
if (uid && ids.includes(uid)) return true
|
||||
if (!ids.length && canEditStepOnTaskForMine(uid)) return true
|
||||
return false
|
||||
}
|
||||
|
||||
/** 步骤负责人与计划开始时间是否可在详情中编辑(执行弹窗 manage / mine 均可) */
|
||||
function canEditStepDispatch(): boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
function canEditStepOnTaskForMine(uid: string): boolean {
|
||||
if (!uid) return false
|
||||
if (stepList.value.some((s) => (s.assigneeUserIds || []).includes(uid))) return true
|
||||
const taskAssignee = String(taskDetail.value?.currentAssigneeUserId || '').trim()
|
||||
return taskAssignee === uid
|
||||
}
|
||||
|
||||
const executionStepList = computed(() => {
|
||||
if (operateScope.value !== 'mine') return stepList.value
|
||||
const uid = String(userStore.info?.id || userStore.info?.userId || '').trim()
|
||||
return stepList.value.filter((s) => {
|
||||
const ids: string[] = s.assigneeUserIds || []
|
||||
if (uid && ids.includes(uid)) return true
|
||||
// 未派发步骤:任务内任一步负责人可在执行弹窗中看见并配置(含工艺库新增)
|
||||
if (!ids.length && canEditStepOnTaskForMine(uid)) return true
|
||||
return false
|
||||
})
|
||||
})
|
||||
const selectedStepId = ref('')
|
||||
const stepListLoading = ref(false)
|
||||
const processLibraryLoading = ref(false)
|
||||
@@ -155,6 +204,9 @@ export function useTaskStepEditor() {
|
||||
const sampleCodeOptions = ref<Api.BizSampleCode.SampleCodeItem[]>([])
|
||||
const sampleCodeOptionsLoading = ref(false)
|
||||
|
||||
const stepAssigneeUserOptions = ref<Api.User.UserItem[]>([])
|
||||
const stepAssigneeUserOptionsLoading = ref(false)
|
||||
|
||||
function mapItemUnitOption(u: { unitName?: string; unitCode?: string }) {
|
||||
const name = (u.unitName || '').trim()
|
||||
const code = (u.unitCode || '').trim()
|
||||
@@ -862,6 +914,7 @@ export function useTaskStepEditor() {
|
||||
}
|
||||
}
|
||||
function selectStep(step: Record<string, any>) {
|
||||
ensureStepAssigneeFields(step)
|
||||
selectedStepId.value = step.id
|
||||
selectedVirtualStep.value = null
|
||||
}
|
||||
@@ -901,6 +954,77 @@ export function useTaskStepEditor() {
|
||||
}
|
||||
}
|
||||
|
||||
function stepDispatchChanged(step: Record<string, any>): boolean {
|
||||
const curIds = [...(step.assigneeUserIds || [])].sort().join(',')
|
||||
const snapIds = [...(step._snapshotAssigneeUserIds || [])].sort().join(',')
|
||||
if (curIds !== snapIds) return true
|
||||
const curTime = step.plannedStartTime || ''
|
||||
const snapTime = step._snapshotPlannedStartTime || ''
|
||||
return curTime !== snapTime
|
||||
}
|
||||
|
||||
function mergedStepAssigneeUserOptions(step: Record<string, any> | null) {
|
||||
const map = new Map<string, Api.User.UserItem>()
|
||||
for (const u of stepAssigneeUserOptions.value) map.set(u.id, u)
|
||||
for (const a of step?.assignees || []) {
|
||||
const id = String(a.userId || '').trim()
|
||||
if (!id) continue
|
||||
map.set(id, {
|
||||
id,
|
||||
nickName: a.nickName || '',
|
||||
userNo: a.userNo || ''
|
||||
} as Api.User.UserItem)
|
||||
}
|
||||
return [...map.values()]
|
||||
}
|
||||
|
||||
async function remoteSearchStepAssigneeUsers(query: string) {
|
||||
stepAssigneeUserOptionsLoading.value = true
|
||||
try {
|
||||
const res = await fetchUserList({
|
||||
page: 1,
|
||||
pageSize: 50,
|
||||
keyword: query?.trim() || undefined,
|
||||
status: '1'
|
||||
})
|
||||
stepAssigneeUserOptions.value = res.list || []
|
||||
} catch {
|
||||
stepAssigneeUserOptions.value = []
|
||||
} finally {
|
||||
stepAssigneeUserOptionsLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
function onStepAssigneeSelectVisible(visible: boolean) {
|
||||
if (visible) void remoteSearchStepAssigneeUsers('')
|
||||
}
|
||||
|
||||
function ensureStepAssigneeFields(step: Record<string, any>) {
|
||||
if (!Array.isArray(step.assigneeUserIds)) step.assigneeUserIds = []
|
||||
}
|
||||
|
||||
async function saveStepDispatch() {
|
||||
if (!selectedStep.value || !canEditStepDispatch()) return
|
||||
const step = selectedStep.value
|
||||
if (!stepDispatchChanged(step)) return
|
||||
const assigneeUserIds = [...(step.assigneeUserIds || [])]
|
||||
await fetchDispatchProductionTaskSteps(
|
||||
taskId.value,
|
||||
{
|
||||
steps: [
|
||||
{
|
||||
stepId: step.id,
|
||||
assigneeUserIds,
|
||||
plannedStartTime: step.plannedStartTime || null
|
||||
}
|
||||
]
|
||||
},
|
||||
operateScope.value
|
||||
)
|
||||
step._snapshotAssigneeUserIds = [...assigneeUserIds]
|
||||
step._snapshotPlannedStartTime = step.plannedStartTime || ''
|
||||
}
|
||||
|
||||
async function saveStepBasic() {
|
||||
if (!selectedStep.value) return
|
||||
try {
|
||||
@@ -1379,16 +1503,25 @@ export function useTaskStepEditor() {
|
||||
const taskActionLoading = ref(false)
|
||||
async function handleManualSave() {
|
||||
if (!selectedStep.value || manualSaveLoading.value) return
|
||||
const step = selectedStep.value
|
||||
const canBasic = canEditStep(step)
|
||||
const canDispatch = canEditStepDispatch() && stepDispatchChanged(step)
|
||||
if (!canBasic && !canDispatch) return
|
||||
manualSaveLoading.value = true
|
||||
try {
|
||||
await Promise.all([
|
||||
saveStepBasic(),
|
||||
saveReagents(),
|
||||
saveConsumables(),
|
||||
saveConfiguredReagents(),
|
||||
saveOutputs(),
|
||||
saveDataCollections()
|
||||
])
|
||||
if (canBasic) {
|
||||
await Promise.all([
|
||||
saveStepBasic(),
|
||||
saveReagents(),
|
||||
saveConsumables(),
|
||||
saveConfiguredReagents(),
|
||||
saveOutputs(),
|
||||
saveDataCollections()
|
||||
])
|
||||
}
|
||||
if (canDispatch) {
|
||||
await saveStepDispatch()
|
||||
}
|
||||
ElMessage.success('保存成功')
|
||||
} catch {
|
||||
ElMessage.error('保存失败,请重试')
|
||||
@@ -1399,6 +1532,10 @@ export function useTaskStepEditor() {
|
||||
|
||||
async function handleStartStep(step: Record<string, any>) {
|
||||
if (!taskId.value || !step.id || stepActionLoading.value) return
|
||||
if (!canEditStep(step)) {
|
||||
ElMessage.warning('非当前步骤负责人,无法操作')
|
||||
return
|
||||
}
|
||||
stepActionLoading.value = true
|
||||
try {
|
||||
await fetchUpdateTaskStep(taskId.value, step.id, { step_status: 'jxz' }, operateScope.value)
|
||||
@@ -1413,6 +1550,10 @@ export function useTaskStepEditor() {
|
||||
|
||||
async function handleCompleteStep(step: Record<string, any>) {
|
||||
if (!taskId.value || !step.id || stepActionLoading.value) return
|
||||
if (!canEditStep(step)) {
|
||||
ElMessage.warning('非当前步骤负责人,无法操作')
|
||||
return
|
||||
}
|
||||
try {
|
||||
await ElMessageBox.confirm('确定完成该步骤吗?', '提示', { type: 'warning' })
|
||||
} catch {
|
||||
@@ -1648,6 +1789,9 @@ export function useTaskStepEditor() {
|
||||
void loadConfigReferenceData().catch(() => {
|
||||
/* 工艺库参考数据失败不阻断步骤展示 */
|
||||
})
|
||||
if (canEditStepDispatch()) {
|
||||
void remoteSearchStepAssigneeUsers('')
|
||||
}
|
||||
} finally {
|
||||
stepListLoading.value = false
|
||||
await nextTick()
|
||||
@@ -1659,6 +1803,9 @@ export function useTaskStepEditor() {
|
||||
return {
|
||||
taskId,
|
||||
stepList,
|
||||
executionStepList,
|
||||
canEditStep,
|
||||
canEditStepDispatch,
|
||||
selectedStepId,
|
||||
selectedStep,
|
||||
stepListLoading,
|
||||
@@ -1730,6 +1877,14 @@ export function useTaskStepEditor() {
|
||||
taskStatusTag,
|
||||
stepStatusTag,
|
||||
saveStepBasic,
|
||||
saveStepDispatch,
|
||||
stepDispatchChanged,
|
||||
stepAssigneeUserOptions,
|
||||
stepAssigneeUserOptionsLoading,
|
||||
mergedStepAssigneeUserOptions,
|
||||
remoteSearchStepAssigneeUsers,
|
||||
onStepAssigneeSelectVisible,
|
||||
ensureStepAssigneeFields,
|
||||
onStepEquipmentChange,
|
||||
onSopIdsChange,
|
||||
searchItemUnitOptions,
|
||||
|
||||
Reference in new issue
Block a user