提交 97377249 authored 作者: 王鹏飞's avatar 王鹏飞

chore: update

上级 22d768cd
......@@ -55,7 +55,7 @@ const component = computed(() => {
defineAsyncComponent(() => import('./components/conditionalBranch/labelJudgment/Index.vue'))
)
}
return allComponent[props.node?.data.component_name]
return allComponent[props.node?.data.component_name || props.node?.data.componentName]
})
</script>
......
<!-- 组件数据规则 -->
<script setup lang="ts">
import type { FormInstance, FormRules } from 'element-plus'
import type { FormInstance } from 'element-plus'
import { SuccessFilled, CircleCloseFilled } from '@element-plus/icons-vue'
import { useQueryUser } from '../composables/useQueryUser'
......@@ -23,10 +23,12 @@ const form = reactive({
correct_operation_rule: 1,
correct_operation_method: 1,
correct_operation_method_value: undefined,
correct_operation_method_fail_value: undefined,
error_operation_type: 1,
error_operation_rule: 1,
error_operation_method: 1,
error_operation_method_value: undefined
error_operation_method_value: undefined,
error_operation_method_fail_value: undefined
})
// 满足答案的用户数
......@@ -64,8 +66,6 @@ watch(expectedTotal, value => {
form.expected_user_total = value
})
const rules = ref<FormRules>({})
const stepActive = ref(0)
const stepMaxNum = ref(2)
......@@ -115,7 +115,7 @@ async function handleCalculate() {
<el-dialog :title="title" append-to-body width="800px" class="rule-template">
<slot :model="form">
<slot name="header">
<el-form ref="formRef" :model="form" :rules="rules" label-suffix=":">
<el-form ref="formRef" :model="form" label-suffix=":">
<el-row justify="space-between">
<slot name="header-form-prepend" :model="form"></slot>
<el-form-item label="组件名称">{{ node.data.name }}</el-form-item>
......@@ -139,7 +139,9 @@ async function handleCalculate() {
</el-form-item>
<el-form-item label="上一节点用户总数" v-else>
<div>
<p class="rule-num">正确:{{ prevNodeRule.correct_operation_user_total || prevNodeRule.expected_user_total }}</p>
<p class="rule-num">
正确:{{ prevNodeRule.correct_operation_user_total || prevNodeRule.expected_user_total }}
</p>
<p class="rule-num">错误:{{ prevNodeRule.correct_operation_user_total || 0 }}</p>
</div>
<!-- <el-button type="primary" :loading="isCalculating" @click="handleCalculate">计算</el-button> -->
......@@ -236,20 +238,80 @@ async function handleCalculate() {
<template v-if="node.data.type === 2">
<header class="rule-result-header">
<p>用户总数:{{ form.user_total }}</p>
<p v-if="node.data.type === 1">满足答案的用户总数:{{ expectedUserTotalText }}</p>
<p v-else>上一节点用户总数:{{ prevNodeExpectedTotal }}</p>
<p>满足答案的用户总数:{{ expectedUserTotalText }}</p>
</header>
<section class="rule-result-body">
<div class="rule-result-col">
<p class="rule-result-tips">
<el-icon class="is-success"><SuccessFilled /></el-icon>操作正确,选取数据数量:
</p>
<el-form-item label="选取规则">
<el-radio-group v-model="form.correct_operation_rule">
<el-radio :label="1">随机</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="选取方式">
<el-radio-group v-model="form.correct_operation_method">
<el-radio :label="1">百分比</el-radio>
<el-radio :label="2">数值</el-radio>
</el-radio-group>
</el-form-item>
<template v-if="form.correct_operation_method === 1">
<el-form-item label="成功">
<el-input-number v-model="form.correct_operation_method_value" :controls="false" :max="100" />
&nbsp;%
</el-form-item>
<el-form-item label="失败">
<el-input-number
v-model="form.correct_operation_method_fail_value"
:controls="false"
:max="100" />
&nbsp;%
</el-form-item>
</template>
<template v-else>
<el-form-item label="成功">
<el-input-number v-model="form.correct_operation_method_value" :controls="false" />
</el-form-item>
<el-form-item label="失败">
<el-input-number v-model="form.correct_operation_method_fail_value" :controls="false" />
</el-form-item>
</template>
</div>
<el-divider direction="vertical" style="height: auto" />
<div class="rule-result-col">
<p class="rule-result-tips">
<el-icon class="is-error"><CircleCloseFilled /></el-icon>操作错误,选取数据数量:
</p>
<el-form-item label="选取规则">
<el-radio-group v-model="form.error_operation_rule">
<el-radio :label="1">随机</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="选取方式">
<el-radio-group v-model="form.error_operation_method">
<el-radio :label="1">百分比</el-radio>
<el-radio :label="2">数值</el-radio>
</el-radio-group>
</el-form-item>
<template v-if="form.error_operation_method === 1">
<el-form-item label="成功">
<el-input-number v-model="form.error_operation_method_value" :controls="false" :max="100" />
&nbsp;%
</el-form-item>
<el-form-item label="失败">
<el-input-number v-model="form.error_operation_method_fail_value" :controls="false" :max="100" />
&nbsp;%
</el-form-item>
</template>
<template v-else>
<el-form-item label="成功">
<el-input-number v-model="form.error_operation_method_value" :controls="false" />
</el-form-item>
<el-form-item label="失败">
<el-input-number v-model="form.error_operation_method_fail_value" :controls="false" />
</el-form-item>
</template>
</div>
</section>
</template>
......@@ -315,7 +377,32 @@ async function handleCalculate() {
</template>
<!-- 营销动作 -->
<template v-if="node.data.type === 2"> </template>
<template v-if="node.data.type === 2">
<header class="rule-result-header">
<p>用户总数:{{ form.user_total }}</p>
<p>上一节点用户总数:{{ prevNodeExpectedTotal }}</p>
</header>
<section class="rule-result-body">
<div class="rule-result-col">
<p class="rule-result-tips">
<el-icon class="is-success"><SuccessFilled /></el-icon>操作正确,选取数据数量:
</p>
<el-form-item label="成功"></el-form-item>
<el-form-item label="失败"> </el-form-item>
</div>
<el-divider direction="vertical" style="height: auto" />
<div class="rule-result-col">
<p class="rule-result-tips">
<el-icon class="is-error"><CircleCloseFilled /></el-icon>操作错误,选取数据数量:
</p>
<el-form-item label="成功"> </el-form-item>
<el-form-item label="失败"> </el-form-item>
</div>
</section>
<el-row justify="center" style="margin-top: 20px">
<el-button type="primary" :loading="isCalculating" @click="handleCalculate">计算</el-button>
</el-row>
</template>
<!-- 条件判断 -->
<template v-if="node.data.type === 3">
......@@ -330,7 +417,7 @@ async function handleCalculate() {
</p>
<el-form-item label="满足判断条件数据">{{ form.expected_user_total }}</el-form-item>
<el-form-item label="不满足判断条件数据">
{{ prevNodeExpectedTotal - (form.expected_user_total || 0) }}
{{ Math.max(prevNodeExpectedTotal - (form.expected_user_total || 0), 0) }}
</el-form-item>
</div>
<el-divider direction="vertical" style="height: auto" />
......@@ -431,5 +518,8 @@ async function handleCalculate() {
.is-answer {
color: #81b337;
}
.is-operate {
color: blue;
}
}
</style>
......@@ -18,9 +18,12 @@ function paramsParse(data: any) {
<template>
<RuleTemplate :node="node" step :paramsParse="paramsParse">
<template #header-answer>
<span class="is-answer" v-for="(item, index) in config.rules" :key="index">
{{ getUserAttr(item.attr_id)?.name }} {{ item.operate }} {{ item.value }}
</span>
<p v-for="(item, index) in config.rules" :key="index">
<span>{{ getUserAttr(item.attr_id)?.name }}</span>
<span class="is-operate">&nbsp;&nbsp;{{ item.operate }}&nbsp;&nbsp;</span>
<span class="is-answer">{{ item.value }}</span>
&nbsp;&nbsp;&nbsp;&nbsp;
</p>
</template>
</RuleTemplate>
</template>
<script setup lang="ts">
import RuleTemplate from '../../RuleTemplate.vue'
import { useMetaEvent } from '../../../composables/useAllData'
defineProps<{ node: any }>()
const { getMetaEvent } = useMetaEvent()
const props = defineProps<{ node: any }>()
const config = computed(() => {
return props.node.data.teacher || {}
})
const metaEvent = computed(() => getMetaEvent(config.value?.event_id))
</script>
<template>
<RuleTemplate :node="node" step>
<template #header-answer>答案</template>
<template #header-answer>
<span class="is-answer">{{ metaEvent?.name }}</span>
</template>
</RuleTemplate>
</template>
......@@ -8,13 +8,19 @@ const role = inject('role') as string
const form = reactive({
in_group: '',
group_id: ''
in_group_name: '',
group_id: '',
group_name: ''
})
watchEffect(() => {
Object.assign(form, props.node.data[role])
})
const { groupList } = useGroup()
watchEffect(() => {
form.group_name = groupList.value.find(item => item.id === form.group_id)?.name || ''
})
</script>
<template>
......
<script setup lang="ts">
import RuleTemplate from '../../RuleTemplate.vue'
import { useGroup } from '../../../composables/useAllData'
defineProps<{ node: any }>()
const props = defineProps<{ node: any }>()
const { getGroup } = useGroup()
const config = computed(() => {
return props.node.data.teacher || {}
})
const group = computed(() => getGroup(config.value.group_id))
function paramsParse(data: any) {
return data.rules
}
</script>
<template>
<RuleTemplate :node="node" step>
<template #header-answer>答案</template>
<RuleTemplate :node="node" step :paramsParse="paramsParse">
<template #header-answer>
<p class="is-answer">{{ group?.name }}</p>
</template>
</RuleTemplate>
</template>
<script setup lang="ts">
import RuleTemplate from '../../RuleTemplate.vue'
import { useTag } from '../../../composables/useAllData'
defineProps<{ node: any }>()
const props = defineProps<{ node: any }>()
const { getTag } = useTag()
const config = computed(() => {
return props.node.data.teacher || {}
})
function paramsParse(data: any) {
return data.rules
}
</script>
<template>
<RuleTemplate :node="node" step>
<template #header-answer>答案</template>
<RuleTemplate :node="node" step :paramsParse="paramsParse">
<template #header-answer>
<p v-for="(item, index) in config.rules" :key="index">
<span>{{ getTag(item.tag_id)?.name }}</span>
<span class="is-operate">&nbsp;&nbsp;{{ item.operate }}&nbsp;&nbsp;</span>
<span class="is-answer">{{ item.value }}</span>
&nbsp;&nbsp;&nbsp;&nbsp;
</p>
</template>
</RuleTemplate>
</template>
......@@ -8,6 +8,7 @@ const role = inject('role') as string
const form = reactive({
operate: '',
operate_name: '',
connection_id: '',
connection_name: ''
})
......@@ -18,6 +19,14 @@ watchEffect(() => {
const { connectionList } = useConnection(1)
const operateList = ref([{ label: '关注中', value: '0' }])
watchEffect(() => {
form.operate_name = operateList.value.find(item => item.value === form.operate)?.label || ''
})
watchEffect(() => {
form.connection_name = connectionList.value.find(item => item.id === form.connection_id)?.name || ''
})
</script>
<template>
......
......@@ -2,17 +2,25 @@
import RuleTemplate from '../../RuleTemplate.vue'
import { useConnection } from '../../../composables/useAllData'
const { getConnection } = useConnection(1)
const { getConnection } = useConnection()
const props = defineProps<{ node: any }>()
const config = computed(() => {
return props.node.data.teacher || {}
})
const connection = computed(() => {
return getConnection(props.node.data.teacher?.connection_id)
return getConnection(config.value?.connection_id)
})
</script>
<template>
<RuleTemplate :node="node" step>
<template #header-answer> 连接:{{ connection?.name }}&nbsp;&nbsp;事件:关注公众号 </template>
<template #header-answer>
连接:<span class="is-answer">{{ connection?.name }}</span> &nbsp;&nbsp; 事件:<span class="is-answer"
>关注公众号</span
>
</template>
</RuleTemplate>
</template>
......@@ -7,9 +7,12 @@ const role = inject('role') as string
const form = reactive({
date_type: '',
date_type_name: '',
date_rule: '',
date_rule_name: '',
date: '',
week: []
week: [],
week_name: ''
})
watchEffect(() => {
Object.assign(form, props.node.data[role])
......@@ -25,6 +28,16 @@ const dateRuleList = ref([
{ label: '区间', value: '2' }
])
const weekList = ref(['周一', '周二', '周三', '周四', '周五', '周六', '周日'])
watchEffect(() => {
form.date_type_name = dateTypeList.value.find(item => item.value === form.date_type)?.label || ''
})
watchEffect(() => {
form.date_rule_name = dateRuleList.value.find(item => item.value === form.date_rule)?.label || ''
})
watchEffect(() => {
form.week_name = form.week.join('、')
})
</script>
<template>
......@@ -36,7 +49,7 @@ const weekList = ref(['周一', '周二', '周三', '周四', '周五', '周六'
</el-form-item>
<el-form-item label="进入该步骤的时间">
<template v-if="form.date_type === '0'">
<el-select v-model="form.date_rule" placeholder="请选择" style="width: 115px">
<el-select v-model="form.date_rule" placeholder="请选择" style="width: 115px; margin-right: 10px">
<el-option v-for="item in dateRuleList" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
<el-date-picker
......
......@@ -4,17 +4,6 @@ import ConfigViewTemplate from '../../ConfigViewTemplate.vue'
const role = inject('role') as string
defineProps<{ node: any }>()
const dateTypeList = [
{ label: '日期范围', value: '0' },
{ label: '星期范围', value: '1' }
]
const dateRuleList = [
{ label: '早于', value: '0' },
{ label: '晚于', value: '1' },
{ label: '区间', value: '2' }
]
const weekList = ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
</script>
<template>
......@@ -23,15 +12,15 @@ const weekList = ['周一', '周二', '周三', '周四', '周五', '周六', '
<el-form-item :label="role === 'student' ? '我的答案' : '学生答案'"> </el-form-item>
<template v-if="node.data?.student">
<el-form-item label="时间判断类型">
{{ dateTypeList.find(c => c.value === node.data.student?.date_type)?.label }}
{{ node.data.student.date_type }}
</el-form-item>
<el-form-item label="进入该步骤的时间">
<template v-if="node.data.student?.date_type === '0'">
{{ dateRuleList.find(c => c.value === node.data.student?.date_rule)?.label }}
{{ node.data.student?.date_rule_name }}
{{ node.data.student?.date }}
</template>
<template v-else>
{{ node.data.student?.week.toString() }}
{{ node.data.student.week_name }}
</template>
</el-form-item>
</template>
......@@ -40,15 +29,15 @@ const weekList = ['周一', '周二', '周三', '周四', '周五', '周六', '
<el-form-item label="正确答案"></el-form-item>
<template v-if="node.data?.teacher">
<el-form-item label="时间判断类型">
{{ dateTypeList.find(c => c.value === node.data.teacher?.date_type)?.label }}
{{ node.data.teacher.date_type_name }}
</el-form-item>
<el-form-item label="进入该步骤的时间">
<template v-if="node.data.teacher?.date_type === '0'">
{{ dateRuleList.find(c => c.value === node.data.teacher?.date_rule)?.label }}
{{ node.data.teacher?.date }}
{{ node.data.teacher.date_rule_name }}
{{ node.data.teacher.date }}
</template>
<template v-else>
{{ node.data.teacher?.week.toString() }}
{{ node.data.teacher.week_name }}
</template>
</el-form-item>
</template>
......
<script setup lang="ts">
import RuleTemplate from '../../RuleTemplate.vue'
defineProps<{ node: any }>()
const props = defineProps<{ node: any }>()
const config = computed(() => {
return props.node.data.teacher || {}
})
</script>
<template>
<RuleTemplate :node="node" step>
<template #header-answer>答案</template>
<template #header-answer>
进入该步骤的时间
<p class="is-answer" v-if="config.date_type === '0'">{{ config.date_rule_name }}{{ config.date }}</p>
<p class="is-answer" v-else>{{ config.week_name }}</p>
</template>
</RuleTemplate>
</template>
<script setup lang="ts">
import RuleTemplate from '../../RuleTemplate.vue'
import { useUserAttr } from '../../../composables/useAllData'
defineProps<{ node: any }>()
const props = defineProps<{ node: any }>()
const { getUserAttr } = useUserAttr()
const config = computed(() => {
return props.node.data.teacher || {}
})
function paramsParse(data: any) {
return data.rules
}
</script>
<template>
<RuleTemplate :node="node" step>
<template #header-answer>答案</template>
<RuleTemplate :node="node" step :paramsParse="paramsParse">
<template #header-answer>
<p v-for="(item, index) in config.rules" :key="index">
<span>{{ getUserAttr(item.attr_id)?.name }}</span>
<span class="is-operate">&nbsp;&nbsp;{{ item.operate }}&nbsp;&nbsp;</span>
<span class="is-answer">{{ item.value }}</span>
&nbsp;&nbsp;&nbsp;&nbsp;
</p>
</template>
</RuleTemplate>
</template>
......@@ -9,7 +9,9 @@ const form = reactive({
time_type: '0',
time_num: '',
time_unit: '0',
time: ''
time_unit_name: '',
time: '',
time_name: ''
})
watchEffect(() => {
Object.assign(form, props.node.data[role])
......@@ -21,6 +23,14 @@ const timeUnitList = ref([
{ label: '日', value: '2' },
{ label: '周', value: '3' }
])
watchEffect(() => {
form.time_unit_name = timeUnitList.value.find(item => item.value === form.time_unit)?.label || ''
})
watchEffect(() => {
form.time_name = form.time_type === '0' ? `延时${form.time_num}${form.time_unit_name}` : `延时至 ${form.time}`
})
</script>
<template>
......
......@@ -4,30 +4,15 @@ import ConfigViewTemplate from '../../ConfigViewTemplate.vue'
const role = inject('role') as string
defineProps<{ node: any }>()
const timeUnitList = [
{ label: '分钟', value: '0' },
{ label: '小时', value: '1' },
{ label: '日', value: '2' },
{ label: '周', value: '3' }
]
</script>
<template>
<ConfigViewTemplate :node="node">
<el-form-item :label="role === 'student' ? '我的答案' : '学生答案'">
<template v-if="node.data.student?.time_type === '0'">
延时{{ node.data.student?.time_num
}}{{ timeUnitList.find(item => item.value === node.data.student?.time_unit)?.label }}
</template>
<template v-if="node.data.student?.time_type === '1'"> 延时至{{ node.data.student?.time }} </template>
{{ node.data.student?.time_name }}
</el-form-item>
<el-form-item label="正确答案">
<template v-if="node.data.teacher?.time_type === '0'">
延时{{ node.data.teacher?.time_num
}}{{ timeUnitList.find(item => item.value === node.data.teacher?.time_unit)?.label }}
</template>
<template v-if="node.data.teacher?.time_type === '1'"> 延时至{{ node.data.teacher?.time }} </template>
{{ node.data.teacher?.time_name }}
</el-form-item>
</ConfigViewTemplate>
</template>
<script setup lang="ts">
import RuleTemplate from '../../RuleTemplate.vue'
defineProps<{ node: any }>()
const props = defineProps<{ node: any }>()
const config = computed(() => {
return props.node.data.teacher || {}
})
</script>
<template>
<RuleTemplate :node="node" step>
<template #header-answer>答案</template>
<template #header-answer>
<p class="is-answer">{{ config.time_name }}</p>
</template>
</RuleTemplate>
</template>
<script setup lang="ts">
import RuleTemplate from '../../RuleTemplate.vue'
import { useGroup } from '../../../composables/useAllData'
defineProps<{ node: any }>()
const props = defineProps<{ node: any }>()
const { getGroup } = useGroup()
const config = computed(() => {
return props.node.data.teacher || {}
})
const group = computed(() => getGroup(config.value.group_id))
function paramsParse(data: any) {
return { group_id: data.group_id }
}
</script>
<template>
<RuleTemplate :node="node" step>
<template #header-answer>答案</template>
<RuleTemplate :node="node" step :paramsParse="paramsParse">
<template #header-answer>
<span class="is-answer">{{ group?.name }}</span>
</template>
</RuleTemplate>
</template>
<script setup lang="ts">
import RuleTemplate from '../../RuleTemplate.vue'
import { useGroup } from '../../../composables/useAllData'
defineProps<{ node: any }>()
const props = defineProps<{ node: any }>()
const { getGroup } = useGroup()
const config = computed(() => {
return props.node.data.teacher || {}
})
const group = computed(() => getGroup(config.value.group_id))
function paramsParse(data: any) {
return { group_id: data.group_id }
}
</script>
<template>
<RuleTemplate :node="node" step>
<template #header-answer>答案</template>
<RuleTemplate :node="node" step :paramsParse="paramsParse">
<template #header-answer>
<span class="is-answer">{{ group?.name }}</span>
</template>
</RuleTemplate>
</template>
......@@ -96,7 +96,11 @@ export function useTag() {
onMounted(() => {
if (!tagList.value?.length) fetchTagList()
})
return { fetchTagList, tagList }
function getTag(tagId: string) {
return tagList.value.find(item => item.id === tagId)
}
return { fetchTagList, tagList, getTag }
}
// 所有连接
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论