Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
S
saas-dml
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
saas-dml
Commits
fbfbd8f0
提交
fbfbd8f0
authored
4月 28, 2023
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
chore: update
上级
62208212
隐藏空白字符变更
内嵌
并排
正在显示
17 个修改的文件
包含
635 行增加
和
421 行删除
+635
-421
flow.ts
src/api/flow.ts
+5
-0
RuleTemplate.vue
src/components/flow/components/RuleTemplate.vue
+304
-290
Generate.vue
...w/components/conditionalBranch/eventJudgment/Generate.vue
+92
-0
Rule.vue
.../flow/components/conditionalBranch/eventJudgment/Rule.vue
+144
-1
Rule.vue
.../flow/components/conditionalBranch/groupJudgment/Rule.vue
+1
-1
Config.vue
...low/components/conditionalBranch/labelJudgment/Config.vue
+29
-15
ConfigView.vue
...components/conditionalBranch/labelJudgment/ConfigView.vue
+9
-7
Rule.vue
.../flow/components/conditionalBranch/labelJudgment/Rule.vue
+7
-5
Rule.vue
...onents/flow/components/marketingAction/joinGroup/Rule.vue
+18
-0
Rule.vue
...nents/flow/components/marketingAction/leaveGroup/Rule.vue
+18
-0
Config.vue
.../flow/components/triggeringConditions/dingtalk/Config.vue
+0
-28
ConfigView.vue
...w/components/triggeringConditions/dingtalk/ConfigView.vue
+0
-11
Index.vue
...s/flow/components/triggeringConditions/dingtalk/Index.vue
+0
-38
Rule.vue
...ts/flow/components/triggeringConditions/dingtalk/Rule.vue
+0
-18
useAllData.ts
src/components/flow/composables/useAllData.ts
+2
-1
axios.ts
src/utils/axios.ts
+1
-1
vite.config.ts
vite.config.ts
+5
-5
没有找到文件。
src/api/flow.ts
浏览文件 @
fbfbd8f0
...
@@ -34,3 +34,8 @@ export function getMaterialList() {
...
@@ -34,3 +34,8 @@ export function getMaterialList() {
export
function
ruleQuery
(
data
:
{
experiment_id
:
string
;
filters
:
string
})
{
export
function
ruleQuery
(
data
:
{
experiment_id
:
string
;
filters
:
string
})
{
return
httpRequest
.
post
(
'/api/resource/v1/backend/experiment-itinerary/itinerary-query'
,
data
)
return
httpRequest
.
post
(
'/api/resource/v1/backend/experiment-itinerary/itinerary-query'
,
data
)
}
}
// 获取指定群组的成员数量
export
function
getGroupMemberCount
(
params
:
{
group_id
:
string
})
{
return
httpRequest
.
get
(
'/api/resource/v1/backend/experiment-itinerary/group-member-count'
,
{
params
})
}
src/components/flow/components/RuleTemplate.vue
浏览文件 @
fbfbd8f0
...
@@ -114,62 +114,138 @@ async function handleCalculate() {
...
@@ -114,62 +114,138 @@ async function handleCalculate() {
<
template
>
<
template
>
<el-dialog
:title=
"title"
append-to-body
width=
"800px"
class=
"rule-template"
>
<el-dialog
:title=
"title"
append-to-body
width=
"800px"
class=
"rule-template"
>
<slot
:model=
"form"
>
<slot
:model=
"form"
>
<
slot
name=
"header
"
>
<
el-form
ref=
"formRef"
:model=
"form"
label-suffix=
":
"
>
<
el-form
ref=
"formRef"
:model=
"form"
label-suffix=
":
"
>
<
slot
name=
"header
"
>
<el-row
justify=
"space-between"
>
<el-row
justify=
"space-between"
>
<slot
name=
"header-form-prepend"
:model=
"form"
></slot>
<slot
name=
"header-form-prepend"
:model=
"form"
></slot>
<el-form-item
label=
"组件名称"
>
{{
node
.
data
.
name
}}
</el-form-item>
<el-form-item
label=
"组件名称"
>
{{
node
.
data
.
name
}}
</el-form-item>
<el-form-item
label=
"组件答案"
><slot
name=
"header-answer"
:model=
"form"
/></el-form-item>
<el-form-item
label=
"组件答案"
><slot
name=
"header-answer"
:model=
"form"
/></el-form-item>
<slot
name=
"header-form-append"
:model=
"form"
></slot>
<slot
name=
"header-form-append"
:model=
"form"
></slot>
</el-row>
</el-row>
</el-form>
</slot>
</slot>
<el-tabs
v-if=
"step"
v-model=
"stepActive"
stretch
type=
"border-card"
>
<el-tabs
v-if=
"step"
v-model=
"stepActive"
stretch
type=
"border-card"
>
<el-tab-pane
label=
"STEP 1:计算初始化数据量"
:name=
"0"
>
<el-tab-pane
label=
"STEP 1:计算初始化数据量"
:name=
"0"
>
<slot
name=
"step1"
>
<slot
name=
"step1"
>
<!-- 触发条件 -->
<!-- 触发条件 -->
<el-row
justify=
"center"
style=
"padding: 40px 0"
>
<el-row
justify=
"center"
style=
"padding: 40px 0"
>
<el-form
label-suffix=
":"
label-width=
"160px"
>
<el-form
label-suffix=
":"
label-width=
"160px"
>
<el-form-item
label=
"用户总数"
>
<el-form-item
label=
"用户总数"
>
<span
class=
"rule-num"
>
{{
form
.
user_total
}}
</span>
<span
class=
"rule-num"
>
{{
form
.
user_total
}}
</span>
</el-form-item>
</el-form-item>
<slot
name=
"step1-append"
></slot>
<el-form-item
label=
"满足答案的用户总数"
v-if=
"node.data.type === 1"
>
<el-form-item
label=
"满足答案的用户总数"
v-if=
"node.data.type === 1"
>
<span
class=
"rule-num"
>
{{
expectedUserTotalText
}}
</span>
<span
class=
"rule-num"
>
{{
expectedUserTotalText
}}
</span>
<el-button
type=
"primary"
:loading=
"isCalculating"
@
click=
"handleCalculate"
>
计算
</el-button>
<el-button
type=
"primary"
:loading=
"isCalculating"
@
click=
"handleCalculate"
>
计算
</el-button>
</el-form-item>
</el-form-item>
<el-form-item
label=
"上一节点用户总数"
v-else
>
<el-form-item
label=
"上一节点用户总数"
v-else
>
<div>
<div>
<p
class=
"rule-num"
>
<p
class=
"rule-num"
>
正确:
{{
prevNodeRule
.
correct_operation_user_total
||
prevNodeRule
.
expected_user_total
}}
正确:
{{
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>
-->
</el-form-item>
</el-form>
</el-row>
</slot>
</el-tab-pane>
<el-tab-pane
label=
"STEP 2:配置生成规则"
:name=
"1"
>
<slot
name=
"step2"
>
<!-- 触发条件 -->
<template
v-if=
"node.data.type === 1"
>
<header
class=
"rule-result-header"
>
<p>
用户总数:
{{
form
.
user_total
}}
</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>
</p>
<p
class=
"rule-num"
>
错误:
{{
prevNodeRule
.
correct_operation_user_total
||
0
}}
</p>
<el-form-item>
<el-radio-group
v-model=
"form.correct_operation_type"
>
<el-radio
:label=
"1"
>
全部数据
</el-radio>
<el-radio
:label=
"2"
>
部分数据
</el-radio>
</el-radio-group>
</el-form-item>
<template
v-if=
"form.correct_operation_type === 2"
>
<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>
<el-form-item
label=
"请输入"
>
<template
v-if=
"form.correct_operation_method === 1"
>
<el-input-number
v-model=
"form.correct_operation_method_value"
:controls=
"false"
:max=
"100"
/>
%
</
template
>
<el-input-number
v-model=
"form.correct_operation_method_value"
:controls=
"false"
:max=
"form.expected_user_total"
v-else
/>
</el-form-item>
</template>
</div>
</div>
<!--
<el-button
type=
"primary"
:loading=
"isCalculating"
@
click=
"handleCalculate"
>
计算
</el-button>
-->
<el-divider
direction=
"vertical"
style=
"height: auto"
/>
</el-form-item>
<div
class=
"rule-result-col"
>
</el-form>
<p
class=
"rule-result-tips"
>
</el-row>
<el-icon
class=
"is-error"
><CircleCloseFilled
/></el-icon>
操作错误,根据实际操作结果选取数据数量:
</slot>
</p>
</el-tab-pane>
<el-form-item>
<el-tab-pane
label=
"STEP 2:配置生成规则"
:name=
"1"
>
<el-radio-group
v-model=
"form.error_operation_type"
>
<slot
name=
"step2"
>
<el-radio
:label=
"1"
>
全部数据
</el-radio>
<!-- 触发条件 -->
<el-radio
:label=
"2"
>
部分数据
</el-radio>
<template
v-if=
"node.data.type === 1"
>
<el-radio
:label=
"3"
>
不选取
</el-radio>
<header
class=
"rule-result-header"
>
</el-radio-group>
<p>
用户总数:
{{
form
.
user_total
}}
</p>
</el-form-item>
<p>
满足答案的用户总数:
{{
expectedUserTotalText
}}
</p>
<
template
v-if=
"form.error_operation_type === 2"
>
</header>
<el-form-item
label=
"选取规则"
>
<section
class=
"rule-result-body"
>
<el-radio-group
v-model=
"form.error_operation_rule"
>
<div
class=
"rule-result-col"
>
<el-radio
:label=
"1"
>
随机
</el-radio>
<p
class=
"rule-result-tips"
>
</el-radio-group>
<el-icon
class=
"is-success"
><SuccessFilled
/></el-icon>
操作正确,选取数据数量:
</el-form-item>
</p>
<el-form-item
label=
"选取方式"
>
<el-form-item>
<el-radio-group
v-model=
"form.error_operation_method"
>
<el-radio-group
v-model=
"form.correct_operation_type"
>
<el-radio
:label=
"1"
>
百分比
</el-radio>
<el-radio
:label=
"1"
>
全部数据
</el-radio>
<el-radio
:label=
"2"
>
数值
</el-radio>
<el-radio
:label=
"2"
>
部分数据
</el-radio>
</el-radio-group>
</el-radio-group>
</el-form-item>
</el-form-item>
<el-form-item
label=
"请输入"
>
<template
v-if=
"form.correct_operation_type === 2"
>
<template
v-if=
"form.error_operation_method === 1"
>
<el-input-number
v-model=
"form.error_operation_method_value"
:controls=
"false"
:max=
"100"
/>
%
</
template
>
<el-input-number
v-model=
"form.error_operation_method_value"
:controls=
"false"
:max=
"form.expected_user_total"
v-else
/>
</el-form-item>
</template>
</div>
</section>
</template>
<!-- 营销动作 -->
<
template
v-if=
"node.data.type === 2"
>
<header
class=
"rule-result-header"
>
<p>
用户总数:
{{
form
.
user_total
}}
</p>
<p>
上一节点用户总数:
{{
prevNodeExpectedTotal
}}
</p>
<slot
name=
"step-header-append"
></slot>
</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
label=
"选取规则"
>
<el-radio-group
v-model=
"form.correct_operation_rule"
>
<el-radio-group
v-model=
"form.correct_operation_rule"
>
<el-radio
:label=
"1"
>
随机
</el-radio>
<el-radio
:label=
"1"
>
随机
</el-radio>
...
@@ -181,32 +257,33 @@ async function handleCalculate() {
...
@@ -181,32 +257,33 @@ async function handleCalculate() {
<el-radio
:label=
"2"
>
数值
</el-radio>
<el-radio
:label=
"2"
>
数值
</el-radio>
</el-radio-group>
</el-radio-group>
</el-form-item>
</el-form-item>
<
el-form-item
label=
"请输入
"
>
<
template
v-if=
"form.correct_operation_method === 1
"
>
<
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"
/>
<el-input-number
v-model=
"form.correct_operation_method_value"
:controls=
"false"
:max=
"100"
/>
%
%
</
template
>
</el-form-item>
<el-input-number
<el-form-item
label=
"失败"
>
v-model=
"form.correct_operation_method_value"
<el-input-number
:controls=
"false"
v-model=
"form.correct_operation_method_fail_value"
:max=
"form.expected_user_total"
:controls=
"false"
v-else
/>
:max=
"100"
/>
</el-form-item>
%
</template>
</el-form-item>
</div>
</
template
>
<el-divider
direction=
"vertical"
style=
"height: auto"
/>
<
template
v-else
>
<div
class=
"rule-result-col"
>
<el-form-item
label=
"成功"
>
<p
class=
"rule-result-tips"
>
<el-input-number
v-model=
"form.correct_operation_method_value"
:controls=
"false"
/>
<el-icon
class=
"is-error"
><CircleCloseFilled
/></el-icon>
操作错误,根据实际操作结果选取数据数量:
</el-form-item>
</p>
<el-form-item
label=
"失败"
>
<el-form-item>
<el-input-number
v-model=
"form.correct_operation_method_fail_value"
:controls=
"false"
/>
<el-radio-group
v-model=
"form.error_operation_type"
>
</el-form-item>
<el-radio
:label=
"1"
>
全部数据
</el-radio>
</
template
>
<el-radio
:label=
"2"
>
部分数据
</el-radio>
</div>
<el-radio
:label=
"3"
>
不选取
</el-radio>
<el-divider
direction=
"vertical"
style=
"height: auto"
/>
</el-radio-group>
<div
class=
"rule-result-col"
>
</el-form-item>
<p
class=
"rule-result-tips"
>
<
template
v-if=
"form.error_operation_type === 2"
>
<el-icon
class=
"is-error"
><CircleCloseFilled
/></el-icon>
操作错误,选取数据数量:
</p>
<el-form-item
label=
"选取规则"
>
<el-form-item
label=
"选取规则"
>
<el-radio-group
v-model=
"form.error_operation_rule"
>
<el-radio-group
v-model=
"form.error_operation_rule"
>
<el-radio
:label=
"1"
>
随机
</el-radio>
<el-radio
:label=
"1"
>
随机
</el-radio>
...
@@ -218,228 +295,163 @@ async function handleCalculate() {
...
@@ -218,228 +295,163 @@ async function handleCalculate() {
<el-radio
:label=
"2"
>
数值
</el-radio>
<el-radio
:label=
"2"
>
数值
</el-radio>
</el-radio-group>
</el-radio-group>
</el-form-item>
</el-form-item>
<
el-form-item
label=
"请输入
"
>
<
template
v-if=
"form.error_operation_method === 1
"
>
<
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"
/>
<el-input-number
v-model=
"form.error_operation_method_value"
:controls=
"false"
:max=
"100"
/>
%
%
</
template
>
</el-form-item>
<el-input-number
<el-form-item
label=
"失败"
>
v-model=
"form.error_operation_method_value"
<el-input-number
:controls=
"false"
v-model=
"form.error_operation_method_fail_value"
:max=
"form.expected_user_total"
:controls=
"false"
v-else
/>
:max=
"100"
/>
</el-form-item>
%
</template>
</el-form-item>
</div>
</
template
>
</section>
<
template
v-else
>
</template>
<el-form-item
label=
"成功"
>
<el-input-number
v-model=
"form.error_operation_method_value"
:controls=
"false"
/>
<!-- 营销动作 -->
</el-form-item>
<
template
v-if=
"node.data.type === 2"
>
<el-form-item
label=
"失败"
>
<header
class=
"rule-result-header"
>
<el-input-number
v-model=
"form.error_operation_method_fail_value"
:controls=
"false"
/>
<p>
用户总数:
{{
form
.
user_total
}}
</p>
</el-form-item>
<p>
满足答案的用户总数:
{{
expectedUserTotalText
}}
</p>
</
template
>
</header>
</div>
<section
class=
"rule-result-body"
>
</section>
<div
class=
"rule-result-col"
>
</template>
<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"
/>
%
</el-form-item>
<el-form-item
label=
"失败"
>
<el-input-number
v-model=
"form.correct_operation_method_fail_value"
:controls=
"false"
:max=
"100"
/>
%
</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"
/>
%
</el-form-item>
<el-form-item
label=
"失败"
>
<el-input-number
v-model=
"form.error_operation_method_fail_value"
:controls=
"false"
:max=
"100"
/>
%
</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>
<!-- 条件判断 -->
<!-- 条件判断 -->
<
template
v-if=
"node.data.type === 3"
>
<
template
v-if=
"node.data.type === 3"
>
<header
class=
"rule-result-header"
>
<header
class=
"rule-result-header"
>
<p>
用户总数:
{{
form
.
user_total
}}
</p>
<p>
用户总数:
{{
form
.
user_total
}}
</p>
<p
v-if=
"node.data.type === 1"
>
满足答案的用户总数:
{{
expectedUserTotalText
}}
</p>
<p
v-if=
"node.data.type === 1"
>
满足答案的用户总数:
{{
expectedUserTotalText
}}
</p>
<p
v-else
>
上一节点用户总数:
{{
prevNodeExpectedTotal
}}
</p>
<p
v-else
>
上一节点用户总数:
{{
prevNodeExpectedTotal
}}
</p>
</header>
</header>
<section
class=
"rule-result-body"
>
<slot
name=
"step-body-after"
></slot>
<div
class=
"rule-result-col"
>
<slot
name=
"step2-body"
>
<p
class=
"rule-result-tips"
>
<section
class=
"rule-result-body"
>
<el-icon
class=
"is-success"
><SuccessFilled
/></el-icon>
操作正确,选取数据数量:
<div
class=
"rule-result-col"
>
</p>
<p
class=
"rule-result-tips"
>
<el-form-item
label=
"满足判断条件数据"
>
<el-icon
class=
"is-success"
><SuccessFilled
/></el-icon>
操作正确,选取数据数量:
<el-radio
:model-value=
"1"
:label=
"1"
>
根据实际判断结果计算
</el-radio>
</p>
</el-form-item>
<el-form-item
label=
"满足判断条件数据"
>
<el-form-item
label=
"不满足判断条件数据"
>
<el-radio
:model-value=
"1"
:label=
"1"
>
根据实际判断结果计算
</el-radio>
<el-radio
:model-value=
"1"
:label=
"1"
>
根据实际判断结果计算
</el-radio>
</el-form-item>
</el-form-item>
<el-form-item
label=
"不满足判断条件数据"
>
</div>
<el-radio
:model-value=
"1"
:label=
"1"
>
根据实际判断结果计算
</el-radio>
<el-divider
direction=
"vertical"
style=
"height: auto"
/>
</el-form-item>
<div
class=
"rule-result-col"
>
</div>
<p
class=
"rule-result-tips"
>
<el-divider
direction=
"vertical"
style=
"height: auto"
/>
<el-icon
class=
"is-error"
><CircleCloseFilled
/></el-icon>
操作错误,选取数据数量:
<div
class=
"rule-result-col"
>
</p>
<p
class=
"rule-result-tips"
>
<el-form-item
label=
"满足判断条件数据"
>
<el-icon
class=
"is-error"
><CircleCloseFilled
/></el-icon>
操作错误,选取数据数量:
<el-radio
:model-value=
"1"
:label=
"1"
>
根据实际判断结果计算
</el-radio>
</p>
</el-form-item>
<el-form-item
label=
"满足判断条件数据"
>
<el-form-item
label=
"不满足判断条件数据"
>
<el-radio
:model-value=
"1"
:label=
"1"
>
根据实际判断结果计算
</el-radio>
<el-radio
:model-value=
"1"
:label=
"1"
>
根据实际判断结果计算
</el-radio>
</el-form-item>
</el-form-item>
<el-form-item
label=
"不满足判断条件数据"
>
</div>
<el-radio
:model-value=
"1"
:label=
"1"
>
根据实际判断结果计算
</el-radio>
</section>
</el-form-item>
</
template
>
</div>
</slot>
</section>
</el-tab-pane>
</slot>
<el-tab-pane
label=
"STEP 3:预期数据量计算"
:name=
"2"
>
</
template
>
<slot
name=
"step3"
>
</slot>
<!-- 触发条件 -->
</el-tab-pane>
<
template
v-if=
"node.data.type === 1"
>
<el-tab-pane
label=
"STEP 3:预期数据量计算"
:name=
"2"
>
<header
class=
"rule-result-header"
>
<slot
name=
"step3"
>
<p>
用户总数:
{{
form
.
user_total
}}
</p>
<!-- 触发条件 -->
<p>
满足答案的用户总数:
{{
expectedUserTotalText
}}
</p>
<
template
v-if=
"node.data.type === 1"
>
</header>
<header
class=
"rule-result-header"
>
<section
class=
"rule-result-body"
>
<p>
用户总数:
{{
form
.
user_total
}}
</p>
<div
class=
"rule-result-col"
>
<p>
满足答案的用户总数:
{{
expectedUserTotalText
}}
</p>
<p
class=
"rule-result-tips"
>
</header>
<el-icon
class=
"is-success"
><SuccessFilled
/></el-icon>
操作正确,选取数据数量:
<section
class=
"rule-result-body"
>
</p>
<div
class=
"rule-result-col"
>
<p
class=
"rule-num"
>
{{
correctUserTotalText
}}
</p>
<p
class=
"rule-result-tips"
>
</div>
<el-icon
class=
"is-success"
><SuccessFilled
/></el-icon>
操作正确,选取数据数量:
<el-divider
direction=
"vertical"
style=
"height: auto"
/>
</p>
<div
class=
"rule-result-col"
>
<p
class=
"rule-num is-center"
>
{{
correctUserTotalText
}}
</p>
<p
class=
"rule-result-tips"
>
</div>
<el-icon
class=
"is-error"
><CircleCloseFilled
/></el-icon>
操作错误,根据实际操作结果选取数据数量:
<el-divider
direction=
"vertical"
style=
"height: auto"
/>
</p>
<div
class=
"rule-result-col"
>
<p
class=
"rule-num"
>
{{
errorUserTotalText
}}
</p>
<p
class=
"rule-result-tips"
>
</div>
<el-icon
class=
"is-error"
><CircleCloseFilled
/></el-icon>
操作错误,根据实际操作结果选取数据数量:
</section>
</p>
</
template
>
<p
class=
"rule-num is-center"
>
{{
errorUserTotalText
}}
</p>
</div>
</section>
</
template
>
<!-- 营销动作 -->
<!-- 营销动作 -->
<
template
v-if=
"node.data.type === 2"
>
<
template
v-if=
"node.data.type === 2"
>
<header
class=
"rule-result-header"
>
<header
class=
"rule-result-header"
>
<p>
用户总数:
{{
form
.
user_total
}}
</p>
<p>
用户总数:
{{
form
.
user_total
}}
</p>
<p>
上一节点用户总数:
{{
prevNodeExpectedTotal
}}
</p>
<p>
上一节点用户总数:
{{
prevNodeExpectedTotal
}}
</p>
</header>
<slot
name=
"step-header-append"
></slot>
<section
class=
"rule-result-body"
>
</header>
<div
class=
"rule-result-col"
>
<section
class=
"rule-result-body"
>
<p
class=
"rule-result-tips"
>
<div
class=
"rule-result-col"
>
<el-icon
class=
"is-success"
><SuccessFilled
/></el-icon>
操作正确,选取数据数量:
<p
class=
"rule-result-tips"
>
</p>
<el-icon
class=
"is-success"
><SuccessFilled
/></el-icon>
操作正确,选取数据数量:
<el-form-item
label=
"成功"
></el-form-item>
</p>
<el-form-item
label=
"失败"
>
</el-form-item>
<el-form-item
label=
"成功"
></el-form-item>
</div>
<el-form-item
label=
"失败"
>
</el-form-item>
<el-divider
direction=
"vertical"
style=
"height: auto"
/>
</div>
<div
class=
"rule-result-col"
>
<el-divider
direction=
"vertical"
style=
"height: auto"
/>
<p
class=
"rule-result-tips"
>
<div
class=
"rule-result-col"
>
<el-icon
class=
"is-error"
><CircleCloseFilled
/></el-icon>
操作错误,选取数据数量:
<p
class=
"rule-result-tips"
>
</p>
<el-icon
class=
"is-error"
><CircleCloseFilled
/></el-icon>
操作错误,选取数据数量:
<el-form-item
label=
"成功"
>
</el-form-item>
</p>
<el-form-item
label=
"失败"
>
</el-form-item>
<el-form-item
label=
"成功"
>
</el-form-item>
</div>
<el-form-item
label=
"失败"
>
</el-form-item>
</section>
</div>
<el-row
justify=
"center"
style=
"margin-top: 20px"
>
</section>
<el-button
type=
"primary"
:loading=
"isCalculating"
@
click=
"handleCalculate"
>
计算
</el-button>
<el-row
justify=
"center"
style=
"margin-top: 20px"
>
</el-row>
<el-button
type=
"primary"
:loading=
"isCalculating"
@
click=
"handleCalculate"
>
计算
</el-button>
</
template
>
</el-row>
</
template
>
<!-- 条件判断 -->
<!-- 条件判断 -->
<
template
v-if=
"node.data.type === 3"
>
<
template
v-if=
"node.data.type === 3"
>
<header
class=
"rule-result-header"
>
<header
class=
"rule-result-header"
>
<p>
用户总数:
{{
form
.
user_total
}}
</p>
<p>
用户总数:
{{
form
.
user_total
}}
</p>
<p>
上一节点用户总数:
{{
prevNodeExpectedTotal
}}
</p>
<p>
上一节点用户总数:
{{
prevNodeExpectedTotal
}}
</p>
</header>
</header>
<section
class=
"rule-result-body"
>
<slot
name=
"step-body-after"
></slot>
<div
class=
"rule-result-col"
>
<slot
name=
"step3-body"
>
<p
class=
"rule-result-tips"
>
<section
class=
"rule-result-body"
>
<el-icon
class=
"is-success"
><SuccessFilled
/></el-icon>
操作正确,选取数据数量:
<div
class=
"rule-result-col"
>
</p>
<p
class=
"rule-result-tips"
>
<el-form-item
label=
"满足判断条件数据"
>
{{
form
.
expected_user_total
}}
</el-form-item>
<el-icon
class=
"is-success"
><SuccessFilled
/></el-icon>
操作正确,选取数据数量:
<el-form-item
label=
"不满足判断条件数据"
>
</p>
{{
Math
.
max
(
prevNodeExpectedTotal
-
(
form
.
expected_user_total
||
0
),
0
)
}}
<el-form-item
label=
"满足判断条件数据"
>
{{
form
.
expected_user_total
}}
</el-form-item>
</el-form-item>
<el-form-item
label=
"不满足判断条件数据"
>
</div>
{{
Math
.
max
(
prevNodeExpectedTotal
-
(
form
.
expected_user_total
||
0
),
0
)
}}
<el-divider
direction=
"vertical"
style=
"height: auto"
/>
</el-form-item>
<div
class=
"rule-result-col"
>
</div>
<p
class=
"rule-result-tips"
>
<el-divider
direction=
"vertical"
style=
"height: auto"
/>
<el-icon
class=
"is-error"
><CircleCloseFilled
/></el-icon>
操作错误,选取数据数量:
<div
class=
"rule-result-col"
>
</p>
<p
class=
"rule-result-tips"
>
<el-form-item
label=
"满足判断条件数据"
>
<el-icon
class=
"is-error"
><CircleCloseFilled
/></el-icon>
操作错误,选取数据数量:
<el-radio
:model-value=
"1"
:label=
"1"
>
根据实际判断结果计算
</el-radio>
</p>
</el-form-item>
<el-form-item
label=
"满足判断条件数据"
>
<el-form-item
label=
"不满足判断条件数据"
>
<el-radio
:model-value=
"1"
:label=
"1"
>
根据实际判断结果计算
</el-radio>
<el-radio
:model-value=
"1"
:label=
"1"
>
根据实际判断结果计算
</el-radio>
</el-form-item>
</el-form-item>
<el-form-item
label=
"不满足判断条件数据"
>
</div>
<el-radio
:model-value=
"1"
:label=
"1"
>
根据实际判断结果计算
</el-radio>
</section>
</el-form-item>
<el-row
justify=
"center"
style=
"margin-top: 20px"
>
</div>
<el-button
type=
"primary"
:loading=
"isCalculating"
@
click=
"handleCalculate"
>
计算
</el-button>
</section>
</el-row>
</slot>
</
template
>
<el-row
justify=
"center"
style=
"margin-top: 20px"
>
</slot>
<el-button
type=
"primary"
:loading=
"isCalculating"
@
click=
"handleCalculate"
>
计算
</el-button>
</el-tab-pane>
</el-row>
</el-tabs>
</
template
>
</slot>
</el-tab-pane>
</el-tabs>
</el-form>
</slot>
</slot>
<
template
#
footer
>
<
template
#
footer
>
<el-row
justify=
"center"
v-if=
"step"
>
<el-row
justify=
"center"
v-if=
"step"
>
...
@@ -481,7 +493,6 @@ async function handleCalculate() {
...
@@ -481,7 +493,6 @@ async function handleCalculate() {
font-size
:
20px
;
font-size
:
20px
;
font-weight
:
bold
;
font-weight
:
bold
;
color
:
var
(
--
main-color
);
color
:
var
(
--
main-color
);
text-align
:
center
;
}
}
.rule-result-header
{
.rule-result-header
{
padding
:
10px
0
;
padding
:
10px
0
;
...
@@ -509,6 +520,9 @@ async function handleCalculate() {
...
@@ -509,6 +520,9 @@ async function handleCalculate() {
margin-right
:
5px
;
margin-right
:
5px
;
}
}
}
}
.is-center
{
text-align
:
center
;
}
.is-success
{
.is-success
{
color
:
#81b337
;
color
:
#81b337
;
}
}
...
...
src/components/flow/components/conditionalBranch/eventJudgment/Generate.vue
0 → 100644
浏览文件 @
fbfbd8f0
<
script
setup
lang=
"ts"
>
import
{
useMetaEvent
}
from
'../../../composables/useAllData'
const
props
=
defineProps
<
{
node
:
any
}
>
()
const
config
=
computed
(()
=>
{
return
props
.
node
.
data
.
teacher
||
{}
})
const
{
getMetaEvent
}
=
useMetaEvent
()
const
metaEvent
=
computed
(()
=>
getMetaEvent
(
config
.
value
?.
event_id
))
const
datalist
=
ref
<
any
>
([])
watchEffect
(()
=>
{
datalist
.
value
=
metaEvent
.
value
?.
attributes
.
map
(
item
=>
{
return
{
...
item
,
form
:
{
mode
:
1
}
}
})
||
[]
})
</
script
>
<
template
>
<el-dialog
title=
"配置事件属性规则"
append-to-body
width=
"1000px"
class=
"generate-event"
>
<el-form
label-suffix=
":"
>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"事件英文名称"
>
{{
metaEvent
?.
english_name
}}
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"事件名称"
>
{{
metaEvent
?.
name
}}
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"所属连接"
>
{{
metaEvent
?.
connection_name
}}
</el-form-item>
</el-col>
<el-col
:span=
"12"
><el-form-item
label=
"状态"
>
生效
</el-form-item></el-col>
</el-row>
</el-form>
<el-table
border
:data=
"datalist"
>
<el-table-column
label=
"属性英文名"
prop=
"english_name"
align=
"center"
></el-table-column>
<el-table-column
label=
"属性名称"
prop=
"name"
align=
"center"
></el-table-column>
<el-table-column
label=
"字段类型"
prop=
"type_name"
align=
"center"
></el-table-column>
<el-table-column
label=
"字段格式"
prop=
"format"
align=
"center"
></el-table-column>
<el-table-column
label=
"属性生成规则"
align=
"center"
width=
"400"
>
<template
#
default=
"
{ row }">
<el-radio-group
v-model=
"row.form.mode"
>
<el-radio
:label=
"1"
>
随机值
</el-radio>
<el-radio
:label=
"2"
>
固定值
</el-radio>
<el-radio
:label=
"3"
>
历史随机值
</el-radio>
</el-radio-group>
<!-- 字符串 -->
<template
v-if=
"row.type === '1'"
>
<!-- 随机值 -->
<template
v-if=
"row.form.mode === 1"
>
<el-radio-group>
<el-radio
:label=
"1"
>
来自于系统数据
</el-radio>
<el-radio
:label=
"4"
>
完全随机
</el-radio>
</el-radio-group>
</
template
>
<!-- 固定值 -->
<
template
v-if=
"row.form.mode === 2"
>
<el-input
/>
</
template
>
</template>
<!-- 整数 -->
<
template
v-if=
"row.type === '2'"
></
template
>
<!-- 日期 -->
<
template
v-if=
"row.type === '4'"
>
<el-radio-group>
<el-radio
:label=
"1"
>
完全随机(不早于当前时间)
</el-radio>
<el-radio
:label=
"2"
>
时间区间
<el-date-picker
value-format=
"YYYY-MM-DD"
/>
至
<el-date-picker
value-format=
"YYYY-MM-DD"
/>
</el-radio>
<el-radio
:label=
"3"
>
当前时间前
<el-input-number
:controls=
"false"
/>
天
</el-radio>
<el-radio
:label=
"4"
>
当前时间后
<el-input-number
:controls=
"false"
/>
天
</el-radio>
</el-radio-group>
</
template
>
</template>
</el-table-column>
</el-table>
<
template
#
footer
>
<el-row
justify=
"center"
>
<el-button
plain
auto-insert-space
@
click=
"$emit('update:modelValue', false)"
>
取消
</el-button>
<el-button
type=
"primary"
auto-insert-space
>
保存
</el-button>
</el-row>
</
template
>
</el-dialog>
</template>
src/components/flow/components/conditionalBranch/eventJudgment/Rule.vue
浏览文件 @
fbfbd8f0
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
RuleTemplate
from
'../../RuleTemplate.vue'
import
RuleTemplate
from
'../../RuleTemplate.vue'
import
{
useMetaEvent
}
from
'../../../composables/useAllData'
import
{
useMetaEvent
}
from
'../../../composables/useAllData'
import
{
SuccessFilled
,
CircleCloseFilled
}
from
'@element-plus/icons-vue'
import
Generate
from
'./Generate.vue'
const
{
getMetaEvent
}
=
useMetaEvent
()
const
{
getMetaEvent
}
=
useMetaEvent
()
...
@@ -11,12 +13,153 @@ const config = computed(() => {
...
@@ -11,12 +13,153 @@ const config = computed(() => {
})
})
const
metaEvent
=
computed
(()
=>
getMetaEvent
(
config
.
value
?.
event_id
))
const
metaEvent
=
computed
(()
=>
getMetaEvent
(
config
.
value
?.
event_id
))
function
paramsParse
(
data
:
any
)
{
return
{
event_id
:
data
.
event_id
}
}
const
radio
=
ref
(
'1'
)
const
form
=
reactive
({
correct_operation_rule
:
1
,
correct_operation_method
:
1
,
correct_operation_method_value
:
undefined
,
correct_operation_method_fail_value
:
undefined
,
correct_operation_min
:
undefined
,
correct_operation_max
:
undefined
,
error_operation_rule
:
1
,
error_operation_method
:
1
,
error_operation_method_value
:
undefined
,
error_operation_method_fail_value
:
undefined
,
error_operation_min
:
undefined
,
error_operation_max
:
undefined
})
const
generateVisible
=
ref
(
false
)
function
handleConfig
()
{
generateVisible
.
value
=
true
}
</
script
>
</
script
>
<
template
>
<
template
>
<RuleTemplate
:node=
"node"
step
>
<RuleTemplate
:node=
"node"
step
:paramsParse=
"paramsParse"
v-bind=
"$attrs"
>
<template
#
header-answer
>
<template
#
header-answer
>
<span
class=
"is-answer"
>
{{
metaEvent
?.
name
}}
</span>
<span
class=
"is-answer"
>
{{
metaEvent
?.
name
}}
</span>
</
template
>
</
template
>
<
template
#
step-body-after
>
<el-row
justify=
"center"
style=
"margin-bottom: 20px"
>
<el-radio-group
v-model=
"radio"
size=
"large"
>
<el-radio-button
label=
"1"
>
判断事件数据
</el-radio-button>
<el-radio-button
label=
"2"
>
生成事件数据
</el-radio-button>
</el-radio-group>
</el-row>
</
template
>
<
template
#
step2-body
v-if=
"radio === '2'"
>
<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>
<el-form-item
label=
"请输入分支条件数值"
></el-form-item>
<el-form-item
label=
"是"
>
<template
v-if=
"form.correct_operation_method === 1"
>
<el-input-number
v-model=
"form.correct_operation_method_value"
:controls=
"false"
:max=
"100"
/>
%
</
template
>
<el-input-number
v-model=
"form.correct_operation_method_value"
:controls=
"false"
v-else
/>
</el-form-item>
<el-form-item
label=
"否"
>
<
template
v-if=
"form.correct_operation_method === 1"
>
<el-input-number
v-model=
"form.correct_operation_method_fail_value"
:controls=
"false"
:max=
"100"
/>
%
</
template
>
<el-input-number
v-model=
"form.correct_operation_method_fail_value"
:controls=
"false"
v-else
/>
</el-form-item>
<el-form-item
label=
"请输入每个用户生成事件数据的取值范围"
>
Min
<el-input-number
v-model=
"form.correct_operation_min"
:controls=
"false"
/>
Max
<el-input-number
v-model=
"form.correct_operation_max"
:controls=
"false"
/>
</el-form-item>
<el-row
justify=
"center"
>
<el-button
type=
"primary"
plain
@
click=
"handleConfig"
>
配置事件属性值规则
</el-button>
</el-row>
</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>
<el-form-item
label=
"请输入分支条件数值"
></el-form-item>
<el-form-item
label=
"是"
>
<
template
v-if=
"form.error_operation_method === 1"
>
<el-input-number
v-model=
"form.error_operation_method_value"
:controls=
"false"
:max=
"100"
/>
%
</
template
>
<el-input-number
v-model=
"form.error_operation_method_value"
:controls=
"false"
v-else
/>
</el-form-item>
<el-form-item
label=
"否"
>
<
template
v-if=
"form.error_operation_method === 1"
>
<el-input-number
v-model=
"form.error_operation_method_fail_value"
:controls=
"false"
:max=
"100"
/>
%
</
template
>
<el-input-number
v-model=
"form.error_operation_method_fail_value"
:controls=
"false"
v-else
/>
</el-form-item>
<el-form-item
label=
"请输入每个用户生成事件数据的取值范围"
>
Min
<el-input-number
v-model=
"form.error_operation_min"
:controls=
"false"
/>
Max
<el-input-number
v-model=
"form.error_operation_max"
:controls=
"false"
/>
</el-form-item>
<el-row
justify=
"center"
>
<el-button
type=
"primary"
plain
@
click=
"handleConfig"
>
配置事件属性值规则
</el-button>
</el-row>
</div>
</section>
</template>
<
template
#
step3-body
v-if=
"radio === '2'"
>
<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=
"满足判断条件数据"
><span
class=
"rule-num"
>
3000
</span></el-form-item>
<el-form-item
label=
"不满足判断条件数据"
><span
class=
"rule-num"
>
3000
</span></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=
"满足判断条件数据"
><span
class=
"rule-num"
>
3000
</span></el-form-item>
<el-form-item
label=
"不满足判断条件数据"
><span
class=
"rule-num"
>
3000
</span></el-form-item>
</div>
</section>
</
template
>
</RuleTemplate>
</RuleTemplate>
<Generate
:node=
"node"
v-model=
"generateVisible"
v-if=
"generateVisible"
></Generate>
</template>
</template>
src/components/flow/components/conditionalBranch/groupJudgment/Rule.vue
浏览文件 @
fbfbd8f0
...
@@ -13,7 +13,7 @@ const config = computed(() => {
...
@@ -13,7 +13,7 @@ const config = computed(() => {
const
group
=
computed
(()
=>
getGroup
(
config
.
value
.
group_id
))
const
group
=
computed
(()
=>
getGroup
(
config
.
value
.
group_id
))
function
paramsParse
(
data
:
any
)
{
function
paramsParse
(
data
:
any
)
{
return
data
.
rules
return
{
group_id
:
data
.
group_id
}
}
}
</
script
>
</
script
>
...
...
src/components/flow/components/conditionalBranch/labelJudgment/Config.vue
浏览文件 @
fbfbd8f0
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
{
CirclePlusFilled
,
RemoveFilled
}
from
'@element-plus/icons-vue'
//
import { CirclePlusFilled, RemoveFilled } from '@element-plus/icons-vue'
import
ConfigTemplate
from
'../../ConfigTemplate.vue'
import
ConfigTemplate
from
'../../ConfigTemplate.vue'
import
{
stringOperatorList
}
from
'@/utils/dictionary'
//
import { stringOperatorList } from '@/utils/dictionary'
import
{
useTag
}
from
'../../../composables/useAllData'
import
{
useTag
}
from
'../../../composables/useAllData'
const
props
=
defineProps
<
{
node
:
any
}
>
()
const
props
=
defineProps
<
{
node
:
any
}
>
()
...
@@ -9,7 +9,9 @@ const props = defineProps<{ node: any }>()
...
@@ -9,7 +9,9 @@ const props = defineProps<{ node: any }>()
const
role
=
inject
(
'role'
)
as
string
const
role
=
inject
(
'role'
)
as
string
const
form
=
reactive
({
const
form
=
reactive
({
rules
:
[{
tag_id
:
''
,
operate
:
''
,
value
:
''
}]
tag_ids
:
[],
tag_names
:
''
// rules: [{ tag_id: '', operate: '', value: '' }]
})
})
watchEffect
(()
=>
{
watchEffect
(()
=>
{
Object
.
assign
(
form
,
props
.
node
.
data
[
role
])
Object
.
assign
(
form
,
props
.
node
.
data
[
role
])
...
@@ -17,18 +19,32 @@ watchEffect(() => {
...
@@ -17,18 +19,32 @@ watchEffect(() => {
const
{
tagList
}
=
useTag
()
const
{
tagList
}
=
useTag
()
function
addRule
()
{
watchEffect
(()
=>
{
form
.
rules
.
push
({
tag_id
:
''
,
operate
:
'='
,
value
:
''
})
form
.
tag_names
=
form
.
tag_ids
}
.
map
((
id
:
string
)
=>
{
return
tagList
.
value
.
find
(
item
=>
item
.
id
===
id
)?.
name
})
.
join
(
'、'
)
})
// function addRule() {
// form.rules.push({ tag_id: '', operate: '=', value: '' })
// }
function
removeRule
(
index
:
number
)
{
//
function removeRule(index: number) {
form
.
rules
.
splice
(
index
,
1
)
//
form.rules.splice(index, 1)
}
//
}
</
script
>
</
script
>
<
template
>
<
template
>
<ConfigTemplate
:model=
"form"
:node=
"node"
>
<ConfigTemplate
:model=
"form"
:node=
"node"
>
<el-form-item
v-for=
"(rule, index) in form.rules"
:key=
"index"
>
<el-form-item>
标签
等于
<el-select
v-model=
"form.tag_ids"
placeholder=
"请选择标签"
multiple
style=
"width: 400px"
>
<el-option
:key=
"item.id"
v-for=
"item in tagList"
:value=
"item.id"
:label=
"item.name"
></el-option>
</el-select>
</el-form-item>
<!--
<el-form-item
v-for=
"(rule, index) in form.rules"
:key=
"index"
>
<el-row
align=
"middle"
>
<el-row
align=
"middle"
>
<el-select
v-model=
"rule.tag_id"
placeholder=
"请选择标签"
style=
"width: 120px"
>
<el-select
v-model=
"rule.tag_id"
placeholder=
"请选择标签"
style=
"width: 120px"
>
<el-option
:key=
"item.id"
v-for=
"item in tagList"
:value=
"item.id"
:label=
"item.name"
></el-option>
<el-option
:key=
"item.id"
v-for=
"item in tagList"
:value=
"item.id"
:label=
"item.name"
></el-option>
...
@@ -38,8 +54,7 @@ function removeRule(index: number) {
...
@@ -38,8 +54,7 @@ function removeRule(index: number) {
v-for=
"item in stringOperatorList"
v-for=
"item in stringOperatorList"
:key=
"item.value"
:key=
"item.value"
:value=
"item.value"
:value=
"item.value"
:label=
"item.label"
:label=
"item.label"
></el-option>
></el-option>
</el-select>
</el-select>
<el-input
v-model=
"rule.value"
placeholder=
"请输入标签值"
style=
"width: 180px"
></el-input>
<el-input
v-model=
"rule.value"
placeholder=
"请输入标签值"
style=
"width: 180px"
></el-input>
<el-icon
style=
"margin-left: 10px"
size=
"20"
color=
"#cf5b78"
@
click=
"removeRule(index)"
v-if=
"index !== 0"
>
<el-icon
style=
"margin-left: 10px"
size=
"20"
color=
"#cf5b78"
@
click=
"removeRule(index)"
v-if=
"index !== 0"
>
...
@@ -50,11 +65,10 @@ function removeRule(index: number) {
...
@@ -50,11 +65,10 @@ function removeRule(index: number) {
size=
"20"
size=
"20"
color=
"#cf5b78"
color=
"#cf5b78"
@
click=
"addRule"
@
click=
"addRule"
v-if=
"index === form.rules.length - 1"
v-if=
"index === form.rules.length - 1"
>
>
<CirclePlusFilled
/>
<CirclePlusFilled
/>
</el-icon>
</el-icon>
</el-row>
</el-row>
</el-form-item>
</el-form-item>
-->
</ConfigTemplate>
</ConfigTemplate>
</
template
>
</
template
>
src/components/flow/components/conditionalBranch/labelJudgment/ConfigView.vue
浏览文件 @
fbfbd8f0
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
ConfigViewTemplate
from
'../../ConfigViewTemplate.vue'
import
ConfigViewTemplate
from
'../../ConfigViewTemplate.vue'
import
{
stringOperatorList
}
from
'@/utils/dictionary'
//
import { stringOperatorList } from '@/utils/dictionary'
import
{
useTag
}
from
'../../../composables/useAllData'
//
import { useTag } from '../../../composables/useAllData'
const
role
=
inject
(
'role'
)
as
string
const
role
=
inject
(
'role'
)
as
string
defineProps
<
{
node
:
any
}
>
()
defineProps
<
{
node
:
any
}
>
()
const
{
tagList
}
=
useTag
()
//
const { tagList } = useTag()
</
script
>
</
script
>
<
template
>
<
template
>
<ConfigViewTemplate
:node=
"node"
>
<ConfigViewTemplate
:node=
"node"
>
<div>
<div>
<el-form-item
:label=
"role === 'student' ? '我的答案' : '学生答案'"
style=
"margin-bottom: 0"
></el-form-item>
<el-form-item
:label=
"role === 'student' ? '我的答案' : '学生答案'"
style=
"margin-bottom: 0"
></el-form-item>
<el-form-item
v-for=
"item in node.data.student?.rules"
style=
"margin-left: 30px; margin-bottom: 0px"
>
<el-form-item>
{{
node
.
data
.
student
?.
tag_names
}}
</el-form-item>
<!--
<el-form-item
v-for=
"item in node.data.student?.rules"
style=
"margin-left: 30px; margin-bottom: 0px"
>
{{
tagList
.
find
((
c
:
any
)
=>
c
.
id
===
item
.
tag_id
)?.
name
}}
{{
tagList
.
find
((
c
:
any
)
=>
c
.
id
===
item
.
tag_id
)?.
name
}}
{{
stringOperatorList
.
find
(
c
=>
c
.
value
===
item
.
operate
)?.
label
}}
{{
stringOperatorList
.
find
(
c
=>
c
.
value
===
item
.
operate
)?.
label
}}
{{
item
.
value
}}
{{
item
.
value
}}
</el-form-item>
</el-form-item>
-->
</div>
</div>
<div>
<div>
<el-form-item
label=
"正确答案"
style=
"margin-bottom: 0"
></el-form-item>
<el-form-item
label=
"正确答案"
style=
"margin-bottom: 0"
></el-form-item>
<el-form-item
v-for=
"item in node.data.teacher?.rules"
style=
"margin-left: 30px; margin-bottom: 0px"
>
<el-form-item>
{{
node
.
data
.
teacher
?.
tag_names
}}
</el-form-item>
<!--
<el-form-item
v-for=
"item in node.data.teacher?.rules"
style=
"margin-left: 30px; margin-bottom: 0px"
>
{{
tagList
.
find
((
c
:
any
)
=>
c
.
id
===
item
.
tag_id
)?.
name
}}
{{
tagList
.
find
((
c
:
any
)
=>
c
.
id
===
item
.
tag_id
)?.
name
}}
{{
stringOperatorList
.
find
(
c
=>
c
.
value
===
item
.
operate
)?.
label
}}
{{
stringOperatorList
.
find
(
c
=>
c
.
value
===
item
.
operate
)?.
label
}}
{{
item
.
value
}}
{{
item
.
value
}}
</el-form-item>
</el-form-item>
-->
</div>
</div>
</ConfigViewTemplate>
</ConfigViewTemplate>
</
template
>
</
template
>
src/components/flow/components/conditionalBranch/labelJudgment/Rule.vue
浏览文件 @
fbfbd8f0
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
RuleTemplate
from
'../../RuleTemplate.vue'
import
RuleTemplate
from
'../../RuleTemplate.vue'
import
{
useTag
}
from
'../../../composables/useAllData'
//
import { useTag } from '../../../composables/useAllData'
const
props
=
defineProps
<
{
node
:
any
}
>
()
const
props
=
defineProps
<
{
node
:
any
}
>
()
const
{
getTag
}
=
useTag
()
//
const { getTag } = useTag()
const
config
=
computed
(()
=>
{
const
config
=
computed
(()
=>
{
return
props
.
node
.
data
.
teacher
||
{}
return
props
.
node
.
data
.
teacher
||
{}
})
})
function
paramsParse
(
data
:
any
)
{
function
paramsParse
(
data
:
any
)
{
return
data
.
rules
return
{
tag_ids
:
data
.
tag_ids
}
}
}
</
script
>
</
script
>
<
template
>
<
template
>
<RuleTemplate
:node=
"node"
step
:paramsParse=
"paramsParse"
>
<RuleTemplate
:node=
"node"
step
:paramsParse=
"paramsParse"
>
<template
#
header-answer
>
<template
#
header-answer
>
<p
v-for=
"(item, index) in config.rules"
:key=
"index"
>
<span>
标签
</span>
<span
class=
"is-operate"
>
等于
</span>
<span
class=
"is-answer"
>
{{
config
.
tag_names
}}
</span>
<!--
<p
v-for=
"(item, index) in config.rules"
:key=
"index"
>
<span>
{{
getTag
(
item
.
tag_id
)?.
name
}}
</span>
<span>
{{
getTag
(
item
.
tag_id
)?.
name
}}
</span>
<span
class=
"is-operate"
>
{{
item
.
operate
}}
</span>
<span
class=
"is-operate"
>
{{
item
.
operate
}}
</span>
<span
class=
"is-answer"
>
{{
item
.
value
}}
</span>
<span
class=
"is-answer"
>
{{
item
.
value
}}
</span>
</p>
</p>
-->
</
template
>
</
template
>
</RuleTemplate>
</RuleTemplate>
</template>
</template>
src/components/flow/components/marketingAction/joinGroup/Rule.vue
浏览文件 @
fbfbd8f0
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
RuleTemplate
from
'../../RuleTemplate.vue'
import
RuleTemplate
from
'../../RuleTemplate.vue'
import
{
useGroup
}
from
'../../../composables/useAllData'
import
{
useGroup
}
from
'../../../composables/useAllData'
import
{
getGroupMemberCount
}
from
'@/api/flow'
const
props
=
defineProps
<
{
node
:
any
}
>
()
const
props
=
defineProps
<
{
node
:
any
}
>
()
...
@@ -12,6 +13,15 @@ const config = computed(() => {
...
@@ -12,6 +13,15 @@ const config = computed(() => {
const
group
=
computed
(()
=>
getGroup
(
config
.
value
.
group_id
))
const
group
=
computed
(()
=>
getGroup
(
config
.
value
.
group_id
))
const
groupCount
=
ref
()
function
fetchInfo
()
{
getGroupMemberCount
({
group_id
:
config
.
value
.
group_id
}).
then
(
res
=>
{
groupCount
.
value
=
res
.
data
.
count
})
}
onMounted
(
fetchInfo
)
function
paramsParse
(
data
:
any
)
{
function
paramsParse
(
data
:
any
)
{
return
{
group_id
:
data
.
group_id
}
return
{
group_id
:
data
.
group_id
}
}
}
...
@@ -22,5 +32,13 @@ function paramsParse(data: any) {
...
@@ -22,5 +32,13 @@ function paramsParse(data: any) {
<template
#
header-answer
>
<template
#
header-answer
>
<span
class=
"is-answer"
>
{{
group
?.
name
}}
</span>
<span
class=
"is-answer"
>
{{
group
?.
name
}}
</span>
</
template
>
</
template
>
<
template
#
step1-append
>
<el-form-item
label=
"当前群组用户人数"
>
<span
class=
"rule-num"
>
{{
groupCount
}}
</span>
</el-form-item>
</
template
>
<
template
#
step-header-append
>
<p>
当前群组用户人数:
{{
groupCount
}}
</p>
</
template
>
</RuleTemplate>
</RuleTemplate>
</template>
</template>
src/components/flow/components/marketingAction/leaveGroup/Rule.vue
浏览文件 @
fbfbd8f0
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
RuleTemplate
from
'../../RuleTemplate.vue'
import
RuleTemplate
from
'../../RuleTemplate.vue'
import
{
useGroup
}
from
'../../../composables/useAllData'
import
{
useGroup
}
from
'../../../composables/useAllData'
import
{
getGroupMemberCount
}
from
'@/api/flow'
const
props
=
defineProps
<
{
node
:
any
}
>
()
const
props
=
defineProps
<
{
node
:
any
}
>
()
...
@@ -12,6 +13,15 @@ const config = computed(() => {
...
@@ -12,6 +13,15 @@ const config = computed(() => {
const
group
=
computed
(()
=>
getGroup
(
config
.
value
.
group_id
))
const
group
=
computed
(()
=>
getGroup
(
config
.
value
.
group_id
))
const
groupCount
=
ref
()
function
fetchInfo
()
{
getGroupMemberCount
({
group_id
:
config
.
value
.
group_id
}).
then
(
res
=>
{
groupCount
.
value
=
res
.
data
.
count
})
}
onMounted
(
fetchInfo
)
function
paramsParse
(
data
:
any
)
{
function
paramsParse
(
data
:
any
)
{
return
{
group_id
:
data
.
group_id
}
return
{
group_id
:
data
.
group_id
}
}
}
...
@@ -22,5 +32,13 @@ function paramsParse(data: any) {
...
@@ -22,5 +32,13 @@ function paramsParse(data: any) {
<template
#
header-answer
>
<template
#
header-answer
>
<span
class=
"is-answer"
>
{{
group
?.
name
}}
</span>
<span
class=
"is-answer"
>
{{
group
?.
name
}}
</span>
</
template
>
</
template
>
<
template
#
step1-append
>
<el-form-item
label=
"当前群组用户人数"
>
<span
class=
"rule-num"
>
{{
groupCount
}}
</span>
</el-form-item>
</
template
>
<
template
#
step-header-append
>
<p>
当前群组用户人数:
{{
groupCount
}}
</p>
</
template
>
</RuleTemplate>
</RuleTemplate>
</template>
</template>
src/components/flow/components/triggeringConditions/dingtalk/Config.vue
deleted
100644 → 0
浏览文件 @
62208212
<
script
setup
lang=
"ts"
>
import
ConfigTemplate
from
'../../ConfigTemplate.vue'
import
{
useGroup
}
from
'../../../composables/useAllData'
const
props
=
defineProps
<
{
node
:
any
}
>
()
const
role
=
inject
(
'role'
)
as
string
const
form
=
reactive
({
id
:
''
})
watchEffect
(()
=>
{
Object
.
assign
(
form
,
props
.
node
.
data
[
role
])
})
const
{
groupList
}
=
useGroup
()
</
script
>
<
template
>
<ConfigTemplate
:model=
"form"
:node=
"node"
>
<el-form-item>
<el-select
style=
"width: 100%"
v-model=
"form.id"
placeholder=
"请选择需要监控的群组"
>
<el-option
:key=
"item.id"
v-for=
"item in groupList"
:value=
"item.id"
:label=
"item.name"
></el-option>
</el-select>
<span
style=
"font-size: 12px; text-align: right; color: #ccc"
>
您选择的群组中,新加入的用户将会触发该旅程
</span>
</el-form-item>
</ConfigTemplate>
</
template
>
src/components/flow/components/triggeringConditions/dingtalk/ConfigView.vue
deleted
100644 → 0
浏览文件 @
62208212
<
script
setup
lang=
"ts"
>
import
ConfigViewTemplate
from
'../../ConfigViewTemplate.vue'
defineProps
<
{
node
:
any
}
>
()
</
script
>
<
template
>
<ConfigViewTemplate
:node=
"node"
>
<el-form-item
label=
"学生答案"
>
</el-form-item>
<el-form-item
label=
"正确答案"
>
</el-form-item>
</ConfigViewTemplate>
</
template
>
src/components/flow/components/triggeringConditions/dingtalk/Index.vue
deleted
100644 → 0
浏览文件 @
62208212
<!-- 钉钉 -->
<
script
setup
lang=
"ts"
>
import
NodeTemplate
from
'../../NodeTemplate.vue'
import
Icon
from
'@/components/ConnectionIcon.vue'
const
Config
=
defineAsyncComponent
(()
=>
import
(
'./Config.vue'
))
const
ConfigView
=
defineAsyncComponent
(()
=>
import
(
'./ConfigView.vue'
))
const
Rule
=
defineAsyncComponent
(()
=>
import
(
'./Rule.vue'
))
const
props
=
defineProps
<
{
node
:
any
}
>
()
const
action
=
inject
(
'action'
)
as
string
const
role
=
inject
(
'role'
)
as
string
const
templateType
=
inject
(
'templateType'
)
as
string
// 是否置灰
const
isGray
=
computed
(()
=>
{
return
templateType
===
'2'
&&
role
===
'student'
&&
action
===
'edit'
&&
!
props
.
node
.
data
[
role
]
})
// 设置
const
settingVisible
=
ref
(
false
)
</
script
>
<
template
>
<NodeTemplate
:node=
"node"
@
setting=
"settingVisible = true"
>
<div
class=
"node-item"
>
<Icon
class=
"circle"
name=
"circle"
:color=
"isGray ? '#9a9a9a' : '#4C5AB3'"
w=
"60"
h=
"60"
></Icon>
<Icon
class=
"icon"
name=
"14"
color=
"#fff"
w=
"24"
h=
"24"
></Icon>
</div>
</NodeTemplate>
<!-- 配置 -->
<Config
v-model=
"settingVisible"
:node=
"node"
v-if=
"settingVisible && action === 'edit'"
/>
<!-- 查看配置 -->
<ConfigView
v-model=
"settingVisible"
:node=
"node"
v-if=
"settingVisible && action === 'view'"
/>
<!-- 数据生成规则 -->
<Rule
v-model=
"settingVisible"
:node=
"node"
v-if=
"settingVisible && action === 'rule'"
/>
</
template
>
src/components/flow/components/triggeringConditions/dingtalk/Rule.vue
deleted
100644 → 0
浏览文件 @
62208212
<
script
setup
lang=
"ts"
>
import
RuleTemplate
from
'../../RuleTemplate.vue'
defineProps
<
{
node
:
any
}
>
()
</
script
>
<
template
>
<RuleTemplate
:node=
"node"
step
>
<template
#
header-answer
>
答案
</
template
>
<
template
#
header-form-append
>
<el-form-item
label=
"事件"
>
<el-select>
<el-option
value=
"关注公众号"
></el-option>
</el-select>
</el-form-item>
</
template
>
</RuleTemplate>
</template>
src/components/flow/composables/useAllData.ts
浏览文件 @
fbfbd8f0
...
@@ -15,7 +15,8 @@ interface MetaEventType {
...
@@ -15,7 +15,8 @@ interface MetaEventType {
name
:
string
name
:
string
english_name
:
string
english_name
:
string
pinyin
:
string
pinyin
:
string
event_attrs
:
AttrType
[]
connection_name
:
string
attributes
:
AttrType
[]
}
}
// 标签类型
// 标签类型
...
...
src/utils/axios.ts
浏览文件 @
fbfbd8f0
...
@@ -59,7 +59,7 @@ httpRequest.interceptors.response.use(
...
@@ -59,7 +59,7 @@ httpRequest.interceptors.response.use(
// // 未授权
// // 未授权
// router.push('/401')
// router.push('/401')
}
else
{
}
else
{
ElMessage
.
error
(
message
)
ElMessage
.
error
(
message
||
error
.
message
)
console
.
error
(
`
${
status
}
:
${
message
}
`
)
console
.
error
(
`
${
status
}
:
${
message
}
`
)
}
}
}
else
{
}
else
{
...
...
vite.config.ts
浏览文件 @
fbfbd8f0
...
@@ -26,11 +26,11 @@ export default defineConfig(({ mode }) => ({
...
@@ -26,11 +26,11 @@ export default defineConfig(({ mode }) => ({
cert
:
fs
.
readFileSync
(
path
.
join
(
__dirname
,
'./https/ezijing.com.pem'
))
cert
:
fs
.
readFileSync
(
path
.
join
(
__dirname
,
'./https/ezijing.com.pem'
))
},
},
proxy
:
{
proxy
:
{
'/api/resource'
:
{
//
'/api/resource': {
target
:
'http://com-resource-admin-test.ezijing.com/'
,
//
target: 'http://com-resource-admin-test.ezijing.com/',
changeOrigin
:
true
,
//
changeOrigin: true,
rewrite
:
path
=>
path
.
replace
(
/^
\/
api
\/
resource/
,
''
)
//
rewrite: path => path.replace(/^\/api\/resource/, '')
},
//
},
'/api'
:
'https://saas-dml.ezijing.com'
'/api'
:
'https://saas-dml.ezijing.com'
}
}
},
},
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论