|
|
|
|
@@ -17,7 +17,7 @@
|
|
|
|
|
<span class="label">{{ $t('autoPromotion.journal') }} : </span>
|
|
|
|
|
{{ currentJournalName }}
|
|
|
|
|
<el-select
|
|
|
|
|
v-if="config.initialized && selectedJournalId"
|
|
|
|
|
v-if="selectedJournalId"
|
|
|
|
|
v-model="headerPromotionFactoryId"
|
|
|
|
|
class="header-factory-task-select custom-pipeline-select"
|
|
|
|
|
size="small"
|
|
|
|
|
@@ -61,7 +61,7 @@
|
|
|
|
|
</el-option-group>
|
|
|
|
|
</el-select>
|
|
|
|
|
<el-tag
|
|
|
|
|
v-if="config.initialized && selectedJournalId && headerFactoryTaskRunning !== null"
|
|
|
|
|
v-if="selectedJournalId && headerFactoryTaskRunning !== null"
|
|
|
|
|
:type="headerFactoryTaskRunning ? 'success' : 'info'"
|
|
|
|
|
size="small"
|
|
|
|
|
effect="plain"
|
|
|
|
|
@@ -74,10 +74,10 @@
|
|
|
|
|
|
|
|
|
|
<el-button type="text" size="small" style="margin-left: 10px" @click="openFactoryTaskDialogFromLogs">
|
|
|
|
|
<i class="el-icon-edit"></i>
|
|
|
|
|
{{ config.initialized ? $t('autoPromotionLogs.editConfig') : $t('autoPromotionLogs.startConfig') }}
|
|
|
|
|
{{ $t('autoPromotionLogs.editConfig') }}
|
|
|
|
|
</el-button>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="config.initialized && selectedJournalId && headerPromotionFactoryId" class="right">
|
|
|
|
|
<div v-if="selectedJournalId && headerPromotionFactoryId" class="right">
|
|
|
|
|
<el-button
|
|
|
|
|
type="primary"
|
|
|
|
|
size="small"
|
|
|
|
|
@@ -92,31 +92,7 @@
|
|
|
|
|
</el-card>
|
|
|
|
|
|
|
|
|
|
<div v-loading="loading" class="main-body">
|
|
|
|
|
<el-card v-if="!config.initialized" shadow="never" class="wizard-card">
|
|
|
|
|
<auto-promotion-wizard
|
|
|
|
|
mode="inline"
|
|
|
|
|
:config="config"
|
|
|
|
|
:wizardStartDate.sync="wizardStartDate"
|
|
|
|
|
:selectedFieldIds.sync="selectedFieldIds"
|
|
|
|
|
:selectedCountryIds.sync="selectedCountryIds"
|
|
|
|
|
:availableFields="availableFields"
|
|
|
|
|
:availableCountries="availableCountries"
|
|
|
|
|
:fieldsLoading="fieldsLoading"
|
|
|
|
|
:fieldsSaving="fieldsSaving"
|
|
|
|
|
:currentJournalName="currentJournalName"
|
|
|
|
|
:selectedTemplateThumbHtml="selectedTemplateThumbHtml"
|
|
|
|
|
:selectedTemplateName="selectedTemplateName"
|
|
|
|
|
:selectedStyleName="selectedStyleName"
|
|
|
|
|
:saving="saving"
|
|
|
|
|
:title="$t('autoPromotion.title')"
|
|
|
|
|
@open-template-selector="showTemplateDialog = true"
|
|
|
|
|
@confirm-fields="savePromotionFieldsNow"
|
|
|
|
|
@confirm-countries="savePromotionCountriesNow"
|
|
|
|
|
@confirm="completeInitialization"
|
|
|
|
|
/>
|
|
|
|
|
</el-card>
|
|
|
|
|
|
|
|
|
|
<div v-else class="manage-mode">
|
|
|
|
|
<div class="manage-mode">
|
|
|
|
|
<el-card shadow="never" class="list-card">
|
|
|
|
|
<div class="filter-header-row">
|
|
|
|
|
<div class="tmr-capsule-group">
|
|
|
|
|
@@ -270,30 +246,6 @@
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<auto-promotion-wizard
|
|
|
|
|
mode="dialog"
|
|
|
|
|
:visible.sync="showWizardDialog"
|
|
|
|
|
:config="config"
|
|
|
|
|
:wizardStartDate.sync="wizardStartDate"
|
|
|
|
|
:selectedFieldIds.sync="selectedFieldIds"
|
|
|
|
|
:selectedCountryIds.sync="selectedCountryIds"
|
|
|
|
|
:availableFields="availableFields"
|
|
|
|
|
:availableCountries="availableCountries"
|
|
|
|
|
:fieldsLoading="fieldsLoading"
|
|
|
|
|
:fieldsSaving="fieldsSaving"
|
|
|
|
|
:currentJournalName="currentJournalName"
|
|
|
|
|
:selectedTemplateThumbHtml="selectedTemplateThumbHtml"
|
|
|
|
|
:selectedTemplateName="selectedTemplateName"
|
|
|
|
|
:selectedStyleName="selectedStyleName"
|
|
|
|
|
:saving="saving"
|
|
|
|
|
:title="$t('autoPromotion.title')"
|
|
|
|
|
@open-template-selector="showTemplateDialog = true"
|
|
|
|
|
@confirm-fields="savePromotionFieldsNow"
|
|
|
|
|
@confirm-countries="savePromotionCountriesNow"
|
|
|
|
|
@cancel="showWizardDialog = false"
|
|
|
|
|
@confirm="completeInitialization"
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
|
|
<template-selector-dialog
|
|
|
|
|
v-if="showTemplateDialog"
|
|
|
|
|
:visible.sync="showTemplateDialog"
|
|
|
|
|
@@ -359,7 +311,6 @@
|
|
|
|
|
<script>
|
|
|
|
|
import CkeditorMail from '@/components/page/components/email/CkeditorMail.vue';
|
|
|
|
|
import TemplateSelectorDialog from '@/components/page/components/email/TemplateSelectorDialog.vue';
|
|
|
|
|
import AutoPromotionWizard from '@/components/page/components/autoPromotion/AutoPromotionWizard.vue';
|
|
|
|
|
import PromotionFactoryTaskDialog from '@/components/page/components/autoPromotion/PromotionFactoryTaskDialog.vue';
|
|
|
|
|
import PromotionDetailDrawer from '@/components/page/components/autoPromotion/PromotionDetailDrawer.vue';
|
|
|
|
|
// 这里假设你已经定义了 API 地址
|
|
|
|
|
@@ -373,8 +324,8 @@ const API = {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export default {
|
|
|
|
|
name: 'autoPromotion',
|
|
|
|
|
components: { TemplateSelectorDialog, AutoPromotionWizard, PromotionFactoryTaskDialog, CkeditorMail, PromotionDetailDrawer },
|
|
|
|
|
name: 'autoPromotionLogs',
|
|
|
|
|
components: { TemplateSelectorDialog, PromotionFactoryTaskDialog, CkeditorMail, PromotionDetailDrawer },
|
|
|
|
|
data() {
|
|
|
|
|
return {
|
|
|
|
|
handleRefreshList: [],
|
|
|
|
|
@@ -482,12 +433,17 @@ export default {
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
watch: {
|
|
|
|
|
'$route.query.journal_id'(val) {
|
|
|
|
|
const s = String(val != null ? val : '').trim();
|
|
|
|
|
if (s === String(this.selectedJournalId || '').trim()) return;
|
|
|
|
|
this.initPage();
|
|
|
|
|
},
|
|
|
|
|
'$route.query.promotion_factory_id'(val) {
|
|
|
|
|
const s = String(val != null ? val : '').trim();
|
|
|
|
|
if (s === String(this.headerPromotionFactoryId || '').trim()) return;
|
|
|
|
|
this.headerPromotionFactoryId = s;
|
|
|
|
|
this.routePromotionFactoryId = s;
|
|
|
|
|
if (this.config.initialized && this.selectedJournalId) {
|
|
|
|
|
if (this.selectedJournalId) {
|
|
|
|
|
this.query.pageIndex = 1;
|
|
|
|
|
this.fetchList();
|
|
|
|
|
}
|
|
|
|
|
@@ -496,6 +452,28 @@ export default {
|
|
|
|
|
created() {
|
|
|
|
|
this.initPage();
|
|
|
|
|
},
|
|
|
|
|
activated() {
|
|
|
|
|
const routeJid = String((this.$route.query && this.$route.query.journal_id) || '').trim();
|
|
|
|
|
const curJid = String(this.selectedJournalId || '').trim();
|
|
|
|
|
if (routeJid && routeJid !== curJid) {
|
|
|
|
|
this.initPage();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
const routePid = String(
|
|
|
|
|
(this.$route.query && this.$route.query.promotion_factory_id) ||
|
|
|
|
|
(this.$route.query && this.$route.query.taskId) ||
|
|
|
|
|
''
|
|
|
|
|
).trim();
|
|
|
|
|
const curPid = String(this.headerPromotionFactoryId || '').trim();
|
|
|
|
|
if (routePid && routePid !== curPid) {
|
|
|
|
|
this.headerPromotionFactoryId = routePid;
|
|
|
|
|
this.routePromotionFactoryId = routePid;
|
|
|
|
|
if (this.selectedJournalId) {
|
|
|
|
|
this.query.pageIndex = 1;
|
|
|
|
|
this.fetchList();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
mapFactoryTaskTypeLabel(type) {
|
|
|
|
|
const t = String(type || '');
|
|
|
|
|
@@ -635,10 +613,6 @@ export default {
|
|
|
|
|
try {
|
|
|
|
|
await this.fetchJournalDetail();
|
|
|
|
|
if (this.selectedJournalId) {
|
|
|
|
|
this.loadPromotionFields(this.selectedJournalId);
|
|
|
|
|
}
|
|
|
|
|
if (this.config.initialized) {
|
|
|
|
|
await this.fetchTemplates();
|
|
|
|
|
await this.fetchFactoryTasksForHeader();
|
|
|
|
|
await this.fetchList();
|
|
|
|
|
}
|
|
|
|
|
@@ -747,7 +721,7 @@ export default {
|
|
|
|
|
},
|
|
|
|
|
/** 下拉仅展示「类型 - 创建日期」,运行状态单独用 el-tag */
|
|
|
|
|
buildFactoryHeaderOptionMainLabel(task, pidFallback) {
|
|
|
|
|
console.log("🚀 ~ buildFactoryHeaderOptionMainLabel ~ task:", task);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const typePart = this.getFactoryHeaderTaskTypeLabel(task) || String(pidFallback || '').trim() || '—';
|
|
|
|
|
const expertTypePart = this.mapFactoryExpertTypeLabel(task.expert_type);
|
|
|
|
|
@@ -764,7 +738,7 @@ export default {
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
async fetchFactoryTasksForHeader() {
|
|
|
|
|
if (!this.selectedJournalId || !this.config.initialized) {
|
|
|
|
|
if (!this.selectedJournalId) {
|
|
|
|
|
this.factoryTaskOptions = [];
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|