Commit 3f4c855c by Vladislav

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

1 parent d001fdbc
......@@ -2,6 +2,7 @@
namespace App\Http\Controllers;
use App\Models\Campaigns;
use App\Models\Tokens;
use App\Service\API\API;
use App\Service\Requests\APIRequest;
......@@ -42,11 +43,12 @@ class TokensController extends Controller
'campaigns' => (
$token->type === Tokens::MAIN
? $token->campaignsForManaged
: null
: []
),
'cities' => ($token->type==Tokens::GOAL?[]:null),
],
'types' => $mainToken->count() && $token->type!=Tokens::MAIN
'campaigns' => $token->campaigns,
'types' => $mainToken->count() && $token->type!=Tokens::MAIN
? [Tokens::GOAL=> 'Целевой аккаунт'] :
[Tokens::MAIN => 'Основной аккаунт', Tokens::GOAL=> 'Целевой аккаунт'],
]);
......@@ -63,6 +65,17 @@ class TokensController extends Controller
return Redirect::back()->with('success', 'Token updated.');
}
public function updateCampaigns(Tokens $token)
{
$token->update(
Request::validate([
'campaigns' => ['array', 'exists:' . app(Campaigns::class)->getTable()],
])
);
return Redirect::back()->with('success', 'Campaigns updated.');
}
public function destroy(Tokens $token)
{
$token->delete();
......
......@@ -36,15 +36,41 @@
</div>
</form>
</div>
<div v-if="token.campaigns">
<div v-if="state.campaigns.length || state.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"
>
Add
</button>
<select-input v-model="state.campaign_id"
:readonly="state.campaign_id"
class="px-6"
>
<option v-for="campaign in state.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">
</div>
<div class="mt-6 bg-white rounded shadow overflow-x-auto">
<table class="w-full whitespace-nowrap">
<tr class="text-left font-bold">
<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 token.campaigns" :key="campaign.id"
<tr v-for="campaign in state.token_campaigns" :key="campaign.id"
class="hover:bg-gray-100 focus-within:bg-gray-100">
<td class="border-t py-3">
{{ campaign.name }}
......@@ -55,13 +81,13 @@
<button class="text-red-600 hover:underline"
tabindex="-1"
type="button"
@click="campaignDestroy"
@click="campaignDestroy(campaign.id)"
>
Delete Campaign
</button>
</td>
</tr>
<tr v-if="token.campaigns.length === 0">
<tr v-if="state.token_campaigns.length === 0">
<td class="border-t px-6 py-4" colspan="4">No campaigns found.</td>
</tr>
</table>
......@@ -112,8 +138,9 @@ export default {
},
layout: Layout,
props: {
campaigns: Array,
token: Object,
types: Object
types: Object,
},
remember: 'form',
data() {
......@@ -125,6 +152,12 @@ export default {
api: this.token.api,
type: this.token.type,
}),
campaigns_form: this.$inertia.form(),
state: {
campaign_id: null,
campaigns: this.filterCampaigns(this.token.campaigns),
token_campaigns: this.token.campaigns,
},
}
},
methods: {
......@@ -136,9 +169,58 @@ export default {
this.$inertia.delete(this.route('token.destroy', this.token.id))
}
},
campaignDestroy() {
campaignsUpdate() {
this.campaigns_form.post(this.route('token.campaigns.update', this.token.id), {
campaigns: this.state.token_campaigns.map(campaign => campaign.id),
})
},
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,
}
}
},
campaignAdd() {
let campaign_id = this.state.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,
}
}
},
filterCampaigns(token_campaigns) {
return this.campaigns.filter(
campaign => token_campaigns.map((campaign) => campaign.id).indexOf(campaign.id) === -1
)
},
},
}
......
......@@ -169,6 +169,9 @@ 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')
->middleware('auth');
Route::delete('token/delete/{token}', [TokensController::class, 'destroy'])
->name('token.destroy')
->middleware('auth');
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!