fengxiang
2018-03-23 40951bf70651c38d09a3b1f5eaddde8faa9e8c06
查看数据bug修复,修改密码功能开发
4 files modified
339 ■■■■■ changed files
src/app/routes/analysis/query/query.component.html 2 ●●● patch | view | raw | blame | history
src/app/routes/analysis/query/query.component.ts 3 ●●●●● patch | view | raw | blame | history
src/app/routes/systems/account/account.component.html 275 ●●●●● patch | view | raw | blame | history
src/app/routes/systems/account/account.component.ts 59 ●●●●● patch | view | raw | blame | history
src/app/routes/analysis/query/query.component.html
@@ -127,7 +127,7 @@
            <div echarts   style="margin-top: 12px;" [options]="chartOption" [loading]="chartLoading" class="line-chart" (chartInit)="onChartInit($event)"></div>
        </div>
        <div *ngIf="isChartCollapse" style="width:100%; text-align:center;">
            <span style="font-size:18px; font-weight: bold;">{{ !isChartCollapse?'':chartTitle }}</span>
            <span style="font-size:18px; font-weight: bold;">{{ _chartTitleTemp }}</span>
        </div>
        <a *ngIf="!!echartsIntance"  style="position: absolute; right: 0; top: -10px;" class="pl-sm" (click)="toggleChartCollapse()">
            折叠
