货源修改

This commit is contained in:
wangshiming
2021-12-03 15:22:55 +08:00
parent a9ef21e333
commit db95de90fb
42 changed files with 2466 additions and 7 deletions

View File

@ -1,7 +1,7 @@
/*
* @Author: your name
* @Date: 2021-11-29 10:20:33
* @LastEditTime: 2021-12-01 20:37:48
* @LastEditTime: 2021-12-03 11:10:47
* @LastEditors: Please set LastEditors
* @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
* @FilePath: \tms-obc-web\src\app\routes\routes-routing.module.ts
@ -33,7 +33,8 @@ const routes: Routes = [
},
{ path: 'system', loadChildren: () => import('./sys-setting/sys-setting.module').then(m => m.SysSettingModule) },
{ path: 'supplygoods', loadChildren: () => import('./supply-goods/supply-goods.module').then(m => m.SupplyGoodsModule) },
{ path: 'vehicle', loadChildren: () => import('./vehicle/vehicle.module').then(m => m.VehicleModule) }
{ path: 'vehicle', loadChildren: () => import('./vehicle/vehicle.module').then(m => m.VehicleModule) },
{ path: 'supply-management', loadChildren: () => import('./supply-management/supply-management.module').then((m) => m.SupplyManagementModule) },
]
},
// passport

View File

@ -0,0 +1,29 @@
<nz-card>
<div nz-row nzGutter="20">
<div nz-col nzSpan="13">
<div style="height: 120px;">
<div class="mb-md" nz-row>
<button nzType="primary" (click)="add()" nz-button>
<i nz-icon nzType="plus"></i>
添加熟车
</button>
</div>
<sf mode="search" [schema]="searchSchema" (formSubmit)="st.reset($event)" (formReset)="st.reset($event)"></sf>
</div>
<st #st [data]="url" [columns]="columns"></st>
</div>
<div nz-col nzSpan="11">
<div style="height: 120px;"></div>
<st #selectedST [data]="url" [columns]="selectedColumn"></st>
</div>
</div>
</nz-card>
<nz-modal [(nzVisible)]="isVisible" nzTitle="添加司机" (nzOnCancel)="handleCancel()" nzMaskClosable="false">
<div *nzModalContent>
<sf [schema]="addCarSchema" [button]="'none'"></sf>
</div>
<div *nzModalFooter>
<button nz-button nzType="default" (click)="handleCancel()">取消</button>
<button nz-button nzType="primary" (click)="handleOk()" [nzLoading]="service.http.loading">确定</button>
</div>
</nz-modal>

View File

@ -0,0 +1,24 @@
import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
import { SupplyManagementAddDriversComponent } from './add-drivers.component';
describe('SupplyManagementAddDriversComponent', () => {
let component: SupplyManagementAddDriversComponent;
let fixture: ComponentFixture<SupplyManagementAddDriversComponent>;
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [ SupplyManagementAddDriversComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(SupplyManagementAddDriversComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,152 @@
import { Component, OnInit, ViewChild } from '@angular/core';
import { STColumn, STColumnButton, STComponent, STData } from '@delon/abc/st';
import { SFSchema, SFUISchema } from '@delon/form';
import { ModalHelper, _HttpClient } from '@delon/theme';
import { SupplyManagementService } from '../../services/supply-management.service';
@Component({
selector: 'app-supply-management-add-drivers',
templateUrl: './add-drivers.component.html',
})
export class SupplyManagementAddDriversComponent implements OnInit {
url = `/user?_allow_anonymous=true`;
i: any;
searchSchema: SFSchema = {
properties: {
no: {
type: 'string',
title: '编号'
}
}
};
@ViewChild('st') private readonly st!: STComponent;
@ViewChild('selectedST') private readonly selectedST!: STComponent;
ui: SFUISchema = {
}
columns: STColumn[] = [];
selectedColumn: STColumn[] = [];
isVisible = false;
addCarSchema: SFUISchema = {
properties: {
mobile: {
type: 'string',
title: '司机手机号',
ui: {
placeholder: '请输入'
}
},
}
};
constructor(public service: SupplyManagementService, private modal: ModalHelper) { }
ngOnInit(): void {
this.initSF();
this.initST();
}
/**
* 初始化查询表单
*/
initSF() {
this.searchSchema = {
properties: {
mobile: {
type: 'string',
title: '',
ui: {
placeholder: '请输入司机姓名/手机号'
}
},
no: {
type: 'string',
title: '',
ui: {
placeholder: '请输入车牌号'
}
},
},
type: 'object',
};
this.ui = { '*': { spanLabelFixed: 80, grid: { span: 8, gutter: 4 } } };
}
/**
* 初始化数据列表
*/
initST() {
this.columns = [
{
title: '司机姓名',
width: '100px',
className: 'text-center',
render: 'goodsId'
},
{ title: '手机号', render: 'externalSn', width: '120px', className: 'text-center' },
{ title: '货源类型', index: 'linkUrl', width: '120px', className: 'text-center' },
{
title: '车牌号',
className: 'text-center',
width: '120px',
}, {
title: '状态',
className: 'text-center',
width: '120px',
},
{
title: '操作',
fixed: 'right',
width: '200px',
className: 'text-center',
buttons: [
{
text: '选择',
iif: (item: STData, btn: STColumnButton, column: STColumn) => item?.status > 0,
iifBehavior: 'disabled'
// click: (_record) => this.editOne(_record),
},
],
},
];
this.selectedColumn = [
{
title: '司机姓名',
width: '100px',
className: 'text-center',
render: 'goodsId'
},
{ title: '手机号', render: 'externalSn', width: '120px', className: 'text-center' },
{ title: '车牌号', index: 'linkUrl', width: '120px', className: 'text-center' },
{
title: '操作',
fixed: 'right',
width: '200px',
className: 'text-center',
buttons: [
{
text: '移除',
// click: (_record) => this.editOne(_record),
},
],
},
];
}
/**
* 添加熟车
*/
add(): void {
this.isVisible = true;
}
handleCancel() {
this.isVisible = false;
}
handleOk() {
}
}

View File

@ -0,0 +1,7 @@
<div>
<sf #sf [schema]="schema" [ui]="ui" [compact]="true" [button]="'none'"></sf>
<div>
<st #st [data]="service.$api_get_catalogue_member" [columns]="columns">
</st>
</div>
</div>

View File

