Commit 5adf0760 by 杨子

增加退出接口

parent 42bdf35e
{ {
"/asset/*": { "/asset/*": {
"target": "http://localhost:8081", "target": "http://192.168.19.171:8082",
"secure": false, "secure": false,
"logLevel": "debug", "logLevel": "debug",
"changeOrigin": true "changeOrigin": true
......
import { Component, OnInit } from "@angular/core"; import { Component, OnInit, Inject } from "@angular/core";
import { Router } from "@angular/router"; import { Router } from "@angular/router";
import { APIService } from "src/app/service/layout/service/api.service";
import { SocialService, ITokenService, DA_SERVICE_TOKEN } from "@delon/auth";
@Component({ @Component({
selector: "app-user", selector: "app-user",
templateUrl: "./user.component.html", templateUrl: "./user.component.html",
...@@ -9,13 +11,22 @@ export class UserComponent implements OnInit { ...@@ -9,13 +11,22 @@ export class UserComponent implements OnInit {
data = []; data = [];
currentArr = []; // 收起 currentArr = []; // 收起
remainArr = []; //更多 remainArr = []; //更多
constructor(private router: Router) {} constructor(
private router: Router,
@Inject(DA_SERVICE_TOKEN) private tokenService: ITokenService,
private apiSrv: APIService
) {}
ngOnInit() {} ngOnInit() {}
jumpPassword() { jumpPassword() {
this.router.navigateByUrl("/admin/user/password"); this.router.navigateByUrl("/admin/user/password");
} }
logout() { logout() {
this.router.navigateByUrl("/passport/login"); this.apiSrv.logout().subscribe((r: any) => {
if (r.success == "1") {
this.tokenService.clear();
this.router.navigateByUrl("/passport/login");
}
});
} }
} }
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
<a Button [type]="'primary'" [size]="'large'" (onClick)="submit()"> <a Button [type]="'primary'" [size]="'large'" (onClick)="submit()">
登录 登录
</a> </a>
</ListItem> </ListItem>
</List> </List>
</form> </form>
\ No newline at end of file
...@@ -6,6 +6,7 @@ import { HttpClient } from "@angular/common/http"; ...@@ -6,6 +6,7 @@ import { HttpClient } from "@angular/common/http";
import { catchError } from "rxjs/operators"; import { catchError } from "rxjs/operators";
import { of } from "rxjs"; import { of } from "rxjs";
import { StartupService } from "../../service/startup.service"; import { StartupService } from "../../service/startup.service";
import { APIService } from "src/app/service/layout/service/api.service";
@Component({ @Component({
selector: "passport-login", selector: "passport-login",
...@@ -23,7 +24,8 @@ export class UserLoginComponent { ...@@ -23,7 +24,8 @@ export class UserLoginComponent {
private socialService: SocialService, private socialService: SocialService,
@Inject(DA_SERVICE_TOKEN) private tokenService: ITokenService, @Inject(DA_SERVICE_TOKEN) private tokenService: ITokenService,
private startupSrv: StartupService, private startupSrv: StartupService,
private http: HttpClient private http: HttpClient,
private apiSrv: APIService
) { ) {
this.form = fb.group({ this.form = fb.group({
userName: [null, [Validators.required, Validators.minLength(4)]], userName: [null, [Validators.required, Validators.minLength(4)]],
...@@ -44,7 +46,6 @@ export class UserLoginComponent { ...@@ -44,7 +46,6 @@ export class UserLoginComponent {
// #endregion // #endregion
submit() { submit() {
document.cookie = "";
this.error = ""; this.error = "";
console.log(this.form.value); console.log(this.form.value);
// 默认配置中对所有HTTP请求都会强制 [校验](https://ng-alain.com/auth/getting-started) 用户 Token // 默认配置中对所有HTTP请求都会强制 [校验](https://ng-alain.com/auth/getting-started) 用户 Token
...@@ -79,7 +80,7 @@ export class UserLoginComponent { ...@@ -79,7 +80,7 @@ export class UserLoginComponent {
this.startupSrv.load().then(() => { this.startupSrv.load().then(() => {
let url = this.tokenService.referrer!.url || "/"; let url = this.tokenService.referrer!.url || "/";
if (url.includes("/passport")) url = "/"; if (url.includes("/passport")) url = "/";
this.router.navigateByUrl(url); this.router.navigateByUrl("/admin");
}); });
}, },
error => { error => {
......
...@@ -2,7 +2,14 @@ import { Component, OnInit } from "@angular/core"; ...@@ -2,7 +2,14 @@ import { Component, OnInit } from "@angular/core";
import { Router, ActivatedRoute } from "@angular/router"; import { Router, ActivatedRoute } from "@angular/router";
import { switchMap, merge, tap } from "rxjs/operators"; import { switchMap, merge, tap } from "rxjs/operators";
import { Modal, Picker, Toast, PickerService, ToastService, ModalService } from "ng-zorro-antd-mobile"; import {
Modal,
Picker,
Toast,
PickerService,
ToastService,
ModalService
} from "ng-zorro-antd-mobile";
import { import {
FormGroup, FormGroup,
...@@ -15,9 +22,10 @@ import { ...@@ -15,9 +22,10 @@ import {
GaoDeLocation, GaoDeLocation,
PositionOptions PositionOptions
} from "@ionic-native/gao-de-location/ngx"; } from "@ionic-native/gao-de-location/ngx";
import { b64toBlob } from 'src/app/layout/service/util.service'; import { b64toBlob } from "src/app/layout/service/util.service";
import { isFulfilled } from 'q'; import { isFulfilled } from "q";
import { defer, Observable, of } from 'rxjs'; import { defer, Observable, of } from "rxjs";
import { Location } from "@angular/common";
const data = []; const data = [];
@Component({ @Component({
...@@ -28,14 +36,14 @@ const data = []; ...@@ -28,14 +36,14 @@ const data = [];
}) })
export class CheckAddComponent implements OnInit { export class CheckAddComponent implements OnInit {
constructor( constructor(
private router: ActivatedRoute, private activeRoute: ActivatedRoute,
private _modal: Modal, private _modal: Modal,
private api: APIService, private api: APIService,
private fb: FormBuilder, private fb: FormBuilder,
private route: Router, private router: Router,
private gaoDeLocation: GaoDeLocation, private gaoDeLocation: GaoDeLocation,
private _toast: ToastService, private _toast: ToastService,
private router2: Router private location: Location
) { ) {
this.getCurrentPosition(); this.getCurrentPosition();
} }
...@@ -44,18 +52,18 @@ export class CheckAddComponent implements OnInit { ...@@ -44,18 +52,18 @@ export class CheckAddComponent implements OnInit {
this.gaoDeLocation this.gaoDeLocation
.getCurrentPosition() .getCurrentPosition()
.then((res: PositionOptions) => { .then((res: PositionOptions) => {
console.log(res);// res.address 为位置信息 console.log(res); // res.address 为位置信息
this.address=res.address; this.address = res.address;
}) })
.catch(error => console.error(error)); .catch(error => console.error(error));
} }
address:string; address: string;
registerForm: FormGroup; registerForm: FormGroup;
submit: any = { checkPlanAssetList: [] }; submit: any = { checkPlanAssetList: [] };
inventoryType = ["资产明细盘点", "资产范围盘点"]; inventoryType = ["资产明细盘点", "资产范围盘点"];
checkStaType = ["未开始", "待审核", "清查中", "已完成","其他"]; checkStaType = ["未开始", "待审核", "清查中", "已完成", "其他"];
fileStrs:[]=[]; fileStrs: [] = [];
detail: any = { asset: {}, belongUnit: {}, projectTeam: {}, }; detail: any = { asset: {}, belongUnit: {}, projectTeam: {} };
msg: any = ""; msg: any = "";
formErrors: any = { formErrors: any = {
invoicesNum: "", invoicesNum: "",
...@@ -71,47 +79,63 @@ export class CheckAddComponent implements OnInit { ...@@ -71,47 +79,63 @@ export class CheckAddComponent implements OnInit {
}; };
param = null; param = null;
ngOnInit() { ngOnInit() {
const accessPlan = (param)=>{ const accessPlan = param => {
this.api this.api.getCheckTaskText(param.id, param.planId).subscribe(data => {
.getCheckTaskText(param.id, param.planId) if (!data.success) {
.subscribe(data => (this.detail = data.body.checkPlanAsset)) const toast = ToastService.offline(data.msg, 1000, () => {
} this.location.back();
const planDialog= (data)=>{ });
} else {
this.detail = data.body.checkPlanAsset;
}
});
};
const planDialog = data => {
if (data.success) { if (data.success) {
Modal.operation( Modal.operation(
[{text:"请选择盘点计划:"}].concat( [{ text: "请选择盘点计划:" }].concat(
data.body.checkList.map(c => ({ data.body.checkList.map(c => ({
text: c.name, text: c.name,
onPress: () => onPress: () => accessPlan({ ...this.param, planId: c.id })
accessPlan({...this.param,planId:c.id}) }))
}))
) )
); );
} }
} };
this.buildForm(); this.buildForm();
this.router.params this.activeRoute.params
.pipe( .pipe(
tap(param=>{this.param=param;console.log(param)}), tap(param => {
switchMap(param=>param.planId?of(param):this.api.getCheckTask(param.id)) this.param = param;
console.log(param);
}),
switchMap(param =>
param.planId ? of(param) : this.api.getCheckTask(param.id)
)
) )
.subscribe(data => { .subscribe(data => {
if(data.planId){ if (data.planId) {
accessPlan(data); accessPlan(data);
}else{ } else {
planDialog(data); if (!data.success) {
const toast = ToastService.offline(data.msg, 1000, () => {
this.location.back();
});
} else {
planDialog(data);
}
} }
}); });
} }
oninventoryType() {} oninventoryType() {}
onCheck() { onCheck() {
this.route.navigateByUrl("../checkResult"); this.router.navigateByUrl("../checkResult");
} }
buildForm(): void { buildForm(): void {
this.registerForm = this.fb.group({ this.registerForm = this.fb.group({
mode: "add", mode: "add",
id:[], id: [],
invoicesNum: ["", Validators.required], invoicesNum: ["", Validators.required],
name: ["", Validators.required], name: ["", Validators.required],
inventoryType: [], inventoryType: [],
...@@ -124,8 +148,8 @@ export class CheckAddComponent implements OnInit { ...@@ -124,8 +148,8 @@ export class CheckAddComponent implements OnInit {
remarks: [] remarks: []
}); });
this.registerForm.valueChanges.subscribe(data => this.onValueChanged(data)); this.registerForm.valueChanges.subscribe(data => this.onValueChanged(data));
this.registerForm.controls['checkSta'].valueChanges.subscribe(value => { this.registerForm.controls["checkSta"].valueChanges.subscribe(value => {
if(value=="其他"){ if (value == "其他") {
this.showPromptPromise(); this.showPromptPromise();
} }
}); });
...@@ -133,32 +157,27 @@ export class CheckAddComponent implements OnInit { ...@@ -133,32 +157,27 @@ export class CheckAddComponent implements OnInit {
} }
showPromptPromise() { showPromptPromise() {
ModalService.prompt( ModalService.prompt(
'自定义盘点状态', "自定义盘点状态",
'', "",
[ [
{ {
text: '关闭', text: "关闭",
onPress: value => onPress: value =>
new Promise(resolve => { new Promise(resolve => {
resolve();
resolve();
}) })
}, },
{ {
text: '确定', text: "确定",
onPress: value => onPress: value =>
new Promise((resolve, reject) => { new Promise((resolve, reject) => {
this.detail.checkSta = value;
this.detail.checkSta=value;
this.registerForm.controls["checkSta"].setValue(value); this.registerForm.controls["checkSta"].setValue(value);
resolve(); resolve();
}) })
} }
], ],
'default', "default",
null null
); );
} }
...@@ -206,19 +225,24 @@ export class CheckAddComponent implements OnInit { ...@@ -206,19 +225,24 @@ export class CheckAddComponent implements OnInit {
} }
onSubmit() { onSubmit() {
// var result = this.registerForm.value; // var result = this.registerForm.value;
// console.log(result); // console.log(result);
// result.checkPlanAssetList = [this.detail]; // result.checkPlanAssetList = [this.detail];
console.log(this.registerForm.value); console.log(this.registerForm.value);
var result = {address:this.address,id:this.registerForm.value.id,remarks:this.registerForm.value.remarks,checkSta:this.registerForm.value.checkSta,checkAnnex:""} var result = {
result.checkAnnex = this.fileStrs.join(','); address: this.address || "pc端测试,可以打开app在手机端获取",
id: this.registerForm.value.id,
remarks: this.registerForm.value.remarks,
checkResult: this.registerForm.value.checkSta,
checkAnnex: ""
};
result.checkAnnex = this.fileStrs.join(",");
this.api.addCheckPlan(result).subscribe(data => { this.api.addCheckPlan(result).subscribe(data => {
if (!data.success) { console.log(data);
this.msg = data.msg.replace(/\w+:/g, "*"); this.router.navigate(["./admin/assets-used/checkResult"], {
}else{ queryParams: { isSuccess: data.success, msg: data.msg }
this.router2.navigate(["/"]); });
}
}); });
} }
onReset() { onReset() {
...@@ -235,36 +259,45 @@ export class CheckAddComponent implements OnInit { ...@@ -235,36 +259,45 @@ export class CheckAddComponent implements OnInit {
fileChange(params) { fileChange(params) {
console.log(params); console.log(params);
const { files, type, index ,operationType} = params; const { files, type, index, operationType } = params;
if(operationType=="remove"){ if (operationType == "remove") {
this.fileStrs.splice(index); this.fileStrs.splice(index);
return; return;
} }
this.files = files; this.files = files;
var data = new FormData(); var data = new FormData();
var block = files[0].url.split(";"); var block = files[0].url.split(";");
// Get the content type of the image // Get the content type of the image
var contentType = block[0].split(":")[1];// In this case "image/gif" var contentType = block[0].split(":")[1]; // In this case "image/gif"
// get the real base64 content of the file // get the real base64 content of the file
var realData = block[1].split(",")[1];// In this case "R0lGODlhPQBEAPeoAJosM...." var realData = block[1].split(",")[1]; // In this case "R0lGODlhPQBEAPeoAJosM...."
data.append("type", contentType); data.append("type", contentType);
data.append("name", "WU_FILE_0.jpg"); data.append("name", "WU_FILE_0.jpg");
data.append("id", "WU_FILE_0"); data.append("id", "WU_FILE_0");
data.append("file", b64toBlob( realData, contentType),"upload.jpg"); data.append("file", b64toBlob(realData, contentType), "upload.jpg");
var query = {assetNum:this.detail.asset.num,modeName:"盘点",uploadPath:"/asset/checkPlan"}; var query = {
assetNum: this.detail.asset.num,
modeName: "盘点",
uploadPath: "/asset/checkPlan"
};
var xhr = new XMLHttpRequest(); var xhr = new XMLHttpRequest();
xhr.open("POST",`asset/a/sys/file/webupload/upload?assetNum=${this.detail.asset.num}&modelName=盘点&uploadPath=/asset/checkPlan`); xhr.open(
xhr.send(data); "POST",
const _this =this; `asset/a/sys/file/webupload/upload?assetNum=${
xhr.onreadystatechange= function(data){ this.detail.asset.num
if ( xhr.readyState !== 4 ) { }&modelName=盘点&uploadPath=/asset/checkPlan`
return; );
} xhr.send(data);
_this.fileStrs.push((JSON.parse(xhr.responseText).body.url) as never); const _this = this;
} xhr.onreadystatechange = function(data) {
if (xhr.readyState !== 4) {
return;
}
_this.fileStrs.push(JSON.parse(xhr.responseText).body.url as never);
};
} }
imageClick(params) { imageClick(params) {
......
<div class="result-example"> <div class="result-example">
<Result [img]="img1" [message]="message1" [title]="'已完成'"> <Result [img]="img1" [message]="message1" [title]=" isSuccess?'成功':'失败'" [buttonText]="'继续盘点'" [buttonType]="'primary'"
(onButtonClick)="onclick()">
<ng-template #img1> <ng-template #img1>
<Icon class="spe" [type]="'check-circle'" [color]="'#1F90E6'"></Icon> <Icon class="spe" [type]="isSuccess?'check-circle':'cross-circle-o'" [color]=" isSuccess?'#1F90E6':'#F13642'">
</Icon>
</ng-template> </ng-template>
<ng-template #message1> <ng-template #message1>
<div></div> <div>{{msg}}</div>
</ng-template> </ng-template>
</Result> </Result>
</div> </div>
\ No newline at end of file
...@@ -8,3 +8,8 @@ ...@@ -8,3 +8,8 @@
height: 60px; height: 60px;
display: block; display: block;
} }
:host /deep/ .am-result .am-result-title {
font-size: 21px !important;
color: #000 !important;
}
\ No newline at end of file
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from "@angular/core";
import { ActivatedRoute, Router } from "@angular/router";
@Component({ @Component({
selector: 'app-check-result', selector: "app-check-result",
templateUrl: './check-result.component.html', templateUrl: "./check-result.component.html",
styleUrls: ['./check-result.component.scss'], styleUrls: ["./check-result.component.scss"]
}) })
export class CheckResultComponent implements OnInit { export class CheckResultComponent implements OnInit {
isSuccess: boolean;
msg = "";
constructor(private activeRoute: ActivatedRoute, private router: Router) {}
constructor() { } ngOnInit() {
this.isSuccess = this.activeRoute.snapshot.queryParams["isSuccess"];
ngOnInit() {} this.msg = this.activeRoute.snapshot.queryParams["msg"];
}
onclick() {
this.router.navigateByUrl("/admin");
}
} }
...@@ -32,7 +32,7 @@ export class QrScanComponent implements OnInit, OnDestroy { ...@@ -32,7 +32,7 @@ export class QrScanComponent implements OnInit, OnDestroy {
} }
loadingToast(id) { loadingToast(id) {
const toast = Toast.loading("Loading...", 1000, () => { const toast = Toast.loading("Loading...", 1000, () => {
this.router.navigate(["/admin/assets-used/checkPlanAdd", id]); this.router.navigate(["/admin/assets-used/checkPlanAdd", id, ""]);
}); });
} }
ngOnDestroy() { ngOnDestroy() {
......
...@@ -64,6 +64,8 @@ const CheckSave = "asset/a/asset/checkPlan/save/result"; ...@@ -64,6 +64,8 @@ const CheckSave = "asset/a/asset/checkPlan/save/result";
const Upload = "asset/a/sys/file/webupload/upload"; const Upload = "asset/a/sys/file/webupload/upload";
const assetsUrl = "asset/a/asset/checkPlan/infoData"; const assetsUrl = "asset/a/asset/checkPlan/infoData";
const logoutUrl = "asset/a/logout";
@Injectable({ @Injectable({
providedIn: "root" providedIn: "root"
}) })
...@@ -270,4 +272,8 @@ export class APIService { ...@@ -270,4 +272,8 @@ export class APIService {
getAssets(param, id) { getAssets(param, id) {
return this.basePost(assetsUrl + "/?id=" + id, param); return this.basePost(assetsUrl + "/?id=" + id, param);
} }
logout() {
return this.http.get(logoutUrl + "?__ajax=true");
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment