Commit c0e59206 by Vladislav

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

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