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

chore: update

上级 fbfbd8f0
...@@ -10,6 +10,7 @@ interface Props { ...@@ -10,6 +10,7 @@ interface Props {
node: any node: any
step?: boolean step?: boolean
paramsParse?: (data: any, form: any) => any paramsParse?: (data: any, form: any) => any
generateParse?: (data: any, form: any) => any
onSubmit?: (form: any) => void onSubmit?: (form: any) => void
} }
...@@ -85,13 +86,15 @@ async function handleSubmit() { ...@@ -85,13 +86,15 @@ async function handleSubmit() {
function updateNode() { function updateNode() {
if (!props.node) return if (!props.node) return
const params = props.paramsParse ? props.paramsParse(props.node.data.teacher, form) : {} const params = props.paramsParse ? props.paramsParse(props.node.data.teacher, form) : {}
const generate = props.generateParse ? props.generateParse(props.node.data.teacher, form) : {}
Object.assign(props.node.data, { Object.assign(props.node.data, {
rule: { rule: {
...form, ...form,
correct_operation_user_total: correctUserTotalText.value, correct_operation_user_total: correctUserTotalText.value,
error_operation_user_total: errorUserTotalText.value error_operation_user_total: errorUserTotalText.value
}, },
rule_params: params rule_params: params,
generate: generate
}) })
} }
......
<script setup lang="ts"> <script setup lang="ts">
import { useMetaEvent } from '../../../composables/useAllData' import { useMetaEvent } from '../../../composables/useAllData'
const props = defineProps<{ node: any }>() const props = defineProps<{ node: any; rules: any[] }>()
const emit = defineEmits(['update:modelValue', 'save'])
const config = computed(() => { const config = computed(() => {
return props.node.data.teacher || {} return props.node.data.teacher || {}
...@@ -16,9 +18,18 @@ const datalist = ref<any>([]) ...@@ -16,9 +18,18 @@ const datalist = ref<any>([])
watchEffect(() => { watchEffect(() => {
datalist.value = datalist.value =
metaEvent.value?.attributes.map(item => { metaEvent.value?.attributes.map(item => {
return { ...item, form: { mode: 1 } } const found = props.rules.find(rule => rule.event_attr_id === item.id) || {}
return { ...item, form: { event_attr_id: item.id, mode: 1, rule: {}, ...found } }
}) || [] }) || []
}) })
function handleSubmit() {
emit(
'save',
datalist.value.map((item: any) => item.form)
)
emit('update:modelValue', false)
}
</script> </script>
<template> <template>
...@@ -39,7 +50,7 @@ watchEffect(() => { ...@@ -39,7 +50,7 @@ watchEffect(() => {
<el-col :span="12"><el-form-item label="状态">生效</el-form-item></el-col> <el-col :span="12"><el-form-item label="状态">生效</el-form-item></el-col>
</el-row> </el-row>
</el-form> </el-form>
<el-table border :data="datalist"> <el-table border :data="datalist" :header-cell-style="{ background: '#ededed' }">
<el-table-column label="属性英文名" prop="english_name" align="center"></el-table-column> <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="name" align="center"></el-table-column>
<el-table-column label="字段类型" prop="type_name" align="center"></el-table-column> <el-table-column label="字段类型" prop="type_name" align="center"></el-table-column>
...@@ -51,42 +62,91 @@ watchEffect(() => { ...@@ -51,42 +62,91 @@ watchEffect(() => {
<el-radio :label="2">固定值</el-radio> <el-radio :label="2">固定值</el-radio>
<el-radio :label="3">历史随机值</el-radio> <el-radio :label="3">历史随机值</el-radio>
</el-radio-group> </el-radio-group>
<!-- 字符串 --> <div class="rule-box">
<template v-if="row.type === '1'"> <!-- 字符串 -->
<!-- 随机值 --> <template v-if="row.type === '1'">
<template v-if="row.form.mode === 1"> <!-- 随机值 -->
<el-radio-group> <template v-if="row.form.mode === 1">
<el-radio :label="1">来自于系统数据</el-radio> <el-radio-group v-model="row.form.rule.type">
<el-radio :label="4">完全随机</el-radio> <el-radio :label="1">来自于系统数据</el-radio>
</el-radio-group> <el-radio :label="4">完全随机</el-radio>
</el-radio-group>
</template>
<!-- 固定值 -->
<template v-if="row.form.mode === 2">
<el-input size="small" v-model="row.form.rule.value" />
</template>
</template> </template>
<!-- 固定值 --> <!-- 整数|数字 -->
<template v-if="row.form.mode === 2"> <template v-if="row.type === '2' || row.type === '3'">
<el-input /> <!-- 随机值 -->
<template v-if="row.form.mode === 1">
Min<el-input-number :controls="false" size="small" v-model="row.form.rule.num_min" />
Max<el-input-number :controls="false" size="small" v-model="row.form.rule.num_max" />
</template>
<!-- 固定值 -->
<template v-if="row.form.mode === 2">
<el-input-number :controls="false" size="small" v-model="row.form.rule.value" />
</template>
</template> </template>
</template> <!-- 日期|时间 -->
<!-- 整数 --> <template v-if="row.type === '4' || row.type === '5'">
<template v-if="row.type === '2'"></template> <!-- 随机值 -->
<!-- 日期 --> <template v-if="row.form.mode === 1">
<template v-if="row.type === '4'"> <el-radio-group v-model="row.form.rule.date_type">
<el-radio-group> <el-radio :label="1">完全随机(不早于当前时间)</el-radio>
<el-radio :label="1">完全随机(不早于当前时间)</el-radio> <el-radio :label="2">
<el-radio :label="2"> 时间区间&nbsp;<el-date-picker
时间区间<el-date-picker value-format="YYYY-MM-DD" /> size="small"
<el-date-picker value-format="YYYY-MM-DD" /> value-format="YYYY-MM-DD"
</el-radio> v-model="row.form.rule.date_start"
<el-radio :label="3">当前时间前<el-input-number :controls="false" /></el-radio> style="width: 120px" />
<el-radio :label="4">当前时间后<el-input-number :controls="false" /></el-radio> &nbsp;&nbsp;
</el-radio-group> <el-date-picker
</template> size="small"
value-format="YYYY-MM-DD"
v-model="row.form.rule.date_end"
style="width: 120px" />
</el-radio>
<el-radio :label="3">
当前时间前&nbsp;<el-input-number
:controls="false"
size="small"
v-model="row.form.rule.date_current_before" />&nbsp;
</el-radio>
<el-radio :label="4">
当前时间后&nbsp;<el-input-number
:controls="false"
size="small"
v-model="row.form.rule.date_current_after" />&nbsp;
</el-radio>
</el-radio-group>
</template>
<!-- 固定值 -->
<template v-if="row.form.mode === 2">
<el-date-picker size="small" value-format="YYYY-MM-DD" v-model="row.form.rule.value" />
</template>
</template>
</div>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<template #footer> <template #footer>
<el-row justify="center"> <el-row justify="center">
<el-button plain auto-insert-space @click="$emit('update:modelValue', false)">取消</el-button> <el-button plain auto-insert-space @click="$emit('update:modelValue', false)">取消</el-button>
<el-button type="primary" auto-insert-space>保存</el-button> <el-button type="primary" auto-insert-space @click="handleSubmit">保存</el-button>
</el-row> </el-row>
</template> </template>
</el-dialog> </el-dialog>
</template> </template>
<style lang="scss">
.rule-box {
padding: 10px;
border: 1px solid #bbb;
background-color: #efefef;
&:empty {
display: none;
}
}
</style>
...@@ -18,21 +18,24 @@ function paramsParse(data: any) { ...@@ -18,21 +18,24 @@ function paramsParse(data: any) {
return { event_id: data.event_id } return { event_id: data.event_id }
} }
function generateParse(data: any) {
return { ...form, experiment_meta_event_id: data.event_id }
}
const radio = ref('1') const radio = ref('1')
const form = reactive({ const form = reactive({
correct_operation_rule: 1, data_rule: {
correct_operation_method: 1, generate_way: 1,
correct_operation_method_value: undefined, yes_value: undefined,
correct_operation_method_fail_value: undefined, no_value: undefined,
correct_operation_min: undefined, event_count_min: undefined,
correct_operation_max: undefined, event_count_max: undefined
error_operation_rule: 1, },
error_operation_method: 1, event_attr_rule: []
error_operation_method_value: undefined, })
error_operation_method_fail_value: undefined, watchEffect(() => {
error_operation_min: undefined, Object.assign(form, props.node.data.generate)
error_operation_max: undefined
}) })
const generateVisible = ref(false) const generateVisible = ref(false)
...@@ -40,10 +43,14 @@ const generateVisible = ref(false) ...@@ -40,10 +43,14 @@ const generateVisible = ref(false)
function handleConfig() { function handleConfig() {
generateVisible.value = true generateVisible.value = true
} }
function onSaveEventRule(rules: []) {
form.event_attr_rule = rules
}
</script> </script>
<template> <template>
<RuleTemplate :node="node" step :paramsParse="paramsParse" v-bind="$attrs"> <RuleTemplate :node="node" step :paramsParse="paramsParse" :generateParse="generateParse" 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>
...@@ -62,37 +69,52 @@ function handleConfig() { ...@@ -62,37 +69,52 @@ function handleConfig() {
<el-icon class="is-success"><SuccessFilled /></el-icon>操作正确,生成数据数量: <el-icon class="is-success"><SuccessFilled /></el-icon>操作正确,生成数据数量:
</p> </p>
<el-form-item label="生成规则"> <el-form-item label="生成规则">
<el-radio-group v-model="form.correct_operation_rule"> <el-radio-group :model-value="1">
<el-radio :label="1">随机</el-radio> <el-radio :label="1">随机</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="生成方式"> <el-form-item label="生成方式">
<el-radio-group v-model="form.correct_operation_method"> <el-radio-group v-model="form.data_rule.generate_way">
<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="请输入分支条件数值"></el-form-item> <el-form-item label="请输入分支条件数值"></el-form-item>
<el-form-item label="是"> <el-form-item label="是">
<template v-if="form.correct_operation_method === 1"> <template v-if="form.data_rule.generate_way === 1">
<el-input-number v-model="form.correct_operation_method_value" :controls="false" :max="100" /> <el-input-number v-model="form.data_rule.yes_value" :controls="false" :max="100" />
&nbsp;% &nbsp;%
</template> </template>
<el-input-number v-model="form.correct_operation_method_value" :controls="false" v-else /> <el-input-number v-model="form.data_rule.yes_value" :controls="false" v-else />
</el-form-item> </el-form-item>
<el-form-item label="否"> <el-form-item label="否">
<template v-if="form.correct_operation_method === 1"> <template v-if="form.data_rule.generate_way === 1">
<el-input-number v-model="form.correct_operation_method_fail_value" :controls="false" :max="100" /> <el-input-number v-model="form.data_rule.no_value" :controls="false" :max="100" />
&nbsp;% &nbsp;%
</template> </template>
<el-input-number v-model="form.correct_operation_method_fail_value" :controls="false" v-else /> <el-input-number v-model="form.data_rule.no_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-form-item>
<el-form-item label="请输入每个用户生成事件数据的取值范围"></el-form-item>
<el-row>
<el-col :span="12">
<el-form-item label="Min">
<el-input-number
v-model="form.data_rule.event_count_min"
:controls="false"
:max="3"
style="width: 80px" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="Max">
<el-input-number
v-model="form.data_rule.event_count_max"
:controls="false"
:max="5"
style="width: 80px" />
</el-form-item>
</el-col>
</el-row>
<el-row justify="center"> <el-row justify="center">
<el-button type="primary" plain @click="handleConfig">配置事件属性值规则</el-button> <el-button type="primary" plain @click="handleConfig">配置事件属性值规则</el-button>
</el-row> </el-row>
...@@ -104,37 +126,52 @@ function handleConfig() { ...@@ -104,37 +126,52 @@ function handleConfig() {
</p> </p>
<el-form-item label="生成规则"> <el-form-item label="生成规则">
<el-radio-group v-model="form.error_operation_rule"> <el-radio-group :model-value="1">
<el-radio :label="1">随机</el-radio> <el-radio :label="1">随机</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="生成方式"> <el-form-item label="生成方式">
<el-radio-group v-model="form.error_operation_method"> <el-radio-group v-model="form.data_rule.generate_way">
<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="请输入分支条件数值"></el-form-item> <el-form-item label="请输入分支条件数值"></el-form-item>
<el-form-item label="是"> <el-form-item label="是">
<template v-if="form.error_operation_method === 1"> <template v-if="form.data_rule.generate_way === 1">
<el-input-number v-model="form.error_operation_method_value" :controls="false" :max="100" /> <el-input-number v-model="form.data_rule.yes_value" :controls="false" :max="100" />
&nbsp;% &nbsp;%
</template> </template>
<el-input-number v-model="form.error_operation_method_value" :controls="false" v-else /> <el-input-number v-model="form.data_rule.yes_value" :controls="false" v-else />
</el-form-item> </el-form-item>
<el-form-item label="否"> <el-form-item label="否">
<template v-if="form.error_operation_method === 1"> <template v-if="form.data_rule.generate_way === 1">
<el-input-number v-model="form.error_operation_method_fail_value" :controls="false" :max="100" /> <el-input-number v-model="form.data_rule.no_value" :controls="false" :max="100" />
&nbsp;% &nbsp;%
</template> </template>
<el-input-number v-model="form.error_operation_method_fail_value" :controls="false" v-else /> <el-input-number v-model="form.data_rule.no_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-form-item>
<el-form-item label="请输入每个用户生成事件数据的取值范围"></el-form-item>
<el-row>
<el-col :span="12">
<el-form-item label="Min">
<el-input-number
v-model="form.data_rule.event_count_min"
:controls="false"
:max="3"
style="width: 80px" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="Max">
<el-input-number
v-model="form.data_rule.event_count_max"
:controls="false"
:max="5"
style="width: 80px" />
</el-form-item>
</el-col>
</el-row>
<el-row justify="center"> <el-row justify="center">
<el-button type="primary" plain @click="handleConfig">配置事件属性值规则</el-button> <el-button type="primary" plain @click="handleConfig">配置事件属性值规则</el-button>
</el-row> </el-row>
...@@ -161,5 +198,10 @@ function handleConfig() { ...@@ -161,5 +198,10 @@ function handleConfig() {
</section> </section>
</template> </template>
</RuleTemplate> </RuleTemplate>
<Generate :node="node" v-model="generateVisible" v-if="generateVisible"></Generate> <Generate
:node="node"
:rules="form.event_attr_rule"
v-model="generateVisible"
@save="onSaveEventRule"
v-if="generateVisible"></Generate>
</template> </template>
...@@ -154,7 +154,7 @@ function handleRefresh() { ...@@ -154,7 +154,7 @@ function handleRefresh() {
plain plain
@click="handleUpdate" @click="handleUpdate"
size="small" size="small"
:disabled="detail.status.toString() === '4'" :disabled="['2', '4'].includes(detail.status.toString())"
>立即更新</el-button >立即更新</el-button
> >
</dd> </dd>
......
...@@ -69,7 +69,12 @@ function handleUpdate() { ...@@ -69,7 +69,12 @@ function handleUpdate() {
<dt>更新状态</dt> <dt>更新状态</dt>
<dd> <dd>
<span style="margin-right: 10px">{{ getNameByValue(detail.status, updateStatusList) }}</span> <span style="margin-right: 10px">{{ getNameByValue(detail.status, updateStatusList) }}</span>
<el-button type="primary" plain @click="handleUpdate" size="small" :disabled="detail.status === '4'" <el-button
type="primary"
plain
@click="handleUpdate"
size="small"
:disabled="['2', '4'].includes(detail.status)"
>立即更新</el-button >立即更新</el-button
> >
</dd> </dd>
......
...@@ -21,12 +21,14 @@ const detail = ref() ...@@ -21,12 +21,14 @@ const detail = ref()
function fetchInfo() { function fetchInfo() {
getRule({ itinerary_id: props.id }).then(res => { getRule({ itinerary_id: props.id }).then(res => {
const ruleConfig = res.data.data_rule_config
detail.value = res.data detail.value = res.data
Object.assign(form, res.data.data_rule_config) Object.assign(form, ruleConfig)
try { try {
form.auto_generate_rule = res.data.data_rule_config.auto_generate_rule form.auto_generate_rule = ruleConfig.auto_generate_rule ? JSON.parse(ruleConfig.auto_generate_rule) : {}
? JSON.parse(res.data.data_rule_config.auto_generate_rule) if (form.auto_generate_rule.mode === '1') {
: {} form.auto_generate_rule.type = '2'
}
form.graph = JSON.parse(res.data.itinerary.graph) form.graph = JSON.parse(res.data.itinerary.graph)
} catch (error) { } catch (error) {
console.log(error) console.log(error)
...@@ -39,7 +41,10 @@ function handleSubmit() { ...@@ -39,7 +41,10 @@ function handleSubmit() {
const params = { const params = {
...form, ...form,
itinerary_id: props.id, itinerary_id: props.id,
auto_generate_rule: JSON.stringify(form.auto_generate_rule), auto_generate_rule: JSON.stringify({
...form.auto_generate_rule,
type: form.auto_generate_rule.mode === '1' ? '1' : form.auto_generate_rule.type
}),
graph: JSON.stringify(form.graph) graph: JSON.stringify(form.graph)
} }
saveRule(params).then(() => { saveRule(params).then(() => {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论