@ -0,0 +1,24 @@
import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
import { SupplyManagementAssignedCarComponent } from './assigned-car.component';
describe('SupplyManagementAssignedCarComponent', () => {
let component: SupplyManagementAssignedCarComponent;
let fixture: ComponentFixture<SupplyManagementAssignedCarComponent>;
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [ SupplyManagementAssignedCarComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(SupplyManagementAssignedCarComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,81 @@
import { Component, OnInit } from '@angular/core';
import { STColumn } from '@delon/abc/st';
import { SFSchema, SFUISchema } from '@delon/form';
import { _HttpClient } from '@delon/theme';
import { NzMessageService } from 'ng-zorro-antd/message';
import { NzModalRef } from 'ng-zorro-antd/modal';
import { SupplyManagementService } from '../../services/supply-management.service';
@Component({
selector: 'app-supply-management-assigned-car',
templateUrl: './assigned-car.component.html',
})
export class SupplyManagementAssignedCarComponent implements OnInit {
record: any = {};
i: any;
schema: SFSchema = {};
ui: SFUISchema = {};
columns: STColumn[] = [];
constructor(
private modal: NzModalRef,
private msgSrv: NzMessageService,
public service: SupplyManagementService
) {
this.initSF();
this.initSt();
}
/**
* 初始化查询表单
*/
initSF() {
this.schema = {
properties: {
_$expand: { type: 'boolean', ui: { hidden: true } },
no: {
type: 'string',
title: '',
ui: {
placholder: '请输入司机姓名/手机号'
}
},
no2: {
type: 'string',
title: '',
ui: {
placholder: '请输入车牌号'
}
},
},
type: 'object',
};
this.ui = { '*': { spanLabelFixed: 80, grid: { span: 12, gutter: 4 } } };
}
/**
* 初始化数据列表
*/
initSt() {
this.columns = [
{ width: 50, type: 'checkbox', className: 'text-center' },
{ title: '司机姓名', width: 80, index: 'owner', className: 'text-center' },
{ title: '手机号', index: 'goodsQuantity', width: 100, className: 'text-center' },
{ title: '车牌号', width: 100, index: 'carNo', className: 'text-center' },
{ title: '状态', index: 'status', width: 100, className: 'text-center' },
];
}
ngOnInit(): void {
}
save(value: any): void {
this.service.request(`/user/${this.record.id}`, value).subscribe(res => {
this.msgSrv.success('保存成功');
this.modal.close(true);
});
}
close(): void {
this.modal.destroy();
}
}

View File

@ -0,0 +1,101 @@
<page-header-wrapper [title]="''" [logo]="logo">
<ng-template #logo>
<button nz-button nz-tooltip nzTooltipTitle="返回上一页" (click)="goBack()">
<i nz-icon nzType="left" nzTheme="outline"></i>
</button>
</ng-template>
</page-header-wrapper>
<nz-card>
<nz-spin *ngIf="!i" class="modal-spin"></nz-spin>
<div nz-row>
<div nz-col nzSpan="4">
<sv-container class="bdr">
<sv label="货源编号" col="1">{{ i?.no }}</sv>
<sv-title class="text-center text-lg">待接单</sv-title>
<sv-title>
<div class="">
<a class="btn-size">修改单价</a>
<a class="btn-size m-lg mr-lg">取消货源</a>
<a class="btn-size">再下一单</a>
</div>
</sv-title>
</sv-container>
</div>
<div nz-col nzSpan="16" class="approval-status">
<nz-steps style="width: 80%; margin: 0 auto" [nzLabelPlacement]="'vertical'">
<nz-step nzStatus="finish" nzIcon="user" [nzDescription]="i?.createAt" nzTitle="下单"></nz-step>
<nz-step nzStatus="finish" nzIcon="solution" nzTitle="完结"></nz-step>
</nz-steps>
</div>
</div>
<nz-divider></nz-divider>
<div sv-container *ngIf="i">
<sv label="项目名称">{{ i?.owner }}</sv>
<sv label="截止时间">32943898021309809423</sv>
<sv label="服务类型">3321944288191034921</sv>
<sv label="录单员">18112345678</sv>
<sv label="调度员">曲丽丽 18100000000 </sv>
<sv label="承诺付款时间">曲丽丽 18100000000 </sv>
</div>
<nz-divider></nz-divider>
<div nz-row>
<div nz-col nzSpan="6">
<div class="source-info">
<h3>装卸货信息</h3>
<p>装货地:广东省深圳市龙岗区怡亚通大厦</p>
<p>联系人:奥利给/13680058545</p>
<p>卸货地广东省深圳市福田区岗厦村9巷8号405新村</p>
<p>联系人:花花世界/13680058545</p>
</div>
</div>
<div nz-col nzSpan="6">
<div class="source-info bdr bdl pl-md">
<h3>货物信息</h3>
<p>货物名称:广东省深圳市龙岗区怡亚通大厦</p>
<p>运费单价:奥利给/13680058545</p>
<p>重量/体积广东省深圳市福田区岗厦村9巷8号405新村</p>
<p>剩余:花花世界/13680058545</p>
<p>车型/车长:花花世界/13680058545</p>
</div>
</div>
<div nz-col nzSpan="6">
<div class="source-info bdr pl-md">
<h3>关联运单</h3>
<p>待发车(<span [ngClass]="{ 'text-primary': i?.id > 0 }">{{ i?.id }}</span>)</p>
<p>运输中(<span [ngClass]="{ 'text-primary': i?.id > 0 }">{{ i?.id }}</span>)</p>
<p>待签收(<span [ngClass]="{ 'text-primary': i?.id > 0 }">{{ i?.id }}</span>)</p>
<p>已完成(<span [ngClass]="{ 'text-primary': i?.id > 0 }">{{ i?.id }}</span>)</p>
<p>已取消 (<span [ngClass]="{ 'text-primary': i?.id > 0 }">{{ i?.id }}</span>)</p>
</div>
</div>
<div class="source-info pl-md">
<h3>补充信息</h3>
<p>结算重量:广东省深圳市龙岗区怡亚通大厦</p>
<p>备注:奥利给/13680058545</p>
</div>
</div>
<nz-divider></nz-divider>
<div nz-row>
<nz-card [nzTitle]="cardTitleTemplate" style="width: 100%;" [nzExtra]="extraTemplate">
<st #st1 [data]="i?.auditRecordList" [columns]="driverColums" [ps]="0" [page]="{ show: false, showSize: false }">
</st>
</nz-card>
</div>
<div nz-row>
<nz-card nzTitle="操作日志" style="width: 100%;">
<st #st [data]="i?.auditRecordList" [columns]="logColumns" [ps]="0" [page]="{ show: false, showSize: false }">
</st>
</nz-card>
</div>
</nz-card>
<ng-template #cardTitleTemplate>
<h4>指派熟车
<span class="text-sm">已选择
<a class="text-warning-light"> 10</a>
位司机
</span>
</h4>
</ng-template>
<ng-template #extraTemplate>
<button nzType="primary" (click)="assignedCar()" nz-button>指派熟车</button>
</ng-template>

View File

@ -0,0 +1,29 @@
:host{
.btn-size{
font-size: 14px;
}
.bdr{
border-right: 1px solid #ccc;
}
.bdl{
border-left: 1px solid #ccc;
}
.title{
font-size: 26;
font-weight: bold;
}
.source-info{
p{
margin-bottom: .5em;
}
}
::ng-deep{
.approval-status{
.ant-steps{
width: 70%;
margin: 0 auto;
}
}
}
}

View File

@ -0,0 +1,24 @@
import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
import { SupplyManagementBulkDetailComponent } from './bulk-detail.component';
describe('SupplyManagementBulkDetailComponent', () => {
let component: SupplyManagementBulkDetailComponent;
let fixture: ComponentFixture<SupplyManagementBulkDetailComponent>;
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [ SupplyManagementBulkDetailComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(SupplyManagementBulkDetailComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,98 @@
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { STColumn } from '@delon/abc/st';
import { _HttpClient } from '@delon/theme';
import { NzMessageService } from 'ng-zorro-antd/message';
import { NzModalService } from 'ng-zorro-antd/modal';
import { SupplyManagementAddDriversComponent } from '../add-drivers/add-drivers.component';
import { SupplyManagementService } from '../../services/supply-management.service';
@Component({
selector: 'app-supply-management-bulk-detail',
templateUrl: './bulk-detail.component.html',
styleUrls: ['./bulk-detail.component.less']
})
export class SupplyManagementBulkDetailComponent implements OnInit {
id = this.route.snapshot.params.id;
i: any;
logColumns: STColumn[] = [
{ title: '内容', index: 'theme' },
{ title: '操作人', index: 'operationUserPhone' },
{ title: '操作时间', index: ' createTime' },
];
driverColums: STColumn[] = [
{ title: '司机姓名', index: 'theme' },
{ title: '手机号', index: 'operationUserPhone' },
{ title: '车牌号', index: ' createTime' },
{ title: '承运次数', index: 'operationUserPhone' },
{ title: '承运数量', index: ' createTime' },
{
title: '操作',
fixed: 'right',
width: '200px',
className: 'text-center',
buttons: [
{
text: '移除',
click: (_record) => this.delDiver(_record),
},
],
},
];
constructor(
private route: ActivatedRoute,
private msgSrv: NzMessageService,
private service: SupplyManagementService,
private modal: NzModalService
) {
}
ngOnInit(): void {
this.service.http.get(`/user/${this.id}?_allow_anonymous=true&_allow_badcode=true`).subscribe(res => {
console.log(res);
this.i = res
});
}
/**
* 移除司机
*/
delDiver(item: any) {
const { id } = item;
this.modal.confirm({
nzTitle: '<i>删除确认</i>',
nzContent: `请仔细核对,避免误操作!<br>是否删除?</br>`,
nzOnOk: () => {
this.service.http.post(this.service.$api_del_driver, { id }).subscribe((res) => {
if (res) {
this.service.msgSrv.success('数据删除成功!');
// this.st1.reload();
} else {
this.service.msgSrv.error('删除失败!');
}
});
},
});
}
/**
* 指派熟车
*/
assignedCar() {
const modalRef = this.modal.create({
nzTitle: '指派熟车',
nzWidth: '90%',
nzContent: SupplyManagementAddDriversComponent,
nzComponentParams: {
i: this.i,
},
nzFooter: null,
});
}
goBack() {
window.history.go(-1);
}
}

View File

@ -0,0 +1,111 @@
<!--
* @Author: your name
* @Date: 2021-12-03 11:10:14
* @LastEditTime: 2021-12-03 14:52:01
* @LastEditors: Please set LastEditors
* @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
* @FilePath: \tms-obc-web\src\app\routes\supply-management\components\bulk\bulk.component.html
-->
<nz-card>
<!-- 搜索表单 -->
<div nz-row nzGutter="8">
<!-- 查询字段小于或等于3个时不显示伸缩按钮 -->
<div nz-col nzSpan="24" *ngIf="queryFieldCount <= 4">
<sf #sf [schema]="schema" [ui]="ui" [mode]="'search'" [disabled]="!sf?.valid" [loading]="service.http.loading"
(formSubmit)="st?.load(1)" (formReset)="resetSF()"></sf>
</div>
<!-- 查询字段大于3个时根据展开状态调整布局 -->
<ng-container *ngIf="queryFieldCount > 4">
<div nz-col [nzSpan]="_$expand ? 24 : 18">
<sf #sf [schema]="schema" [ui]="ui" [compact]="true" [button]="'none'"></sf>
</div>
<div nz-col [nzSpan]="_$expand ? 24 : 6" [class.text-right]="_$expand">
<button nz-button nzType="primary" [disabled]="!sf.valid" [nzLoading]="service.http.loading"
(click)="st?.load(1)">查询</button>
<button nz-button nzType="primary"
>导入</button>
<button nz-button (click)="resetSF()">重置</button>
<button nz-button nzType="link" (click)="expandToggle()">
{{ !_$expand ? '展开' : '收起' }}
<i nz-icon [nzType]="!_$expand ? 'down' : 'up'"></i>
</button>
</div>
</ng-container>
</div>
</nz-card>
<nz-card>
<nz-tabset (nzSelectedIndexChange)="selectChange($event)" [nzTabBarExtraContent]="extraTemplate">
<nz-tab *ngFor="let tab of tabs; let i = index" [nzTitle]="tab.name + ' (' + tab.count + ') '" (nzClick)="tabChange(i)">
</nz-tab>
</nz-tabset>
<div style="position: relative">
<nz-alert
nzType="info"
[nzMessage]="'当前共' + st?.total + '行记录已选择' + selectedRows.length + ''"
nzShowIcon
[ngStyle]="{ margin: '0 0 1rem 0' }"
>
</nz-alert>
</div>
<div style="margin-top: 15px;">
<st #st [data]="url" [columns]="columns">
<ng-template st-row="goodsId" let-item let-index="index">
<a [routerLink]="'/supply-management/bulk-detail/'+item.id">{{item.no}}</a>
</ng-template>
<ng-template st-row="orderSn" let-item let-index="index">
<div>待发车 (<span [ngStyle]="{ color:index>0?'#1890FF':''}">0</span>)</div>
<div>运输中 (<span [ngStyle]="{ color:index>0?'#1890FF':''}">0</span>)</div>
<div>待签收 (<span [ngStyle]="{ color:index>0?'#1890FF':''}">0</span>)</div>
<div>已完成 (<span [ngStyle]="{ color:index>0?'#1890FF':''}">0</span>)</div>
<div>已取消 (<span [ngStyle]="{ color:index>0?'#1890FF':''}">0</span>)</div>
</ng-template>
<ng-template st-row="goodsInfo" let-item let-index="index">
<div>{{item.owner}}</div>
<div>货源:{{item.progress}} 顿 / {{item.progress}} 方</div>
<div class="error">剩余: {{item.progress}} 顿 / {{item.progress}} 方</div>
</ng-template>
<ng-template st-row="demand" let-item let-index="index">
<div>车型: {{item.progress}}</div>
<div class="error">车长: {{item.progress}} 米</div>
</ng-template>
<ng-template st-row="price" let-item let-index="index">
<div>{{item.progress}} 元/顿</div>
</ng-template>
<ng-template st-row="cMember" let-item let-index="index">
<div>{{item.owner}}</div>
<div>{{item.mobile}}</div>
</ng-template>
<ng-template st-row="dispatcher" let-item let-index="index">
<div>{{item.owner}}</div>
<div>{{item.mobile}}</div>
</ng-template>
</st>
</div>
</nz-card>
<nz-modal [(nzVisible)]="isVisible" [nzFooter]="nzModalFooter" nzTitle="货源审核" (nzOnOk)="handleOK()" (nzOnCancel)="handleCancel('suppliersType')">
<ng-container *nzModalContent>
<div style="position: relative" *ngIf="auditMany">
<nz-alert
nzType="info"
[nzMessage]="'已选择' + 6 + ''"
nzShowIcon
[ngStyle]="{ margin: '0 0 1rem 0' }"
>
</nz-alert>
</div>
<sf #sfFre [schema]="freightSchema" [ui]="ui2" [compact]="false" [button]="'none'">
</sf>
</ng-container>
<ng-template #nzModalFooter>
<button nz-button nzType="primary" (click)="handleOK()" [disabled]="">通过</button>
<button nz-button nzType="default" (click)="handleCancel('suppliersType')">不通过</button>
</ng-template>
</nz-modal>
<ng-template #extraTemplate>
<div>
<button (click)="audit('',2)" nz-button nzType="primary">批量审核</button>
<button (click)="audit('')" nz-button nzType="primary">发布货源</button>
</div>
</ng-template>

View File

@ -0,0 +1,24 @@
import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
import { SupplyManagementBulkComponent } from './bulk.component';
describe('SupplyManagementBulkComponent', () => {
let component: SupplyManagementBulkComponent;
let fixture: ComponentFixture<SupplyManagementBulkComponent>;
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [ SupplyManagementBulkComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(SupplyManagementBulkComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,338 @@
import { Component, OnInit, ViewChild } from '@angular/core';
import { STColumn, STComponent } from '@delon/abc/st';
import { SFComponent, SFSchema, SFSelectWidgetSchema, SFUISchema } from '@delon/form';
import { ModalHelper, _HttpClient } from '@delon/theme';
import { NzModalService } from 'ng-zorro-antd/modal';
import { map } from 'rxjs/operators';
import { SupplyManagementService } from '../../services/supply-management.service';
import { SupplyManagementQrcodePageComponent } from '../qrcode-page/qrcode-page.component';
import { SupplyManagementUpdatePriceComponent } from '../update-price/update-price.component';
@Component({
selector: 'app-supply-management-bulk',
templateUrl: './bulk.component.html',
})
export class SupplyManagementBulkComponent implements OnInit {
url = `/user?_allow_anonymous=true`;
ui: SFUISchema = {};
ui2: SFUISchema = {};
schema: SFSchema = {};
auditMany = false;
isVisible = false;
_$expand = false;
columns: STColumn[] = [];
freightSchema: SFSchema = {};
@ViewChild('st') private readonly st!: STComponent;
@ViewChild('sf', { static: false }) sf!: SFComponent;
@ViewChild('sfFre', { static: false }) sfFre!: SFComponent;
tabs = [ {
name: '全部',
type: 5,
count: 0,
},
{
name: '待接单',
type: 5,
count: 0,
},
{
name: '已接单',
type: 5,
count: 0,
},
{
name: '已取消',
type: 5,
count: 0,
},
];
constructor(public service: SupplyManagementService, private modal: NzModalService) { }
ngOnInit(): void {
this.initSF();
this.initST();
this.initSFFre();
}
/**
* 初始化查询表单
*/
initSF() {
this.schema = {
properties: {
_$expand: { type: 'boolean', ui: { hidden: true } },
no: {
type: 'string',
title: '货源编号'
},
no2: {
type: 'string',
title: '装货地'
},
no1: {
type: 'string',
title: '卸货地'
},
sex: {
title: '货物类型',
type: 'string',
default: 0,
enum: [
{ label: '未知', value: 0 },
{ label: '男', value: 1 },
{ label: '女', value: 2 },
{ label: '保密', value: 3 },
],
ui: {
widget: 'select',
visibleIf: {
_$expand: (value: boolean) => value,
},
} as SFSelectWidgetSchema,
},
appId: {
type: 'string',
title: '录单员',
ui: {
widget: 'select',
placeholder: '请选择',
visibleIf: {
_$expand: (value: boolean) => value,
},
allowClear: true,
asyncData: () => this.getCatalogueMember(),
},
},
},
type: 'object',
};
this.ui = { '*': { spanLabelFixed: 80, grid: { span: 8, gutter: 4 } } };
}
initSFFre() {
this.freightSchema = {
properties: {
roleDescription: {
title: '备注',
type: 'string',
maxLength: 50,
ui: {
placeholder: '请输入备注',
widget: 'textarea',
},
},
}
};
this.ui2 = { '*': { spanLabelFixed: 120, grid: { span: 24 } } };
}
/**
* 初始化数据列表
*/
initST() {
this.columns = [
{ title: '', type: 'checkbox', width: '50px', className: 'text-center' },
{
title: '货源编号',
width: '100px',
className: 'text-center',
render: 'goodsId'
},
{ title: '服务类型', index: 'linkUrl', width: '120px', className: 'text-center' },
{ title: '货主', index: 'linkUrl', width: '120px', className: 'text-center' },
{ title: '项目名称', index: 'linkUrl', width: '120px', className: 'text-center' },
{ title: '关联订单', render: 'orderSn', width: '120px', className: 'text-center' },
{ title: '货物信息', render: 'goodsInfo', width: '180px', className: 'text-center' },
{
title: '装货地',
className: 'text-center',
width: '120px',
}, {
title: '卸货地',
className: 'text-center',
width: '120px',
},
{
title: '用车需求',
className: 'text-center',
width: '150px',
render: 'demand'
},
{
title: '运费单价',
className: 'text-center',
width: '150px',
},
{
title: '结算依据',
className: 'text-center',
width: '120px',
},
{
title: '货源状态',
className: 'text-center',
index: 'enStatusStr2',
type: 'badge',
badge: {
: { text: '正常', color: 'success' },
: { text: '冻结', color: 'warning' },
: { text: '废弃', color: 'default' },
},
},
{
title: '截止时间',
width: '170px',
className: 'text-center',
},
{
title: '发布时间',
width: '170px',
className: 'text-center',
},
{
title: '审核状态',
className: 'text-center',
index: 'enStatusStr3',
type: 'badge',
badge: {
: { text: '正常', color: 'success' },
: { text: '冻结', color: 'warning' },
: { text: '废弃', color: 'default' },
},
},
{
title: '操作',
fixed: 'right',
width: '200px',
className: 'text-center',
buttons: [
{
text: '货源审核',
click: (_record) => this.audit(_record, 1),
},
{
text: '二维码',
click: (_record) => this.assignedQrcode(_record),
},
{
text: '修改单价',
click: (_record) => this.updatePrice(_record),
},
{
text: '取消货源',
// click: (_record) => this.delOne(_record),
},
{
text: '再下一单',
// click: (_record) => this.editOne(_record),
},
{
text: '重新指派',
// click: (_record) => this.delOne(_record),
},
],
},
];
}
add(): void {
// this.modal
// .createStatic(FormEditComponent, { i: { id: 0 } })
// .subscribe(() => this.st.reload());
}
/**
* 查询字段个数
*/
get queryFieldCount(): number {
return Object.keys(this.schema?.properties || {}).length;
}
/**
* 伸缩查询条件
*/
expandToggle(): void {
this._$expand = !this._$expand;
this.sf?.setValue('/_$expand', this._$expand);
}
/**
* 重置表单
*/
resetSF(): void {
this.sf.reset();
this._$expand = false;
}
get selectedRows() {
return this.st?.list.filter((item) => item.checked) || [];
}
// 获取录单员
getCatalogueMember() {
const params = {
};
return this.service.request(this.service.$api_get_catalogue_member, params, 'GET').pipe(
map((res) => {
if (res) {
console.log(res)
}
}),
);
}
selectChange(e: number) {
}
/**
* 更新运费
*/
updatePrice(item: any) {
const modalRef = this.modal.create({
nzTitle: '修改单价',
nzWidth: '600px',
nzContent: SupplyManagementUpdatePriceComponent,
nzComponentParams: {
i: item,
},
nzFooter: null,
});
}
/**
* 二维码
*/
assignedQrcode(item: any) {
const modalRef = this.modal.create({
nzTitle: '二维码',
nzWidth: '600px',
nzContent: SupplyManagementQrcodePageComponent,
nzComponentParams: {
i: item,
},
nzFooter: null,
});
}
tabChange(item: any) {
console.log(item)
}
/**
* 审核
*/
audit(value: any, status?: any) {
console.log(value)
console.log(status)
if(status === 2) {
this.auditMany = true;
} else {
this.auditMany = false;
}
this.isVisible = true;
}
/**
* 审核关闭弹窗
*/
handleCancel(type: any) {
this.isVisible = false
}
/**
* 审核通过按钮
*/
handleOK() {
}
}

View File

@ -0,0 +1,25 @@
<page-header-wrapper title="货源管理" [tab]="tpTab">
</page-header-wrapper>
<!-- <ng-template #headerTemplate>
<div>
<nz-tabset [(nzSelectedIndex)]="selectedIndex">
<nz-tab nzTitle="整车货源">
<app-supply-management-vehicle></app-supply-management-vehicle>
</nz-tab>
<nz-tab nzTitle="大宗货源">
<app-supply-management-bulk></app-supply-management-bulk>
</nz-tab>
</nz-tabset>
</div>
</ng-template> -->
<ng-template #tpTab>
<nz-tabset [(nzSelectedIndex)]="selectedIndex">
<nz-tab nzTitle="整车货源">
<app-supply-management-vehicle></app-supply-management-vehicle>
</nz-tab>
<nz-tab nzTitle="大宗货源">
<app-supply-management-bulk></app-supply-management-bulk>
</nz-tab>
</nz-tabset>
</ng-template>

View File

@ -0,0 +1,24 @@
import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
import { SupplyManagementIndexComponent } from './index.component';
describe('SupplyManagementIndexComponent', () => {
let component: SupplyManagementIndexComponent;
let fixture: ComponentFixture<SupplyManagementIndexComponent>;
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [ SupplyManagementIndexComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(SupplyManagementIndexComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,18 @@
import { Component, OnInit, ViewChild } from '@angular/core';
import { STColumn, STComponent } from '@delon/abc/st';
import { SFSchema } from '@delon/form';
import { ModalHelper, _HttpClient } from '@delon/theme';
@Component({
selector: 'app-supply-management-index',
templateUrl: './index.component.html',
})
export class SupplyManagementIndexComponent implements OnInit {
selectedIndex = 0;
constructor(private http: _HttpClient, private modal: ModalHelper) { }
ngOnInit(): void { }
}

View File

@ -0,0 +1,14 @@
<nz-spin *ngIf="!i" class="modal-spin"></nz-spin>
<div style="width: 60%;margin: 0 auto;">
<div class="">
<h2>公司名称:{{i.companyName}}</h2>
<qr [value]="i.id" #qr></qr>
<div>卸货地:{{i.adddress}}</div>
<div>装货地:{{i.adddress}}</div>
<div>截止时间:{{i.createdAt}}</div>
<div>Tips:二维码用于司机扫码抢单</div>
</div>
<div class="modal-footer text-center">
<button nz-button type="submit" nzType="primary" (click)="downLoadQrcode('二维码')">下载二维码</button>
</div>
</div>

View File

@ -0,0 +1,24 @@
import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
import { SupplyManagementQrcodePageComponent } from './qrcode-page.component';
describe('SupplyManagementQrcodePageComponent', () => {
let component: SupplyManagementQrcodePageComponent;
let fixture: ComponentFixture<SupplyManagementQrcodePageComponent>;
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [ SupplyManagementQrcodePageComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(SupplyManagementQrcodePageComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,85 @@
import { THIS_EXPR } from '@angular/compiler/src/output/output_ast';
import { Component, OnInit, ViewChild } from '@angular/core';
import { QRComponent } from '@delon/abc/qr';
import { SFSchema, SFUISchema } from '@delon/form';
import { _HttpClient } from '@delon/theme';
import { NzMessageService } from 'ng-zorro-antd/message';
import { NzModalRef } from 'ng-zorro-antd/modal';
@Component({
selector: 'app-supply-management-qrcode-page',
templateUrl: './qrcode-page.component.html',
})
export class SupplyManagementQrcodePageComponent implements OnInit {
@ViewChild('qr') qr!: QRComponent;
record: any = {};
i: any;
schema: SFSchema = {
properties: {
no: { type: 'string', title: '编号' },
owner: { type: 'string', title: '姓名', maxLength: 15 },
callNo: { type: 'number', title: '调用次数' },
href: { type: 'string', title: '链接', format: 'uri' },
description: { type: 'string', title: '描述', maxLength: 140 },
},
required: ['owner', 'callNo', 'href', 'description'],
};
ui: SFUISchema = {
'*': {
spanLabelFixed: 100,
grid: { span: 12 },
},
$no: {
widget: 'text'
},
$href: {
widget: 'string',
},
$description: {
widget: 'textarea',
grid: { span: 24 },
},
};
constructor(
private modal: NzModalRef,
private msgSrv: NzMessageService,
public http: _HttpClient,
) { }
ngOnInit(): void {
if (this.record.id > 0)
this.http.get(`/user/${this.record.id}`).subscribe(res => (this.i = res));
}
downLoadQrcode(downloadName: any): void {
let aLink = document.createElement('a');
const content = this.qr.dataURL;
let blob = this.base64ToBlob(content); //new Blob([content]);
let evt = document.createEvent("HTMLEvents");
evt.initEvent("click", true, true);//initEvent 不加后两个参数在IE下会报错 事件类型,是否冒泡,是否阻止浏览器的默认行为
aLink.download = downloadName;
aLink.href = URL.createObjectURL(blob);
// aLink.dispatchEvent(evt);
aLink.click()
}
//base64转blob
base64ToBlob(code: any) {
let parts = code.split(';base64,');
let contentType = parts[0].split(':')[1];
let raw = window.atob(parts[1]);
let rawLength = raw.length;
let uInt8Array = new Uint8Array(rawLength);
for (let i = 0; i < rawLength; ++i) {
uInt8Array[i] = raw.charCodeAt(i);
}
return new Blob([uInt8Array], { type: contentType });
}
close(): void {
this.modal.destroy();
}
}

View File

@ -0,0 +1,10 @@
<nz-spin *ngIf="!orderObject" class="modal-spin"></nz-spin>
<div class="mb-md">编辑外部货源号</div>
<sf *ngIf="orderObject" #sf mode="edit" layout="horizontal" [schema]="schema" [ui]="ui" [formData]="orderObject"
button="none">
<div class="modal-footer">
<button nz-button type="button" (click)="close()">取消</button>
<button nz-button type="submit" nzType="primary" (click)="save(sf.value)" [disabled]="!sf.valid"
[nzLoading]="service.http.loading">确定</button>
</div>
</sf>

View File

@ -0,0 +1,24 @@
import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
import { SupplyManagementUpdateExternalSnComponent } from './update-external-sn.component';
describe('SupplyManagementUpdateExternalSnComponent', () => {
let component: SupplyManagementUpdateExternalSnComponent;
let fixture: ComponentFixture<SupplyManagementUpdateExternalSnComponent>;
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [ SupplyManagementUpdateExternalSnComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(SupplyManagementUpdateExternalSnComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,55 @@
import { Component, OnInit } from '@angular/core';
import { SFSchema, SFUISchema } from '@delon/form';
import { _HttpClient } from '@delon/theme';
import { NzMessageService } from 'ng-zorro-antd/message';
import { NzModalRef } from 'ng-zorro-antd/modal';
import { SupplyManagementService } from '../../services/supply-management.service';
@Component({
selector: 'app-supply-management-update-external-sn',
templateUrl: './update-external-sn.component.html',
})
export class SupplyManagementUpdateExternalSnComponent implements OnInit {
record: any = {};
orderObject: any;
schema: SFSchema = {
properties: {
owner: {
type: 'string',
maxLength: 30,
title: '',
ui: {
placeholder: '不超过30位'
}
},
},
required: ['owner'],
};
ui: SFUISchema = {
'*': {
spanControl: 24
},
};
constructor(
private modal: NzModalRef,
private msgSrv: NzMessageService,
public service: SupplyManagementService
) { }
ngOnInit(): void {
}
save(value: any): void {
const { id, sn } = value;
this.service.request(`/user/${this.record.id}`, { id, sn }).subscribe(res => {
this.msgSrv.success('保存成功');
this.modal.close(true);
});
}
close(): void {
this.modal.destroy();
}
}

View File

@ -0,0 +1,15 @@
<nz-spin *ngIf="!i" class="modal-spin"></nz-spin>
<sf *ngIf="i" #sf mode="edit" [schema]="schema" [ui]="ui" [formData]="i" button="none">
<ng-template sf-template="description3" let-me let-ui="ui" let-schema="schema">
<input placeholder="请输入1-30" type="number" [ngModel]="sf.value.description3" style="width: 200px;" nz-input />
<span> 天内支付运费</span>
</ng-template>
<ng-template sf-template="description1" let-me let-ui="ui" let-schema="schema">
<div>{{sf.value.description1 | currency: 'CNY' }}(费率:<a>5.3%</a>)</div>
</ng-template>
<div class="modal-footer">
<button nz-button type="button" (click)="close()">关闭</button>
<button nz-button type="submit" nzType="primary" (click)="save(sf.value)" [disabled]="!sf.valid"
[nzLoading]="http.loading">确认修改</button>
</div>
</sf>

View File

@ -0,0 +1,24 @@
import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
import { SupplyManagementUpdateFreightComponent } from './update-freight.component';
describe('SupplyManagementUpdateFreightComponent', () => {
let component: SupplyManagementUpdateFreightComponent;
let fixture: ComponentFixture<SupplyManagementUpdateFreightComponent>;
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [ SupplyManagementUpdateFreightComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(SupplyManagementUpdateFreightComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,140 @@
import { Component, OnInit } from '@angular/core';
import { SFCustomWidgetSchema, SFNumberWidgetSchema, SFRadioWidgetSchema, SFSchema, SFUISchema } from '@delon/form';
import { _HttpClient } from '@delon/theme';
import { NzMessageService } from 'ng-zorro-antd/message';
import { NzModalRef } from 'ng-zorro-antd/modal';
@Component({
selector: 'app-supply-management-update-freight',
templateUrl: './update-freight.component.html',
})
export class SupplyManagementUpdateFreightComponent implements OnInit {
record: any = {};
i: any;
schema: SFSchema = {};
ui: SFUISchema = {};
constructor(
private modal: NzModalRef,
private msgSrv: NzMessageService,
public http: _HttpClient,
) { }
ngOnInit(): void {
this.initSF();
if (this.record.id > 0)
this.http.get(`/user/${this.record.id}`).subscribe(res => (this.i = res));
}
initSF() {
this.schema = {
properties: {
no1: {
type: 'string',
title: '是否回单',
enum: [
{ label: '需要', value: 0 },
{ label: '不需要', value: 1 },
],
ui: {
widget: 'radio'
} as SFRadioWidgetSchema,
default: 0
},
owner1: {
type: 'number',
title: '预付',
max: 99999999,
ui: {
prefix: '¥',
widgetWidth: 200,
precision: 2,
change: (val: any) => this.changeNumVal(val, 1)
} as SFNumberWidgetSchema
},
callNo1: {
type: 'number',
title: '到付',
ui: {
prefix: '¥',
widgetWidth: 200,
precision: 2,
change: (val: any) => this.changeNumVal(val, 2)
} as SFNumberWidgetSchema
},
href1: {
type: 'number',
title: '油卡',
ui: {
prefix: '¥',
widgetWidth: 200,
precision: 2,
change: (val: any) => this.changeNumVal(val, 3)
} as SFNumberWidgetSchema
},
description5: {
type: 'number', title: '回单付', maxLength: 140, ui: {
prefix: '¥',
widgetWidth: 200,
precision: 2,
change: (val: any) => this.changeNumVal(val, 4)
} as SFNumberWidgetSchema
},
href2: {
type: 'string',
title: '小计',
ui: {
widget: 'text'
}
},
description1: {
type: 'string',
title: '附加费',
ui: {
widget: 'custom'
}
},
description2: {
type: 'string',
title: '总费用',
ui: {
widget: 'text'
}
},
description3: {
type: 'number',
title: '到货后',
maximum: 30,
minimum: 1,
ui: {
widget: 'custom',
} as SFCustomWidgetSchema
},
},
required: ['owner', 'callNo', 'href', 'description'],
};
this.ui = {
'*': {
spanLabelFixed: 100,
grid: { span: 16 },
},
};
}
save(value: any): void {
this.http.post(`/user/${this.record.id}`, value).subscribe(res => {
this.msgSrv.success('保存成功');
this.modal.close(true);
});
}
close(): void {
this.modal.destroy();
}
/**
* 更新数字框
* @param value
* @param type
*/
changeNumVal(value: any, type: number) {
}
}

View File

@ -0,0 +1,24 @@
<div class="mb-lg">
<nz-spin *ngIf="!i" class="modal-spin"></nz-spin>
<sf *ngIf="i" #sf mode="edit" [schema]="schema" [ui]="ui" [formData]="i" button="none">
<ng-template sf-template="description3" let-me let-ui="ui" let-schema="schema">
<input [max]="99999999" placeholder="请输入" type="number" [ngModel]="me.value" style="width: 200px;" nz-input />
<span> 元/吨</span>
</ng-template>
<div class="modal-footer text-center">
<button nz-button type="button" (click)="close()">取消</button>
<button nz-button type="submit" nzType="primary" (click)="save(sf.value)" [disabled]="!sf.valid"
[nzLoading]="service.http.loading">确定</button>
</div>
</sf>
</div>
<div>
<h4>变更日志</h4>
<st #st [data]="service.$api_get_catalogue_member" [bordered]="true" [columns]="columns" [page]="{show:false}">
<ng-template st-row="operator" let-item let-index="index">
<div>黎日湛</div>
<div>18811112222</div>
</ng-template>
</st>
</div>

View File

@ -0,0 +1,24 @@
import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
import { SupplyManagementUpdatePriceComponent } from './update-price.component';
describe('SupplyManagementUpdatePriceComponent', () => {
let component: SupplyManagementUpdatePriceComponent;
let fixture: ComponentFixture<SupplyManagementUpdatePriceComponent>;
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [ SupplyManagementUpdatePriceComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(SupplyManagementUpdatePriceComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,99 @@
import { Component, OnInit, ViewChild } from '@angular/core';
import { STColumn } from '@delon/abc/st';
import { SFComponent, SFSchema, SFUISchema } from '@delon/form';
import { _HttpClient } from '@delon/theme';
import { NzMessageService } from 'ng-zorro-antd/message';
import { NzModalRef } from 'ng-zorro-antd/modal';
import { SupplyManagementService } from '../../services/supply-management.service';
@Component({
selector: 'app-supply-management-update-price',
templateUrl: './update-price.component.html',
})
export class SupplyManagementUpdatePriceComponent implements OnInit {
record: any = {};
i: any;
schema: SFSchema = {};
ui: SFUISchema = {};
columns: STColumn[] = [];
@ViewChild('sf', { static: false }) sf!: SFComponent;
constructor(
private modal: NzModalRef,
private msgSrv: NzMessageService,
public service: SupplyManagementService
) { }
ngOnInit(): void {
this.initSF();
this.initSt();
if (this.record.id > 0)
this.service.request(`/user/${this.record.id}`).subscribe(res => (this.i = res));
}
initSF() {
this.schema = {
properties: {
no1: {
type: 'string',
title: '货源编号',
ui: {
widget: 'text'
},
default: 0
},
description3: {
type: 'string',
title: '运费单价',
ui: {
widget: 'custom'
}
},
description1: {
type: 'string',
title: '取整规则',
enum: [
{ label: '保留小数', value: 0 },
{ label: '抹除小数', value: 1 },
{ label: '抹除个位', value: 2 },
],
default: 0,
ui: {
widget: 'select',
optionalHelp: {
text: '例如:付司机运费 = 重量*单价 = 999.99; 保留小数:即 999.99; 抹除小数:即 999.00; 抹除个位,即 990.00',
}
}
},
},
required: ['owner', 'callNo', 'description1', 'description3'],
};
this.ui = {
'*': {
spanLabelFixed: 100,
grid: { span: 16 },
},
};
}
/**
* 初始化数据列表
*/
initSt() {
this.columns = [
{ title: '日志内容', width: 120, index: 'owner', className: 'text-center' },
{ title: '更新时间', index: 'goodsQuantity', width: 100, className: 'text-center' },
{ title: '操作人', width: 100, render: 'operator', className: 'text-center' },
];
}
save(value: any): void {
this.service.request(`/user/${this.record.id}`, value).subscribe(res => {
this.msgSrv.success('保存成功');
this.modal.close(true);
});
}
close(): void {
this.modal.destroy();
}
}

View File

@ -0,0 +1,102 @@
<page-header-wrapper [title]="''" [logo]="logo">
<ng-template #logo>
<button nz-button nz-tooltip nzTooltipTitle="返回上一页" (click)="goBack()">
<i nz-icon nzType="left" nzTheme="outline"></i>
</button>
</ng-template>
</page-header-wrapper>
<nz-card>
<nz-spin *ngIf="!i" class="modal-spin"></nz-spin>
<div nz-row>
<div nz-col nzSpan="4">
<sv-container class="bdr">
<sv label="货源编号" col="1">{{ i?.no }}</sv>
<sv-title class="text-center text-lg">待接单</sv-title>
<sv-title>
<div class="">
<a class="btn-size">修改单价</a>
<a class="btn-size m-lg mr-lg">取消货源</a>
<a class="btn-size">再下一单</a>
</div>
</sv-title>
</sv-container>
</div>
<div nz-col nzSpan="16" class="approval-status">
<nz-steps style="width: 80%; margin: 0 auto" [nzLabelPlacement]="'vertical'">
<nz-step nzStatus="finish" nzIcon="user" [nzDescription]="i?.createAt" nzTitle="下单"></nz-step>
<nz-step nzStatus="finish" nzIcon="solution" nzTitle="完结"></nz-step>
</nz-steps>
</div>
</div>
<nz-divider></nz-divider>
<div sv-container *ngIf="i">
<sv label="外部货源号">{{ i?.owner }}</sv>
<sv label="项目名称">32943898021309809423</sv>
<sv label="服务类型">3321944288191034921</sv>
<sv label="录单员">18112345678</sv>
<sv label="调度员">曲丽丽 18100000000 </sv>
<sv label="承诺付款时间">曲丽丽 18100000000 </sv>
</div>
<nz-divider></nz-divider>
<div nz-row>
<div nz-col nzSpan="6">
<div class="source-info">
<h3>装卸货信息</h3>
<p>装货地:广东省深圳市龙岗区怡亚通大厦</p>
<p>联系人:奥利给/13680058545</p>
<p>卸货地广东省深圳市福田区岗厦村9巷8号405新村</p>
<p>联系人:花花世界/13680058545</p>
<p>发货日期广东省深圳市福田区岗厦村9巷8号405新村</p>
<p>卸货日期:花花世界/13680058545</p>
</div>
</div>
<div nz-col nzSpan="6">
<div class="source-info bdr bdl pl-md">
<h3>货物信息</h3>
<p>货物名称:广东省深圳市龙岗区怡亚通大厦</p>
<p>重量/体积广东省深圳市福田区岗厦村9巷8号405新村</p>
<p>车型/车长:花花世界/13680058545</p>
</div>
</div>
<div nz-col nzSpan="6">
<div class="source-info bdr pl-md">
<h3>承运信息</h3>
<p>司机:广东省深圳市龙岗区怡亚通大厦</p>
<p>车牌号广东省深圳市福田区岗厦村9巷8号405新村</p>
<p>车型/车长/承重:{{'拖车'}} | {{'4.5米'}} | {{'15吨'}}</p>
</div>
</div>
<div class="source-info pl-md">
<h3>补充信息</h3>
<p>需要回单</p>
<p>备注:奥利给/13680058545</p>
</div>
</div>
<nz-divider></nz-divider>
<div nz-row>
<div class="freight-info-box">
<h3>运费信息</h3>
<div class="text-right">
<p><label class="freigth-label">预付:</label><span>{{400 | currency }}</span></p>
<p><label class="freigth-label">油卡:</label><span>{{400 | currency }}</span></p>
<p><label class="freigth-label">到付:</label><span>{{400 | currency }}</span></p>
<p><label class="freigth-label">回单付:</label><span>{{400 | currency}}</span></p>
<p><label class="freigth-label">附加费:</label><span>{{400 | currency }}</span></p>
</div>
</div>
<nz-divider></nz-divider>
<div class="freight-info-box" nz-row>
<div nz-col nzSpan="24">
<h3 class="text-right"><label>总计 :</label> <span class="text-error-dark text-xl">{{400 | currency }}</span></h3>
</div>
</div>
</div>
<nz-divider></nz-divider>
<div nz-row>
<nz-card nzTitle="操作日志" style="width: 100%;">
<st #st [data]="i?.auditRecordList" [columns]="logColumns" [ps]="0" [page]="{ show: false, showSize: false }">
</st>
</nz-card>
</div>
</nz-card>

View File

@ -0,0 +1,37 @@
:host{
.btn-size{
font-size: 14px;
}
.bdr{
border-right: 1px solid #ccc;
}
.bdl{
border-left: 1px solid #ccc;
}
.title{
font-size: 26;
font-weight: bold;
}
.source-info{
p{
margin-bottom: .5em;
}
}
.freight-info-box{
width: 95%;
}
.freigth-label{
display: inline-block;
width: 50px;
text-align: right;
}
::ng-deep{
.approval-status{
.ant-steps{
width: 70%;
margin: 0 auto;
}
}
}
}

View File

@ -0,0 +1,24 @@
import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
import { SupplyManagementVehicleDetailComponent } from './vehicle-detail.component';
describe('SupplyManagementVehicleDetailComponent', () => {
let component: SupplyManagementVehicleDetailComponent;
let fixture: ComponentFixture<SupplyManagementVehicleDetailComponent>;
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [ SupplyManagementVehicleDetailComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(SupplyManagementVehicleDetailComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,45 @@
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { STColumn } from '@delon/abc/st';
import { _HttpClient } from '@delon/theme';
import { NzMessageService } from 'ng-zorro-antd/message';
import { SupplyManagementService } from '../../services/supply-management.service';
@Component({
selector: 'app-supply-management-vehicle-detail',
templateUrl: './vehicle-detail.component.html',
styleUrls: ['./vehicle-detail.component.less']
})
export class SupplyManagementVehicleDetailComponent implements OnInit {
id = this.route.snapshot.params.id;
i: any;
logColumns: STColumn[] = [
{ title: '内容', index: 'theme' },
{ title: '操作人', index: 'operationUserPhone' },
{ title: '操作时间', index: ' createTime' },
];
constructor(
private route: ActivatedRoute,
private msgSrv: NzMessageService,
private service: SupplyManagementService,
) {
}
ngOnInit(): void {
this.service.http.get(`/user/${this.id}?_allow_anonymous=true&_allow_badcode=true`).subscribe(res => {
console.log(res);
this.i = res
});
}
goBack() {
window.history.go(-1);
}
}

View File

@ -0,0 +1,108 @@
<!--
* @Author: your name
* @Date: 2021-12-03 11:10:14
* @LastEditTime: 2021-12-03 14:51:38
* @LastEditors: Please set LastEditors
* @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
* @FilePath: \tms-obc-web\src\app\routes\supply-management\components\vehicle\vehicle.component.html
-->
<!-- 搜索表单 -->
<nz-card>
<div nz-row nzGutter="8">
<!-- 查询字段小于或等于3个时不显示伸缩按钮 -->
<div nz-col nzSpan="24" *ngIf="queryFieldCount <= 4">
<sf #sf [schema]="schema" [ui]="ui" [mode]="'search'" [disabled]="!sf?.valid" [loading]="service.http.loading"
(formSubmit)="st?.load(1)" (formReset)="resetSF()"></sf>
</div>
<!-- 查询字段大于3个时根据展开状态调整布局 -->
<ng-container *ngIf="queryFieldCount > 4">
<div nz-col [nzSpan]="_$expand ? 24 : 18">
<sf #sf [schema]="schema" [ui]="ui" [compact]="true" [button]="'none'"></sf>
</div>
<div nz-col [nzSpan]="_$expand ? 24 : 6" [class.text-right]="_$expand">
<button nz-button nzType="primary" [disabled]="!sf.valid" [nzLoading]="service.http.loading"
(click)="st?.load(1)">查询</button>
<button nz-button nzType="primary"
>导出</button>
<button nz-button (click)="resetSF()">重置</button>
<button nz-button nzType="link" (click)="expandToggle()">
{{ !_$expand ? '展开' : '收起' }}
<i nz-icon [nzType]="!_$expand ? 'down' : 'up'"></i>
</button>
</div>
</ng-container>
</div>
</nz-card>
<nz-card>
<nz-tabset (nzSelectedIndexChange)="selectChange($event)" [nzTabBarExtraContent]="extraTemplate">
<nz-tab *ngFor="let tab of tabs; let i = index" [nzTitle]="tab.name + ' (' + tab.count + ') '" (nzClick)="tabChange(i)">
</nz-tab>
</nz-tabset>
<div style="margin-top: 15px;">
<!-- [req]="{ method: 'GET', allInBody: true, reName: { pi: 'pageIndex', ps: 'pageSize' }, params: reqParams }"
[res]="{ reName: { list: 'data.records', total: 'data.total' } }"
[page]="{ show: true, showSize: true, pageSizes: [10, 20, 30, 50, 100, 200, 300, 500, 1000] }"
[loadingDelay]="500" [loading]="service.http.loading" -->
<!-- 选中提示框 -->
<div style="position: relative">
<nz-alert
nzType="info"
[nzMessage]="'当前共' + st?.total + '行记录已选择' + selectedRows.length + ''"
nzShowIcon
[ngStyle]="{ margin: '0 0 1rem 0' }"
>
</nz-alert>
</div>
<st #st [scroll]="{ x: '1200px' }" [data]="service.$api_get_catalogue_member" [columns]="columns">
<ng-template st-row="goodsId" let-item let-index="index">
<a [routerLink]="'/supply-management/vehicle-detail/'+item.id">{{item.no}}</a>
</ng-template>
<!-- <ng-template st-row="externalSn" let-item let-index="index">
<span class="mr-xs">{{111111}}</span>
<a (click)="editEnternalSn(item)">编辑</a>
</ng-template> -->
<ng-template st-row="enStatusStr27878" let-item let-index="index">
<div class="mr-xs" nzPopoverTitle="Title" nz-popover [nzPopoverContent]="contentTemplate">{{item.no}}</div>
</ng-template>
<ng-template #contentTemplate>
<div>
<p>预付¥200.00</p>
<p>到付¥200.00</p>
<p>油卡¥200.00</p>
<p>回单付¥200.00</p>
<p>小计¥200.00</p>
<p>附加费¥200.00</p>
</div>
</ng-template>
</st>
</div>
</nz-card>
<ng-template #extraTemplate>
<div>
<button (click)="audit('',2)" nz-button nzType="primary">批量审核</button>
<button (click)="importGoodsSource()" nz-button nzType="primary">发布货源</button>
<button (click)="importGoodsSource()" nz-button nzType="primary">导入货源</button>
</div>
</ng-template>
<nz-modal [(nzVisible)]="isVisible" [nzFooter]="nzModalFooter" nzTitle="货源审核" (nzOnOk)="handleOK()" (nzOnCancel)="handleCancel('suppliersType')">
<ng-container *nzModalContent>
<div style="position: relative" *ngIf="auditMany">
<nz-alert
nzType="info"
[nzMessage]="'已选择' + 6 + ''"
nzShowIcon
[ngStyle]="{ margin: '0 0 1rem 0' }"
>
</nz-alert>
</div>
<sf #sfFre [schema]="freightSchema" [ui]="ui2" [compact]="false" [button]="'none'">
</sf>
</ng-container>
<ng-template #nzModalFooter>
<button nz-button nzType="primary" (click)="handleOK()" [disabled]="">通过</button>
<button nz-button nzType="default" (click)="handleCancel('suppliersType')">不通过</button>
</ng-template>
</nz-modal>

View File

@ -0,0 +1,2 @@
:host {
}

View File

@ -0,0 +1,24 @@
import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
import { SupplyManagementVehicleComponent } from './vehicle.component';
describe('SupplyManagementVehicleComponent', () => {
let component: SupplyManagementVehicleComponent;
let fixture: ComponentFixture<SupplyManagementVehicleComponent>;
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [ SupplyManagementVehicleComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(SupplyManagementVehicleComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,383 @@
import { Component, OnInit, ViewChild } from '@angular/core';
import { STColumn, STComponent } from '@delon/abc/st';
import { SFComponent, SFSchema, SFSelectWidgetSchema, SFUISchema } from '@delon/form';
import { ModalHelper, _HttpClient } from '@delon/theme';
import { NzModalService } from 'ng-zorro-antd/modal';
import { map } from 'rxjs/operators';
import { SupplyManagementService } from '../../services/supply-management.service';
import { SupplyManagementAssignedCarComponent } from '../assigned-car/assigned-car.component';
import { SupplyManagementUpdateExternalSnComponent } from '../update-external-sn/update-external-sn.component';
import { SupplyManagementUpdateFreightComponent } from '../update-freight/update-freight.component';
@Component({
selector: 'app-supply-management-vehicle',
templateUrl: './vehicle.component.html',
styleUrls: ['./vehicle.component.less']
})
export class SupplyManagementVehicleComponent implements OnInit {
url = `/user?_allow_anonymous=true`;
ui: SFUISchema = {};
ui2: SFUISchema = {};
schema: SFSchema = {};
freightSchema: SFSchema = {};
auditMany = false;
isVisible = false;
_$expand = false;
@ViewChild('st') private readonly st!: STComponent;
@ViewChild('sf', { static: false }) sf!: SFComponent;
@ViewChild('sfFre', { static: false }) sfFre!: SFComponent;
columns: STColumn[] = [];
tabs = [ {
name: '全部',
type: 5,
count: 0,
},
{
name: '待接单',
type: 5,
count: 0,
},
{
name: '已接单',
type: 5,
count: 0,
},
{
name: '已取消',
type: 5,
count: 0,
},
];
constructor(public service: SupplyManagementService, private modal: NzModalService) { }
/**
* 查询参数
*/
get reqParams() {
return {
...this.sf?.value,
};
}
get selectedRows() {
return this.st?.list.filter((item) => item.checked) || [];
}
ngOnInit(): void {
this.initSF();
this.initST();
this.initSFFre();
}
/**
* 初始化查询表单
*/
initSF() {
this.schema = {
properties: {
_$expand: { type: 'boolean', ui: { hidden: true } },
no: {
type: 'string',
title: '货源编号',
},
no2: {
type: 'string',
title: '装货地'
},
no1: {
type: 'string',
title: '卸货地'
},
sex: {
title: '货物类型',
type: 'string',
default: 0,
enum: [
{ label: '未知', value: 0 },
{ label: '男', value: 1 },
{ label: '女', value: 2 },
{ label: '保密', value: 3 },
],
ui: {
widget: 'select',
visibleIf: {
_$expand: (value: boolean) => value,
},
} as SFSelectWidgetSchema,
},
appId: {
type: 'string',
title: '录单员',
ui: {
widget: 'select',
placeholder: '请选择',
visibleIf: {
_$expand: (value: boolean) => value,
},
allowClear: true,
asyncData: () => this.getCatalogueMember(),
},
},
},
type: 'object',
};
this.ui = { '*': { spanLabelFixed: 80, grid: { span: 8, gutter: 4 } } };
}
initSFFre() {
this.freightSchema = {
properties: {
roleDescription: {
title: '备注',
type: 'string',
maxLength: 50,
ui: {
placeholder: '请输入备注',
widget: 'textarea',
},
},
}
};
this.ui2 = { '*': { spanLabelFixed: 120, grid: { span: 24 } } };
}
/**
* 初始化数据列表
*/
initST() {
this.columns = [
{ title: '', type: 'checkbox', width: '50px', className: 'text-center' },
{
title: '货源编号',
width: '100px',
className: 'text-center',
render: 'goodsId'
},
{ title: '服务类型', index: 'externalSn', width: '120px', className: 'text-center' },
{ title: '货主', index: 'linkUrl', width: '120px', className: 'text-center' },
{
title: '项目名称',
className: 'text-center',
width: '120px',
},
{
title: '装货地',
className: 'text-center',
width: '120px',
}, {
title: '卸货地',
className: 'text-center',
width: '120px',
},
{
title: '货物名称',
className: 'text-center',
width: '120px',
},
{
title: '货物数量',
className: 'text-center',
width: '120px',
},
{
title: '用车需求',
className: 'text-center',
width: '120px',
},
{
title: '总费用',
className: 'text-center',
width: '120px',
index: 'goodsId',
render: 'enStatusStr27878'
},
{
title: '附加费',
className: 'text-center',
width: '120px',
},
{
title: '货源状态',
className: 'text-center',
index: 'enStatusStr2',
type: 'badge',
badge: {
: { text: '正常', color: 'success' },
: { text: '冻结', color: 'warning' },
: { text: '废弃', color: 'default' },
},
},
{
title: '创建时间',
width: '170px',
className: 'text-center',
},
{
title: '审核状态',
className: 'text-center',
index: 'enStatusStr3',
type: 'badge',
badge: {
: { text: '正常', color: 'success' },
: { text: '冻结', color: 'warning' },
: { text: '废弃', color: 'default' },
},
},
{
title: '操作',
fixed: 'right',
width: '200px',
className: 'text-center',
buttons: [
{
text: '货源审核',
click: (_record) => this.audit(_record, 1),
},
{
text: '修改货源',
// click: (_record) => this.editOne(_record),
},
{
text: '修改运费',
click: (_record) => this.updateFreight(_record),
},
{
text: '取消货源',
// click: (_record) => this.delOne(_record),
},
{
text: '再下一单',
// click: (_record) => this.editOne(_record),
},
{
text: '重新指派',
click: (_record) => this.assignedCar(_record),
},
],
},
];
}
add(): void {
// this.modal
// .createStatic(FormEditComponent, { i: { id: 0 } })
// .subscribe(() => this.st.reload());
}
/**
* 查询字段个数
*/
get queryFieldCount(): number {
return Object.keys(this.schema?.properties || {}).length;
}
/**
* 伸缩查询条件
*/
expandToggle(): void {
this._$expand = !this._$expand;
this.sf?.setValue('/_$expand', this._$expand);
}
tabChange(item: any) {
console.log(item)
}
/**
* 重置表单
*/
resetSF(): void {
this.sf.reset();
this._$expand = false;
}
// 获取录单员
getCatalogueMember() {
const params = {
};
return this.service.request(this.service.$api_get_catalogue_member, params, 'GET').pipe(
map((res) => {
if (res) {
console.log(res)
}
}),
);
}
selectChange(e: number) {
console.log(e);
}
/**
* 编辑外部货源号
* @param item st当前行对象
*/
editEnternalSn(item: any) {
const modalRef = this.modal.create({
nzWidth: '400px',
nzContent: SupplyManagementUpdateExternalSnComponent,
nzComponentParams: {
orderObject: item,
},
nzFooter: null,
nzClosable: false
});
}
/**
* 导入货源
*/
importGoodsSource() {
}
/**
* 修改运费
*/
updateFreight(item: any) {
const modalRef = this.modal.create({
nzTitle: '修改运费',
nzWidth: '40%',
nzContent: SupplyManagementUpdateFreightComponent,
nzComponentParams: {
i: item,
},
nzFooter: null,
});
}
/**
* 重新指派
*/
assignedCar(item: any) {
const modalRef = this.modal.create({
nzTitle: '指派熟车',
nzWidth: '800px',
nzContent: SupplyManagementAssignedCarComponent,
nzComponentParams: {
i: item,
},
nzFooter: null,
});
}
/**
* 审核
*/
audit(value: any, status?: any) {
console.log(value)
console.log(status)
if(status === 2) {
this.auditMany = true;
} else {
this.auditMany = false;
}
this.isVisible = true;
}
/**
* 审核关闭弹窗
*/
handleCancel(type: any) {
this.isVisible = false
}
/**
* 审核通过按钮
*/
handleOK() {
}
}

View File

@ -0,0 +1,14 @@
import { Injectable, Injector } from '@angular/core';
import { BaseService } from 'src/app/shared/services';
@Injectable({
providedIn: 'root'
})
export class SupplyManagementService extends BaseService {
$api_get_catalogue_member = `/user?_allow_anonymous=true`;
$api_del_driver = ``;
constructor(public injector: Injector) {
super(injector)
}
}

View File

@ -0,0 +1,20 @@
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { SupplyManagementIndexComponent } from './components/index/index.component';
import { SupplyManagementBulkComponent } from './components/bulk/bulk.component';
import { SupplyManagementVehicleComponent } from './components/vehicle/vehicle.component';
import { SupplyManagementBulkDetailComponent } from './components/bulk-detail/bulk-detail.component';
import { SupplyManagementVehicleDetailComponent } from './components/vehicle-detail/vehicle-detail.component';
import { SupplyManagementAddDriversComponent } from './components/add-drivers/add-drivers.component';
const routes: Routes = [
{ path: 'index', component: SupplyManagementIndexComponent },
{ path: 'bulk-detail/:id', component: SupplyManagementBulkDetailComponent },
{ path: 'vehicle-detail/:id', component: SupplyManagementVehicleDetailComponent },
{ path: 'add-drivers', component: SupplyManagementAddDriversComponent }];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class SupplyManagementRoutingModule { }

View File

@ -0,0 +1,36 @@
import { NgModule, Type } from '@angular/core';
import { SharedModule } from '@shared';
import { SupplyManagementRoutingModule } from './supply-management-routing.module';
import { SupplyManagementIndexComponent } from './components/index/index.component';
import { SupplyManagementBulkComponent } from './components/bulk/bulk.component';
import { SupplyManagementVehicleComponent } from './components/vehicle/vehicle.component';
import { SupplyManagementUpdatePriceComponent } from './components/update-price/update-price.component';
import { SupplyManagementUpdateFreightComponent } from './components/update-freight/update-freight.component';
import { SupplyManagementAssignedCarComponent } from './components/assigned-car/assigned-car.component';
import { SupplyManagementQrcodePageComponent } from './components/qrcode-page/qrcode-page.component';
import { SupplyManagementUpdateExternalSnComponent } from './components/update-external-sn/update-external-sn.component';
import { SupplyManagementBulkDetailComponent } from './components/bulk-detail/bulk-detail.component';
import { SupplyManagementVehicleDetailComponent } from './components/vehicle-detail/vehicle-detail.component';
import { SupplyManagementAddDriversComponent } from './components/add-drivers/add-drivers.component';
const COMPONENTS: Type<void>[] = [
SupplyManagementIndexComponent,
SupplyManagementBulkComponent,
SupplyManagementVehicleComponent,
SupplyManagementUpdatePriceComponent,
SupplyManagementUpdateFreightComponent,
SupplyManagementAssignedCarComponent,
SupplyManagementQrcodePageComponent,
SupplyManagementUpdateExternalSnComponent,
SupplyManagementBulkDetailComponent,
SupplyManagementVehicleDetailComponent,
SupplyManagementAddDriversComponent];
@NgModule({
imports: [
SharedModule,
SupplyManagementRoutingModule
],
declarations: COMPONENTS,
})
export class SupplyManagementModule { }

View File

@ -7,7 +7,7 @@ import { NzToolTipModule } from 'ng-zorro-antd/tooltip';
/*
* @Author: your name
* @Date: 2021-11-29 10:20:33
* @LastEditTime: 2021-12-01 16:50:17
* @LastEditTime: 2021-12-03 14:09:38
* @LastEditors: Please set LastEditors
* @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
* @FilePath: \tms-obc-web\src\app\shared\shared-zorro.module.ts
@ -36,6 +36,7 @@ import { NzTabsModule } from 'ng-zorro-antd/tabs';
import { NzRadioModule } from 'ng-zorro-antd/radio';
import { NzTimePickerModule } from 'ng-zorro-antd/time-picker';
import { NzCheckboxModule } from 'ng-zorro-antd/checkbox';
import { QRModule } from '@delon/abc/qr';
export const SHARED_ZORRO_MODULES = [
NzButtonModule,
NzGridModule,
@ -64,5 +65,7 @@ export const SHARED_ZORRO_MODULES = [
NzRadioModule,
NzTimePickerModule,
NzCheckboxModule,
NzInputNumberModule
NzInputNumberModule,
QRModule,
NzPopoverModule
];

View File

@ -105,10 +105,23 @@
"text": "货源管理",
"icon": "anticon anticon-dashboard",
"group": true,
"children": [
{
"children": [{
"text": "货源管理",
"link": "/supplygoods/list"
"icon": "anticon anticon-dashboard",
"link": "/supply-management/index",
"reuse": true
},
{
"text": "货源详情",
"icon": "anticon anticon-dashboard",
"link": "/supply-management/bulk-detail",
"hide": true
},
{
"text": "货源详情",
"icon": "anticon anticon-dashboard",
"link": "/supply-management/vehicle-detail",
"hide": true
}
]
},