This commit is contained in:
zlwu committed 2026-05-24 17:57:28 +08:00
1 parent 7cec1f2190
commit 13e4c9530a
85 files changed
+23079 -15736

No files matched your search

@@ -74,6 +74,13 @@ export function fetchConfigureProductionWorkOrder(
})
}
export function fetchUpdateProductionWorkOrder(id: string, data: { remark?: string }) {
return request.put<ProductionWorkOrderItem>({
url: `/web/admin/production-work-orders/${id}`,
data
})
}
export function fetchDeleteProductionWorkOrder(id: string) {
return request.del({ url: `/web/admin/production-work-orders/${id}` })
}
@@ -94,6 +94,8 @@ export type ProductionInfoTask = {
taskName?: string
taskStatus?: string
taskStatusLabel?: string
conclusion?: string
conclusionLabel?: string
startedTime?: string
completedTime?: string
}
@@ -103,6 +103,10 @@
import SystemViewDialog from '@/components/business/system-view-dialog/index.vue'
import type { ViewSection } from '@/components/business/system-view-dialog/index.vue'
import { fetchProductionTaskDetail } from '@/api/production-task'
import {
productionConclusionLabel,
productionConclusionTagType
} from '@/utils/production-labels'
const props = defineProps<{
visible: boolean
@@ -231,6 +235,11 @@
{ label: '协议号', value: d.protocolNo || '—' },
{ label: '样本编码', value: d.sampleCode || '—' },
{ label: '开始时间', value: d.startedTime || '—' },
{
label: '生产结论',
value: productionConclusionLabel(d.conclusion),
tagType: productionConclusionTagType(d.conclusion)
},
{ label: '完成时间', value: d.completedTime || '—' },
{ label: '备注', value: d.remark || '—', span: true }
]
@@ -59,6 +59,19 @@
<span class="qc-kv__label">完成时间</span>
<span class="qc-kv__value">{{ task.completedTime || '—' }}</span>
</div>
<div class="qc-kv">
<span class="qc-kv__label">生产结论</span>
<span class="qc-kv__value">
<el-tag
v-if="productionConclusionTagType(task.conclusion)"
:type="productionConclusionTagType(task.conclusion)"
size="small"
>
{{ task.conclusionLabel || productionConclusionLabel(task.conclusion) }}
</el-tag>
<template v-else>—</template>
</span>
</div>
</div>
<div class="production-task-card__foot">
<button type="button" class="production-task-card__link" @click.stop="openTaskView(task)">
@@ -82,6 +95,10 @@
<script setup lang="ts">
import { ref } from 'vue'
import ProductionTaskViewDialog from '@/components/business/production-task-view-dialog/index.vue'
import {
productionConclusionLabel,
productionConclusionTagType
} from '@/utils/production-labels'
export type ProductionTaskInput = {
inputType?: string
@@ -101,6 +118,8 @@
taskName?: string
taskStatus?: string
taskStatusLabel?: string
conclusion?: string
conclusionLabel?: string
startedTime?: string
completedTime?: string
inputs?: ProductionTaskInput[]
@@ -0,0 +1,80 @@
<!-- 工单备注编辑(入库/临时生产、入库质检) -->
<template>
<el-dialog
v-model="dialogVisible"
:title="title"
width="560px"
class="dialog-form-layout"
align-center
destroy-on-close
:close-on-click-modal="false"
@close="handleClose"
>
<el-form label-position="top" class="biz-dialog-form">
<el-form-item label="备注">
<el-input
v-model="remark"
type="textarea"
:rows="4"
placeholder="选填"
maxlength="512"
show-word-limit
/>
</el-form-item>
</el-form>
<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 { ref, computed, watch } from 'vue'
import { Close, Check } from '@element-plus/icons-vue'
const props = withDefaults(
defineProps<{
visible: boolean
title?: string
initialRemark?: string
submitting?: boolean
}>(),
{
title: '编辑备注',
initialRemark: '',
submitting: false
}
)
const emit = defineEmits<{
(e: 'update:visible', val: boolean): void
(e: 'submit', remark: string): void
}>()
const dialogVisible = computed({
get: () => props.visible,
set: (val) => emit('update:visible', val)
})
const remark = ref('')
function handleClose() {
dialogVisible.value = false
}
function handleSubmit() {
emit('submit', remark.value.trim())
}
watch(
() => props.visible,
(val) => {
if (val) {
remark.value = props.initialRemark || ''
}
}
)
</script>
@@ -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": []}
@@ -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": "L24"}, {"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": "L40"}, {"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": "L44"}, {"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": "L48"}, {"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": "L61"}, {"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": "L77"}, {"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": "L84"}], "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": "L24", "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": "L40", "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": "L44", "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": "L48", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_work_order_ts", "target": "api_production_work_order_fetchconfigureproductionworkorder", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L61", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_work_order_ts", "target": "api_production_work_order_fetchupdateproductionworkorder", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L77", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_work_order_ts", "target": "api_production_work_order_fetchdeleteproductioLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_router_modules_sqxp_ts", "label": "sqxp.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/modules/sqxp.ts", "source_location": "L1"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_router_modules_sqxp_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_types_router", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/router/modules/sqxp.ts", "source_location": "L1", "weight": 1.0}], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_status_tag_registry_ts", "label": "status-tag-registry.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L1"}, {"id": "utils_status_tag_registry_createlabelgetter", "label": "createLabelGetter()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L29"}, {"id": "utils_status_tag_registry_createtagtypegetter", "label": "createTagTypeGetter()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L33"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_status_tag_registry_ts", "target": "utils_status_tag_registry_createlabelgetter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L29", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_status_tag_registry_ts", "target": "utils_status_tag_registry_createtagtypegetter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/status-tag-registry.ts", "source_location": "L33", "weight": 1.0}], "raw_calls": []}
@@ -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": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_work_order_remark_dialog_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/work-order-remark-dialog/index.vue", "source_location": "L1"}, {"id": "work_order_remark_dialog_index_handleclose", "label": "handleClose()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/work-order-remark-dialog/index.vue", "source_location": "L64"}, {"id": "work_order_remark_dialog_index_handlesubmit", "label": "handleSubmit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/work-order-remark-dialog/index.vue", "source_location": "L68"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_work_order_remark_dialog_index_vue", "target": "icons_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/work-order-remark-dialog/index.vue", "source_location": "L36", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_work_order_remark_dialog_index_vue", "target": "work_order_remark_dialog_index_handleclose", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/work-order-remark-dialog/index.vue", "source_location": "L64", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_work_order_remark_dialog_index_vue", "target": "work_order_remark_dialog_index_handlesubmit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/work-order-remark-dialog/index.vue", "source_location": "L68", "weight": 1.0}], "raw_calls": [{"caller_nid": "work_order_remark_dialog_index_handlesubmit", "callee": "emit", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/work-order-remark-dialog/index.vue", "source_location": "L69"}, {"caller_nid": "work_order_remark_dialog_index_handlesubmit", "callee": "trim", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/work-order-remark-dialog/index.vue", "source_location": "L69"}]}
@@ -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": "L24"}, {"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": "L40"}, {"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": "L44"}, {"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": "L48"}, {"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": "L61"}, {"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": "L77"}], "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": "L24", "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": "L40", "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": "L44", "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": "L48", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_work_order_ts", "target": "api_production_work_order_fetchconfigureproductionworkorder", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L61", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_production_work_order_ts", "target": "api_production_work_order_fetchdeleteproductionworkorder", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L77", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_production_work_order_fetchproductionworkorderlist", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-work-order.ts", "source_location": "L31"}, {"caller_nid": "api_production_work_order_fetchproductionworkorderdetail", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/production-workLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_task_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-task/index.vue", "source_location": "L1"}, {"id": "qc_task_index_canfillresult", "label": "canFillResult()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-task/index.vue", "source_location": "L542"}, {"id": "qc_task_index_clearmaterialrow", "label": "clearMaterialRow()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-task/index.vue", "source_location": "L564"}, {"id": "qc_task_index_ismaterialoptiondisabled", "label": "isMaterialOptionDisabled()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-task/index.vue", "source_location": "L571"}, {"id": "qc_task_index_isduplicatematerial", "label": "isDuplicateMaterial()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-task/index.vue", "source_location": "L576"}, {"id": "qc_task_index_handlereceptionattachmentdownload", "label": "handleReceptionAttachmentDownload()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-task/index.vue", "source_location": "L723"}, {"id": "qc_task_index_normalizeresultparams", "label": "normalizeResultParams()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-task/index.vue", "source_location": "L727"}, {"id": "qc_task_index_toresultnumber", "label": "toResultNumber()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-task/index.vue", "source_location": "L735"}, {"id": "qc_task_index_setresultnumber", "label": "setResultNumber()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-task/index.vue", "source_location": "L741"}, {"id": "qc_task_index_hasresultvalue", "label": "hasResultValue()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-task/index.vue", "source_location": "L745"}, {"id": "qc_task_index_formatmetric", "label": "formatMetric()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-task/index.vue", "source_location": "L749"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_task_index_vue", "target": "qc_task_index_canfillresult", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-task/index.vue", "source_location": "L542", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_task_index_vue", "target": "qc_task_index_clearmaterialrow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-task/index.vue", "source_location": "L564", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_task_index_vue", "target": "qc_task_index_ismaterialoptiondisabled", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-task/index.vue", "source_location": "L571", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_task_index_vue", "target": "qc_task_index_isduplicatematerial", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-task/index.vue", "source_location": "L576", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_task_index_vue", "target": "qc_task_index_handlereceptionattachmentdownload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-task/index.vue", "source_location": "L723", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_task_index_vue", "target": "qc_task_index_normalizeresultparams", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-task/index.vue", "source_location": "L727", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_task_index_vue", "target": "qc_task_index_toresultnumber", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_storage_release_review_storagereleaseviewdialog_vue", "label": "StorageReleaseViewDialog.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/StorageReleaseViewDialog.vue", "source_location": "L1"}, {"id": "storage_release_review_storagereleaseviewdialog_attachmentfullurl", "label": "attachmentFullUrl()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/StorageReleaseViewDialog.vue", "source_location": "L313"}, {"id": "storage_release_review_storagereleaseviewdialog_handlereceptionattachmentpreview", "label": "handleReceptionAttachmentPreview()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/StorageReleaseViewDialog.vue", "source_location": "L320"}, {"id": "storage_release_review_storagereleaseviewdialog_handlereceptionattachmentdownload", "label": "handleReceptionAttachmentDownload()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/StorageReleaseViewDialog.vue", "source_location": "L325"}, {"id": "storage_release_review_storagereleaseviewdialog_handleattachmentpreview", "label": "handleAttachmentPreview()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/StorageReleaseViewDialog.vue", "source_location": "L329"}, {"id": "storage_release_review_storagereleaseviewdialog_handleattachmentdownload", "label": "handleAttachmentDownload()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/StorageReleaseViewDialog.vue", "source_location": "L333"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_storage_release_review_storagereleaseviewdialog_vue", "target": "storage_release_review_storagereleaseviewdialog_attachmentfullurl", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/StorageReleaseViewDialog.vue", "source_location": "L313", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_storage_release_review_storagereleaseviewdialog_vue", "target": "storage_release_review_storagereleaseviewdialog_handlereceptionattachmentpreview", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/StorageReleaseViewDialog.vue", "source_location": "L320", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_storage_release_review_storagereleaseviewdialog_vue", "target": "storage_release_review_storagereleaseviewdialog_handlereceptionattachmentdownload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/StorageReleaseViewDialog.vue", "source_location": "L325", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_storage_release_review_storagereleaseviewdialog_vue", "target": "storage_release_review_storagereleaseviewdialog_handleattachmentpreview", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/StorageReleaseViewDialog.vue", "source_location": "L329", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_storage_release_review_storagereleaseviewdialog_vue", "target": "storage_release_review_storagereleaseviewdialog_handleattachmentdownload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/StorageReleaseViewDialog.vue", "source_location": "L333", "weight": 1.0}, {"source": "storage_release_review_storagereleaseviewdialog_handlereceptionattachmentpreview", "target": "storage_release_review_storagereleaseviewdialog_attachmentfullurl", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storage-release-review/StorageReleaseViewDialog.vue", "source_location": "L321", "weight": 1.0}, {"source": "storage_release_review_storagereleaseviewdialog_handleattachmentpreview", "target": "storage_release_review_storagereleaseviewdialog_handlereceptionattachmentpreview", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/storLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_task_ts", "label": "qc-task.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-task.ts", "source_location": "L1"}, {"id": "api_qc_task_fetchqctasklist", "label": "fetchQcTaskList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-task.ts", "source_location": "L92"}, {"id": "api_qc_task_fetchqctaskdetail", "label": "fetchQcTaskDetail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-task.ts", "source_location": "L107"}, {"id": "api_qc_task_fetchstartqctask", "label": "fetchStartQcTask()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-task.ts", "source_location": "L113"}, {"id": "api_qc_task_fetchcompleteqctask", "label": "fetchCompleteQcTask()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-task.ts", "source_location": "L119"}, {"id": "api_qc_task_fetchupdateqctaskattachments", "label": "fetchUpdateQcTaskAttachments()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-task.ts", "source_location": "L125"}, {"id": "api_qc_task_fetchcreateqctask", "label": "fetchCreateQcTask()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-task.ts", "source_location": "L132"}, {"id": "api_qc_task_fetchdeleteqctask", "label": "fetchDeleteQcTask()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-task.ts", "source_location": "L150"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_task_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-task.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_task_ts", "target": "api_qc_task_fetchqctasklist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-task.ts", "source_location": "L92", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_task_ts", "target": "api_qc_task_fetchqctaskdetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-task.ts", "source_location": "L107", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_task_ts", "target": "api_qc_task_fetchstartqctask", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-task.ts", "source_location": "L113", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_task_ts", "target": "api_qc_task_fetchcompleteqctask", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-task.ts", "source_location": "L119", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_task_ts", "target": "api_qc_task_fetchupdateqctaskattachments", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-task.ts", "source_location": "L125", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_task_ts", "target": "api_qc_task_fetchcreateqctask", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-task.ts", "source_location": "L132", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_api_qc_task_ts", "target": "api_qc_task_fetchdeleteqctask", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-task.ts", "source_location": "L150", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_qc_task_fetchqctasklist", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-task.ts", "source_location": "L101"}, {"caller_nid": "api_qc_task_fetchqctaskdetail", "callee": "get", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-task.ts", "source_location": "L108"}, {"caller_nid": "api_qc_task_fetchstartqctask", "callee": "post", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-task.ts", "source_location": "L114"}, {"caller_nid": "api_qc_task_fetchcompleteqctask", "callee": "post", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-task.ts", "source_location": "L120"}, {"caller_nid": "api_qc_task_fetchupdateqctaskattachments", "callee": "put", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-task.ts", "source_location": "L126"}, {"caller_nid": "api_qc_task_fetchcreateqctask", "callee": "post"Line truncated
@@ -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"}], "edges": [], "raw_calls": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_work_order_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L1"}, {"id": "qc_work_order_index_formatconfiguredlabitems", "label": "formatConfiguredLabItems()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L643"}, {"id": "qc_work_order_index_formatconfiguredthirditems", "label": "formatConfiguredThirdItems()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L649"}, {"id": "qc_work_order_index_buildtasktypesections", "label": "buildTaskTypeSections()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L657"}, {"id": "qc_work_order_index_buildconfiguredonlysection", "label": "buildConfiguredOnlySection()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L716"}, {"id": "qc_work_order_index_formatdetectmethods", "label": "formatDetectMethods()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L734"}, {"id": "qc_work_order_index_formatmetric", "label": "formatMetric()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L741"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_work_order_index_vue", "target": "qc_work_order_index_formatconfiguredlabitems", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L643", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_work_order_index_vue", "target": "qc_work_order_index_formatconfiguredthirditems", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L649", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_work_order_index_vue", "target": "qc_work_order_index_buildtasktypesections", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L657", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_work_order_index_vue", "target": "qc_work_order_index_buildconfiguredonlysection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L716", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_work_order_index_vue", "target": "qc_work_order_index_formatdetectmethods", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L734", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_work_order_index_vue", "target": "qc_work_order_index_formatmetric", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L741", "weight": 1.0}], "raw_calls": [{"caller_nid": "qc_work_order_index_formatconfiguredlabitems", "callee": "join", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L645"}, {"caller_nid": "qc_work_order_index_formatconfiguredlabitems", "callee": "map", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L645"}, {"caller_nid": "qc_work_order_index_formatconfiguredthirditems", "callee": "join", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L651"}, {"caller_nid": "qc_work_order_index_formatconfiguredthirditems", "callee": "map", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L651"}, {"caller_nid": "qc_work_order_index_Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_production_task_view_dialog_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/production-task-view-dialog/index.vue", "source_location": "L1"}, {"id": "production_task_view_dialog_index_taskstatuslabel", "label": "taskStatusLabel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/production-task-view-dialog/index.vue", "source_location": "L155"}, {"id": "production_task_view_dialog_index_tasktypelabel", "label": "taskTypeLabel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/production-task-view-dialog/index.vue", "source_location": "L166"}, {"id": "production_task_view_dialog_index_productstatustagtype", "label": "productStatusTagType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/production-task-view-dialog/index.vue", "source_location": "L176"}, {"id": "production_task_view_dialog_index_productstatuslabel", "label": "productStatusLabel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/production-task-view-dialog/index.vue", "source_location": "L186"}, {"id": "production_task_view_dialog_index_formatdateonly", "label": "formatDateOnly()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/production-task-view-dialog/index.vue", "source_location": "L196"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_production_task_view_dialog_index_vue", "target": "production_task_view_dialog_index_taskstatuslabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/production-task-view-dialog/index.vue", "source_location": "L155", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_production_task_view_dialog_index_vue", "target": "production_task_view_dialog_index_tasktypelabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/production-task-view-dialog/index.vue", "source_location": "L166", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_production_task_view_dialog_index_vue", "target": "production_task_view_dialog_index_productstatustagtype", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/production-task-view-dialog/index.vue", "source_location": "L176", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_production_task_view_dialog_index_vue", "target": "production_task_view_dialog_index_productstatuslabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/production-task-view-dialog/index.vue", "source_location": "L186", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_production_task_view_dialog_index_vue", "target": "production_task_view_dialog_index_formatdateonly", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/production-task-view-dialog/index.vue", "source_location": "L196", "weight": 1.0}], "raw_calls": [{"caller_nid": "production_task_view_dialog_index_formatdateonly", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/production-task-view-dialog/index.vue", "source_location": "L198"}, {"caller_nid": "production_task_view_dialog_index_formatdateonly", "callee": "slice", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/production-task-view-dialog/index.vue", "source_location": "L199"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_completeproductiontaskdialog_vue", "label": "CompleteProductionTaskDialog.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/CompleteProductionTaskDialog.vue", "source_location": "L1"}, {"id": "production_work_order_completeproductiontaskdialog_handleclose", "label": "handleClose()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/CompleteProductionTaskDialog.vue", "source_location": "L66"}, {"id": "production_work_order_completeproductiontaskdialog_handlesubmit", "label": "handleSubmit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/CompleteProductionTaskDialog.vue", "source_location": "L70"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_completeproductiontaskdialog_vue", "target": "icons_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/CompleteProductionTaskDialog.vue", "source_location": "L42", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_completeproductiontaskdialog_vue", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/CompleteProductionTaskDialog.vue", "source_location": "L43", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_completeproductiontaskdialog_vue", "target": "production_work_order_completeproductiontaskdialog_handleclose", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/CompleteProductionTaskDialog.vue", "source_location": "L66", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_completeproductiontaskdialog_vue", "target": "production_work_order_completeproductiontaskdialog_handlesubmit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/CompleteProductionTaskDialog.vue", "source_location": "L70", "weight": 1.0}], "raw_calls": [{"caller_nid": "production_work_order_completeproductiontaskdialog_handlesubmit", "callee": "validate", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/CompleteProductionTaskDialog.vue", "source_location": "L72"}, {"caller_nid": "production_work_order_completeproductiontaskdialog_handlesubmit", "callee": "emit", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/CompleteProductionTaskDialog.vue", "source_location": "L73"}, {"caller_nid": "production_work_order_completeproductiontaskdialog_handlesubmit", "callee": "trim", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/CompleteProductionTaskDialog.vue", "source_location": "L75"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_task_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-task/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -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": "L113"}, {"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": "L126"}, {"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": "L132"}, {"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": "L147"}, {"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": "L162"}, {"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": "L169"}], "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": "L113", "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": "L126", "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": "L132", "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": "L147", "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": "L162", "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": "L169", "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": "L120"}, {"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": "L127"}, {"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": "L141"}, {"caller_nid": "api_qc_work_order_fetchcreateqcworkorder", "callee": "post", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L156"}, {"caller_nid": "api_qc_work_order_fetchupdateqcworkorder", "callee": "put", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L163"}, {"caller_nid": "api_qc_work_order_fetchdeleteqcworkorder", "callee": "del", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/qc-work-order.ts", "source_location": "L170"}]}
@@ -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_if", "label": "if()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L289"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_dispatchtaskdialog_vue", "target": "production_work_order_dispatchtaskdialog_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L289", "weight": 1.0}], "raw_calls": [{"caller_nid": "production_work_order_dispatchtaskdialog_if", "callee": "initEditor", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/DispatchTaskDialog.vue", "source_location": "L293"}]}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_task_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-task/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -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"}], "edges": [], "raw_calls": []}
@@ -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_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": "L35"}, {"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": "L39"}, {"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": "L42"}, {"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": "L57"}, {"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": "L64"}], "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": "L16", "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": "L24", "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_cell_product", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L25", "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": "L26", "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_storage_slot_options", "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_order_usetaskstepeditor_ts", "target": "production_work_order_usetaskstepeditor_toapiflag", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L35", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_production_production_work_order_usetaskstepeditor_ts", "target": "production_work_order_usetaskstepeditor_fromapiflag", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/production/production-work-order/useTaskStepEditor.ts", "source_location": "L39", "weight": 1.0}, {"source"Line truncated
@@ -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": []}
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_work_order_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L1"}, {"id": "qc_work_order_index_formatconfiguredlabitems", "label": "formatConfiguredLabItems()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L685"}, {"id": "qc_work_order_index_formatconfiguredthirditems", "label": "formatConfiguredThirdItems()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L691"}, {"id": "qc_work_order_index_buildtasktypesections", "label": "buildTaskTypeSections()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L699"}, {"id": "qc_work_order_index_buildconfiguredonlysection", "label": "buildConfiguredOnlySection()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L758"}, {"id": "qc_work_order_index_formatdetectmethods", "label": "formatDetectMethods()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L776"}, {"id": "qc_work_order_index_formatmetric", "label": "formatMetric()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L783"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_work_order_index_vue", "target": "qc_work_order_index_formatconfiguredlabitems", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L685", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_work_order_index_vue", "target": "qc_work_order_index_formatconfiguredthirditems", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L691", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_work_order_index_vue", "target": "qc_work_order_index_buildtasktypesections", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L699", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_work_order_index_vue", "target": "qc_work_order_index_buildconfiguredonlysection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L758", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_work_order_index_vue", "target": "qc_work_order_index_formatdetectmethods", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L776", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_qc_work_order_index_vue", "target": "qc_work_order_index_formatmetric", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L783", "weight": 1.0}], "raw_calls": [{"caller_nid": "qc_work_order_index_formatconfiguredlabitems", "callee": "join", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L687"}, {"caller_nid": "qc_work_order_index_formatconfiguredlabitems", "callee": "map", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L687"}, {"caller_nid": "qc_work_order_index_formatconfiguredthirditems", "callee": "join", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L693"}, {"caller_nid": "qc_work_order_index_formatconfiguredthirditems", "callee": "map", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/qc-work-order/index.vue", "source_location": "L693"}, {"caller_nid": "qc_work_order_index_Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_qc_task_view_dialog_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/qc-task-view-dialog/index.vue", "source_location": "L1"}, {"id": "qc_task_view_dialog_index_attachmentfullurl", "label": "attachmentFullUrl()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/qc-task-view-dialog/index.vue", "source_location": "L378"}, {"id": "qc_task_view_dialog_index_handleattachmentpreview", "label": "handleAttachmentPreview()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/qc-task-view-dialog/index.vue", "source_location": "L385"}, {"id": "qc_task_view_dialog_index_handleattachmentdownload", "label": "handleAttachmentDownload()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/qc-task-view-dialog/index.vue", "source_location": "L390"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_qc_task_view_dialog_index_vue", "target": "qc_task_view_dialog_index_attachmentfullurl", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/qc-task-view-dialog/index.vue", "source_location": "L378", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_qc_task_view_dialog_index_vue", "target": "qc_task_view_dialog_index_handleattachmentpreview", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/qc-task-view-dialog/index.vue", "source_location": "L385", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_qc_task_view_dialog_index_vue", "target": "qc_task_view_dialog_index_handleattachmentdownload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/qc-task-view-dialog/index.vue", "source_location": "L390", "weight": 1.0}, {"source": "qc_task_view_dialog_index_handleattachmentpreview", "target": "qc_task_view_dialog_index_attachmentfullurl", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/qc-task-view-dialog/index.vue", "source_location": "L386", "weight": 1.0}], "raw_calls": [{"caller_nid": "qc_task_view_dialog_index_attachmentfullurl", "callee": "trim", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/qc-task-view-dialog/index.vue", "source_location": "L379"}, {"caller_nid": "qc_task_view_dialog_index_attachmentfullurl", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/qc-task-view-dialog/index.vue", "source_location": "L379"}, {"caller_nid": "qc_task_view_dialog_index_attachmentfullurl", "callee": "test", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/qc-task-view-dialog/index.vue", "source_location": "L381"}, {"caller_nid": "qc_task_view_dialog_index_attachmentfullurl", "callee": "replace", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/qc-task-view-dialog/index.vue", "source_location": "L382"}, {"caller_nid": "qc_task_view_dialog_index_handleattachmentpreview", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/qc-task-view-dialog/index.vue", "source_location": "L386"}, {"caller_nid": "qc_task_view_dialog_index_handleattachmentpreview", "callee": "open", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/qc-task-view-dialog/index.vue", "source_location": "L387"}, {"caller_nid": "qc_task_view_dialog_index_handleattachmentdownload", "callee": "downloadAttachmentFile", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/qc-task-view-dialog/index.vue", "source_location": "L391"}]}
+16
View File
@@ -0,0 +1,16 @@
import type { TagType } from '@/utils/status-tag-registry'
/** 生产结论 cg=成功 sb=失败 */
export function productionConclusionLabel(code?: string | null): string {
const c = (code || '').trim()
if (c === 'cg') return '成功'
if (c === 'sb') return '失败'
return c || '—'
}
export function productionConclusionTagType(code?: string | null): TagType | undefined {
const c = (code || '').trim()
if (c === 'cg') return 'success'
if (c === 'sb') return 'danger'
return undefined
}
@@ -97,7 +97,7 @@
</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" min-width="260" fixed="right" align="center" header-align="center">
<el-table-column label="操作" min-width="360" fixed="right" align="center" header-align="center">
<template #default="{ row }">
<el-button class="btn-op-item primary" @click="handleView(row)">
<el-icon><View /></el-icon>查看
@@ -80,7 +80,7 @@
<el-table-column prop="newbornInfo" label="新生儿信息" min-width="200" align="center" header-align="center" show-overflow-tooltip />
<el-table-column prop="sampleInfo" label="样本信息" min-width="200" align="center" header-align="center" show-overflow-tooltip />
<el-table-column prop="storageInDate" label="入库日期" min-width="120" align="center" header-align="center">
<template #default="{ row }">{{ row.storageInDate || '—' }}</template>
<template #default="{ row }">{{ formatStorageInDate(row.storageInDate) }}</template>
</el-table-column>
<el-table-column prop="makeStatus" label="制作状态" min-width="100" align="center" header-align="center">
<template #default="{ row }">
@@ -89,7 +89,9 @@
</el-tag>
</template>
</el-table-column>
<el-table-column prop="makeDate" label="制作日期" min-width="120" align="center" header-align="center" />
<el-table-column prop="makeDate" label="制作日期" min-width="120" align="center" header-align="center">
<template #default="{ row }">{{ formatStorageInDate(row.makeDate) }}</template>
</el-table-column>
<el-table-column label="操作" min-width="260" fixed="right" align="center" header-align="center">
<template #default="{ row }">
<el-button class="btn-op-item primary" @click="handleUpload(row)">
@@ -371,6 +373,16 @@
return isStorageCertMakePendingRow(row) ? 'row-storage-cert-pending' : ''
}
function formatStorageInDate(val: unknown) {
const s = String(val || '').trim()
if (!s) return '—'
const digits = s.replace(/\D/g, '')
if (digits.length >= 8) {
return `${digits.slice(0, 4)}-${digits.slice(4, 6)}-${digits.slice(6, 8)}`
}
return s
}
// ---------------------------------------------------------------------------
// 数据加载
// ---------------------------------------------------------------------------
@@ -103,7 +103,7 @@
</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" min-width="260" fixed="right" align="center" header-align="center">
<el-table-column label="操作" min-width="360" fixed="right" align="center" header-align="center">
<template #default="{ row }">
<el-button class="btn-op-item primary" @click="handleView(row)">
<el-icon><View /></el-icon>查看
@@ -91,15 +91,30 @@
<el-tag :type="taskStatusTag(row.taskStatus).type" size="small">{{ taskStatusTag(row.taskStatus).label }}</el-tag>
</template>
</el-table-column>
<el-table-column prop="conclusion" label="生产结论" min-width="100" align="center">
<template #default="{ row }">
<el-tag
v-if="productionConclusionTagType(row.conclusion)"
:type="productionConclusionTagType(row.conclusion)"
size="small"
>
{{ row.conclusionLabel || productionConclusionLabel(row.conclusion) }}
</el-tag>
<span v-else>—</span>
</template>
</el-table-column>
<el-table-column prop="startedTime" label="开始时间" min-width="170" align="center">
<template #default="{ row }">{{ row.startedTime || '—' }}</template>
</el-table-column>
<el-table-column prop="completedTime" label="完成时间" min-width="170" align="center">
<template #default="{ row }">{{ row.completedTime || '—' }}</template>
</el-table-column>
<el-table-column label="操作" min-width="320" fixed="right" align="center">
<el-table-column label="操作" min-width="400" fixed="right" align="center">
<template #default="{ row }">
<el-button class="btn-op-item primary" @click="handleEnterExecution(row)"><el-icon><VideoPlay /></el-icon>进入执行</el-button>
<el-button class="btn-op-item" @click="handleEditTask(row)">
<el-icon><EditPen /></el-icon>编辑
</el-button>
<el-button class="btn-op-item" @click="handleViewDetail(row)"><el-icon><View /></el-icon>查看详情</el-button>
<el-button v-if="row.taskStatus === 'dpz'" class="btn-op-item" @click="handleDelete(row)">删除</el-button>
</template>
@@ -190,13 +205,19 @@
:work-order-row="addDispatchRow"
@success="loadData"
/>
<EditTaskInfoDialog
v-model:visible="editTaskInfoVisible"
:task-id="editTaskInfoId"
@success="loadData"
/>
</section>
</div>
</template>
<script setup lang="ts">
import { ElMessage, ElMessageBox } from 'element-plus'
import { RefreshLeft, Search, VideoPlay, View, Plus, Close, Check } from '@element-plus/icons-vue'
import { RefreshLeft, Search, VideoPlay, View, Plus, Close, Check, EditPen } from '@element-plus/icons-vue'
import { fetchProductionTaskList, fetchDeleteProductionTask } from '@/api/production-task'
import { fetchProductionWorkOrderList } from '@/api/production-work-order'
import {
@@ -208,6 +229,11 @@
import type { TagType } from '@/utils/status-tag-registry'
import TaskExecutionDialog from '../production-work-order/TaskExecutionDialog.vue'
import DispatchTaskDialog from '../production-work-order/DispatchTaskDialog.vue'
import EditTaskInfoDialog from '../production-work-order/EditTaskInfoDialog.vue'
import {
productionConclusionLabel,
productionConclusionTagType
} from '@/utils/production-labels'
/** 根据来源类型返回协议状态标签 */
function protocolStatusLabelBySource(status: string, source: string): string {
@@ -361,6 +387,14 @@
executionDialogVisible.value = true
}
const editTaskInfoVisible = ref(false)
const editTaskInfoId = ref('')
function handleEditTask(row: Record<string, any>) {
editTaskInfoId.value = row.id
editTaskInfoVisible.value = true
}
// ---------------------------------------------------------------------------
// 初始化(支持从工单页面跳转带 keyword 筛选)
// ---------------------------------------------------------------------------
@@ -0,0 +1,99 @@
<!-- 完成任务 — 生产结论 -->
<template>
<el-dialog
v-model="dialogVisible"
:title="isCompletedEdit ? '修改生产结论' : '完成任务'"
width="520px"
class="dialog-form-layout"
align-center
destroy-on-close
:close-on-click-modal="false"
:append-to-body="true"
@close="handleClose"
>
<el-form ref="formRef" :model="form" :rules="rules" label-position="top" class="biz-dialog-form">
<el-form-item label="生产结论" prop="conclusion">
<el-radio-group v-model="form.conclusion">
<el-radio value="cg">成功</el-radio>
<el-radio value="sb">失败</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注">
<el-input
v-model="form.remark"
type="textarea"
:rows="3"
placeholder="选填"
maxlength="512"
/>
</el-form-item>
</el-form>
<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>{{ isCompletedEdit ? '保存' : '确认完成' }}
</el-button>
</template>
</el-dialog>
</template>
<script setup lang="ts">
import { ref, reactive, computed, watch } from 'vue'
import { Close, Check } from '@element-plus/icons-vue'
import type { FormInstance, FormRules } from 'element-plus'
const props = withDefaults(
defineProps<{
visible: boolean
submitting?: boolean
isCompletedEdit?: boolean
initialConclusion?: string
initialRemark?: string
}>(),
{
isCompletedEdit: false,
initialConclusion: '',
initialRemark: ''
}
)
const emit = defineEmits<{
(e: 'update:visible', val: boolean): void
(e: 'submit', payload: { conclusion: string; remark?: string }): void
}>()
const dialogVisible = computed({
get: () => props.visible,
set: (val) => emit('update:visible', val)
})
const formRef = ref<FormInstance>()
const form = reactive({ conclusion: '', remark: '' })
const rules: FormRules = {
conclusion: [{ required: true, message: '请选择生产结论', trigger: 'change' }]
}
function handleClose() {
dialogVisible.value = false
}
async function handleSubmit() {
if (!formRef.value) return
await formRef.value.validate()
emit('submit', {
conclusion: form.conclusion,
remark: form.remark.trim() || undefined
})
}
watch(
() => props.visible,
(val) => {
if (val) {
form.conclusion = props.initialConclusion || ''
form.remark = props.initialRemark || ''
formRef.value?.clearValidate()
}
}
)
</script>
@@ -1,4 +1,5 @@
<template>
<div class="task-execution-dialog-root">
<el-dialog
v-model="dialogVisible"
:title="readonly ? `任务详情 — ${taskName}` : `任务执行 — ${taskName}`"
@@ -25,6 +26,17 @@
<el-tag :type="editor.taskStatusTag(editor.taskDetail.value.taskStatus).type">
{{ editor.taskStatusTag(editor.taskDetail.value.taskStatus).label }}
</el-tag>
<span class="execution-header-item execution-header-conclusion">
生产结论:
<el-tag
v-if="productionConclusionTagType(executionTaskConclusion)"
:type="productionConclusionTagType(executionTaskConclusion)"
size="small"
>
{{ productionConclusionLabel(executionTaskConclusion) }}
</el-tag>
<template v-else>—</template>
</span>
<div v-if="!readonly" class="execution-header-actions">
<el-button
v-if="editor.taskDetail.value.taskStatus === 'dpz'"
@@ -37,7 +49,7 @@
<el-icon><VideoPlay /></el-icon>开始执行
</el-button>
<el-button
v-if="editor.taskDetail.value.taskStatus === 'jxz'"
v-if="editor.taskDetail.value.taskStatus === 'jxz' || editor.taskDetail.value.taskStatus === 'ywc'"
class="btn-main"
type="success"
size="small"
@@ -303,6 +315,16 @@
</div>
</div>
</el-dialog>
<CompleteProductionTaskDialog
v-model:visible="completeConclusionVisible"
:submitting="taskActionLoading"
:is-completed-edit="completeConclusionIsEdit"
:initial-conclusion="completeConclusionInitial.conclusion"
:initial-remark="completeConclusionInitial.remark"
@submit="submitCompleteWithConclusion"
/>
</div>
</template>
<script setup lang="ts">
@@ -312,6 +334,11 @@
import StepDetailPanel from './StepDetailPanel.vue'
import TaskInputEnhancedTable from './TaskInputEnhancedTable.vue'
import TaskOutputList from './TaskOutputList.vue'
import CompleteProductionTaskDialog from './CompleteProductionTaskDialog.vue'
import {
productionConclusionLabel,
productionConclusionTagType
} from '@/utils/production-labels'
const props = defineProps<{
visible: boolean
@@ -333,6 +360,19 @@
})
const editor = useTaskStepEditor()
/** 顶层解构 Ref,避免 v-model 收到 Ref 对象被当成 truthy 而误开弹窗 */
const {
completeConclusionVisible,
completeConclusionIsEdit,
completeConclusionInitial,
taskActionLoading,
submitCompleteWithConclusion,
taskDetail
} = editor
const executionTaskConclusion = computed(
() => (taskDetail.value as { conclusion?: string } | null)?.conclusion || ''
)
function handleClose() {
dialogVisible.value = false
@@ -348,7 +388,11 @@
watch(
() => props.visible,
async (val) => {
if (val && props.taskId) {
if (!val) {
completeConclusionVisible.value = false
return
}
if (props.taskId) {
await editor.initEditor(props.taskId, { mode: 'execution' })
}
}
@@ -132,7 +132,7 @@
<el-table-column prop="createTime" label="创建时间" min-width="170" align="center" />
<el-table-column
label="操作"
min-width="540"
min-width="600"
fixed="right"
align="center"
header-align="center"
@@ -141,6 +141,9 @@
<el-button class="btn-op-item" @click="handleView(row)"
><el-icon><View /></el-icon>查看详情</el-button
>
<el-button class="btn-op-item" @click="handleEditRemark(row)">
<el-icon><EditPen /></el-icon>编辑
</el-button>
<el-button class="btn-op-item" @click="handleEditTask(row)"
><el-icon><EditPen /></el-icon>编辑任务</el-button
>
@@ -249,6 +252,18 @@
</el-tag>
</template>
</el-table-column>
<el-table-column prop="conclusion" label="生产结论" min-width="100" align="center">
<template #default="{ row }">
<el-tag
v-if="productionConclusionTagType(row.conclusion)"
:type="productionConclusionTagType(row.conclusion)"
size="small"
>
{{ row.conclusionLabel || productionConclusionLabel(row.conclusion) }}
</el-tag>
<span v-else>—</span>
</template>
</el-table-column>
<el-table-column prop="remark" label="备注" min-width="140">
<template #default="{ row }">{{ row.remark || '—' }}</template>
</el-table-column>
@@ -320,6 +335,14 @@
</el-button>
</template>
</el-dialog>
<WorkOrderRemarkDialog
v-model:visible="remarkEditVisible"
:title="remarkEditTitle"
:initial-remark="remarkEditInitialRemark"
:submitting="remarkEditLoading"
@submit="submitRemarkEdit"
/>
</section>
</div>
</template>
@@ -344,6 +367,7 @@
fetchProductionWorkOrderDetail,
fetchCompleteProductionWorkOrder,
fetchCreateProductionWorkOrder,
fetchUpdateProductionWorkOrder,
fetchDeleteProductionWorkOrder,
type ProductionWorkOrderDetail
} from '@/api/production-work-order'
@@ -381,6 +405,11 @@
import { downloadAttachmentFile } from '@/utils/download-attachment'
import DispatchTaskDialog from './DispatchTaskDialog.vue'
import EditTaskInfoDialog from './EditTaskInfoDialog.vue'
import WorkOrderRemarkDialog from '@/components/business/work-order-remark-dialog/index.vue'
import {
productionConclusionLabel,
productionConclusionTagType
} from '@/utils/production-labels'
import {
fetchProductionTaskList,
fetchDeleteProductionTask
@@ -440,6 +469,32 @@
}
}
const remarkEditVisible = ref(false)
const remarkEditLoading = ref(false)
const remarkEditRow = ref<{ id: string; workOrderNo?: string; remark?: string } | null>(null)
const remarkEditTitle = computed(
() => `编辑备注${remarkEditRow.value?.workOrderNo ? ` — ${remarkEditRow.value.workOrderNo}` : ''}`
)
const remarkEditInitialRemark = computed(() => remarkEditRow.value?.remark || '')
function handleEditRemark(row: { id: string; workOrderNo?: string; remark?: string }) {
remarkEditRow.value = row
remarkEditVisible.value = true
}
async function submitRemarkEdit(remark: string) {
if (!remarkEditRow.value?.id) return
remarkEditLoading.value = true
try {
await fetchUpdateProductionWorkOrder(remarkEditRow.value.id, { remark })
ElMessage.success('保存成功')
remarkEditVisible.value = false
loadData()
} finally {
remarkEditLoading.value = false
}
}
const woStatusTag = (status: string) => {
const map: Record<string, { label: string; type: string }> = {
dpz: { label: '待配置', type: 'info' },
@@ -938,22 +938,38 @@ export function useTaskStepEditor() {
return null
}
const completeConclusionVisible = ref(false)
const completeConclusionIsEdit = ref(false)
const completeConclusionInitial = reactive({ conclusion: '', remark: '' })
async function handleCompleteTask() {
if (!taskDetail.value?.id || taskActionLoading.value) return
const ioErr = validateTaskIoRequired()
if (ioErr) {
await ElMessageBox.alert(ioErr, '无法完成任务', { type: 'warning' })
return
}
try {
await ElMessageBox.confirm('确定完成该任务吗?完成后不可恢复。', '提示', { type: 'warning' })
} catch {
return
const isCompleted = taskDetail.value.taskStatus === 'ywc'
completeConclusionIsEdit.value = isCompleted
completeConclusionInitial.conclusion = (taskDetail.value as { conclusion?: string }).conclusion || ''
completeConclusionInitial.remark = taskDetail.value.remark || ''
if (!isCompleted) {
const ioErr = validateTaskIoRequired()
if (ioErr) {
await ElMessageBox.alert(ioErr, '无法完成任务', { type: 'warning' })
return
}
}
completeConclusionVisible.value = true
}
async function submitCompleteWithConclusion(payload: { conclusion: string; remark?: string }) {
if (!taskDetail.value?.id || taskActionLoading.value) return
const isCompleted = taskDetail.value.taskStatus === 'ywc'
taskActionLoading.value = true
try {
await fetchUpdateProductionTaskStatus(taskDetail.value.id, { taskStatus: 'ywc' })
ElMessage.success('任务已完成')
await fetchUpdateProductionTaskStatus(taskDetail.value.id, {
taskStatus: 'ywc',
conclusion: payload.conclusion,
remark: payload.remark
})
ElMessage.success(isCompleted ? '结论与备注已更新' : '任务已完成')
completeConclusionVisible.value = false
await loadTaskDetail(taskDetail.value.id)
} catch {
/* global error handling */
@@ -1118,6 +1134,11 @@ export function useTaskStepEditor() {
handleCompleteStep,
handleStartTask,
handleCompleteTask,
completeConclusionVisible,
completeConclusionIsEdit,
completeConclusionInitial,
submitCompleteWithConclusion,
taskActionLoading,
addTaskInputRow,
removeTaskInputRow,
saveTaskInputs,
@@ -1149,7 +1170,6 @@ export function useTaskStepEditor() {
saveDataCollections,
manualSaveLoading,
stepActionLoading,
taskActionLoading,
handleManualSave,
initEditor
}
@@ -136,16 +136,23 @@
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建时间" min-width="170" align="center" />
<el-table-column label="操作" :min-width="activeTypeTab === 'temporary' ? 380 : 320" fixed="right" align="center">
<el-table-column label="操作" min-width="380" fixed="right" align="center">
<template #default="{ row }">
<el-button class="btn-op-item" @click="handleView(row)"><el-icon><View /></el-icon>查看</el-button>
<el-button
v-if="activeTypeTab === 'temporary'"
v-if="activeTypeTab === 'temporary' || (activeTypeTab === 'all' && row.workOrderType === 'temporary')"
class="btn-op-item"
@click="handleEdit(row)"
>
<el-icon><EditPen /></el-icon>编辑
</el-button>
<el-button
v-if="activeTypeTab === 'inbound' || (activeTypeTab === 'all' && row.workOrderType !== 'temporary')"
class="btn-op-item"
@click="handleEditRemark(row)"
>
<el-icon><EditPen /></el-icon>编辑
</el-button>
<el-button
v-if="row.workOrderStatus === 'dpz' || row.workOrderStatus === 'ypz'"
class="btn-op-item primary"
@@ -316,6 +323,14 @@
</el-button>
</template>
</el-dialog>
<WorkOrderRemarkDialog
v-model:visible="remarkEditVisible"
:title="remarkEditTitle"
:initial-remark="remarkEditInitialRemark"
:submitting="remarkEditLoading"
@submit="submitRemarkEdit"
/>
</section>
</div>
</template>
@@ -376,6 +391,7 @@
import SystemViewDialog from '@/components/business/system-view-dialog/index.vue'
import type { ViewField, ViewSection } from '@/components/business/system-view-dialog/index.vue'
import { downloadAttachmentFile } from '@/utils/download-attachment'
import WorkOrderRemarkDialog from '@/components/business/work-order-remark-dialog/index.vue'
defineOptions({ name: 'QualityInspectionQcWorkOrder' })
@@ -500,6 +516,32 @@
addVisible.value = true
}
const remarkEditVisible = ref(false)
const remarkEditLoading = ref(false)
const remarkEditRow = ref<QcWorkOrder | null>(null)
const remarkEditTitle = computed(
() => `编辑备注${remarkEditRow.value?.workOrderNo ? ` — ${remarkEditRow.value.workOrderNo}` : ''}`
)
const remarkEditInitialRemark = computed(() => remarkEditRow.value?.remark || '')
function handleEditRemark(row: QcWorkOrder) {
remarkEditRow.value = row
remarkEditVisible.value = true
}
async function submitRemarkEdit(remark: string) {
if (!remarkEditRow.value?.id) return
remarkEditLoading.value = true
try {
await fetchUpdateQcWorkOrder(remarkEditRow.value.id, { remark })
ElMessage.success('保存成功')
remarkEditVisible.value = false
loadData()
} finally {
remarkEditLoading.value = false
}
}
function handleTypeTabChange() {
pagination.page = 1
loadData()
@@ -29,72 +29,12 @@
</div>
</template>
<template #qc-tasks>
<div v-if="detail?.qcInfo?.tasks?.length" class="view-section-slot">
<div class="qc-task-cards">
<div v-for="task in detail.qcInfo.tasks" :key="task.id" class="qc-task-card">
<div class="qc-task-card__header">
<span class="qc-task-card__type">
<el-tag type="info" size="small">{{
task.taskTypeLabel || task.taskType || '—'
}}</el-tag>
</span>
<span class="qc-task-card__conclusion">
<el-tag
v-if="task.conclusion"
:type="task.conclusion === 'tg' ? 'success' : 'danger'"
size="small"
>{{ task.conclusionLabel || task.conclusion }}</el-tag
>
<span v-else class="qc-kv__muted">—</span>
</span>
</div>
<div class="qc-task-card__body">
<div class="qc-kv">
<span class="qc-kv__label">任务状态</span>
<span class="qc-kv__value">
<el-tag :type="taskStatusTagType(task.taskStatus)" size="small">{{
task.taskStatusLabel || taskStatusLabel(task.taskStatus || '') || '—'
}}</el-tag>
</span>
</div>
</div>
</div>
</div>
</div>
<div v-else class="view-section-slot"><p class="view-empty-hint">暂无质检任务</p></div>
<template #qc-info>
<SampleQcInfoCards :qc-info="detail?.qcInfo" :sample-reception="viewReceptionBrief" />
</template>
<template #production-tasks>
<div v-if="detail?.productionInfo?.tasks?.length" class="view-section-slot">
<div class="qc-task-cards">
<div v-for="task in detail.productionInfo.tasks" :key="task.id" class="qc-task-card">
<div class="qc-task-card__header">
<span class="qc-task-card__name">{{ task.taskName || task.taskNo || '—' }}</span>
<span class="qc-task-card__conclusion">
<el-tag :type="taskStatusTagType(task.taskStatus)" size="small">{{
task.taskStatusLabel || productionTaskStatusLabel(task.taskStatus || '') || '—'
}}</el-tag>
</span>
</div>
<div class="qc-task-card__body">
<div class="qc-kv">
<span class="qc-kv__label">任务号</span>
<span class="qc-kv__value">{{ task.taskNo || '—' }}</span>
</div>
<div class="qc-kv">
<span class="qc-kv__label">开始时间</span>
<span class="qc-kv__value">{{ task.startedTime || '—' }}</span>
</div>
<div class="qc-kv">
<span class="qc-kv__label">完成时间</span>
<span class="qc-kv__value">{{ task.completedTime || '—' }}</span>
</div>
</div>
</div>
</div>
</div>
<div v-else class="view-section-slot"><p class="view-empty-hint">暂无生产任务</p></div>
<template #production-info>
<SampleProductionInfoCards :production-info="detail?.productionInfo" />
</template>
<template #review-attachments>
@@ -114,6 +54,8 @@
import SystemViewDialog from '@/components/business/system-view-dialog/index.vue'
import type { ViewSection } from '@/components/business/system-view-dialog/index.vue'
import ProtocolAttachmentReadonly from '@/views/cell-storage/protocol/ProtocolAttachmentReadonly.vue'
import SampleQcInfoCards from '@/components/business/sample-qc-info-cards/index.vue'
import SampleProductionInfoCards from '@/components/business/sample-production-info-cards/index.vue'
import type { QcWorkOrderReceptionDetail } from '@/api/qc-work-order'
import {
fetchStorageReleaseReviewDetail,
@@ -131,14 +73,7 @@
donationStatusLabel,
donationStatusTagType
} from '@/utils/status-tag-registry'
import {
workOrderStatusLabel,
workOrderStatusTagType,
acceptConclusionLabel,
transportTypeLabel,
taskStatusLabel,
taskStatusTagType
} from '@/utils/qc-labels'
import { acceptConclusionLabel, transportTypeLabel } from '@/utils/qc-labels'
import { downloadAttachmentFile } from '@/utils/download-attachment'
const props = defineProps<{
@@ -160,35 +95,6 @@
const minioBaseUrl = (import.meta.env.VITE_MINIO_BASE_URL || '').replace(/\/$/, '')
const PRODUCTION_WO_STATUS_LABELS: Record<string, string> = {
dpz: '待配置',
jxz: '进行中',
ywc: '已完成'
}
const PRODUCTION_TASK_STATUS_LABELS: Record<string, string> = {
dpz: '待配置',
dzx: '待执行',
jxz: '执行中',
ywc: '已完成'
}
function productionWorkOrderStatusLabel(status?: string) {
const s = status || ''
return PRODUCTION_WO_STATUS_LABELS[s] || s || '—'
}
function productionWorkOrderStatusTagType(status?: string) {
if (status === 'ywc') return 'success' as const
if (status === 'jxz') return 'warning' as const
return 'info' as const
}
function productionTaskStatusLabel(status?: string) {
const s = status || ''
return PRODUCTION_TASK_STATUS_LABELS[s] || s || '—'
}
watch(
() => [props.visible, props.reviewId] as const,
async ([vis, id]) => {
@@ -250,6 +156,12 @@
} as QcWorkOrderReceptionDetail
})
const viewReceptionBrief = computed(() => {
const r = viewReception.value
if (!r?.acceptConclusion) return null
return { acceptConclusion: r.acceptConclusion }
})
const viewReceptionAttachmentFiles = computed(() => {
const r = viewReception.value
if (!r) return []
@@ -289,8 +201,6 @@
const rev: Partial<StorageReleaseReview> = d.review || {}
const proto: Partial<ProtocolInfo> = d.protocolInfo || {}
const r = viewReception.value
const qc = d.qcInfo || {}
const production = d.productionInfo || {}
const source = rev.receptionSource || 'cell_storage'
const protocolStatus = protocolStatusDisplay(proto, source)
@@ -327,9 +237,6 @@
? [{ title: '运输信息', fields: transportFields }]
: []
const qcWoStatus = qc.workOrderStatus || ''
const prodWoStatus = production.workOrderStatus || ''
return [
{
title: '基础信息',
@@ -378,35 +285,13 @@
},
{
title: '质检信息',
slot: 'qc-tasks',
fields: [
{ label: '工单号', value: qc.workOrderNo || '—' },
{
label: '工单状态',
value:
qc.workOrderStatusLabel ||
workOrderStatusLabel(qcWoStatus) ||
qcWoStatus ||
'—',
tagType: workOrderStatusTagType(qcWoStatus)
}
]
slot: 'qc-info',
fields: []
},
{
title: '生产信息',
slot: 'production-tasks',
fields: [
{ label: '工单号', value: production.workOrderNo || '—' },
{
label: '工单状态',
value:
production.workOrderStatusLabel ||
productionWorkOrderStatusLabel(prodWoStatus) ||
prodWoStatus ||
'—',
tagType: productionWorkOrderStatusTagType(prodWoStatus)
}
]
slot: 'production-info',
fields: []
},
{
title: '放行审核',
@@ -451,68 +336,15 @@
</script>
<style scoped lang="scss">
.view-empty-hint {
margin: 0;
font-size: 13px;
color: #94a3b8;
.view-section-slot :deep(.sample-card__section-label) {
display: none;
}
.qc-task-cards {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
gap: 10px;
}
.qc-task-card {
border: 1px solid #e2e8f0;
border-radius: 8px;
background: #fff;
overflow: hidden;
}
.qc-task-card__header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
padding: 10px 12px;
border-bottom: 1px solid #f1f5f9;
}
.qc-task-card__name {
font-size: 13px;
font-weight: 600;
color: #1e293b;
}
.qc-task-card__body {
padding: 10px 12px;
display: flex;
flex-direction: column;
gap: 8px;
}
.qc-kv {
display: flex;
align-items: flex-start;
gap: 8px;
font-size: 12px;
}
.qc-kv__label {
color: #94a3b8;
flex-shrink: 0;
min-width: 56px;
}
.qc-kv__value {
color: #1e293b;
font-weight: 500;
}
.qc-kv__muted {
color: #94a3b8;
font-weight: 400;
.view-section-slot :deep(.sample-card__section--qc),
.view-section-slot :deep(.sample-card__section--production) {
margin-top: 0;
padding-top: 0;
border-top: none;
}
.view-reception-attachments {