提交
This commit is contained in:
1 parent
417d6c9c51
commit
c8fe0cdc20
102 files changed
+19847
-12224
No files matched your search
@@ -182,13 +182,22 @@ export function fetchOaTemplateDetail(appId: string) {
|
||||
return request.get<any>({ url: `${BASE}/templates/${appId}` })
|
||||
}
|
||||
|
||||
/** 发起前审批流预览(按当前登录人解析审批人) */
|
||||
export function fetchOaFlowPreview(appId: string, initiatorSelectUserIds?: string[]) {
|
||||
return request.get<{ steps: OaFlowPreviewStep[] }>({
|
||||
/** 发起前审批流预览(条件齐后返回最终路径) */
|
||||
export function fetchOaFlowPreview(
|
||||
appId: string,
|
||||
opts?: { formData?: Record<string, any>; initiatorSelectUserIds?: string[] }
|
||||
) {
|
||||
return request.post<{
|
||||
resolved: boolean
|
||||
message?: string
|
||||
steps: OaFlowPreviewStep[]
|
||||
}>({
|
||||
url: `${BASE}/templates/${appId}/flow-preview`,
|
||||
params: initiatorSelectUserIds?.length
|
||||
? { initiatorSelectUserIds: initiatorSelectUserIds.join(',') }
|
||||
: undefined
|
||||
data: {
|
||||
formData: opts?.formData || {},
|
||||
initiatorSelectUserIds: opts?.initiatorSelectUserIds || undefined
|
||||
},
|
||||
showSuccessMessage: false
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
/**
|
||||
* OA · FormCreate 运行时表单布局
|
||||
* - 设计器栅格 fcRow 渲染为 ._fd-row(flex),props.gutter 不生效
|
||||
* - 用负 margin + 列 padding 模拟间距,并用 width 补偿保证占满整行
|
||||
* - 控件默认拉满列宽,避免日期/输入框定宽导致右侧留白
|
||||
*/
|
||||
|
||||
.form-create {
|
||||
width: 100%;
|
||||
--oa-fc-gutter: 20px;
|
||||
|
||||
.el-row {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* 设计器「栅格布局」假 row(对齐 ElRow gutter:负 margin + 列 padding) */
|
||||
._fd-row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
box-sizing: border-box;
|
||||
position: relative;
|
||||
width: 100%;
|
||||
margin-left: calc(var(--oa-fc-gutter) / -2);
|
||||
margin-right: calc(var(--oa-fc-gutter) / -2);
|
||||
|
||||
> .el-col {
|
||||
box-sizing: border-box;
|
||||
padding-left: calc(var(--oa-fc-gutter) / 2);
|
||||
padding-right: calc(var(--oa-fc-gutter) / 2);
|
||||
}
|
||||
}
|
||||
|
||||
.el-form-item {
|
||||
width: 100%;
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.el-form-item__content {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.el-input,
|
||||
.el-select,
|
||||
.el-cascader,
|
||||
.el-textarea,
|
||||
.el-input-number,
|
||||
.el-date-editor,
|
||||
.el-date-editor.el-input,
|
||||
.el-date-editor.el-input__wrapper {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
@@ -25,6 +25,9 @@
|
||||
// OA 审批 FormCreate 设计器三栏布局
|
||||
@use './core/oa-fc-designer.scss';
|
||||
|
||||
// OA 审批 FormCreate 运行时表单(栅格间距 / 控件铺满)
|
||||
@use './core/oa-fc-runtime.scss';
|
||||
|
||||
// 主题切换过渡优化
|
||||
@use './core/theme-change.scss';
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<!-- 协议附件 — 迷你缩略图只读(卡片列表用) -->
|
||||
<template>
|
||||
<div class="protocol-attachment-mini">
|
||||
<div class="protocol-attachment-mini" :class="{ 'is-multi': files.length > 1 }">
|
||||
<div v-if="label" class="protocol-attachment-mini__label">{{ label }}</div>
|
||||
<span v-if="!files.length" class="protocol-attachment-mini__empty">{{ emptyText }}</span>
|
||||
<div v-else class="protocol-attachment-mini__list">
|
||||
@@ -22,12 +22,12 @@
|
||||
</template>
|
||||
<template v-else-if="isVideoFile(file)">
|
||||
<div class="protocol-attachment-mini__icon protocol-attachment-mini__icon--video">
|
||||
<el-icon :size="20"><VideoPlay /></el-icon>
|
||||
<el-icon :size="files.length > 1 ? 14 : 20"><VideoPlay /></el-icon>
|
||||
</div>
|
||||
</template>
|
||||
<template v-else>
|
||||
<div class="protocol-attachment-mini__icon protocol-attachment-mini__icon--doc">
|
||||
<el-icon :size="20"><Document /></el-icon>
|
||||
<el-icon :size="files.length > 1 ? 14 : 20"><Document /></el-icon>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
@@ -219,4 +219,42 @@
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
|
||||
/* 多附件时缩小缩略图,便于在卡片内并排展示 */
|
||||
.protocol-attachment-mini.is-multi {
|
||||
.protocol-attachment-mini__list {
|
||||
gap: 4px;
|
||||
}
|
||||
|
||||
.protocol-attachment-mini__item {
|
||||
width: 48px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.protocol-attachment-mini__preview {
|
||||
height: 36px;
|
||||
}
|
||||
|
||||
.protocol-attachment-mini__icon {
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
.protocol-attachment-mini__footer {
|
||||
padding: 2px 3px;
|
||||
gap: 1px;
|
||||
}
|
||||
|
||||
.protocol-attachment-mini__name {
|
||||
font-size: 9px;
|
||||
}
|
||||
|
||||
.protocol-attachment-mini__download {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
font-size: 9px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,10 @@
|
||||
<!-- 运行时栅格行:对齐设计器 FcRow(._fd-row flex),间距由 oa-fc-runtime.scss 提供 -->
|
||||
<template>
|
||||
<div class="_fd-row el-row" v-bind="$attrs">
|
||||
<slot />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
defineOptions({ name: 'FcRow', inheritAttrs: false })
|
||||
</script>
|
||||
@@ -1,11 +1,14 @@
|
||||
<!-- 发起审批 · 表单底部审批流预览(对齐 docs/mockups/oa-approval-start-flow-preview-demo.html) -->
|
||||
<template>
|
||||
<div class="oa-flow-preview">
|
||||
<div v-loading="loading" class="oa-flow-preview">
|
||||
<div class="oa-flow-preview__title">
|
||||
<span>审批流程</span>
|
||||
<span v-if="hint" class="oa-flow-preview__hint">{{ hint }}</span>
|
||||
<span v-if="resolved && hint" class="oa-flow-preview__hint">{{ hint }}</span>
|
||||
</div>
|
||||
<div v-loading="loading" class="oa-flow-preview__chain">
|
||||
<div v-if="!resolved" class="oa-flow-preview__pending">
|
||||
{{ pendingMessage || '必填信息填写后,流程将自动显示' }}
|
||||
</div>
|
||||
<div v-else class="oa-flow-preview__chain">
|
||||
<div v-if="!loading && !steps.length" class="oa-flow-preview__empty">暂无流程配置</div>
|
||||
<div v-for="(s, idx) in steps" :key="s.id || idx" class="oa-flow-step">
|
||||
<div class="oa-flow-rail">
|
||||
@@ -49,15 +52,20 @@
|
||||
steps?: OaFlowPreviewStep[]
|
||||
loading?: boolean
|
||||
hint?: string
|
||||
resolved?: boolean
|
||||
pendingMessage?: string
|
||||
}>(),
|
||||
{
|
||||
steps: () => [],
|
||||
loading: false,
|
||||
hint: '按当前发起人解析审批人'
|
||||
hint: '按当前发起人解析审批人',
|
||||
resolved: true,
|
||||
pendingMessage: '必填信息填写后,流程将自动显示'
|
||||
}
|
||||
)
|
||||
|
||||
const steps = computed(() => props.steps || [])
|
||||
const resolved = computed(() => props.resolved !== false)
|
||||
|
||||
function signBadge(s: OaFlowPreviewStep) {
|
||||
if (s.type === 'cc' || s.signMode === 'cc') return 'cc'
|
||||
@@ -105,6 +113,14 @@
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.oa-flow-preview__pending {
|
||||
padding: 16px 8px 20px;
|
||||
color: var(--mint-text-muted, #94a3b8);
|
||||
font-size: 13px;
|
||||
line-height: 1.5;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.oa-flow-preview__empty {
|
||||
padding: 8px 0;
|
||||
color: var(--mint-text-muted, #94a3b8);
|
||||
|
||||
@@ -29,6 +29,8 @@
|
||||
const frameRef = ref<HTMLIFrameElement | null>(null)
|
||||
const frameReady = ref(false)
|
||||
let reqSeq = 0
|
||||
/** 最近一次推入 iframe 的 schema JSON,用于避免保存回写后重复 setRule 清空画布 */
|
||||
let lastPushedJson = ''
|
||||
const pending = new Map<
|
||||
number,
|
||||
{ resolve: (v: { rule: unknown; option: unknown }) => void; reject: (e: Error) => void }
|
||||
@@ -62,6 +64,10 @@
|
||||
}
|
||||
}
|
||||
|
||||
function schemaJson(schema: unknown) {
|
||||
return JSON.stringify(toPlainSchema(schema))
|
||||
}
|
||||
|
||||
function postToFrame(payload: Record<string, unknown>) {
|
||||
try {
|
||||
frameRef.value?.contentWindow?.postMessage(payload, '*')
|
||||
@@ -70,11 +76,16 @@
|
||||
}
|
||||
}
|
||||
|
||||
function pushSchemaToFrame() {
|
||||
/** force=true 时即使内容相同也重新 setRule(用于切回表单 Tab 强制回显) */
|
||||
function pushSchemaToFrame(force = false) {
|
||||
if (!frameReady.value) return
|
||||
const schema = toPlainSchema(props.modelValue)
|
||||
const json = JSON.stringify(schema)
|
||||
if (!force && json === lastPushedJson) return
|
||||
lastPushedJson = json
|
||||
postToFrame({
|
||||
type: MSG.SET,
|
||||
schema: toPlainSchema(props.modelValue)
|
||||
schema
|
||||
})
|
||||
}
|
||||
|
||||
@@ -88,7 +99,7 @@
|
||||
|
||||
function onFrameLoad() {
|
||||
if (frameReady.value) {
|
||||
pushSchemaToFrame()
|
||||
pushSchemaToFrame(true)
|
||||
pushFlowRefs()
|
||||
}
|
||||
}
|
||||
@@ -98,11 +109,13 @@
|
||||
if (!data || typeof data !== 'object') return
|
||||
if (data.type === MSG.READY) {
|
||||
frameReady.value = true
|
||||
pushSchemaToFrame()
|
||||
lastPushedJson = ''
|
||||
pushSchemaToFrame(true)
|
||||
pushFlowRefs()
|
||||
// 宿主刚就绪时再补推一次,避免 setRule 早于内部 dragForm 初始化
|
||||
window.setTimeout(() => pushSchemaToFrame(), 50)
|
||||
window.setTimeout(() => pushSchemaToFrame(), 200)
|
||||
// 宿主刚就绪时再补推,避免 setRule 早于内部 dragForm / 菜单初始化
|
||||
window.setTimeout(() => pushSchemaToFrame(true), 50)
|
||||
window.setTimeout(() => pushSchemaToFrame(true), 200)
|
||||
window.setTimeout(() => pushSchemaToFrame(true), 500)
|
||||
return
|
||||
}
|
||||
if (data.type === MSG.SCHEMA && typeof data.requestId === 'number') {
|
||||
@@ -110,6 +123,8 @@
|
||||
if (!wait) return
|
||||
pending.delete(data.requestId)
|
||||
const schema = toPlainSchema(data.schema)
|
||||
// 与父级即将回写的内容对齐,避免 watch 再次 setRule
|
||||
lastPushedJson = JSON.stringify(schema)
|
||||
wait.resolve(schema)
|
||||
}
|
||||
}
|
||||
@@ -136,12 +151,17 @@
|
||||
})
|
||||
}
|
||||
|
||||
/** 切回「表单设计」Tab 时强制把父级 schema 灌回画布 */
|
||||
function reapplySchema() {
|
||||
pushSchemaToFrame(true)
|
||||
pushFlowRefs()
|
||||
}
|
||||
|
||||
watch(
|
||||
() => props.modelValue,
|
||||
() => schemaJson(props.modelValue),
|
||||
() => {
|
||||
pushSchemaToFrame()
|
||||
},
|
||||
{ deep: true }
|
||||
pushSchemaToFrame(false)
|
||||
}
|
||||
)
|
||||
|
||||
watch(
|
||||
@@ -162,7 +182,7 @@
|
||||
pending.clear()
|
||||
})
|
||||
|
||||
defineExpose({ fetchSchema })
|
||||
defineExpose({ fetchSchema, reapplySchema })
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
@@ -8,10 +8,7 @@
|
||||
<div v-if="!items.length" class="oa-flow-preview__empty">暂无任务记录</div>
|
||||
<div v-for="(item, idx) in items" :key="item.key" class="oa-flow-step">
|
||||
<div class="oa-flow-rail">
|
||||
<div
|
||||
class="oa-flow-dot"
|
||||
:class="dotClass(item)"
|
||||
/>
|
||||
<div class="oa-flow-dot" :class="dotClass(item)" />
|
||||
<div v-if="idx < items.length - 1" class="oa-flow-line" />
|
||||
</div>
|
||||
<div class="oa-flow-card">
|
||||
@@ -20,7 +17,11 @@
|
||||
<span v-if="statusBadge(item)" class="oa-flow-badge" :class="statusBadge(item)">
|
||||
{{ statusText(item.status) }}
|
||||
</span>
|
||||
<span v-if="item.taskType === 'cc'" class="oa-flow-badge cc">抄送</span>
|
||||
<span v-if="signBadge(item)" class="oa-flow-badge" :class="signBadge(item)">
|
||||
{{ signBadgeText(item) }}
|
||||
</span>
|
||||
<span v-else-if="item.taskType === 'cc'" class="oa-flow-badge cc">抄送</span>
|
||||
<span v-else-if="item.taskType === 'end'" class="oa-flow-badge mute">结束</span>
|
||||
<template v-if="item.timestamp">
|
||||
<span class="oa-flow-card__sep">·</span>
|
||||
<span class="oa-flow-card__meta" :title="item.timestamp">{{ item.timestamp }}</span>
|
||||
@@ -32,12 +33,21 @@
|
||||
</span>
|
||||
</template>
|
||||
<span
|
||||
v-if="item.assignee && item.kind !== 'pending_node' && item.kind !== 'terminal'"
|
||||
v-if="displayPeople(item).length && item.kind !== 'terminal'"
|
||||
class="oa-flow-card__people"
|
||||
>
|
||||
<span class="oa-person-chip">
|
||||
<span class="oa-person-chip__dot">{{ avatarChar(item.assignee) }}</span>
|
||||
{{ item.assignee }}
|
||||
<span
|
||||
v-for="p in displayPeople(item)"
|
||||
:key="p.id || p.nickName"
|
||||
class="oa-person-chip"
|
||||
:class="personChipClass(p.status)"
|
||||
:title="personTitle(p)"
|
||||
>
|
||||
<span class="oa-person-chip__dot">{{ avatarChar(p.nickName) }}</span>
|
||||
{{ p.nickName }}
|
||||
<span v-if="personStatusHint(p.status)" class="oa-person-chip__st">
|
||||
{{ personStatusHint(p.status) }}
|
||||
</span>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
@@ -53,6 +63,15 @@
|
||||
<script setup lang="ts">
|
||||
defineOptions({ name: 'OaProgressChain' })
|
||||
|
||||
export type OaProgressPerson = {
|
||||
id?: string
|
||||
nickName?: string
|
||||
status?: string
|
||||
timestamp?: string
|
||||
commentText?: string
|
||||
taskId?: string
|
||||
}
|
||||
|
||||
export type OaProgressChainItem = {
|
||||
key: string
|
||||
title: string
|
||||
@@ -63,6 +82,8 @@
|
||||
commentText?: string
|
||||
taskType?: string
|
||||
kind?: string
|
||||
signMode?: string
|
||||
people?: OaProgressPerson[]
|
||||
}
|
||||
|
||||
withDefaults(
|
||||
@@ -100,6 +121,59 @@
|
||||
return ''
|
||||
}
|
||||
|
||||
function signBadge(item: OaProgressChainItem) {
|
||||
if (item.taskType === 'cc' || item.signMode === 'cc') return 'cc'
|
||||
if (item.signMode === 'and') return 'and'
|
||||
if (item.signMode === 'or') return 'or'
|
||||
return ''
|
||||
}
|
||||
|
||||
function signBadgeText(item: OaProgressChainItem) {
|
||||
const k = signBadge(item)
|
||||
if (k === 'cc') return '抄送'
|
||||
if (k === 'and') return '会签'
|
||||
if (k === 'or') return '或签'
|
||||
return ''
|
||||
}
|
||||
|
||||
function displayPeople(item: OaProgressChainItem): OaProgressPerson[] {
|
||||
const list = Array.isArray(item.people) ? item.people.filter((p) => p?.nickName || p?.id) : []
|
||||
if (list.length) {
|
||||
return list.map((p) => ({
|
||||
...p,
|
||||
nickName: (p.nickName || p.id || '').trim()
|
||||
}))
|
||||
}
|
||||
const name = (item.assignee || '').trim()
|
||||
if (!name) return []
|
||||
return [{ nickName: name, status: item.status }]
|
||||
}
|
||||
|
||||
function personChipClass(status?: string) {
|
||||
const s = status || ''
|
||||
if (s === 'approved' || s === 'completed') return 'is-ok'
|
||||
if (s === 'pending' || s === 'running') return 'is-pending'
|
||||
if (s === 'rejected' || s === 'returned' || s === 'cancelled') return 'is-danger'
|
||||
if (s === 'done' || s === 'not_reached') return 'is-mute'
|
||||
return ''
|
||||
}
|
||||
|
||||
function personStatusHint(status?: string) {
|
||||
const s = status || ''
|
||||
if (s === 'approved') return '已同意'
|
||||
if (s === 'rejected') return '已拒绝'
|
||||
if (s === 'returned') return '已打回'
|
||||
if (s === 'pending' || s === 'running') return '待处理'
|
||||
if (s === 'done') return '无需处理'
|
||||
if (s === 'not_reached') return '未到达'
|
||||
return ''
|
||||
}
|
||||
|
||||
function personTitle(p: OaProgressPerson) {
|
||||
const parts = [p.nickName || '', statusText(p.status || ''), p.timestamp || ''].filter(Boolean)
|
||||
return parts.join(' · ')
|
||||
}
|
||||
|
||||
function dotClass(item: OaProgressChainItem) {
|
||||
const s = item.status || ''
|
||||
if (s === 'approved' || s === 'completed' || s === 'done' || s === 'submitted') return 'ok'
|
||||
@@ -275,6 +349,42 @@
|
||||
white-space: nowrap;
|
||||
background: #f1f5f9;
|
||||
border-radius: 999px;
|
||||
|
||||
&.is-ok {
|
||||
color: #059669;
|
||||
background: #ecfdf5;
|
||||
|
||||
.oa-person-chip__dot {
|
||||
background: var(--primary, #10b981);
|
||||
}
|
||||
}
|
||||
|
||||
&.is-pending {
|
||||
color: #d97706;
|
||||
background: #fff7ed;
|
||||
|
||||
.oa-person-chip__dot {
|
||||
background: #d97706;
|
||||
}
|
||||
}
|
||||
|
||||
&.is-danger {
|
||||
color: #dc2626;
|
||||
background: #fef2f2;
|
||||
|
||||
.oa-person-chip__dot {
|
||||
background: #ef4444;
|
||||
}
|
||||
}
|
||||
|
||||
&.is-mute {
|
||||
color: #94a3b8;
|
||||
background: #f8fafc;
|
||||
|
||||
.oa-person-chip__dot {
|
||||
background: #94a3b8;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.oa-person-chip__dot {
|
||||
@@ -289,6 +399,12 @@
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.oa-person-chip__st {
|
||||
margin-left: 2px;
|
||||
font-size: 10px;
|
||||
opacity: 0.85;
|
||||
}
|
||||
|
||||
.oa-flow-badge {
|
||||
flex-shrink: 0;
|
||||
padding: 0 5px;
|
||||
@@ -308,6 +424,11 @@
|
||||
background: #fff7ed;
|
||||
}
|
||||
|
||||
&.and {
|
||||
color: #2563eb;
|
||||
background: #eff6ff;
|
||||
}
|
||||
|
||||
&.danger {
|
||||
color: #dc2626;
|
||||
background: #fef2f2;
|
||||
|
||||
@@ -68,6 +68,16 @@
|
||||
:disabled="disabled"
|
||||
@update:model-value="(v) => onValueChange(idx, coerceValue(rule.field, v))"
|
||||
/>
|
||||
<el-button
|
||||
class="cond-rule-editor__del"
|
||||
text
|
||||
type="danger"
|
||||
:disabled="disabled || localRules.length <= 1"
|
||||
title="删除条件"
|
||||
@click="removeRule(idx)"
|
||||
>
|
||||
<el-icon><Delete /></el-icon>
|
||||
</el-button>
|
||||
</div>
|
||||
<div v-if="idx < localRules.length - 1" class="cond-rule-editor__and">且(AND)</div>
|
||||
</div>
|
||||
@@ -86,7 +96,7 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { computed, watch } from 'vue'
|
||||
import { Plus } from '@element-plus/icons-vue'
|
||||
import { Delete, Plus } from '@element-plus/icons-vue'
|
||||
import {
|
||||
opsForFieldType,
|
||||
type ConditionCandidate,
|
||||
@@ -207,6 +217,12 @@
|
||||
}
|
||||
])
|
||||
}
|
||||
|
||||
function removeRule(idx: number) {
|
||||
if (localRules.value.length <= 1) return
|
||||
const next = localRules.value.filter((_, i) => i !== idx)
|
||||
emitRules(next)
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
@@ -230,11 +246,16 @@
|
||||
|
||||
.cond-rule-editor__row {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr auto 1fr;
|
||||
grid-template-columns: 1fr auto 1fr auto;
|
||||
gap: 6px;
|
||||
align-items: center;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
.cond-rule-editor__del {
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
.cond-rule-editor__and {
|
||||
margin: 0 0 6px;
|
||||
color: var(--mint-text-muted, #94a3b8);
|
||||
|
||||
@@ -36,8 +36,23 @@
|
||||
<div class="flow-cond-col__title" @click.stop="emit('edit', node)">
|
||||
{{ branchTitle(g, idx) }}
|
||||
</div>
|
||||
<!-- 分支仅有结束节点时,先露出「+」才能往分支内插入 -->
|
||||
<el-dropdown
|
||||
v-if="!g.child || g.child.type === 'end'"
|
||||
trigger="click"
|
||||
@command="(cmd: string) => onAddInGroup(idx, cmd)"
|
||||
>
|
||||
<button type="button" class="flow-plus" title="在本分支添加节点">+</button>
|
||||
<template #dropdown>
|
||||
<el-dropdown-menu>
|
||||
<el-dropdown-item command="approval">审批人</el-dropdown-item>
|
||||
<el-dropdown-item command="cc">抄送人</el-dropdown-item>
|
||||
<el-dropdown-item command="condition">条件分支</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</template>
|
||||
</el-dropdown>
|
||||
<FlowBranch
|
||||
v-if="g.child"
|
||||
v-if="g.child && g.child.type !== 'end'"
|
||||
:node="g.child"
|
||||
:depth="depth + 1"
|
||||
:candidates="candidates"
|
||||
@@ -48,6 +63,28 @@
|
||||
<div v-else class="flow-end">流程结束</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 条件分支汇合后继续主链 -->
|
||||
<el-dropdown trigger="click" @command="(cmd: string) => onAdd(cmd)">
|
||||
<button type="button" class="flow-plus" title="在条件分支后添加节点">+</button>
|
||||
<template #dropdown>
|
||||
<el-dropdown-menu>
|
||||
<el-dropdown-item command="approval">审批人</el-dropdown-item>
|
||||
<el-dropdown-item command="cc">抄送人</el-dropdown-item>
|
||||
<el-dropdown-item command="condition">条件分支</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</template>
|
||||
</el-dropdown>
|
||||
<FlowBranch
|
||||
v-if="node.child"
|
||||
:node="node.child"
|
||||
:depth="depth"
|
||||
:candidates="candidates"
|
||||
@edit="(n) => emit('edit', n)"
|
||||
@remove="(id) => emit('remove', id)"
|
||||
@add="(payload) => emit('add', payload)"
|
||||
/>
|
||||
<div v-else class="flow-end">流程结束</div>
|
||||
</template>
|
||||
|
||||
<template v-else>
|
||||
@@ -102,7 +139,14 @@
|
||||
const emit = defineEmits<{
|
||||
edit: [node: FlowNode]
|
||||
remove: [nodeId: string]
|
||||
add: [payload: { parentId: string; type: 'approval' | 'cc' | 'condition' }]
|
||||
add: [
|
||||
payload: {
|
||||
parentId: string
|
||||
type: 'approval' | 'cc' | 'condition'
|
||||
/** 写入条件节点的第 N 个分支;缺省则写入 parent.child(汇合后主链) */
|
||||
groupIndex?: number
|
||||
}
|
||||
]
|
||||
}>()
|
||||
|
||||
function typeLabel(t: string) {
|
||||
@@ -134,6 +178,12 @@
|
||||
emit('add', { parentId: props.node.id, type: cmd })
|
||||
}
|
||||
}
|
||||
|
||||
function onAddInGroup(groupIndex: number, cmd: string) {
|
||||
if (cmd === 'approval' || cmd === 'cc' || cmd === 'condition') {
|
||||
emit('add', { parentId: props.node.id, type: cmd, groupIndex })
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
@@ -459,10 +459,35 @@
|
||||
return null
|
||||
}
|
||||
|
||||
function onAdd(payload: { parentId: string; type: 'approval' | 'cc' | 'condition' }) {
|
||||
function onAdd(payload: {
|
||||
parentId: string
|
||||
type: 'approval' | 'cc' | 'condition'
|
||||
groupIndex?: number
|
||||
}) {
|
||||
const parent = findNode(root.value, payload.parentId)
|
||||
if (!parent) return
|
||||
const neu = createNode(payload.type)
|
||||
|
||||
// 写入条件节点的某一分支
|
||||
if (
|
||||
parent.type === 'condition' &&
|
||||
typeof payload.groupIndex === 'number' &&
|
||||
parent.conditionGroups?.[payload.groupIndex]
|
||||
) {
|
||||
const g = parent.conditionGroups[payload.groupIndex]
|
||||
const old = g.child || createEndNode()
|
||||
if (payload.type === 'condition') {
|
||||
const groups = neu.conditionGroups || []
|
||||
const def = groups.find((x) => x.isDefault) || groups[groups.length - 1]
|
||||
if (def) def.child = old
|
||||
} else {
|
||||
neu.child = old
|
||||
}
|
||||
g.child = neu
|
||||
commit()
|
||||
return
|
||||
}
|
||||
|
||||
const old = parent.child || createEndNode()
|
||||
if (payload.type === 'condition') {
|
||||
const groups = neu.conditionGroups || []
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/** 允许「参与流程条件分支」的 FormCreate type */
|
||||
export const CONDITION_ELIGIBLE_TYPES = new Set([
|
||||
'input',
|
||||
'inputNumber',
|
||||
'number',
|
||||
'money',
|
||||
@@ -20,6 +21,7 @@ export interface ConditionCandidate {
|
||||
}
|
||||
|
||||
export function opsForFieldType(type: string): Array<{ value: ConditionOp; label: string }> {
|
||||
// 单选/下拉为离散选项,仅等于/不等于;输入框常填数字参与区间比较,与数字/金额/日期同套运算符
|
||||
if (type === 'radio' || type === 'select') {
|
||||
return [
|
||||
{ value: '==', label: '等于' },
|
||||
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_approval_print_ts", "label": "oa-approval-print.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L1"}, {"id": "utils_oa_approval_print_resolvestamp", "label": "resolveStamp()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L80"}, {"id": "utils_oa_approval_print_statustext", "label": "statusText()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L97"}, {"id": "utils_oa_approval_print_formatdateonly", "label": "formatDateOnly()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L101"}, {"id": "utils_oa_approval_print_formatnow", "label": "formatNow()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L107"}, {"id": "utils_oa_approval_print_ishttpurl", "label": "isHttpUrl()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L113"}, {"id": "utils_oa_approval_print_extracturls", "label": "extractUrls()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L117"}, {"id": "utils_oa_approval_print_formatscalar", "label": "formatScalar()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L148"}, {"id": "utils_oa_approval_print_walkrules", "label": "walkRules()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L170"}, {"id": "utils_oa_approval_print_buildformrows", "label": "buildFormRows()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L206"}, {"id": "utils_oa_approval_print_buildflowitems", "label": "buildFlowItems()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L226"}, {"id": "utils_oa_approval_print_buildoaprintmodel", "label": "buildOaPrintModel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L316"}, {"id": "utils_oa_approval_print_buildoaprintfilename", "label": "buildOaPrintFilename()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L354"}, {"id": "utils_oa_approval_print_canvastopdf", "label": "canvasToPdf()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L367"}, {"id": "utils_oa_approval_print_exportoaapprovalpdf", "label": "exportOaApprovalPdf()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L401"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_approval_print_ts", "target": "vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L5", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_approval_print_ts", "target": "html2canvas", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L6", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_approval_print_ts", "target": "jspdf", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L7", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_approval_print_ts", "target": "utils_oa_approval_print_resolvestamp", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L80", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_approval_print_ts", "target": "utils_oa_approval_print_statustext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-approval-print.ts", "source_location": "L97", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_approval_print_ts", "target": "utils_oa_approval_print_formatdateonly", "relation": "contains",Line truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "label": "oa-form-create-upload.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L1"}, {"id": "utils_oa_form_create_upload_resolveuploadresponseurl", "label": "resolveUploadResponseUrl()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L25"}, {"id": "utils_oa_form_create_upload_ensureoauploadruleprops", "label": "ensureOaUploadRuleProps()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L39"}, {"id": "utils_oa_form_create_upload_setupformcreateupload", "label": "setupFormCreateUpload()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L98"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L5", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_business", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L6", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_composables_useattachmentactions", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L7", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "target": "utils_oa_form_create_upload_resolveuploadresponseurl", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L25", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "target": "utils_oa_form_create_upload_ensureoauploadruleprops", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L39", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "target": "utils_oa_form_create_upload_setupformcreateupload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L98", "weight": 1.0}], "raw_calls": [{"caller_nid": "utils_oa_form_create_upload_resolveuploadresponseurl", "callee": "trim", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L26"}, {"caller_nid": "utils_oa_form_create_upload_resolveuploadresponseurl", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L26"}, {"caller_nid": "utils_oa_form_create_upload_resolveuploadresponseurl", "callee": "attachmentFullUrl", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L30"}, {"caller_nid": "utils_oa_form_create_upload_ensureoauploadruleprops", "callee": "isArray", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L40"}, {"caller_nid": "utils_oa_form_create_upload_ensureoauploadruleprops", "callee": "map", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L41"}]}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_roles_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/roles/index.vue", "source_location": "L1"}, {"id": "roles_index_avatarcolor", "label": "avatarColor()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/roles/index.vue", "source_location": "L390"}, {"id": "roles_index_avatarinitial", "label": "avatarInitial()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/roles/index.vue", "source_location": "L396"}, {"id": "roles_index_resolveuser", "label": "resolveUser()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/roles/index.vue", "source_location": "L401"}, {"id": "roles_index_memberoptionlabel", "label": "memberOptionLabel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/roles/index.vue", "source_location": "L405"}, {"id": "roles_index_memberoptionsub", "label": "memberOptionSub()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/roles/index.vue", "source_location": "L412"}, {"id": "roles_index_chiptitle", "label": "chipTitle()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/roles/index.vue", "source_location": "L419"}, {"id": "roles_index_onmemberpick", "label": "onMemberPick()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/roles/index.vue", "source_location": "L424"}, {"id": "roles_index_removemember", "label": "removeMember()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/roles/index.vue", "source_location": "L434"}, {"id": "roles_index_loaddata", "label": "loadData()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/roles/index.vue", "source_location": "L438"}, {"id": "roles_index_handlesearch", "label": "handleSearch()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/roles/index.vue", "source_location": "L451"}, {"id": "roles_index_handlereset", "label": "handleReset()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/roles/index.vue", "source_location": "L455"}, {"id": "roles_index_resetform", "label": "resetForm()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/roles/index.vue", "source_location": "L461"}, {"id": "roles_index_handleadd", "label": "handleAdd()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/roles/index.vue", "source_location": "L469"}, {"id": "roles_index_handleedit", "label": "handleEdit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/roles/index.vue", "source_location": "L477"}, {"id": "roles_index_handlesubmit", "label": "handleSubmit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/roles/index.vue", "source_location": "L489"}, {"id": "roles_index_handledelete", "label": "handleDelete()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/roles/index.vue", "source_location": "L514"}, {"id": "roles_index_loaduseroptions", "label": "loadUserOptions()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/roles/index.vue", "source_location": "L526"}, {"id": "roles_index_handlemembers", "label": "handleMembers()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/roles/index.vue", "source_location": "L545"}, {"id": "roles_index_handlemembersubmit", "label": "handleMemberSubmit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/roles/index.vue", "source_location": "L560"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_roles_index_vue", "target": "vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/roles/index.vue", "source_location": "L320", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_roles_index_vue", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/roles/index.vue", "source_location": "L321", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_roles_index_vue", "target"Line truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "label": "oa-form-create-upload.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L1"}, {"id": "utils_oa_form_create_upload_resolveuploadresponseurl", "label": "resolveUploadResponseUrl()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L25"}, {"id": "utils_oa_form_create_upload_ensureoauploadruleprops", "label": "ensureOaUploadRuleProps()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L37"}, {"id": "utils_oa_form_create_upload_setupformcreateupload", "label": "setupFormCreateUpload()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L85"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L5", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_business", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L6", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_composables_useattachmentactions", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L7", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "target": "utils_oa_form_create_upload_resolveuploadresponseurl", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L25", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "target": "utils_oa_form_create_upload_ensureoauploadruleprops", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L37", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "target": "utils_oa_form_create_upload_setupformcreateupload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L85", "weight": 1.0}], "raw_calls": [{"caller_nid": "utils_oa_form_create_upload_resolveuploadresponseurl", "callee": "trim", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L26"}, {"caller_nid": "utils_oa_form_create_upload_resolveuploadresponseurl", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L26"}, {"caller_nid": "utils_oa_form_create_upload_resolveuploadresponseurl", "callee": "attachmentFullUrl", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L30"}, {"caller_nid": "utils_oa_form_create_upload_ensureoauploadruleprops", "callee": "isArray", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L38"}, {"caller_nid": "utils_oa_form_create_upload_ensureoauploadruleprops", "callee": "map", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L39"}]}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oa_condition_fields_ts", "label": "oa-condition-fields.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L1"}, {"id": "oa_approval_oa_condition_fields_opsforfieldtype", "label": "opsForFieldType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L23"}, {"id": "oa_approval_oa_condition_fields_walkrules", "label": "walkRules()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L40"}, {"id": "oa_approval_oa_condition_fields_flattenformrules", "label": "flattenFormRules()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L50"}, {"id": "oa_approval_oa_condition_fields_listconditioncandidates", "label": "listConditionCandidates()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L65"}, {"id": "oa_approval_oa_condition_fields_collectconditionreferencedfields", "label": "collectConditionReferencedFields()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L91"}, {"id": "oa_approval_oa_condition_fields_normalizeschemaconditionrequired", "label": "normalizeSchemaConditionRequired()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L109"}, {"id": "oa_approval_oa_condition_fields_formatconditionpreview", "label": "formatConditionPreview()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L137"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oa_condition_fields_ts", "target": "oa_approval_oa_condition_fields_opsforfieldtype", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L23", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oa_condition_fields_ts", "target": "oa_approval_oa_condition_fields_walkrules", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L40", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oa_condition_fields_ts", "target": "oa_approval_oa_condition_fields_flattenformrules", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L50", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oa_condition_fields_ts", "target": "oa_approval_oa_condition_fields_listconditioncandidates", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L65", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oa_condition_fields_ts", "target": "oa_approval_oa_condition_fields_collectconditionreferencedfields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L91", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oa_condition_fields_ts", "target": "oa_approval_oa_condition_fields_normalizeschemaconditionrequired", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L109", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oa_condition_fields_ts", "target": "oa_approval_oa_condition_fields_formatconditionpreview", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L137", "weight": 1.0}, {"source": "oa_approval_oa_condition_fields_flattenformrules", "target": "oa_approval_oa_condition_fields_walkrules", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-aLine truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "label": "PreTransitProtocolCardList.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L1"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "target": "vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L455", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "target": "icons_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L456", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_pre_transit_sample", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L457", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_status_tag_registry", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L458", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_status_tag_registry", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L470", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_sample_code_with_special_display_index_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L471", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_protocol_attachment_mini_readonly_index_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L472", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_protocol_source_attachment", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L473", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_quality_inspection_pre_transit_sample_pretransitprotocolcardlist_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_composables_useattachmentactions", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/quality-inspection/pre-transit-sample/PreTransitProtocolCardList.vue", "source_location": "L474", "weight": 1.0}], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_start_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue", "source_location": "L1"}, {"id": "start_index_validate", "label": "validate()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue", "source_location": "L388"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_start_index_vue", "target": "start_index_validate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue", "source_location": "L388", "weight": 1.0}], "raw_calls": [{"caller_nid": "start_index_validate", "callee": "warning", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue", "source_location": "L390"}]}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_conditionruleeditor_vue", "label": "ConditionRuleEditor.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/ConditionRuleEditor.vue", "source_location": "L1"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_conditionruleeditor_vue", "target": "icons_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/ConditionRuleEditor.vue", "source_location": "L99", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_conditionruleeditor_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oa_condition_fields", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/ConditionRuleEditor.vue", "source_location": "L100", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_conditionruleeditor_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/ConditionRuleEditor.vue", "source_location": "L105", "weight": 1.0}], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_instances_detail_vue", "label": "detail.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/instances/detail.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "label": "main.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L1"}, {"id": "src_main_masksecret", "label": "maskSecret()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L26"}, {"id": "src_main_logapicryptobootinfo", "label": "logApiCryptoBootInfo()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L32"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_patch_el_select_filterable", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L1", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_app_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L2", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L3", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_store", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L8", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_router", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L9", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_locales", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L10", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_assets_styles_core_tailwind_css", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L11", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_assets_styles_index_scss", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L12", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_sys_console_ts", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L13", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_directives", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L14", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_sys_error_handle", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L15", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "designer", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L16", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "auto_import", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/main.ts", "source_location": "L17", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload", "relation": "imports_from", "confidence": "EXTRACTED", "source_filLine truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_start_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue", "source_location": "L1"}, {"id": "start_index_validate", "label": "validate()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue", "source_location": "L375"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_start_index_vue", "target": "start_index_validate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue", "source_location": "L375", "weight": 1.0}], "raw_calls": [{"caller_nid": "start_index_validate", "callee": "warning", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue", "source_location": "L377"}]}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "label": "main.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L1"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L4", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L5", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "zh_cn", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L6", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "icons_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L7", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "index_css", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L8", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "designer", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L9", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L10", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_main_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_app_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/main.ts", "source_location": "L11", "weight": 1.0}], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oaprogresschain_vue", "label": "OaProgressChain.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L1"}, {"id": "oa_approval_oaprogresschain_statustext", "label": "statusText()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L97"}, {"id": "oa_approval_oaprogresschain_statusbadge", "label": "statusBadge()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L114"}, {"id": "oa_approval_oaprogresschain_signbadge", "label": "signBadge()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L123"}, {"id": "oa_approval_oaprogresschain_signbadgetext", "label": "signBadgeText()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L130"}, {"id": "oa_approval_oaprogresschain_displaypeople", "label": "displayPeople()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L138"}, {"id": "oa_approval_oaprogresschain_personchipclass", "label": "personChipClass()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L151"}, {"id": "oa_approval_oaprogresschain_personstatushint", "label": "personStatusHint()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L160"}, {"id": "oa_approval_oaprogresschain_persontitle", "label": "personTitle()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L171"}, {"id": "oa_approval_oaprogresschain_dotclass", "label": "dotClass()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L176"}, {"id": "oa_approval_oaprogresschain_resolvesourcetext", "label": "resolveSourceText()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L184"}, {"id": "oa_approval_oaprogresschain_avatarchar", "label": "avatarChar()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L196"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oaprogresschain_vue", "target": "oa_approval_oaprogresschain_statustext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L97", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oaprogresschain_vue", "target": "oa_approval_oaprogresschain_statusbadge", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L114", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oaprogresschain_vue", "target": "oa_approval_oaprogresschain_signbadge", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L123", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oaprogresschain_vue", "target": "oa_approval_oaprogresschain_signbadgetext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L130", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oaprogresschain_vue", "target": "oa_approval_oaprogresschain_displaypeople", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L138", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oaprogresschain_vue", "target": "oa_approval_oaprogresschain_personchipclass", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vuLine truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oaformdesignerembed_vue", "label": "OaFormDesignerEmbed.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaFormDesignerEmbed.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_designer_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/designer/index.vue", "source_location": "L1"}, {"id": "designer_index_loaddraft", "label": "loadDraft()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/designer/index.vue", "source_location": "L222"}, {"id": "designer_index_savedraft", "label": "saveDraft()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/designer/index.vue", "source_location": "L258"}, {"id": "designer_index_publish", "label": "publish()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/designer/index.vue", "source_location": "L293"}, {"id": "designer_index_goback", "label": "goBack()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/designer/index.vue", "source_location": "L313"}, {"id": "designer_index_onstepchange", "label": "onStepChange()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/designer/index.vue", "source_location": "L317"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_designer_index_vue", "target": "vue_router", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/designer/index.vue", "source_location": "L113", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_designer_index_vue", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/designer/index.vue", "source_location": "L114", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_designer_index_vue", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/designer/index.vue", "source_location": "L115", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_designer_index_vue", "target": "icons_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/designer/index.vue", "source_location": "L116", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_designer_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_business", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/designer/index.vue", "source_location": "L117", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_designer_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_oaapproval", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/designer/index.vue", "source_location": "L118", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_designer_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowdesigner_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/designer/index.vue", "source_location": "L119", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_designer_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/designer/index.vue", "source_location": "L120", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_designer_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oaformdesignerembed_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/designer/index.vue", "source_location": "L121", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_designer_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oa_condition_fields", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/designer/index.vue", "source_location": "L122", "weight": 1.0}, {"source": "users_wuzilong_work_00codLine truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowdesigner_vue", "label": "FlowDesigner.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L1"}, {"id": "flow_tree_flowdesigner_commit", "label": "commit()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L307"}, {"id": "flow_tree_flowdesigner_avatarcolor", "label": "avatarColor()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L359"}, {"id": "flow_tree_flowdesigner_avatarinitial", "label": "avatarInitial()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L365"}, {"id": "flow_tree_flowdesigner_resolveuser", "label": "resolveUser()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L370"}, {"id": "flow_tree_flowdesigner_chiptitle", "label": "chipTitle()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L374"}, {"id": "flow_tree_flowdesigner_memberoptionlabel", "label": "memberOptionLabel()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L379"}, {"id": "flow_tree_flowdesigner_memberoptionsub", "label": "memberOptionSub()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L387"}, {"id": "flow_tree_flowdesigner_onmemberpick", "label": "onMemberPick()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L394"}, {"id": "flow_tree_flowdesigner_removemember", "label": "removeMember()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L403"}, {"id": "flow_tree_flowdesigner_setassigneetype", "label": "setAssigneeType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L408"}, {"id": "flow_tree_flowdesigner_loadroles", "label": "loadRoles()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L413"}, {"id": "flow_tree_flowdesigner_loadusers", "label": "loadUsers()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L423"}, {"id": "flow_tree_flowdesigner_findnode", "label": "findNode()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L447"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowdesigner_vue", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L250", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowdesigner_vue", "target": "icons_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L251", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowdesigner_vue", "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/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L252", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowdesigner_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_oaapproval", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowDesigner.vue", "source_location": "L253", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowdesigner_vue", "target": "users_wuziloLine truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "label": "oa-form-create-upload.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L1"}, {"id": "utils_oa_form_create_upload_resolveuploadresponseurl", "label": "resolveUploadResponseUrl()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L29"}, {"id": "utils_oa_form_create_upload_ensurefcrowuseselrow", "label": "ensureFcRowUsesElRow()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L42"}, {"id": "utils_oa_form_create_upload_ensureuploadrule", "label": "ensureUploadRule()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L58"}, {"id": "utils_oa_form_create_upload_ensureoauploadruleprops", "label": "ensureOaUploadRuleProps()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L97"}, {"id": "utils_oa_form_create_upload_setupformcreateupload", "label": "setupFormCreateUpload()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L126"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L6", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_business", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L7", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_composables_useattachmentactions", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L8", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "target": "utils_oa_form_create_upload_resolveuploadresponseurl", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L29", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "target": "utils_oa_form_create_upload_ensurefcrowuseselrow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L42", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "target": "utils_oa_form_create_upload_ensureuploadrule", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L58", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "target": "utils_oa_form_create_upload_ensureoauploadruleprops", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L97", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "target": "utils_oa_form_create_upload_setupformcreateupload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L126", "weight": 1.0}], "raw_calls": [{"caller_nid": "utils_oa_form_create_upload_resolveuploadresponseurl", "callee": "trim", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L30"}, {"caller_nid": "utils_oa_form_create_upload_resolveuploadresponseurl", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L30"}, {"caller_nid": "utils_oa_form_create_upload_resolveuploadresponseurl", "callee": "attachmentFullUrl", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L34"}, {"caller_nid": "utils_oa_form_create_upload_ensurefcrowuseselrow", "callee": "String", "souLine truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_app_vue", "label": "App.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/App.vue", "source_location": "L1"}, {"id": "oa_fc_host_app_rule", "label": "rule()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/App.vue", "source_location": "L46"}, {"id": "oa_fc_host_app_if", "label": "if()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/App.vue", "source_location": "L271"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_app_vue", "target": "oa_fc_host_app_rule", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/App.vue", "source_location": "L46", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_app_vue", "target": "oa_fc_host_app_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/App.vue", "source_location": "L271", "weight": 1.0}], "raw_calls": [{"caller_nid": "oa_fc_host_app_if", "callee": "setTimeout", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/App.vue", "source_location": "L272"}]}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowbranch_vue", "label": "FlowBranch.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L1"}, {"id": "flow_tree_flowbranch_branchtitle", "label": "branchTitle()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L160"}, {"id": "flow_tree_flowbranch_nodesummary", "label": "nodeSummary()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L167"}, {"id": "flow_tree_flowbranch_onadd", "label": "onAdd()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L176"}, {"id": "flow_tree_flowbranch_onaddingroup", "label": "onAddInGroup()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L182"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowbranch_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oa_condition_fields", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L119", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowbranch_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L123", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowbranch_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L124", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowbranch_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowbranch_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L126", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowbranch_vue", "target": "flow_tree_flowbranch_branchtitle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L160", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowbranch_vue", "target": "flow_tree_flowbranch_nodesummary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L167", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowbranch_vue", "target": "flow_tree_flowbranch_onadd", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L176", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_flow_tree_flowbranch_vue", "target": "flow_tree_flowbranch_onaddingroup", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L182", "weight": 1.0}], "raw_calls": [{"caller_nid": "flow_tree_flowbranch_branchtitle", "callee": "formatConditionPreview", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L162"}, {"caller_nid": "flow_tree_flowbranch_nodesummary", "callee": "summarizeApprover", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_location": "L173"}, {"caller_nid": "flow_tree_flowbranch_onadd", "callee": "emit", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/flow-tree/FlowBranch.vue", "source_loLine truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_app_vue", "label": "App.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/App.vue", "source_location": "L1"}, {"id": "oa_fc_host_app_rule", "label": "rule()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/App.vue", "source_location": "L43"}, {"id": "oa_fc_host_app_if", "label": "if()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/App.vue", "source_location": "L235"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_app_vue", "target": "oa_fc_host_app_rule", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/App.vue", "source_location": "L43", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_app_vue", "target": "oa_fc_host_app_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/App.vue", "source_location": "L235", "weight": 1.0}], "raw_calls": [{"caller_nid": "oa_fc_host_app_if", "callee": "setTimeout", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/App.vue", "source_location": "L236"}]}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_instances_detail_vue", "label": "detail.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/instances/detail.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_business_protocol_attachment_mini_readonly_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/business/protocol-attachment-mini-readonly/index.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oa_condition_fields_ts", "label": "oa-condition-fields.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L1"}, {"id": "oa_approval_oa_condition_fields_opsforfieldtype", "label": "opsForFieldType()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L23"}, {"id": "oa_approval_oa_condition_fields_walkrules", "label": "walkRules()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L41"}, {"id": "oa_approval_oa_condition_fields_flattenformrules", "label": "flattenFormRules()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L51"}, {"id": "oa_approval_oa_condition_fields_listconditioncandidates", "label": "listConditionCandidates()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L66"}, {"id": "oa_approval_oa_condition_fields_collectconditionreferencedfields", "label": "collectConditionReferencedFields()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L92"}, {"id": "oa_approval_oa_condition_fields_normalizeschemaconditionrequired", "label": "normalizeSchemaConditionRequired()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L110"}, {"id": "oa_approval_oa_condition_fields_formatconditionpreview", "label": "formatConditionPreview()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L138"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oa_condition_fields_ts", "target": "oa_approval_oa_condition_fields_opsforfieldtype", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L23", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oa_condition_fields_ts", "target": "oa_approval_oa_condition_fields_walkrules", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L41", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oa_condition_fields_ts", "target": "oa_approval_oa_condition_fields_flattenformrules", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L51", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oa_condition_fields_ts", "target": "oa_approval_oa_condition_fields_listconditioncandidates", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L66", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oa_condition_fields_ts", "target": "oa_approval_oa_condition_fields_collectconditionreferencedfields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L92", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oa_condition_fields_ts", "target": "oa_approval_oa_condition_fields_normalizeschemaconditionrequired", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L110", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oa_condition_fields_ts", "target": "oa_approval_oa_condition_fields_formatconditionpreview", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/oa-condition-fields.ts", "source_location": "L138", "weight": 1.0}, {"source": "oa_approval_oa_condition_fields_flattenformrules", "target": "oa_approval_oa_condition_fields_walkrules", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-aLine truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oaprogresschain_vue", "label": "OaProgressChain.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L1"}, {"id": "oa_approval_oaprogresschain_statustext", "label": "statusText()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L97"}, {"id": "oa_approval_oaprogresschain_statusbadge", "label": "statusBadge()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L114"}, {"id": "oa_approval_oaprogresschain_signbadge", "label": "signBadge()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L123"}, {"id": "oa_approval_oaprogresschain_signbadgetext", "label": "signBadgeText()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L130"}, {"id": "oa_approval_oaprogresschain_displaypeople", "label": "displayPeople()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L138"}, {"id": "oa_approval_oaprogresschain_personchipclass", "label": "personChipClass()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L151"}, {"id": "oa_approval_oaprogresschain_personstatushint", "label": "personStatusHint()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L160"}, {"id": "oa_approval_oaprogresschain_persontitle", "label": "personTitle()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L170"}, {"id": "oa_approval_oaprogresschain_dotclass", "label": "dotClass()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L175"}, {"id": "oa_approval_oaprogresschain_resolvesourcetext", "label": "resolveSourceText()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L183"}, {"id": "oa_approval_oaprogresschain_avatarchar", "label": "avatarChar()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L195"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oaprogresschain_vue", "target": "oa_approval_oaprogresschain_statustext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L97", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oaprogresschain_vue", "target": "oa_approval_oaprogresschain_statusbadge", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L114", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oaprogresschain_vue", "target": "oa_approval_oaprogresschain_signbadge", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L123", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oaprogresschain_vue", "target": "oa_approval_oaprogresschain_signbadgetext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L130", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oaprogresschain_vue", "target": "oa_approval_oaprogresschain_displaypeople", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vue", "source_location": "L138", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oaprogresschain_vue", "target": "oa_approval_oaprogresschain_personchipclass", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaProgressChain.vuLine truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_instances_detail_vue", "label": "detail.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/instances/detail.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_apps_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/apps/index.vue", "source_location": "L1"}, {"id": "apps_index_loadgroups", "label": "loadGroups()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/apps/index.vue", "source_location": "L364"}, {"id": "apps_index_loaddata", "label": "loadData()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/apps/index.vue", "source_location": "L369"}, {"id": "apps_index_handlesearch", "label": "handleSearch()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/apps/index.vue", "source_location": "L379"}, {"id": "apps_index_resetform", "label": "resetForm()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/apps/index.vue", "source_location": "L383"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_apps_index_vue", "target": "vue_router", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/apps/index.vue", "source_location": "L264", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_apps_index_vue", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/apps/index.vue", "source_location": "L265", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_apps_index_vue", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/apps/index.vue", "source_location": "L266", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_apps_index_vue", "target": "icons_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/apps/index.vue", "source_location": "L267", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_apps_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_business", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/apps/index.vue", "source_location": "L280", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_apps_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_oaapproval", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/apps/index.vue", "source_location": "L281", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_apps_index_vue", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_app_icons", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/apps/index.vue", "source_location": "L291", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_apps_index_vue", "target": "core", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/apps/index.vue", "source_location": "L292", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_apps_index_vue", "target": "apps_index_loadgroups", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/apps/index.vue", "source_location": "L364", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_apps_index_vue", "target": "apps_index_loaddata", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/apps/index.vue", "source_location": "L369", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_apps_index_vue", "target": "apps_index_handlesearch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/apps/index.vue", "source_location": "L379", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_apps_index_vue", "target": "apps_index_resetform", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/apps/index.vue", "source_location":Line truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_start_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue", "source_location": "L1"}, {"id": "start_index_validate", "label": "validate()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue", "source_location": "L345"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_start_index_vue", "target": "start_index_validate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue", "source_location": "L345", "weight": 1.0}], "raw_calls": [{"caller_nid": "start_index_validate", "callee": "warning", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue", "source_location": "L347"}]}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_instances_detail_vue", "label": "detail.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/instances/detail.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_app_vue", "label": "App.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/App.vue", "source_location": "L1"}, {"id": "oa_fc_host_app_if", "label": "if()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/App.vue", "source_location": "L170"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_oa_fc_host_app_vue", "target": "oa_fc_host_app_if", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/App.vue", "source_location": "L170", "weight": 1.0}], "raw_calls": [{"caller_nid": "oa_fc_host_app_if", "callee": "setTimeout", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/oa-fc-host/App.vue", "source_location": "L171"}]}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oafcrow_vue", "label": "OaFcRow.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaFcRow.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_start_index_vue", "label": "index.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue", "source_location": "L1"}, {"id": "start_index_validate", "label": "validate()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue", "source_location": "L385"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_views_oa_approval_start_index_vue", "target": "start_index_validate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue", "source_location": "L385", "weight": 1.0}], "raw_calls": [{"caller_nid": "start_index_validate", "callee": "warning", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/oa-approval/start/index.vue", "source_location": "L387"}]}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oaflowpreview_vue", "label": "OaFlowPreview.vue", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/components/oa-approval/OaFlowPreview.vue", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_types_import_components_d_ts", "label": "components.d.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "label": "oa-form-create-upload.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L1"}, {"id": "utils_oa_form_create_upload_resolveuploadresponseurl", "label": "resolveUploadResponseUrl()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L30"}, {"id": "utils_oa_form_create_upload_ensureuploadrule", "label": "ensureUploadRule()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L38"}, {"id": "utils_oa_form_create_upload_ensureoauploadruleprops", "label": "ensureOaUploadRuleProps()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L75"}, {"id": "utils_oa_form_create_upload_setupformcreateupload", "label": "setupFormCreateUpload()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L103"}], "edges": [{"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "target": "element_plus", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L6", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_api_business", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L7", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_composables_useattachmentactions", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L8", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "target": "users_wuzilong_work_00code_zkxw_web_admin_src_components_oa_approval_oafcrow_vue", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L9", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "target": "utils_oa_form_create_upload_resolveuploadresponseurl", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L30", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "target": "utils_oa_form_create_upload_ensureuploadrule", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L38", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "target": "utils_oa_form_create_upload_ensureoauploadruleprops", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L75", "weight": 1.0}, {"source": "users_wuzilong_work_00code_zkxw_web_admin_src_utils_oa_form_create_upload_ts", "target": "utils_oa_form_create_upload_setupformcreateupload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L103", "weight": 1.0}], "raw_calls": [{"caller_nid": "utils_oa_form_create_upload_resolveuploadresponseurl", "callee": "trim", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L31"}, {"caller_nid": "utils_oa_form_create_upload_resolveuploadresponseurl", "callee": "String", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L31"}, {"caller_nid": "utils_oa_form_create_upload_resolveuploadresponseurl", "callee": "attachmentFullUrl", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L35"}, {"caller_nid": "utils_oa_form_create_upload_ensureuploadrule", "callee": "has", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/utils/oa-form-create-upload.ts", "source_location": "L39"}, {"caller_nid": "utils_oa_form_create_upload_ensureuploadrule", "callee": "String", "source_Line truncated
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "users_wuzilong_work_00code_zkxw_web_admin_src_api_oaapproval_ts", "label": "oaApproval.ts", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L1"}, {"id": "api_oaapproval_fetchoarolelist", "label": "fetchOaRoleList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L9"}, {"id": "api_oaapproval_fetchensureoarolepresets", "label": "fetchEnsureOaRolePresets()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L16"}, {"id": "api_oaapproval_fetchcreateoarole", "label": "fetchCreateOaRole()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L23"}, {"id": "api_oaapproval_fetchupdateoarole", "label": "fetchUpdateOaRole()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L37"}, {"id": "api_oaapproval_fetchdeleteoarole", "label": "fetchDeleteOaRole()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L53"}, {"id": "api_oaapproval_fetchoaroleusers", "label": "fetchOaRoleUsers()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L60"}, {"id": "api_oaapproval_fetchreplaceoaroleusers", "label": "fetchReplaceOaRoleUsers()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L66"}, {"id": "api_oaapproval_fetchoagrouplist", "label": "fetchOaGroupList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L78"}, {"id": "api_oaapproval_fetchcreateoagroup", "label": "fetchCreateOaGroup()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L82"}, {"id": "api_oaapproval_fetchupdateoagroup", "label": "fetchUpdateOaGroup()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L94"}, {"id": "api_oaapproval_fetchdeleteoagroup", "label": "fetchDeleteOaGroup()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L105"}, {"id": "api_oaapproval_fetchoaapplist", "label": "fetchOaAppList()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L112"}, {"id": "api_oaapproval_fetchcreateoaapp", "label": "fetchCreateOaApp()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L123"}, {"id": "api_oaapproval_fetchupdateoaapp", "label": "fetchUpdateOaApp()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L131"}, {"id": "api_oaapproval_fetchdeleteoaapp", "label": "fetchDeleteOaApp()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L139"}, {"id": "api_oaapproval_fetchoaappdraft", "label": "fetchOaAppDraft()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L146"}, {"id": "api_oaapproval_fetchsaveoaappdraft", "label": "fetchSaveOaAppDraft()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L150"}, {"id": "api_oaapproval_fetchpublishoaapp", "label": "fetchPublishOaApp()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L166"}, {"id": "api_oaapproval_fetchoatemplates", "label": "fetchOaTemplates()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L177"}, {"id": "api_oaapproval_fetchoatemplatedetail", "label": "fetchOaTemplateDetail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L181"}, {"id": "api_oaapproval_fetchoaflowpreview", "label": "fetchOaFlowPreview()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L186"}, {"id": "api_oaapproval_fetchstartoainstance", "label": "fetchStartOaInstance()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "source_location": "L215"}, {"id": "api_oaapproval_fetchoainstancedetail", "label": "fetchOaInstanceDetail()", "file_type": "code", "source_file": "/Users/wuzilong/work/00code/zkxw/web-admin/src/api/oaApproval.ts", "sLine truncated
|
||||
@@ -15,10 +15,13 @@ import { setupGlobDirectives } from './directives'
|
||||
import { setupErrorHandle } from './utils/sys/error-handle'
|
||||
import FcDesigner from '@form-create/designer'
|
||||
import formCreateAutoImport from '@form-create/element-ui/auto-import'
|
||||
import { setupFormCreateUpload } from '@/utils/oa-form-create-upload'
|
||||
|
||||
// FormCreate 按字符串解析 el-input / fc-radio 等,主应用是按需自动导入,不会全局注册;
|
||||
// 必须挂上官方 auto-import,否则发起审批/详情里动态表单控件会残缺(如单选项只剩文字)。
|
||||
FcDesigner.formCreate.use(formCreateAutoImport)
|
||||
// 内置「上传」默认 action=/,改为走附件上传 API,避免 POST 前端原点 404
|
||||
setupFormCreateUpload(FcDesigner.formCreate)
|
||||
|
||||
function maskSecret(value?: string) {
|
||||
if (!value) return '(empty)'
|
||||
|
||||
+198
-108
@@ -8,15 +8,6 @@
|
||||
:config="designerConfig"
|
||||
:locale="fcLocale"
|
||||
/>
|
||||
<div v-show="showCondFlag" class="oa-cond-flag">
|
||||
<div class="oa-cond-flag__row">
|
||||
<el-switch :model-value="flagOn" @change="onFlagChange" />
|
||||
<div>
|
||||
<div class="oa-cond-flag__title">参与流程条件分支</div>
|
||||
<div class="oa-cond-flag__tip">勾选后该字段必填且不可改为选填;可在「3 流程设计」条件中选用</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -31,6 +22,9 @@
|
||||
type DesignerApi = {
|
||||
getRule?: () => unknown
|
||||
getOption?: () => unknown
|
||||
/** 含 $FNX 回调的可持久化 JSON(勿用 getRule 直接 postMessage) */
|
||||
getJson?: () => string
|
||||
getOptionsJson?: () => string
|
||||
setRule?: (rule: unknown[]) => void
|
||||
setOption?: (option: unknown) => void
|
||||
}
|
||||
@@ -39,10 +33,32 @@
|
||||
const fcLocale = formCreateZh
|
||||
let pendingSchema: { rule: unknown; option: unknown } | null = null
|
||||
|
||||
const COND_FIELD = 'formCreateUseInCondition'
|
||||
|
||||
const designerConfig = {
|
||||
showSaveBtn: false,
|
||||
showDevice: true,
|
||||
showAi: false
|
||||
showAi: false,
|
||||
/** 让右侧「组件配置」能读写 rule.useInCondition */
|
||||
appendConfigData: [COND_FIELD],
|
||||
baseRule: {
|
||||
append: true,
|
||||
rule() {
|
||||
return [
|
||||
{
|
||||
type: 'switch',
|
||||
field: COND_FIELD,
|
||||
title: '参与流程条件分支',
|
||||
value: false,
|
||||
info: '勾选后该字段必填且不可改为选填;可在「3 流程设计」条件中选用',
|
||||
props: {
|
||||
activeText: '是',
|
||||
inactiveText: '否'
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const MSG = {
|
||||
@@ -54,19 +70,20 @@
|
||||
} as const
|
||||
|
||||
const flowConditionFields = ref<string[]>([])
|
||||
const showCondFlag = ref(false)
|
||||
const flagOn = ref(false)
|
||||
const lockRequired = ref(false)
|
||||
let pollTimer: number | null = null
|
||||
let lastActiveId = ''
|
||||
let lastFlagOn: boolean | null = null
|
||||
let lastEligible: boolean | null = null
|
||||
|
||||
function getDesigner(): DesignerApi | null {
|
||||
const inst = designerRef.value as any
|
||||
if (!inst) return null
|
||||
// FormCreate 官方内部多用 setupState;优先走这条,避免拿到残缺代理
|
||||
if (typeof inst.setupState?.setRule === 'function') return inst.setupState
|
||||
if (typeof inst.setRule === 'function') return inst
|
||||
if (inst.$ && typeof inst.$.exposed?.setRule === 'function') return inst.$.exposed
|
||||
if (typeof inst.setupState?.setRule === 'function') return inst.setupState
|
||||
return inst
|
||||
return null
|
||||
}
|
||||
|
||||
function getSetupState(): any {
|
||||
@@ -94,75 +111,165 @@
|
||||
}
|
||||
}
|
||||
|
||||
function syncActivePanel() {
|
||||
const rule = getActiveRule()
|
||||
const type = String(rule?.type || '')
|
||||
const eligible = !!(rule?.field && CONDITION_ELIGIBLE_TYPES.has(type))
|
||||
showCondFlag.value = eligible
|
||||
if (!eligible) {
|
||||
flagOn.value = false
|
||||
lockRequired.value = false
|
||||
lastActiveId = ''
|
||||
return
|
||||
}
|
||||
const id = String(rule._fc_id || rule.field || '')
|
||||
const on = readFlag(rule)
|
||||
flagOn.value = on
|
||||
lockRequired.value = on
|
||||
if (on) applyFlagToRule(rule, true)
|
||||
lastActiveId = id
|
||||
}
|
||||
|
||||
function onFlagChange(val: string | number | boolean) {
|
||||
const on = !!val
|
||||
const rule = getActiveRule()
|
||||
if (!rule?.field) return
|
||||
if (!on) {
|
||||
const field = String(rule.field)
|
||||
if (flowConditionFields.value.includes(field)) {
|
||||
ElMessage.warning('请先在流程设计中删除对该字段的条件')
|
||||
flagOn.value = true
|
||||
return
|
||||
}
|
||||
applyFlagToRule(rule, false)
|
||||
flagOn.value = false
|
||||
lockRequired.value = false
|
||||
return
|
||||
}
|
||||
applyFlagToRule(rule, true)
|
||||
flagOn.value = true
|
||||
lockRequired.value = true
|
||||
// 同步校验面板必填开关
|
||||
/** 在「组件配置」基础表单中显示/隐藏开关(设计器选中后会重置 hidden,需持续同步) */
|
||||
function syncCondFieldVisibility(eligible: boolean) {
|
||||
const state = getSetupState()
|
||||
const api = state?.baseForm?.api
|
||||
if (!api) return
|
||||
try {
|
||||
const state = getSetupState()
|
||||
const vapi = state?.validateForm?.api
|
||||
if (vapi?.setValue) {
|
||||
const cur = typeof vapi.formData === 'function' ? vapi.formData() : {}
|
||||
vapi.setValue({ ...cur, $required: true })
|
||||
if (typeof api.hidden === 'function') {
|
||||
api.hidden(!eligible, COND_FIELD)
|
||||
}
|
||||
const all = typeof api.all === 'function' ? api.all() : []
|
||||
if (Array.isArray(all)) {
|
||||
all.forEach((item: any) => {
|
||||
if (item?.field === COND_FIELD || item?.name === COND_FIELD) {
|
||||
item.hidden = !eligible
|
||||
}
|
||||
})
|
||||
}
|
||||
} catch {
|
||||
/* ignore */
|
||||
}
|
||||
}
|
||||
|
||||
function readSchema() {
|
||||
const d = getDesigner()
|
||||
return {
|
||||
rule: d?.getRule?.() ?? [],
|
||||
option: d?.getOption?.() ?? {}
|
||||
function syncRequiredLock(on: boolean) {
|
||||
lockRequired.value = on
|
||||
const state = getSetupState()
|
||||
const vapi = state?.validateForm?.api
|
||||
if (!vapi) return
|
||||
try {
|
||||
if (on) {
|
||||
if (typeof vapi.setValue === 'function') {
|
||||
const cur = typeof vapi.formData === 'function' ? vapi.formData() : {}
|
||||
vapi.setValue({ ...cur, $required: true })
|
||||
}
|
||||
if (typeof vapi.disabled === 'function') {
|
||||
vapi.disabled(true, '$required')
|
||||
}
|
||||
} else if (typeof vapi.disabled === 'function') {
|
||||
vapi.disabled(false, '$required')
|
||||
}
|
||||
} catch {
|
||||
/* ignore */
|
||||
}
|
||||
}
|
||||
|
||||
function syncBaseFormFlag(on: boolean) {
|
||||
const state = getSetupState()
|
||||
const api = state?.baseForm?.api
|
||||
if (!api?.setValue) return
|
||||
try {
|
||||
const cur = typeof api.formData === 'function' ? api.formData() : {}
|
||||
api.setValue({ ...cur, [COND_FIELD]: on })
|
||||
} catch {
|
||||
/* ignore */
|
||||
}
|
||||
}
|
||||
|
||||
function syncActivePanel() {
|
||||
const rule = getActiveRule()
|
||||
const type = String(rule?.type || '')
|
||||
const eligible = !!(rule?.field && CONDITION_ELIGIBLE_TYPES.has(type))
|
||||
const id = rule ? String(rule._fc_id || rule.field || '') : ''
|
||||
|
||||
if (!eligible) {
|
||||
syncCondFieldVisibility(false)
|
||||
if (lastEligible !== false || id !== lastActiveId) {
|
||||
syncRequiredLock(false)
|
||||
}
|
||||
lastActiveId = id
|
||||
lastFlagOn = null
|
||||
lastEligible = false
|
||||
return
|
||||
}
|
||||
|
||||
syncCondFieldVisibility(true)
|
||||
let on = readFlag(rule)
|
||||
|
||||
// 用户在面板关掉开关,但流程仍引用该字段 → 拦截并回滚
|
||||
if (
|
||||
lastFlagOn === true &&
|
||||
on === false &&
|
||||
id === lastActiveId &&
|
||||
flowConditionFields.value.includes(String(rule.field))
|
||||
) {
|
||||
ElMessage.warning('请先在流程设计中删除对该字段的条件')
|
||||
applyFlagToRule(rule, true)
|
||||
syncBaseFormFlag(true)
|
||||
on = true
|
||||
}
|
||||
|
||||
if (on) {
|
||||
applyFlagToRule(rule, true)
|
||||
}
|
||||
|
||||
if (on !== lastFlagOn || id !== lastActiveId || lastEligible !== true) {
|
||||
syncRequiredLock(on)
|
||||
syncBaseFormFlag(on)
|
||||
}
|
||||
|
||||
lastActiveId = id
|
||||
lastFlagOn = on
|
||||
lastEligible = true
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出可克隆的纯 JSON schema。
|
||||
* Upload 等控件的 onSuccess 在运行时是函数(由 $FNX 编译),
|
||||
* structured clone / postMessage 无法传递函数;必须走 FormCreate 的 toJson(getJson)。
|
||||
*/
|
||||
function readSchema(): { rule: unknown; option: unknown } {
|
||||
const d = getDesigner()
|
||||
try {
|
||||
if (typeof d?.getJson === 'function') {
|
||||
const ruleRaw = JSON.parse(d.getJson() || '[]')
|
||||
let option: unknown = {}
|
||||
if (typeof d.getOptionsJson === 'function') {
|
||||
option = JSON.parse(d.getOptionsJson() || '{}')
|
||||
} else {
|
||||
option = JSON.parse(JSON.stringify(d.getOption?.() ?? {}))
|
||||
}
|
||||
return {
|
||||
rule: Array.isArray(ruleRaw) ? ruleRaw : [],
|
||||
option: option && typeof option === 'object' ? option : {}
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn('[oa-fc-host] readSchema getJson failed, fallback', e)
|
||||
}
|
||||
// 兜底:剥离函数,至少保证 postMessage 不抛错(可能丢失 onSuccess 等回调)
|
||||
try {
|
||||
const plain = JSON.parse(
|
||||
JSON.stringify({
|
||||
rule: d?.getRule?.() ?? [],
|
||||
option: d?.getOption?.() ?? {}
|
||||
})
|
||||
)
|
||||
return {
|
||||
rule: Array.isArray(plain?.rule) ? plain.rule : [],
|
||||
option: plain?.option && typeof plain.option === 'object' ? plain.option : {}
|
||||
}
|
||||
} catch {
|
||||
return { rule: [], option: {} }
|
||||
}
|
||||
}
|
||||
|
||||
function countRules(rules: unknown): number {
|
||||
return Array.isArray(rules) ? rules.length : 0
|
||||
}
|
||||
|
||||
async function applySchema(schema: any, attempt = 0) {
|
||||
const rule = Array.isArray(schema?.rule) ? schema.rule : Array.isArray(schema) ? schema : []
|
||||
const option = schema?.option && typeof schema.option === 'object' ? schema.option : {}
|
||||
pendingSchema = { rule, option }
|
||||
const expectCount = countRules(rule)
|
||||
|
||||
await nextTick()
|
||||
const d = getDesigner()
|
||||
if (!d?.setRule) {
|
||||
if (attempt < 8) {
|
||||
window.setTimeout(() => void applySchema(schema, attempt + 1), 40 * (attempt + 1))
|
||||
if (attempt < 12) {
|
||||
window.setTimeout(() => void applySchema(schema, attempt + 1), 50 * (attempt + 1))
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -172,12 +279,18 @@
|
||||
if (d.setOption) {
|
||||
d.setOption(JSON.parse(JSON.stringify(option)))
|
||||
}
|
||||
// 校验是否真正落到画布;菜单未就绪时 loadRule 可能静默失败
|
||||
const applied = countRules(d.getRule?.() ?? [])
|
||||
if (expectCount > 0 && applied < expectCount && attempt < 12) {
|
||||
window.setTimeout(() => void applySchema(schema, attempt + 1), 80 * (attempt + 1))
|
||||
return
|
||||
}
|
||||
pendingSchema = null
|
||||
window.setTimeout(() => syncActivePanel(), 80)
|
||||
} catch (e) {
|
||||
console.warn('[oa-fc-host] applySchema failed', e)
|
||||
if (attempt < 5) {
|
||||
window.setTimeout(() => void applySchema(schema, attempt + 1), 80)
|
||||
if (attempt < 12) {
|
||||
window.setTimeout(() => void applySchema(schema, attempt + 1), 80 * (attempt + 1))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -190,10 +303,23 @@
|
||||
return
|
||||
}
|
||||
if (data.type === MSG.GET) {
|
||||
window.parent?.postMessage(
|
||||
{ type: MSG.SCHEMA, schema: readSchema(), requestId: data.requestId },
|
||||
'*'
|
||||
)
|
||||
try {
|
||||
window.parent?.postMessage(
|
||||
{ type: MSG.SCHEMA, schema: readSchema(), requestId: data.requestId },
|
||||
'*'
|
||||
)
|
||||
} catch (e) {
|
||||
console.error('[oa-fc-host] postMessage schema failed', e)
|
||||
window.parent?.postMessage(
|
||||
{
|
||||
type: MSG.SCHEMA,
|
||||
schema: { rule: [], option: {} },
|
||||
requestId: data.requestId,
|
||||
error: 'schema-not-clonable'
|
||||
},
|
||||
'*'
|
||||
)
|
||||
}
|
||||
return
|
||||
}
|
||||
if (data.type === MSG.FLOW_REFS) {
|
||||
@@ -224,11 +350,7 @@
|
||||
void applySchema(pendingSchema)
|
||||
}
|
||||
pollTimer = window.setInterval(() => {
|
||||
const rule = getActiveRule()
|
||||
const id = rule ? String(rule._fc_id || rule.field || '') : ''
|
||||
if (id !== lastActiveId || (rule && readFlag(rule) !== flagOn.value)) {
|
||||
syncActivePanel()
|
||||
}
|
||||
syncActivePanel()
|
||||
}, 250)
|
||||
})
|
||||
|
||||
@@ -271,38 +393,6 @@
|
||||
height: 100% !important;
|
||||
}
|
||||
|
||||
.oa-cond-flag {
|
||||
position: absolute;
|
||||
top: 56px;
|
||||
right: 12px;
|
||||
z-index: 30;
|
||||
width: 292px;
|
||||
padding: 12px;
|
||||
background: #ecfdf5;
|
||||
border: 1px dashed #a7f3d0;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 2px 8px rgb(15 23 42 / 8%);
|
||||
}
|
||||
|
||||
.oa-cond-flag__row {
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.oa-cond-flag__title {
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
color: #059669;
|
||||
}
|
||||
|
||||
.oa-cond-flag__tip {
|
||||
margin-top: 2px;
|
||||
font-size: 12px;
|
||||
line-height: 1.4;
|
||||
color: #64748b;
|
||||
}
|
||||
|
||||
/* 参与分支时锁定「是否必填」 */
|
||||
.oa-fc-host--lock-required ._fc-r .el-form-item:has([name='$required']),
|
||||
.oa-fc-host--lock-required ._fc-r .el-form-item:has(.fc-required),
|
||||
|
||||
@@ -7,6 +7,7 @@ import zhCn from 'element-plus/es/locale/lang/zh-cn'
|
||||
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
|
||||
import 'element-plus/dist/index.css'
|
||||
import FcDesigner from '@form-create/designer'
|
||||
import { setupFormCreateUpload } from '@/utils/oa-form-create-upload'
|
||||
import App from './App.vue'
|
||||
|
||||
const app = createApp(App)
|
||||
@@ -18,4 +19,5 @@ for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
|
||||
app.use(ElementPlus, { locale: zhCn })
|
||||
app.use(FcDesigner)
|
||||
app.use(FcDesigner.formCreate)
|
||||
setupFormCreateUpload(FcDesigner.formCreate)
|
||||
app.mount('#app')
|
||||
@@ -238,18 +238,42 @@ function buildFlowItems(detail: any): OaPrintFlowItem[] {
|
||||
ccBuf = null
|
||||
}
|
||||
|
||||
const peopleNames = (p: any): string[] => {
|
||||
const people = Array.isArray(p?.people) ? p.people : []
|
||||
const fromPeople = people
|
||||
.map((x: any) => {
|
||||
const n = String(x?.nickName || x?.id || '').trim()
|
||||
if (!n) return ''
|
||||
const st = String(x?.status || '')
|
||||
if (st === 'approved') return `${n}(已同意)`
|
||||
if (st === 'rejected') return `${n}(已拒绝)`
|
||||
if (st === 'returned') return `${n}(已打回)`
|
||||
if (st === 'pending' || st === 'running') return `${n}(待处理)`
|
||||
if (st === 'done') return `${n}(无需处理)`
|
||||
return n
|
||||
})
|
||||
.filter(Boolean)
|
||||
if (fromPeople.length) return fromPeople
|
||||
const name = String(p.assigneeUserName || p.assigneeUserId || '').trim()
|
||||
return name ? [name] : []
|
||||
}
|
||||
|
||||
for (const p of list) {
|
||||
const kind = String(p.kind || '')
|
||||
const taskType = String(p.taskType || '')
|
||||
const title = String(p.title || '-').trim()
|
||||
const name = String(p.assigneeUserName || p.assigneeUserId || '').trim()
|
||||
const names = peopleNames(p)
|
||||
const name = names.join(',')
|
||||
const ts = String(p.timestamp || '').trim()
|
||||
const comment = String(p.commentText || '').trim()
|
||||
const st = statusText(String(p.status || ''))
|
||||
const signMode = String(p.signMode || '')
|
||||
const signLabel = signMode === 'and' ? '会签' : signMode === 'or' ? '或签' : ''
|
||||
|
||||
if (taskType === 'cc') {
|
||||
if (!ccBuf) ccBuf = { names: [], ts }
|
||||
if (name) ccBuf.names.push(name)
|
||||
if (names.length) ccBuf.names.push(...names.map((n) => n.replace(/\(.*?\)\s*$/, '')))
|
||||
else if (name) ccBuf.names.push(name)
|
||||
if (ts) ccBuf.ts = ts
|
||||
continue
|
||||
}
|
||||
@@ -277,9 +301,10 @@ function buildFlowItems(detail: any): OaPrintFlowItem[] {
|
||||
})
|
||||
continue
|
||||
}
|
||||
// task
|
||||
// task(或签/会签同节点多人已合并)
|
||||
const head = signLabel ? `【${title}·${signLabel}】` : `【${title}】`
|
||||
items.push({
|
||||
left: name ? `【${title}】 ${name} ${st}` : `【${title}】 ${st}`,
|
||||
left: name ? `${head} ${name} ${st}` : `${head} ${st}`,
|
||||
right: ts,
|
||||
comment: comment || undefined
|
||||
})
|
||||
|
||||
@@ -0,0 +1,164 @@
|
||||
/**
|
||||
* FormCreate 运行时补丁:
|
||||
* - 内置 upload 默认 action 为「/」,会 POST 到前端原点导致 404;接管为附件上传 API
|
||||
* - 运行时注册 FcRow(flex ._fd-row),间距与铺满由 oa-fc-runtime.scss 处理
|
||||
*/
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { fetchUploadAttachment } from '@/api/business'
|
||||
import { attachmentFullUrl } from '@/composables/useAttachmentActions'
|
||||
import OaFcRow from '@/components/oa-approval/OaFcRow.vue'
|
||||
|
||||
type FcFetchOptions = {
|
||||
source?: string
|
||||
file?: File
|
||||
filename?: string
|
||||
data?: Record<string, unknown>
|
||||
action?: string
|
||||
onSuccess?: (res: unknown) => void
|
||||
onError?: (err: unknown) => void
|
||||
[key: string]: unknown
|
||||
}
|
||||
|
||||
const FLAG = '__oaUploadConfigured'
|
||||
|
||||
const UPLOAD_TYPES = new Set(['upload', 'fcUpload'])
|
||||
|
||||
/** 与业务表单 `.form-grid-2` 横向间距对齐(顶层 option.row.gutter / CSS --oa-fc-gutter) */
|
||||
export const OA_FC_DEFAULT_GUTTER = 20
|
||||
|
||||
/** 从上传接口响应中取出可回显的 url(兼容 FormCreate 默认 onSuccess) */
|
||||
export function resolveUploadResponseUrl(res: any): string {
|
||||
const raw = String(
|
||||
res?.data?.url || res?.data?.fileUrl || res?.fileUrl || res?.url || ''
|
||||
).trim()
|
||||
if (!raw) return ''
|
||||
return attachmentFullUrl(raw) || raw
|
||||
}
|
||||
|
||||
function ensureUploadRule(rule: any) {
|
||||
if (!UPLOAD_TYPES.has(String(rule.type || ''))) return
|
||||
const props = { ...(rule.props || {}) }
|
||||
if (!props.action || props.action === '/') {
|
||||
props.action = '#'
|
||||
}
|
||||
const prevSuccess = props.onSuccess
|
||||
// `$FNX:...` 须留给 FormCreate 编译;替换成函数会丢掉官方 file.url = res.data.url
|
||||
if (typeof prevSuccess === 'string' && prevSuccess.includes('$FNX')) {
|
||||
// keep
|
||||
} else if (typeof prevSuccess === 'function') {
|
||||
props.onSuccess = (res: any, file: any) => {
|
||||
try {
|
||||
prevSuccess(res, file)
|
||||
} catch {
|
||||
/* ignore */
|
||||
}
|
||||
const url = resolveUploadResponseUrl(res)
|
||||
// Element Plus 选文件时已写入 blob: URL,必须强制覆盖
|
||||
if (url && file) {
|
||||
file.url = url
|
||||
}
|
||||
}
|
||||
} else if (!prevSuccess) {
|
||||
props.onSuccess = (res: any, file: any) => {
|
||||
const url = resolveUploadResponseUrl(res)
|
||||
if (url && file) {
|
||||
file.url = url
|
||||
}
|
||||
}
|
||||
}
|
||||
rule.props = props
|
||||
}
|
||||
|
||||
/**
|
||||
* 运行时补齐 FormCreate rule(upload action / onSuccess)
|
||||
*/
|
||||
export function ensureOaUploadRuleProps(rules: unknown): any[] {
|
||||
if (!Array.isArray(rules)) return []
|
||||
return rules.map((raw) => {
|
||||
if (!raw || typeof raw !== 'object') return raw
|
||||
const rule: any = { ...(raw as object) }
|
||||
ensureUploadRule(rule)
|
||||
if (Array.isArray(rule.children)) {
|
||||
rule.children = ensureOaUploadRuleProps(rule.children)
|
||||
}
|
||||
if (Array.isArray(rule.props?.rule)) {
|
||||
rule.props = {
|
||||
...rule.props,
|
||||
rule: ensureOaUploadRuleProps(rule.props.rule)
|
||||
}
|
||||
}
|
||||
if (Array.isArray(rule.control)) {
|
||||
rule.control = rule.control.map((c: any) => {
|
||||
if (!c || typeof c !== 'object') return c
|
||||
if (Array.isArray(c.rule)) {
|
||||
return { ...c, rule: ensureOaUploadRuleProps(c.rule) }
|
||||
}
|
||||
return c
|
||||
})
|
||||
}
|
||||
return rule
|
||||
})
|
||||
}
|
||||
|
||||
export function setupFormCreateUpload(formCreate: {
|
||||
fetch?: (opts: FcFetchOptions) => void
|
||||
component?: (name: string, component: unknown) => void
|
||||
}) {
|
||||
if (!formCreate || (formCreate as any)[FLAG]) return
|
||||
|
||||
// 主应用 formCreate 默认未挂设计器 FcRow;用 flex 行保证栅格铺满,间距走 CSS
|
||||
if (typeof formCreate.component === 'function') {
|
||||
formCreate.component('fcRow', OaFcRow)
|
||||
formCreate.component('FcRow', OaFcRow)
|
||||
}
|
||||
|
||||
const prevFetch = formCreate.fetch
|
||||
|
||||
formCreate.fetch = (options: FcFetchOptions) => {
|
||||
const isUpload = options?.source === 'upload' || !!options?.file
|
||||
if (!isUpload) {
|
||||
if (typeof prevFetch === 'function') {
|
||||
return prevFetch(options)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
void (async () => {
|
||||
try {
|
||||
const file = options.file
|
||||
if (!file) {
|
||||
throw new Error('未选择文件')
|
||||
}
|
||||
const fd = new FormData()
|
||||
fd.append('file', file)
|
||||
fd.append('folder', 'oa-approval')
|
||||
const extra = options.data
|
||||
if (extra && typeof extra === 'object') {
|
||||
Object.entries(extra).forEach(([k, v]) => {
|
||||
if (v != null && k !== 'file' && k !== 'folder') {
|
||||
fd.append(k, String(v))
|
||||
}
|
||||
})
|
||||
}
|
||||
const res: any = await fetchUploadAttachment(fd)
|
||||
const rawUrl = String(res?.fileUrl || res?.data?.fileUrl || '').trim()
|
||||
if (!rawUrl) {
|
||||
throw new Error('上传失败:未返回文件地址')
|
||||
}
|
||||
// 预览用完整 URL;设计器默认 onSuccess 为 file.url = res.data.url
|
||||
const url = attachmentFullUrl(rawUrl) || rawUrl
|
||||
options.onSuccess?.({
|
||||
data: { url, fileUrl: rawUrl },
|
||||
fileUrl: rawUrl,
|
||||
url
|
||||
})
|
||||
} catch (e) {
|
||||
const msg = e instanceof Error ? e.message : '上传失败'
|
||||
ElMessage.error(msg)
|
||||
options.onError?.(e)
|
||||
}
|
||||
})()
|
||||
}
|
||||
|
||||
;(formCreate as any)[FLAG] = true
|
||||
}
|
||||
@@ -260,7 +260,7 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { computed, onMounted, reactive, ref } from 'vue'
|
||||
import { computed, onActivated, onMounted, reactive, ref } from 'vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
import type { UploadRequestOptions } from 'element-plus'
|
||||
@@ -536,10 +536,14 @@
|
||||
{ debounce: 200 }
|
||||
)
|
||||
|
||||
onMounted(async () => {
|
||||
async function refresh() {
|
||||
await loadGroups()
|
||||
await loadData()
|
||||
})
|
||||
}
|
||||
|
||||
onMounted(refresh)
|
||||
// KeepAlive 下从设计器返回时不会再次 onMounted,需在激活时刷新列表
|
||||
onActivated(refresh)
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
@@ -70,6 +70,7 @@
|
||||
<div v-show="activeStep === 'form'" class="oa-designer__form-step">
|
||||
<OaFormDesignerEmbed
|
||||
v-if="formDesignerMounted"
|
||||
:key="formDesignerEpoch"
|
||||
ref="formEmbedRef"
|
||||
v-model="formSchema"
|
||||
:flow-condition-fields="flowConditionFields"
|
||||
@@ -108,7 +109,7 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { computed, onMounted, reactive, ref } from 'vue'
|
||||
import { computed, nextTick, onMounted, reactive, ref } from 'vue'
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
import type { UploadRequestOptions } from 'element-plus'
|
||||
@@ -137,10 +138,13 @@
|
||||
const activeStep = ref('basic')
|
||||
const draft = ref<any>(null)
|
||||
/** iframe 表单设计器(与主应用 Tailwind 隔离) */
|
||||
const formEmbedRef = ref<{ fetchSchema: () => Promise<{ rule: unknown; option: unknown }> } | null>(
|
||||
null
|
||||
)
|
||||
const formEmbedRef = ref<{
|
||||
fetchSchema: () => Promise<{ rule: unknown; option: unknown }>
|
||||
reapplySchema?: () => void
|
||||
} | null>(null)
|
||||
const formDesignerMounted = ref(false)
|
||||
/** 每次进入表单 Tab 递增,强制重建 iframe,避免 display:none 后画布丢控件 */
|
||||
const formDesignerEpoch = ref(0)
|
||||
const formSchema = ref<{ rule: unknown; option: unknown }>({ rule: [], option: {} })
|
||||
|
||||
const basic = reactive({
|
||||
@@ -268,6 +272,19 @@
|
||||
advancedSettingsJson: { ...advanced }
|
||||
})
|
||||
draft.value = data
|
||||
// 以服务端回包为准同步本地,避免与 iframe 内容漂移
|
||||
const fs = data?.formSchemaJson
|
||||
if (fs) {
|
||||
try {
|
||||
const plain = JSON.parse(JSON.stringify(fs))
|
||||
formSchema.value = {
|
||||
rule: Array.isArray(plain?.rule) ? plain.rule : Array.isArray(plain) ? plain : [],
|
||||
option: plain?.option && typeof plain.option === 'object' ? plain.option : {}
|
||||
}
|
||||
} catch {
|
||||
/* keep collected schema */
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
saving.value = false
|
||||
}
|
||||
@@ -307,13 +324,20 @@
|
||||
}
|
||||
}
|
||||
if (name === 'form') {
|
||||
// 先卸载再挂载:隐藏态 iframe 内 FormCreate 画布易丢控件,重建后按 formSchema 回显
|
||||
formDesignerMounted.value = false
|
||||
formDesignerEpoch.value += 1
|
||||
await nextTick()
|
||||
formDesignerMounted.value = true
|
||||
await nextTick()
|
||||
formEmbedRef.value?.reapplySchema?.()
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
await loadDraft()
|
||||
if (activeStep.value === 'form') {
|
||||
formDesignerEpoch.value += 1
|
||||
formDesignerMounted.value = true
|
||||
}
|
||||
})
|
||||
|
||||
@@ -153,6 +153,10 @@
|
||||
import OaProgressChain from '@/components/oa-approval/OaProgressChain.vue'
|
||||
import { MAX_ADMIN_LIST_PAGE_SIZE } from '@/utils/fetch-paged-list'
|
||||
import { useUserStore } from '@/store/modules/user'
|
||||
import {
|
||||
OA_FC_DEFAULT_GUTTER,
|
||||
ensureOaUploadRuleProps
|
||||
} from '@/utils/oa-form-create-upload'
|
||||
|
||||
defineOptions({ name: 'OaApprovalInstanceDetail' })
|
||||
|
||||
@@ -166,6 +170,7 @@
|
||||
const viewRule = ref<any[]>([])
|
||||
const viewOption = ref({
|
||||
form: { disabled: true, labelPosition: 'top' },
|
||||
row: { gutter: OA_FC_DEFAULT_GUTTER },
|
||||
submitBtn: false,
|
||||
resetBtn: false
|
||||
})
|
||||
@@ -182,7 +187,7 @@
|
||||
const list = detail.value?.progress
|
||||
if (!Array.isArray(list) || !list.length) return []
|
||||
return list.map((p: any, idx: number) => ({
|
||||
key: `${p.kind}-${p.taskId || p.nodeKey || idx}-${p.roundNo || 1}`,
|
||||
key: `${p.kind}-${p.nodeKey || p.taskId || idx}-${p.roundNo || 1}`,
|
||||
title: p.title || '-',
|
||||
status: p.status || 'info',
|
||||
timestamp: p.timestamp || '',
|
||||
@@ -191,7 +196,18 @@
|
||||
commentText: p.commentText || '',
|
||||
taskType: p.taskType || '',
|
||||
kind: p.kind || '',
|
||||
roundNo: p.roundNo || 1
|
||||
roundNo: p.roundNo || 1,
|
||||
signMode: p.signMode || '',
|
||||
people: Array.isArray(p.people)
|
||||
? p.people.map((x: any) => ({
|
||||
id: x.id || '',
|
||||
nickName: x.nickName || x.id || '',
|
||||
status: x.status || '',
|
||||
timestamp: x.timestamp || '',
|
||||
commentText: x.commentText || '',
|
||||
taskId: x.taskId || ''
|
||||
}))
|
||||
: []
|
||||
}))
|
||||
})
|
||||
|
||||
@@ -246,10 +262,16 @@
|
||||
function applySchema(schema: any, data: any) {
|
||||
viewFormData.value = { ...(data || {}) }
|
||||
const rule = Array.isArray(schema?.rule) ? schema.rule : Array.isArray(schema) ? schema : []
|
||||
viewRule.value = rule
|
||||
viewRule.value = ensureOaUploadRuleProps(rule)
|
||||
const savedGutter = Number(schema?.option?.row?.gutter)
|
||||
viewOption.value = {
|
||||
...(schema?.option || {}),
|
||||
form: { ...(schema?.option?.form || {}), disabled: true, labelPosition: 'top' },
|
||||
// 顶层字段 col.span 布局用;栅格组件 fcRow 由 ensureOaUploadRuleProps 处理
|
||||
row: {
|
||||
...(schema?.option?.row || {}),
|
||||
gutter: savedGutter > 0 ? savedGutter : OA_FC_DEFAULT_GUTTER
|
||||
},
|
||||
submitBtn: false,
|
||||
resetBtn: false
|
||||
}
|
||||
|
||||
@@ -218,25 +218,81 @@
|
||||
:close-on-click-modal="false"
|
||||
>
|
||||
<el-form label-position="top">
|
||||
<el-form-item label="绑定用户">
|
||||
<el-select
|
||||
v-model="memberUserIds"
|
||||
multiple
|
||||
filterable
|
||||
clearable
|
||||
collapse-tags
|
||||
collapse-tags-tooltip
|
||||
placeholder="请选择用户"
|
||||
style="width: 100%"
|
||||
:loading="memberLoading"
|
||||
>
|
||||
<el-option
|
||||
v-for="u in userOptions"
|
||||
:key="u.id"
|
||||
:label="`${u.nickName}(${u.userNo})`"
|
||||
:value="u.id"
|
||||
/>
|
||||
</el-select>
|
||||
<el-form-item>
|
||||
<template #label>
|
||||
绑定用户
|
||||
<span class="form-label-tip">可多选,已选成员将展示在下方列表</span>
|
||||
</template>
|
||||
<div v-loading="memberLoading" class="member-picker">
|
||||
<el-select
|
||||
v-model="memberPickBuffer"
|
||||
filterable
|
||||
clearable
|
||||
:loading="memberLoading"
|
||||
placeholder="搜索姓名 / 工号,点击添加"
|
||||
style="width: 100%"
|
||||
popper-class="oa-role-member-select-popper"
|
||||
@change="onMemberPick"
|
||||
>
|
||||
<el-option
|
||||
v-for="u in userOptions"
|
||||
:key="u.id"
|
||||
:label="memberOptionLabel(u)"
|
||||
:value="u.id"
|
||||
:disabled="memberUserIds.includes(u.id)"
|
||||
>
|
||||
<div class="member-option">
|
||||
<span class="member-avatar" :style="{ background: avatarColor(u.id) }">
|
||||
{{ avatarInitial(u.nickName) }}
|
||||
</span>
|
||||
<span class="member-option__meta">
|
||||
<span class="member-option__name">{{ u.nickName || '未命名' }}</span>
|
||||
<span v-if="memberOptionSub(u)" class="member-option__sub">
|
||||
{{ memberOptionSub(u) }}
|
||||
</span>
|
||||
</span>
|
||||
<el-tag
|
||||
v-if="memberUserIds.includes(u.id)"
|
||||
size="small"
|
||||
type="info"
|
||||
effect="plain"
|
||||
class="member-option__tag"
|
||||
>
|
||||
已选
|
||||
</el-tag>
|
||||
</div>
|
||||
</el-option>
|
||||
</el-select>
|
||||
|
||||
<div
|
||||
class="member-chips"
|
||||
:class="{ 'is-empty': !memberUserIds.length }"
|
||||
>
|
||||
<template v-if="memberUserIds.length">
|
||||
<span v-for="id in memberUserIds" :key="id" class="member-chip">
|
||||
<span
|
||||
class="member-avatar member-avatar--sm"
|
||||
:style="{ background: avatarColor(id) }"
|
||||
>
|
||||
{{ avatarInitial(resolveUser(id)?.nickName) }}
|
||||
</span>
|
||||
<span class="member-chip__name" :title="chipTitle(id)">
|
||||
{{ resolveUser(id)?.nickName || id }}
|
||||
</span>
|
||||
<button
|
||||
type="button"
|
||||
class="member-chip__rm"
|
||||
:aria-label="`移除 ${resolveUser(id)?.nickName || id}`"
|
||||
@click="removeMember(id)"
|
||||
>
|
||||
×
|
||||
</button>
|
||||
</span>
|
||||
</template>
|
||||
<template v-else>暂未选择成员,请从上方搜索添加</template>
|
||||
</div>
|
||||
<p class="member-picked-count">已选 {{ memberUserIds.length }} 人</p>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
@@ -261,7 +317,7 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { formatDisplayOrDash } from '@/utils/datetime-display'
|
||||
import { onMounted, reactive, ref } from 'vue'
|
||||
import { nextTick, onMounted, reactive, ref } from 'vue'
|
||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
import {
|
||||
Plus,
|
||||
@@ -310,12 +366,74 @@
|
||||
status: [{ required: true, message: '请选择状态', trigger: 'change' }]
|
||||
}
|
||||
|
||||
type UserOption = { id: string; nickName: string; userNo: string }
|
||||
|
||||
const AVATAR_COLORS = [
|
||||
'#059669',
|
||||
'#0ea5e9',
|
||||
'#8b5cf6',
|
||||
'#d97706',
|
||||
'#ef4444',
|
||||
'#14b8a6',
|
||||
'#6366f1',
|
||||
'#ec4899'
|
||||
]
|
||||
|
||||
const memberVisible = ref(false)
|
||||
const memberRole = ref<any>(null)
|
||||
const memberUserIds = ref<string[]>([])
|
||||
const memberPickBuffer = ref('')
|
||||
const memberLoading = ref(false)
|
||||
const memberSubmitLoading = ref(false)
|
||||
const userOptions = ref<Array<{ id: string; nickName: string; userNo: string }>>([])
|
||||
const userOptions = ref<UserOption[]>([])
|
||||
|
||||
function avatarColor(id: string) {
|
||||
let hash = 0
|
||||
for (let i = 0; i < id.length; i++) hash = (hash * 31 + id.charCodeAt(i)) >>> 0
|
||||
return AVATAR_COLORS[hash % AVATAR_COLORS.length]
|
||||
}
|
||||
|
||||
function avatarInitial(name?: string) {
|
||||
const t = (name || '?').trim()
|
||||
return t ? t.slice(0, 1) : '?'
|
||||
}
|
||||
|
||||
function resolveUser(id: string) {
|
||||
return userOptions.value.find((u) => u.id === id)
|
||||
}
|
||||
|
||||
function memberOptionLabel(u: UserOption) {
|
||||
const name = (u.nickName || '').trim() || '未命名'
|
||||
const no = (u.userNo || '').trim()
|
||||
if (no && no !== name) return `${name}(${no})`
|
||||
return name
|
||||
}
|
||||
|
||||
function memberOptionSub(u: UserOption) {
|
||||
const name = (u.nickName || '').trim()
|
||||
const no = (u.userNo || '').trim()
|
||||
if (!no || no === name) return ''
|
||||
return `账号 ${no}`
|
||||
}
|
||||
|
||||
function chipTitle(id: string) {
|
||||
const u = resolveUser(id)
|
||||
return u ? memberOptionLabel(u) : id
|
||||
}
|
||||
|
||||
function onMemberPick(id: string) {
|
||||
if (!id) return
|
||||
if (!memberUserIds.value.includes(id)) {
|
||||
memberUserIds.value = [...memberUserIds.value, id]
|
||||
}
|
||||
nextTick(() => {
|
||||
memberPickBuffer.value = ''
|
||||
})
|
||||
}
|
||||
|
||||
function removeMember(id: string) {
|
||||
memberUserIds.value = memberUserIds.value.filter((x) => x !== id)
|
||||
}
|
||||
|
||||
async function loadData() {
|
||||
loading.value = true
|
||||
@@ -426,6 +544,8 @@
|
||||
|
||||
async function handleMembers(row: any) {
|
||||
memberRole.value = row
|
||||
memberPickBuffer.value = ''
|
||||
memberUserIds.value = []
|
||||
memberVisible.value = true
|
||||
memberLoading.value = true
|
||||
try {
|
||||
@@ -468,4 +588,180 @@
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.member-picker {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.member-chips {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px;
|
||||
min-height: 44px;
|
||||
margin-top: 12px;
|
||||
padding: 12px;
|
||||
background: #f8fafc;
|
||||
border: 1px dashed #cbd5e1;
|
||||
border-radius: 8px;
|
||||
|
||||
&.is-empty {
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: var(--mint-text-muted, #94a3b8);
|
||||
font-size: 13px;
|
||||
}
|
||||
}
|
||||
|
||||
.member-chip {
|
||||
display: inline-flex;
|
||||
gap: 8px;
|
||||
align-items: center;
|
||||
max-width: 100%;
|
||||
padding: 4px 8px 4px 4px;
|
||||
background: #fff;
|
||||
border: 1px solid var(--mint-border, #e2e8f0);
|
||||
border-radius: 999px;
|
||||
}
|
||||
|
||||
.member-chip__name {
|
||||
max-width: 120px;
|
||||
overflow: hidden;
|
||||
font-size: 13px;
|
||||
font-weight: 500;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.member-chip__rm {
|
||||
display: grid;
|
||||
flex-shrink: 0;
|
||||
place-items: center;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
padding: 0;
|
||||
color: var(--mint-text-muted, #64748b);
|
||||
font-size: 14px;
|
||||
line-height: 1;
|
||||
background: #f1f5f9;
|
||||
border: 0;
|
||||
border-radius: 50%;
|
||||
cursor: pointer;
|
||||
|
||||
&:hover {
|
||||
color: #dc2626;
|
||||
background: #fee2e2;
|
||||
}
|
||||
}
|
||||
|
||||
.member-picked-count {
|
||||
margin: 8px 0 0;
|
||||
color: var(--mint-text-muted, #94a3b8);
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.member-avatar {
|
||||
display: inline-flex;
|
||||
flex-shrink: 0;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
color: #fff;
|
||||
font-size: 13px;
|
||||
font-weight: 700;
|
||||
line-height: 1;
|
||||
text-align: center;
|
||||
border-radius: 50%;
|
||||
|
||||
&--sm {
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
font-size: 11px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<!-- 下拉挂 body,须非 scoped -->
|
||||
<style lang="scss">
|
||||
.oa-role-member-select-popper {
|
||||
.el-select-dropdown__list {
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
.el-select-dropdown__item {
|
||||
height: auto !important;
|
||||
min-height: 56px;
|
||||
margin-bottom: 8px;
|
||||
padding: 10px 12px !important;
|
||||
line-height: normal !important;
|
||||
border-radius: 8px;
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
&.is-disabled {
|
||||
opacity: 0.55;
|
||||
}
|
||||
|
||||
&.hover,
|
||||
&:hover {
|
||||
background: var(--primary-bg, #ecfdf5);
|
||||
}
|
||||
}
|
||||
|
||||
.member-option {
|
||||
display: flex;
|
||||
gap: 12px;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
min-height: 36px;
|
||||
}
|
||||
|
||||
.member-option__meta {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
flex-direction: column;
|
||||
gap: 2px;
|
||||
justify-content: center;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.member-option__name {
|
||||
overflow: hidden;
|
||||
color: var(--mint-text, #0f172a);
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.member-option__sub {
|
||||
overflow: hidden;
|
||||
color: var(--mint-text-muted, #64748b);
|
||||
font-size: 12px;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.member-option__tag {
|
||||
flex-shrink: 0;
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.member-avatar {
|
||||
display: inline-flex;
|
||||
flex-shrink: 0;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
color: #fff;
|
||||
font-size: 13px;
|
||||
font-weight: 700;
|
||||
line-height: 1;
|
||||
text-align: center;
|
||||
border-radius: 50%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -131,6 +131,8 @@
|
||||
v-if="!detailLoading"
|
||||
:steps="flowSteps"
|
||||
:loading="previewLoading"
|
||||
:resolved="flowResolved"
|
||||
:pending-message="flowPendingMessage"
|
||||
/>
|
||||
</div>
|
||||
<template #footer>
|
||||
@@ -166,6 +168,10 @@
|
||||
import OaFlowPreview from '@/components/oa-approval/OaFlowPreview.vue'
|
||||
import { MAX_ADMIN_LIST_PAGE_SIZE } from '@/utils/fetch-paged-list'
|
||||
import { resolveOaAppIconUrl } from '@/utils/oa-app-icons'
|
||||
import {
|
||||
OA_FC_DEFAULT_GUTTER,
|
||||
ensureOaUploadRuleProps
|
||||
} from '@/utils/oa-form-create-upload'
|
||||
|
||||
defineOptions({ name: 'OaApprovalStart' })
|
||||
|
||||
@@ -181,7 +187,11 @@
|
||||
const picked = ref<any>(null)
|
||||
const formData = ref<Record<string, any>>({})
|
||||
const formRule = ref<any[]>([])
|
||||
const formOption = ref<Record<string, any>>({ submitBtn: false, resetBtn: false })
|
||||
const formOption = ref<Record<string, any>>({
|
||||
submitBtn: false,
|
||||
resetBtn: false,
|
||||
row: { gutter: OA_FC_DEFAULT_GUTTER }
|
||||
})
|
||||
const fapi = ref<any>(null)
|
||||
const submitting = ref(false)
|
||||
const needInitiatorSelect = ref(false)
|
||||
@@ -189,7 +199,10 @@
|
||||
const userLoading = ref(false)
|
||||
const userOptions = ref<Array<{ id: string; nickName: string; userNo: string }>>([])
|
||||
const flowSteps = ref<OaFlowPreviewStep[]>([])
|
||||
const flowResolved = ref(true)
|
||||
const flowPendingMessage = ref('必填信息填写后,流程将自动显示')
|
||||
const previewLoading = ref(false)
|
||||
let previewTimer: ReturnType<typeof setTimeout> | null = null
|
||||
|
||||
const displayGroups = computed(() => {
|
||||
const kw = (searchKeyword.value || '').trim().toLowerCase()
|
||||
@@ -267,18 +280,32 @@
|
||||
async function loadFlowPreview(appId: string) {
|
||||
previewLoading.value = true
|
||||
try {
|
||||
const preview = await fetchOaFlowPreview(
|
||||
appId,
|
||||
needInitiatorSelect.value ? [...initiatorSelectUserIds.value] : undefined
|
||||
)
|
||||
flowSteps.value = preview?.steps || []
|
||||
const preview = await fetchOaFlowPreview(appId, {
|
||||
formData: { ...formData.value },
|
||||
initiatorSelectUserIds: needInitiatorSelect.value
|
||||
? [...initiatorSelectUserIds.value]
|
||||
: undefined
|
||||
})
|
||||
flowResolved.value = preview?.resolved !== false
|
||||
flowPendingMessage.value =
|
||||
preview?.message || '必填信息填写后,流程将自动显示'
|
||||
flowSteps.value = flowResolved.value ? preview?.steps || [] : []
|
||||
} catch {
|
||||
flowSteps.value = []
|
||||
flowResolved.value = true
|
||||
} finally {
|
||||
previewLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
function scheduleFlowPreview() {
|
||||
if (!dlgVisible.value || !picked.value?.id) return
|
||||
if (previewTimer) clearTimeout(previewTimer)
|
||||
previewTimer = setTimeout(() => {
|
||||
loadFlowPreview(picked.value.id)
|
||||
}, 300)
|
||||
}
|
||||
|
||||
async function onPick(t: any) {
|
||||
picked.value = t
|
||||
formData.value = {}
|
||||
@@ -286,19 +313,32 @@
|
||||
needInitiatorSelect.value = false
|
||||
initiatorSelectUserIds.value = []
|
||||
flowSteps.value = []
|
||||
flowResolved.value = false
|
||||
flowPendingMessage.value = '必填信息填写后,流程将自动显示'
|
||||
dlgVisible.value = true
|
||||
detailLoading.value = true
|
||||
previewLoading.value = true
|
||||
try {
|
||||
const detail = await fetchOaTemplateDetail(t.id)
|
||||
const schema = detail?.formSchemaJson || {}
|
||||
formRule.value = Array.isArray(schema.rule) ? schema.rule : Array.isArray(schema) ? schema : []
|
||||
const rawRule = Array.isArray(schema.rule)
|
||||
? schema.rule
|
||||
: Array.isArray(schema)
|
||||
? schema
|
||||
: []
|
||||
formRule.value = ensureOaUploadRuleProps(rawRule)
|
||||
const savedGutter = Number(schema.option?.row?.gutter)
|
||||
formOption.value = {
|
||||
...(schema.option || {}),
|
||||
form: {
|
||||
...(schema.option?.form || {}),
|
||||
labelPosition: 'top'
|
||||
},
|
||||
// 顶层字段 col.span 布局用;栅格组件 fcRow 由 ensureOaUploadRuleProps 处理
|
||||
row: {
|
||||
...(schema.option?.row || {}),
|
||||
gutter: savedGutter > 0 ? savedGutter : OA_FC_DEFAULT_GUTTER
|
||||
},
|
||||
submitBtn: false,
|
||||
resetBtn: false
|
||||
}
|
||||
@@ -312,17 +352,26 @@
|
||||
} catch {
|
||||
formRule.value = []
|
||||
flowSteps.value = []
|
||||
flowResolved.value = true
|
||||
previewLoading.value = false
|
||||
} finally {
|
||||
detailLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
watch(
|
||||
formData,
|
||||
() => {
|
||||
scheduleFlowPreview()
|
||||
},
|
||||
{ deep: true }
|
||||
)
|
||||
|
||||
watch(
|
||||
initiatorSelectUserIds,
|
||||
() => {
|
||||
if (dlgVisible.value && picked.value?.id && needInitiatorSelect.value) {
|
||||
loadFlowPreview(picked.value.id)
|
||||
scheduleFlowPreview()
|
||||
}
|
||||
},
|
||||
{ deep: true }
|
||||
|
||||
+16
-18
@@ -104,24 +104,22 @@
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="protocol-card-compact__field protocol-card-compact__field--split-row">
|
||||
<div class="protocol-card-compact__field-col">
|
||||
<label>母血采集</label>
|
||||
<span
|
||||
class="protocol-card__kv-value"
|
||||
:title="String(row.maternalBloodCollectTime || '')"
|
||||
>
|
||||
{{ formatDisplayOrDash(row.maternalBloodCollectTime) }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="protocol-card-compact__field-col protocol-card-compact__field-col--attachment">
|
||||
<ProtocolAttachmentMiniReadonly
|
||||
:label="attachmentMeta(row).label"
|
||||
:files="attachmentMeta(row).files"
|
||||
@preview="handleAttachmentPreview"
|
||||
@download="handleAttachmentDownload"
|
||||
/>
|
||||
</div>
|
||||
<div class="protocol-card-compact__field">
|
||||
<label>母血采集</label>
|
||||
<span
|
||||
class="protocol-card__kv-value"
|
||||
:title="String(row.maternalBloodCollectTime || '')"
|
||||
>
|
||||
{{ formatDisplayOrDash(row.maternalBloodCollectTime) }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="protocol-card-compact__field protocol-card-compact__field--attachment-only">
|
||||
<ProtocolAttachmentMiniReadonly
|
||||
:label="attachmentMeta(row).label"
|
||||
:files="attachmentMeta(row).files"
|
||||
@preview="handleAttachmentPreview"
|
||||
@download="handleAttachmentDownload"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
<template v-else>
|
||||
|
||||
Reference in new issue
Block a user