src/app/routes/analysis/query/query.component.ts
@@ -550,6 +550,8 @@
    public get sensorUnit() {
        return this.grid.data[this.chartSelectedIndex].sensor.unit;
    }
    // 报表标题暂存 防止联动
    public _chartTitleTemp: string;
    public get chartTitle(): string {
        const names = ['辖区', '地区', '时间', '项目'];
        switch ( this.dataCondition.areaRange ) {
@@ -573,6 +575,7 @@
    public switchSensor(index: number): void {
        this.chartSelectedIndex = index;
        this.chartLoading = true; 
        this._chartTitleTemp = this.chartTitle;
        setTimeout(() => {
            const series = [{type: 'line', data: this.grid.data[index].data}];
            this.echartsIntance.setOption({
src/app/routes/systems/account/account.component.html
@@ -1,116 +1,171 @@
<pro-header [title]="'账户列表'"></pro-header>
<nz-card [nzBordered]="false">
    <form nz-form (ngSubmit)="load(true)" [nzLayout]="'inline'">
        <div nz-row [nzGutter]="24">
            <div nz-col [nzSpan]="8" class="mb-md">
                <div nz-form-item class="d-flex">
                    <div nz-form-label>
                        <label>账号</label>
                    </div>
                    <div nz-form-control class="flex-1">
                        <nz-input [(ngModel)]="query.accountName" name="name" [nzSize]="'large'" [nzPlaceHolder]="'请输入账号'"></nz-input>
                    </div>
                </div>
            </div>
            <div nz-col [nzSpan]="8" class="mb-md">
                <div nz-form-item class="d-flex">
                    <div nz-form-label>
                        <label>电话</label>
                    </div>
                    <div nz-form-control class="flex-1">
                        <nz-input [(ngModel)]="query.mobile" name="mobile" [nzSize]="'large'" [nzPlaceHolder]="'请输入电话'"></nz-input>
                    </div>
                </div>
            </div>
            <div nz-col [nzSpan]="8" class="mb-md">
                <div nz-form-item class="d-flex">
                    <div nz-form-label>
                        <label>是否删除</label>
                    </div>
                    <div nz-form-control class="flex-1">
                        <nz-select [(ngModel)]="query.isDelete" name="isDelete" [nzSize]="'large'">
                            <nz-option *ngFor="let option of isDeleteOptions" [nzLabel]="option.label" [nzValue]="option.value" ></nz-option>
                        </nz-select>
                    </div>
                </div>
            </div>
            <div nz-col [nzSpan]="8" class="mb-md">
                <button nz-button type="submit" [nzType]="'primary'"
                    [nzLoading]="loading" [nzSize]="'large'">查询</button>
                <button nz-button type="reset" [nzSize]="'large'" class="mx-sm">重置</button>
            </div>
        </div>
    </form>
    <form nz-form (ngSubmit)="load(true)" [nzLayout]="'inline'">
        <div nz-row [nzGutter]="24">
            <div nz-col [nzSpan]="8" class="mb-md">
                <div nz-form-item class="d-flex">
                    <div nz-form-label>
                        <label>账号</label>
                    </div>
                    <div nz-form-control class="flex-1">
                        <nz-input [(ngModel)]="query.accountName" name="name" [nzSize]="'large'" [nzPlaceHolder]="'请输入账号'"></nz-input>
                    </div>
                </div>
            </div>
            <div nz-col [nzSpan]="8" class="mb-md">
                <div nz-form-item class="d-flex">
                    <div nz-form-label>
                        <label>电话</label>
                    </div>
                    <div nz-form-control class="flex-1">
                        <nz-input [(ngModel)]="query.mobile" name="mobile" [nzSize]="'large'" [nzPlaceHolder]="'请输入电话'"></nz-input>
                    </div>
                </div>
            </div>
            <div nz-col [nzSpan]="8" class="mb-md">
                <div nz-form-item class="d-flex">
                    <div nz-form-label>
                        <label>是否删除</label>
                    </div>
                    <div nz-form-control class="flex-1">
                        <nz-select [(ngModel)]="query.isDelete" name="isDelete" [nzSize]="'large'">
                            <nz-option *ngFor="let option of isDeleteOptions" [nzLabel]="option.label" [nzValue]="option.value"></nz-option>
                        </nz-select>
                    </div>
                </div>
            </div>
            <div nz-col [nzSpan]="8" class="mb-md">
                <button nz-button type="submit" [nzType]="'primary'" [nzLoading]="loading" [nzSize]="'large'">查询</button>
                <button nz-button type="reset" [nzSize]="'large'" class="mx-sm">重置</button>
            </div>
        </div>
    </form>
    <div class="mb-md">
        <button nz-button (click)="edit()" [nzType]="'primary'" [nzSize]="'large'">
            <i class="anticon anticon-plus"></i><span>新建</span>
        </button>
        <ng-container *ngIf="selectedRows.length > 0"> &nbsp;
            <button nz-button [nzSize]="'large'" (click)="remove()" >批量删除</button>
        </ng-container>
    </div>
    <div class="mb-md">
        <button nz-button (click)="edit()" [nzType]="'primary'" [nzSize]="'large'">
            <i class="anticon anticon-plus"></i>
            <span>新建</span>
        </button>
        <ng-container *ngIf="selectedRows.length > 0"> &nbsp;
            <button nz-button [nzSize]="'large'" (click)="remove()">批量删除</button>
        </ng-container>
    </div>
    <div class="mb-md">
        <nz-alert [nzType]="'info'" [nzShowIcon]="true">
            <span alert-body>
                 已选择<strong class="text-primary">{{selectedRows.length}}</strong>项
            </span>
        </nz-alert>
    </div>
    <div class="mb-md">
        <nz-alert [nzType]="'info'" [nzShowIcon]="true">
            <span alert-body>
                已选择
                <strong class="text-primary">{{selectedRows.length}}</strong>项
            </span>
        </nz-alert>
    </div>
    <nz-table   #nzTable
                [nzAjaxData]="data"
                [nzLoading]="loading"
                [nzTotal]="total"
                [(nzPageIndex)]="query.pageIndex"
                [nzPageSize]="query.pageSize"
                [nzShowTotal]="true"
                (nzPageIndexChange)="load()">
        <thead nz-thead>
            <tr>
                <th nz-th [nzCheckbox]="true">
                    <label nz-checkbox [(ngModel)]="allChecked" [nzIndeterminate]="indeterminate" (ngModelChange)="checkAll($event)"></label>
                </th>
                <th nz-th><span>账号</span>
                <nz-table-sort (nzValueChange)="sort('account_name', $event)"></nz-table-sort>
                </th>
                <th nz-th><span>电话</span></th>
                <th nz-th><span>电子邮件</span></th>
                <th nz-th><span>微信号</span></th>
                <!-- <th nz-th><span>密码</span></th> -->
                <th nz-th><span>组织</span></th>
                <th nz-th><span>创建日期</span></th>
                <th nz-th>
                    <span>过期日期</span>
                    <nz-table-sort (nzValueChange)="sort('expire_time', $event)"></nz-table-sort>
                </th>
                <th nz-th><span>操作</span></th>
            </tr>
        </thead>
        <tbody nz-tbody>
            <tr nz-tbody-tr *ngFor="let account of nzTable.data">
                <td nz-td [nzCheckbox]="true">
                    <label nz-checkbox [(ngModel)]="account.checked" (ngModelChange)="refreshStatus($event)" [nzDisabled]="account.isDelete == '1'? true : false"></label>
                </td>
                <td nz-td>{{account.accountName}}</td>
                <td nz-td>{{account.mobile}}</td>
                <td nz-td>{{account.email}}</td>
                <td nz-td>{{account.weixin}}</td>
                <!-- <td nz-td>{{account.password}}</td> -->
                <td nz-td>{{account.organization?account.organization.name:account.organizationId}}</td>
                <td nz-td>{{format_date(account.createTime)}}</td>
                <td nz-td>{{format_date(account.expireTime)}}</td>
                <td nz-td>
                    <a (click)="edit(account)">编辑</a>
                    <ng-container *ngIf="account.isDelete == '0'">
                        <span nz-table-divider></span>
                        <nz-popconfirm  [nzTitle]="'确定要删除该数据吗?'" [nzOkText]="'Yes'" [nzCancelText]="'No'" (nzOnConfirm)="delete(account.id)" >
                            <a nz-popconfirm>删除</a>
                        </nz-popconfirm>
                    </ng-container>
                </td>
            </tr>
        </tbody>
    </nz-table>
    <nz-table #nzTable [nzAjaxData]="data" [nzLoading]="loading" [nzTotal]="total" [(nzPageIndex)]="query.pageIndex" [nzPageSize]="query.pageSize"
        [nzShowTotal]="true" (nzPageIndexChange)="load()">
        <thead nz-thead>
            <tr>
                <th nz-th [nzCheckbox]="true">
                    <label nz-checkbox [(ngModel)]="allChecked" [nzIndeterminate]="indeterminate" (ngModelChange)="checkAll($event)"></label>
                </th>
                <th nz-th>
                    <span>账号</span>
                    <nz-table-sort (nzValueChange)="sort('account_name', $event)"></nz-table-sort>
                </th>
                <th nz-th>
                    <span>电话</span>
                </th>
                <th nz-th>
                    <span>电子邮件</span>
                </th>
                <th nz-th>
                    <span>微信号</span>
                </th>
                <!-- <th nz-th><span>密码</span></th> -->
                <th nz-th>
                    <span>组织</span>
                </th>
                <th nz-th>
                    <span>创建日期</span>
                </th>
                <th nz-th>
                    <span>过期日期</span>
                    <nz-table-sort (nzValueChange)="sort('expire_time', $event)"></nz-table-sort>
                </th>
                <th nz-th>
                    <span>操作</span>
                </th>
            </tr>
        </thead>
        <tbody nz-tbody>
            <tr nz-tbody-tr *ngFor="let account of nzTable.data">
                <td nz-td [nzCheckbox]="true">
                    <label nz-checkbox [(ngModel)]="account.checked" (ngModelChange)="refreshStatus($event)" [nzDisabled]="account.isDelete == '1'? true : false"></label>
                </td>
                <td nz-td>{{account.accountName}}</td>
                <td nz-td>{{account.mobile}}</td>
                <td nz-td>{{account.email}}</td>
                <td nz-td>{{account.weixin}}</td>
                <!-- <td nz-td>{{account.Pwd}}</td> -->
                <td nz-td>{{account.organization?account.organization.name:account.organizationId}}</td>
                <td nz-td>{{format_date(account.createTime)}}</td>
                <td nz-td>{{format_date(account.expireTime)}}</td>
                <td nz-td>
                    <a (click)="edit(account)">编辑</a>
                    <ng-container *ngIf="account.isDelete == '0'">
                        <span nz-table-divider></span>
                        <nz-popconfirm [nzTitle]="'确定要删除该数据吗?'" [nzOkText]="'Yes'" [nzCancelText]="'No'" (nzOnConfirm)="delete(account.id)">
                            <a nz-popconfirm>删除</a>
                        </nz-popconfirm>
                        <span nz-table-divider></span>
                        <nz-dropdown>
                            <a class="ant-dropdown-link" nz-dropdown>
                                更多
                                <i class="anticon anticon-down"></i>
                            </a>
                            <ul nz-menu>
                                <li nz-menu-item>
                                    <a (click)="showResetPwdWindow(account)">修改密码</a>
                                </li>
                            </ul>
                        </nz-dropdown>
                    </ng-container>
                </td>
            </tr>
        </tbody>
    </nz-table>
</nz-card>
<!-- 修改密码弹窗 -->
<nz-modal [nzVisible]="resetPwdWindowIsVisible" [nzTitle]="'修改密码'" [nzContent]="modalContent" (nzOnCancel)="resetPwdCancel($event)"
    (nzOnOk)="resetPwdOk($event)" [nzConfirmLoading]="isResetPwdLoading">
    <ng-template #modalContent>
        <form nz-form [formGroup]="resetPwdForm">
            <div nz-form-item nz-row>
                <div nz-form-label nz-col [nzSm]="6" [nzXs]="24">
                    <label for="accountName" >账号</label>
                </div>
                <div nz-form-control nz-col [nzSm]="14" [nzXs]="24" nzHasFeedback>
                    <nz-input [nzSize]="'large'" nzReadonly="true" formControlName="accountName" [nzId]="'accountName'"></nz-input>
                </div>
            </div>
            <div nz-form-item nz-row>
                <div nz-form-label nz-col [nzSm]="6" [nzXs]="24">
                    <label for="password" nz-form-item-required>密码</label>
                </div>
                <div nz-form-control nz-col [nzSm]="14" [nzXs]="24" nzHasFeedback>
                    <nz-input [nzSize]="'large'" formControlName="password" [nzType]="'password'" [nzId]="'password'" (ngModelChange)="updateConfirmValidator()"></nz-input>
                    <div nz-form-explain *ngIf="getFormControl('password').dirty&&getFormControl('password').hasError('required')">请输入密码!</div>
                </div>
            </div>
            <div nz-form-item nz-row>
                <div nz-form-label nz-col [nzSm]="6" [nzXs]="24">
                    <label for="checkPassword" nz-form-item-required>确认密码</label>
                </div>
                <div nz-form-control nz-col [nzSm]="14" [nzXs]="24" nzHasFeedback>
                    <nz-input [nzSize]="'large'" formControlName="checkPassword" [nzType]="'password'" [nzId]="'checkPassword'"></nz-input>
                    <div nz-form-explain *ngIf="getFormControl('checkPassword').dirty&&getFormControl('checkPassword').hasError('required')">请确认密码!</div>
                    <div nz-form-explain *ngIf="getFormControl('checkPassword').dirty&&getFormControl('checkPassword').hasError('confirm')">两次输入不一致!</div>
                </div>
            </div>
        </form>
    </ng-template>
</nz-modal>
src/app/routes/systems/account/account.component.ts
@@ -5,6 +5,8 @@
import {environment} from '../../../../environments/environment';
import { DateService } from '../../../business/services/util/date.service';
import {AccountEditComponent} from './account-edit/account-edit.component';
import { FormBuilder, Validators, FormControl, FormGroup } from '@angular/forms';
import { ResultBean } from '@business/entity/grid';
@Component({
  selector: 'app-account',
  templateUrl: './account.component.html',
@@ -37,7 +39,8 @@
    private confirmServ: NzModalService,
    public dateSrv: DateService,
    public msgSrv: NzMessageService,
    private modalHelper: ModalHelper
    private modalHelper: ModalHelper,
    private fb: FormBuilder
  ) {
  }
@@ -60,6 +63,12 @@
  ngOnInit() {
    this.load();
    // 重置密码表单
    this.resetPwdForm = this.fb.group({
    accountName      : [ null, [ Validators.email ] ],
    password         : [ null, [ Validators.required ] ],
    checkPassword    : [ null, [ Validators.required, this.confirmationValidator ] ]
    });
  }
  edit(account?: any) {
@@ -140,5 +149,53 @@
    if (date) {
      return this.dateSrv.date_format(date, 'YYYY-MM-DD');
    }
   }
  public resetPwdWindowIsVisible = false;
  public isResetPwdLoading = false;
  public resetPwdForm: FormGroup;
  public showResetPwdWindow(account) {
        this.resetPwdWindowIsVisible = true;
        this.resetPwdForm = this.fb.group({
          id               : [ account.id ],
          accountName      : [ account.accountName],
          password         : [ null, [ Validators.required ] ],
          checkPassword    : [ null, [ Validators.required, this.confirmationValidator ] ]
        });
  }
  public resetPwdCancel() {
       this.resetPwdWindowIsVisible = false;
  }
  public resetPwdOk() {
    for (const i in this.resetPwdForm.controls) {
      this.resetPwdForm.controls[ i ].markAsDirty();
    }
    if (this.resetPwdForm.valid) {
       this.isResetPwdLoading = true;
       const data = this.resetPwdForm.value;
       data['accountName'] = null;
       this.http.post(environment.SERVER_BASH_URL + '/account/account', data).subscribe((res: ResultBean<any>) => {
         if ( res.code === 1 && res.data === 1 ) {
          this.isResetPwdLoading = false;
          this.resetPwdWindowIsVisible = false;
          this.msgSrv.success('密码修改成功!');
         }
      });
    }
  }
  confirmationValidator = (control: FormControl): { [s: string]: boolean } => {
    if (!control.value) {
      return { required: true };
    } else if (control.value !== this.resetPwdForm.controls[ 'password' ].value) {
      return { confirm: true, error: true };
    }
  }
  getFormControl(name) {
    return this.resetPwdForm.controls[ name ];
  }
  updateConfirmValidator() {
    /** wait for refresh value */
    setTimeout(_ => {
      this.resetPwdForm.controls[ 'checkPassword' ].updateValueAndValidity();
    });
  }
}