Commit c0e59206 by Vladislav

#19459 Вывод для основного аккаунта списка его РК из кеша

1 parent 3f4c855c
......@@ -10,6 +10,8 @@ use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Request;
use Inertia\Inertia;
use phpDocumentor\Reflection\Types\Boolean;
use phpDocumentor\Reflection\Types\Integer;
class TokensController extends Controller
{
......@@ -47,7 +49,7 @@ class TokensController extends Controller
),
'cities' => ($token->type==Tokens::GOAL?[]:null),
],
'campaigns' => $token->campaigns,
'campaigns' => $token->campaignsNotForManaged,
'types' => $mainToken->count() && $token->type!=Tokens::MAIN
? [Tokens::GOAL=> 'Целевой аккаунт'] :
[Tokens::MAIN => 'Основной аккаунт', Tokens::GOAL=> 'Целевой аккаунт'],
......@@ -65,15 +67,34 @@ class TokensController extends Controller
return Redirect::back()->with('success', 'Token updated.');
}
public function updateCampaigns(Tokens $token)
public function managedCampaign(Tokens $token, $campaign_id, $managed)
{
$token->update(
Request::validate([
'campaigns' => ['array', 'exists:' . app(Campaigns::class)->getTable()],
])
);
$campaign = $token->campaigns()->find($campaign_id);
if (!$campaign) {
return Redirect::back();
}
$campaign->update([
'manage' => !!$managed,
]);
return Redirect::back()->with('success', 'Campaign ' . ($managed ? 'added':'deleted') . '.');
}
public function enabledCampaign(Tokens $token, $campaign_id, $enabled)
{
$campaign = $token->campaigns()->find($campaign_id);
if (!$campaign) {
return Redirect::back();
}
$campaign->update([
'enabled' => !!$enabled,
]);
return Redirect::back()->with('success', 'Campaigns updated.');
return Redirect::back()->with('success', 'Campaign ' . ($enabled ? 'enabled':'disabled') . '.');
}
public function destroy(Tokens $token)
......
......@@ -25,7 +25,9 @@ class Campaigns extends Model
'relevant_keywords_setting_budget_percent',
'relevant_keywords_setting_optimize_goal_id',
'attribution_model',
'updated'
'updated',
'manage',
'enabled',
];
protected $casts = [
......@@ -42,4 +44,9 @@ class Campaigns extends Model
{
$query->where('manage', true);
}
public function scopeNotForManaged($query)
{
$query->where('manage', false);
}
}
......@@ -37,4 +37,9 @@ class Tokens extends Model
{
return $this->campaigns()->forManaged();
}
public function campaignsNotForManaged()
{
return $this->campaigns()->notForManaged();
}
}
......@@ -36,30 +36,26 @@
</div>
</form>
</div>
<div v-if="state.campaigns.length || state.token_campaigns.length">
<div v-if="campaigns.length || token.campaigns.length">
<h2 class="mt-12 font-bold text-2xl">Campaigns</h2>
<div class="mt-4 flex flex-wrap">
<div v-if="state.campaigns.length" class="flex flex-wrap">
<button class="btn-indigo hover:underline"
tabindex="-1"
type="button"
@click="campaignAdd"
<form v-if="campaigns.length" @submit.prevent="campaignAdd" class="flex flex-wrap">
<loading-button :loading="campaign_add_form.processing"
class="btn-indigo hover:underline"
tabindex="-1"
type="submit"
>
Add
</button>
<select-input v-model="state.campaign_id"
:readonly="state.campaign_id"
</loading-button>
<select-input v-model="campaign_add_form.campaign_id"
:error="campaign_add_form.errors.campaign_id"
:readonly="campaign_add_form.campaign_id"
class="px-6"
>
<option v-for="campaign in state.campaigns" :value="campaign.id">
<option v-for="campaign in campaigns" :value="campaign.id">
{{ campaign.name }}
</option>
</select-input>
</div>
<form @submit.prevent="campaignsUpdate">
<loading-button :loading="campaigns_form.processing" class="btn-indigo ml-auto" type="submit">
Update campaigns
</loading-button>
</form>
</div>
<div class="mt-4 flex flex-wrap">
......@@ -70,13 +66,16 @@
<th class="px-6 pt-6 pb-4">Name</th>
<th class="px-6 pt-6 pb-4">Action</th>
</tr>
<tr v-for="campaign in state.token_campaigns" :key="campaign.id"
<tr v-for="campaign in token.campaigns" :key="campaign.id"
class="hover:bg-gray-100 focus-within:bg-gray-100">
<td class="border-t py-3">
{{ campaign.name }}
</td>
<td class="border-t py-3">
<input :id="'campaign-enabled-' + campaign.id" :checked="campaign.enabled" type="checkbox">
<input :id="'campaign-enabled-' + campaign.id" :checked="campaign.enabled"
@change="campaignEnabled(campaign.id, !campaign.enabled)"
type="checkbox"
>
<label :for="'campaign-enabled-' + campaign.id">Enabled</label>
<button class="text-red-600 hover:underline"
tabindex="-1"
......@@ -87,7 +86,7 @@
</button>
</td>
</tr>
<tr v-if="state.token_campaigns.length === 0">
<tr v-if="token.campaigns.length === 0">
<td class="border-t px-6 py-4" colspan="4">No campaigns found.</td>
</tr>
</table>
......@@ -152,12 +151,10 @@ export default {
api: this.token.api,
type: this.token.type,
}),
campaigns_form: this.$inertia.form(),
state: {
campaign_add_form: this.$inertia.form({
campaign_id: null,
campaigns: this.filterCampaigns(this.token.campaigns),
token_campaigns: this.token.campaigns,
},
}),
campaigns_form: this.$inertia.form(),
}
},
methods: {
......@@ -169,52 +166,34 @@ export default {
this.$inertia.delete(this.route('token.destroy', this.token.id))
}
},
campaignsUpdate() {
this.campaigns_form.post(this.route('token.campaigns.update', this.token.id), {
campaigns: this.state.token_campaigns.map(campaign => campaign.id),
})
campaignEnabled(campaign_id, enabled) {
this.$inertia.post(this.route('token.campaign.enabled', [
this.token.id,
campaign_id,
enabled ? 1 : 0,
]));
},
campaignDestroy(campaign_id) {
if (confirm('Are you sure you want to delete this campaign?')) {
let token_campaigns = this.state.token_campaigns.filter(
campaign => campaign.id !== Number(campaign_id)
);
this.state = {
...this.state,
campaigns: this.filterCampaigns(token_campaigns),
token_campaigns: token_campaigns,
}
this.$inertia.post(this.route('token.campaign.managed', [
this.token.id,
campaign_id,
0,
]));
}
},
campaignAdd() {
let campaign_id = this.state.campaign_id;
let campaign_id = this.campaign_add_form.campaign_id;
if (!campaign_id) {
return;
}
let campaign = this.state.campaigns.filter(
campaign => campaign.id === Number(campaign_id)
).shift();
if (campaign) {
let token_campaigns = [
...this.state.token_campaigns,
{
...campaign,
},
];
this.state = {
...this.state,
campaign_id: null,
campaigns: this.filterCampaigns(token_campaigns),
token_campaigns: token_campaigns,
}
}
this.campaign_add_form.post(this.route('token.campaign.managed', [
this.token.id,
campaign_id,
1,
]));
},
filterCampaigns(token_campaigns) {
......
......@@ -169,8 +169,11 @@ Route::get('token/edit/{token}', [TokensController::class, 'edit'])
Route::post('token/edit/{token}', [TokensController::class, 'update'])
->name('token.update')
->middleware('auth');
Route::post('token/campaigns/edit/{token}', [TokensController::class, 'updateCampaigns'])
->name('token.campaigns.update')
Route::post('token/campaigns/managed/{token}/{campaign_id}/{managed}', [TokensController::class, 'managedCampaign'])
->name('token.campaign.managed')
->middleware('auth');
Route::post('token/campaigns/enabled/{token}/{campaign_id}/{enabled}', [TokensController::class, 'enabledCampaign'])
->name('token.campaign.enabled')
->middleware('auth');
Route::delete('token/delete/{token}', [TokensController::class, 'destroy'])
->name('token.destroy')
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!