浏览代码

update character screen

master
peter 4 年前
父节点
当前提交
bbe080ab7f

+ 23
- 1
src/backend/Components/Character/CharacterManager.ts 查看文件

@@ -30,7 +30,13 @@ implements FrontworkComponent<CharacterManagerIfc, RPCInterface>, ICharacterMana
30 30
             this.getHeadCount
31 31
     ]
32 32
 
33
-    RPCFeatures = () => []
33
+    RPCFeatures = () => [{
34
+        name: 'manageCharacter' as 'manageCharacter',
35
+        RPCs: [
36
+            this.updateCharacter
37
+        ]
38
+    }]
39
+
34 40
     
35 41
     getTableDefinitions = (): TableDefiniton[] => [
36 42
         {
@@ -66,6 +72,22 @@ implements FrontworkComponent<CharacterManagerIfc, RPCInterface>, ICharacterMana
66 72
         })
67 73
     }
68 74
 
75
+    updateCharacter = async (character: Character) : Promise<Character> => {
76
+        await this.admin
77
+        .knex('characters')
78
+        .update(<Character>{
79
+            race: character.race,
80
+            specid: character.specid,
81
+            charactername: character.charactername.toLowerCase(),
82
+            userid: character.userid
83
+        })
84
+        .where({
85
+            id: character.id
86
+        })
87
+
88
+        return await this.getCharacterByName(character.charactername) as Character
89
+    }
90
+
69 91
     createCharacter = async (userToken: string, character : Character) : Promise<Character> => {
70 92
         try{
71 93
             character.charactername = character.charactername.toLowerCase()

+ 2
- 0
src/backend/Components/Character/Interface.ts 查看文件

@@ -10,4 +10,6 @@ export class ICharacterManager{
10 10
     getCharactersOfUser: (username: string) => Promise<(Character & Spec)[]>
11 11
     getUserOfCharacter: (character:Character) => Promise<User>
12 12
     getHeadCount: (clazz: Class) => Promise<number>
13
+    updateCharacter: (character: Character) => Promise<Character>
14
+
13 15
 }

+ 3
- 1
src/backend/Components/Character/RPCInterface.ts 查看文件

@@ -14,5 +14,7 @@ export type CharacterManagerIfc = {
14 14
 }
15 15
 
16 16
 export type CharacterManagerFeatureIfc = {
17
-    
17
+    manageCharacter: {
18
+        updateCharacter: ICharacterManager['updateCharacter']
19
+    }
18 20
 }

+ 2
- 0
src/backend/Components/User/UserManager.ts 查看文件

@@ -136,6 +136,8 @@ export class UserManager
136 136
         //set up permissions
137 137
         getLogger('UserManager#initialize').debug('setting up permissions')
138 138
 
139
+        console.log(this.character.RPCFeatures())
140
+        
139 141
         await Promise.all(
140 142
             [this, ...this.exporters].flatMap(exp => exp.RPCFeatures().map(async (feature) => {
141 143
                 try {

+ 2
- 2
src/frontend/src/app/frontcraft/auth/register/register.component.ts 查看文件

@@ -21,12 +21,12 @@ export class RegisterComponent implements OnInit{
21 21
     race: "Night Elf"
22 22
   }
23 23
 
24
-  ranks = _Rank.splice(5) //remove admin, gm, officer
24
+  ranks = ["Trial"] //remove admin, gm, officer
25 25
   classes = _Class
26 26
   races  = _Race
27 27
   selectedClass : Class = "Warrior"
28
-  selectedSpec = specs[this.selectedClass][0]
29 28
   specs = specs[this.selectedClass]
29
+  selectedSpec = specs[this.selectedClass][0]
30 30
   showApplication = false
31 31
   submitted = false
32 32
 

+ 29
- 8
src/frontend/src/app/frontcraft/pages/character/character.component.html 查看文件

@@ -1,8 +1,8 @@
1
-<nb-card 
2
-class = "col-12 col-xl-9">
1
+<nb-card class="col-12 col-xl-9">
3 2
     <nb-card-header style="text-transform: capitalize;">
4 3
         <h4>
5
-            <a *ngIf="link === 'character'" [ngStyle]="{'color': color}" [routerLink]="'/frontcraft/character/'+char.charactername">
4
+            <a *ngIf="link === 'character'" [ngStyle]="{'color': color}"
5
+                [routerLink]="'/frontcraft/character/'+char.charactername">
6 6
                 {{char.charactername}}
7 7
             </a>
8 8
         </h4>
@@ -14,12 +14,33 @@ class = "col-12 col-xl-9">
14 14
     </nb-card-header>
15 15
 
16 16
     <nb-card-body>
17
-        <img style="width:20px; height:20px" [src]="'../../../../assets/images/'+char.race.toLowerCase()+'_xs.gif'" />
18
-        {{char.race}}<br />
19
-        <img style="width:20px; height:20px" [src]="'../../../../assets/images/'+char.class.toLowerCase()+'.png'" />
20
-        {{char.specname}} {{char.class}}<br />
17
+        <span *ngIf="!canManage">
18
+            <img style="width:20px; height:20px" [src]="'../../../../assets/images/'+char.race.toLowerCase()+'_xs.gif'" />
19
+            {{char.race}}<br />
20
+            <img style="width:20px; height:20px" [src]="'../../../../assets/images/'+char.class.toLowerCase()+'.png'" />
21
+    
22
+            {{char.specname}} {{char.class}}<br />
23
+        </span>
24
+        <span *ngIf="canManage">
25
+            <input nbInput [required]="true" name="preMember" [(ngModel)]="char.charactername"><br />
26
+            <nb-select [(selected)]="char.race" placeholder="Race">
27
+                <nb-option *ngFor="let race of races" [value]="race">{{race}}</nb-option>
28
+            </nb-select>
29
+            <nb-select [(selected)]="char.specname" placeholder="Spec">
30
+                <nb-option *ngFor="let spec of specs" [value]="spec">{{spec}}</nb-option>
31
+            </nb-select>
32
+            <nb-select [(selected)]="char.class" placeholder="Class" (selectedChange)="onSelectClass()">
33
+                <nb-option *ngFor="let class of classes" [value]="class">{{class}}</nb-option>
34
+            </nb-select>
35
+            <button nbButton
36
+                status="primary"
37
+                [class.btn-pulse]="submitted"
38
+                (click)="updateCharacter()">
39
+                Update
40
+            </button>
41
+        </span>
21 42
         <span *ngIf="link === 'owner'">
22 43
             Owned by <a [routerLink]="'/frontcraft/user/'+char.username"> {{char.username}} ({{char.rank}})</a>
23 44
         </span>
24 45
     </nb-card-body>
25
-</nb-card>
46
+</nb-card>

+ 38
- 4
src/frontend/src/app/frontcraft/pages/character/character.component.ts 查看文件

@@ -1,9 +1,10 @@
1 1
 import { Component, OnInit, Input } from '@angular/core';
2 2
 import { ActivatedRoute } from '@angular/router';
3
-import { Spec, User, Character, Item } from '../../../../../../backend/Types/Types';
4
-import { getClassColor } from '../../../../../../backend/Types/PlayerSpecs';
3
+import { Spec, User, Character, Item, _Class, _Race, Class } from '../../../../../../backend/Types/Types';
4
+import { getClassColor, specs } from '../../../../../../backend/Types/PlayerSpecs';
5 5
 import { _Tiers } from '../../../../../../backend/Types/Items';
6 6
 import { IApiService } from '../../services/ApiService/ApiService';
7
+import { NbToastrService } from '@nebular/theme';
7 8
 
8 9
 @Component({
9 10
   selector: 'character',
@@ -13,11 +14,17 @@ export class FrontcraftCharacterComponent implements OnInit {
13 14
 
14 15
   @Input() name?: string
15 16
   @Input() link?: "owner" | "character" = 'owner'
16
-
17 17
   char: (Character & User & Spec) = {
18
+    charactername: "Loading",
18 19
     race: 'Human',
19
-    class: 'Warrior'
20
+    class: 'Warrior',
21
+    spec: 'Arms'
20 22
   } as any
23
+
24
+  classes = _Class
25
+  races = _Race
26
+  specs = specs[this.char.class]
27
+
21 28
   color: string
22 29
   tokens
23 30
   dataLink = ""
@@ -27,23 +34,32 @@ export class FrontcraftCharacterComponent implements OnInit {
27 34
   boss2 = { name: undefined, date: undefined }
28 35
   gear2: Item[] = []
29 36
 
37
+  canManage: boolean = false
38
+
30 39
   constructor(
31 40
     private api: IApiService,
32 41
     private route: ActivatedRoute,
42
+    private toast: NbToastrService,
33 43
   ) { }
34 44
 
35 45
   async ngOnInit() {
36 46
     const param = this.name || this.route.snapshot.paramMap.get('name');
37 47
     if (!param) return
38 48
 
49
+    const manageChar = this.api.get('manageCharacter')
50
+
51
+    if (manageChar) this.canManage = true
52
+
39 53
     const char = await this.api.get('CharacterManager').getCharacterByName(param)
40 54
     if (char) {
41 55
       this.color = getClassColor(char.class)
42 56
       this.char = char
57
+      this.specs = specs[this.char.class]
43 58
       this.api.get('ItemManager').getTokens(this.char, _Tiers, true).then(tokens => {
44 59
         this.tokens = tokens
45 60
       })
46 61
 
62
+      /*
47 63
       this.dataLink = "https://classic.warcraftlogs.com:443/v1/parses/character/" + this.char.charactername.replace(/^\w/, c => c.toUpperCase()) + "/Gandling/EU?api_key=c698515ab4f592cdb848d80b3abe616c&metric=dps"
48 64
 
49 65
       const json: any[] = await fetch(this.dataLink).then(raw => raw.json())
@@ -68,6 +84,24 @@ export class FrontcraftCharacterComponent implements OnInit {
68 84
       const maybeItems: (Item | undefined)[] = await Promise.all(data.gear.filter(item => item.name != "Unknown Item").map(async item => await this.api.get('ItemManager').getItem(item.name)))
69 85
       const geardata = maybeItems.filter(maybeItem => maybeItem != null)
70 86
       this.gear2 = geardata
87
+      */
71 88
     }
72 89
   }
90
+
91
+  updateCharacter = async () => {
92
+    const manager = this.api.get('manageCharacter')
93
+    if (manager) {
94
+      const specid = await this.api.get('CharacterManager').getSpecId(this.char['class'], this.char['specname'] as any)
95
+      this.char.specid = specid
96
+      manager.updateCharacter(this.char).then(() => {
97
+        this.toast.show('Update', 'Success', { status: 'success' })
98
+      })
99
+    }
100
+  }
101
+  onSelectClass() {
102
+    this.specs = specs[this.char.class]
103
+    setTimeout(() => {
104
+      this.char.specname = this.specs[0]
105
+    }, 25)
106
+  }
73 107
 }

正在加载...
取消
保存