Commit 4a94c0fb authored by Marcus's avatar Marcus

Merge remote-tracking branch 'origin/dev' into dev

# Conflicts:
#	src/api/ecw/order.js
parents 488f0581 d59fc171
import request from "@/utils/request";
import {param} from "@/utils";
//获得可用仓
export function warehouseAdjustmentList(params){
return request({
url:'/ecw/warehouse/adjustmentList',
method:'post',
params:params
})
}
//发起调仓请求
export function orderWarehouseInAdjustApply(data){
return request({
url:'/order/order-warehouse-in/adjust-apply',
method:'put',
data:data,
})
}
//获取订单列表
export function ecwOrderList(params){
return request({
url:'/ecw/order/list',
method:'get',
params:params,
})
}
//申请退仓
export function orderWarehouseInDelete(data){
return request({
url:'/order/order-warehouse-in/rollback-apply',
method:'put',
data:data,
})
}
//通过bpmFormId 获得仓库审核单详情
export function warehouseApprovalGetByFormId(params){
return request({
url:'order/order-warehouse-approval/get-by-form-id',
method:'get',
params:params
})
}
export function warehouseAreaPositionList(params){
return request({
url:'/ecw/warehouse/list',
method:'get',
params:params
})
}
import request from '@/utils/request'
import query from "@/views/ecw/customer/query";
import * as url from "url";
// 创建客户
export function createCustomer(data) {
......@@ -147,3 +148,10 @@ export function getMyCustomerService(query){
params:query,
})
}
//获取会员列表
export function userMemberUserList(){
return request({
url:'/member/user/member-user-list',
method:'get'
})
}
import request from '@/utils/request'
// 创建部门业绩目标设置
export function createDeptTarget(data) {
return request({
url: '/sale/dept-target/create',
method: 'post',
data: data
})
}
// 更新部门业绩目标设置
export function updateDeptTarget(data) {
return request({
url: '/sale/dept-target/update',
method: 'put',
data: data
})
}
// 删除部门业绩目标设置
export function deleteDeptTarget(id) {
return request({
url: '/sale/dept-target/delete?id=' + id,
method: 'delete'
})
}
export function getCreateInitData() {
return request({
url: '/sale/dept-target/getCreateInitData',
method: 'get'
})
}
// 获得部门业绩目标设置
export function getDeptTarget(id) {
return request({
url: '/sale/dept-target/get?id=' + id,
method: 'get'
})
}
// 获得部门业绩目标设置分页
export function getDeptTargetPage(query) {
return request({
url: '/sale/dept-target/page',
method: 'get',
params: query
})
}
// 导出部门业绩目标设置 Excel
export function exportDeptTargetExcel(query) {
return request({
url: '/sale/dept-target/export-excel',
method: 'get',
params: query,
responseType: 'blob'
})
}
......@@ -129,6 +129,14 @@ export function getLadingBill(query){
params: query,
})
}
//调仓申请
export function orderWarehouseInAdjustApply(data){
return request({
url:'/order/order-warehouse-in/adjust-apply',
method:'put',
data:data,
})
}
// 获得入仓货物详情
export function getOrderWarehouseIn(id) {
......@@ -189,3 +197,39 @@ export function getMyOrderPage(query) {
params: query
})
}
// 创建提货
export function createOrderPickup(data){
return request({
url: '/ecw/order-pickup/create',
method: 'post',
data
})
}
// 批量提货
export function createOrderPickupBatch(data){
return request({
url: '/ecw/order-pickup/createBatch',
method: 'post',
data
})
}
// 分批提货
export function createOrderPickupSplitBatch(data){
return request({
url: '/ecw/order-pickup/createSplitBatch',
method: 'post',
data
})
}
//根据流程ID获得订单信息
export function applicationGetOrderByProcessId(params){
return request({
url:'order/fee-application/getOrderByProcessId',
method:'get',
params
})
}
......@@ -309,25 +309,15 @@ export const constantRoutes = [
}
},
{
path:'single-application/:orderId',
component:(resolve)=>require(['@/views/ecw/order/singleApplication'],resolve),
props: true,
name: 'singleApplication',
meta: {
title: '调仓申请',
icon: '',
activeMenu: '/order/singleApplication'
}
},
{
path: 'batch-single-application/:orderId',
path: 'batch-single-application',
component:(resolve)=> require(['@/views/ecw/order/batchSingleApplication'],resolve),
name: 'batchSingleApplication',
props: route => ({orderList:route.query.list}),
meta: {
title: '批量调仓申请',
icon:'',
activeMenu: '/order/batchSingleApplication'
activeMenu: '/order/batchSingleApplication',
noCache:true
}
},
{
......@@ -364,6 +354,30 @@ export const constantRoutes = [
activeMenu: '/order/notMutexOrder',
noCache: true,
}
},
{
path: 'withdrawal/:orderId',
component:()=>import ('@/views/ecw/order/withdrawal'),
name:'withdrawal',
props: true,
meta:{
title:'退仓',
icon:'',
activeMenu:'order/withdrawal',
noCache:true,
}
},
{
path: 'transfer-warehousing/:orderId',
component:()=>import('@/views/ecw/order/transferWarehousing'),
name:'transferWarehousing',
props: true,
meta:{
title:'调拨出仓',
icon:'',
activeMenu:'order/transferWarehousing',
noCache:true,
}
}
],
},
......
......@@ -153,7 +153,7 @@ export const DICT_TYPE = {
COMDINED_VALUE_ADDED_FEE:'combined_value_added_fee',
ORDER_SPECIAL_NEEDS:'order_special_needs', // 订单特殊需求
ORDER_ABNORMAL_STATE:'order_abnormal_state',
TARGET_TYPE:'target_type',//部门业绩目标类型
// ========== 出货模块 ==========
BOX_SHIPMENT_TRAILER_STATUS: 'shipment_trailer_status', // 拖车状态
}
......
......@@ -53,6 +53,12 @@
<div v-if="this.processInstance.processDefinition.formCustomViewPath=='special-discount'">
<special-discount :id="this.processInstance.businessKey" readonly="true"></special-discount>
</div>
<div v-if="this.processInstance.processDefinition.formCustomViewPath=='free_apply'"><!--费用审核-->
<warehouseDetails :processId="this.processInstance.businessKey" :type="2" ></warehouseDetails>
</div>
<div v-if="this.processInstance.processDefinition.formCustomViewPath=='retired_warehouse'"><!--退仓申请-->
<warehouseDetails :processId="this.processInstance.businessKey" :type="3" ></warehouseDetails>
</div>
<div v-else>
<router-link :to="this.processInstance.processDefinition.formCustomViewPath + '?id='
+ this.processInstance.businessKey">
......@@ -135,13 +141,15 @@ import {getDate} from "@/utils/dateUtils";
import {listSimpleUsers} from "@/api/system/user";
import {getActivityList} from "@/api/bpm/activity";
import specialDiscount from "@/views/ecw/offer/specialDiscount"
import warehouseDetails from "@/views/ecw/order/components/warehouseDetails";
// 流程实例的详情页,可用于审批
export default {
name: "ProcessInstanceDetail",
components: {
Parser,
specialDiscount
specialDiscount,
warehouseDetails
},
data() {
return {
......
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="部门ID" prop="deptId">
<el-select v-model="queryParams.deptId" style="width: 300px;" placeholder="请选择部门">
<el-option v-for="item in this.deptData" :key="item.id" :label="item.name" :value="item.id"/>
</el-select>
</el-form-item>
<el-form-item label="目标类型" prop="targetType">
<dict-selector :type="DICT_TYPE.TARGET_TYPE" v-model="queryParams.targetType" formatter="number" />
</el-form-item>
<el-form-item label="运输方式" prop="transportType">
<dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model="queryParams.transportType" formatter="number" />
</el-form-item>
<el-form-item label="出货渠道" prop="shippingChannel">
<el-select v-model="queryParams.shippingChannel" placeholder="请选择出货渠道">
<el-option v-for="item in channelList" :label="item.nameZh" :value="item.channelId" :key="item.channelId"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['ecw:dept-target:create']">目标设置</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="主键ID" align="center" prop="id" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="部门ID" align="center" prop="deptId" />
<el-table-column label="目标类型" align="center" prop="targetType" />
<el-table-column label="目标周期名称" align="center" prop="targetPeriodName" />
<el-table-column label="目标开始时间" align="center" prop="startTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.startTime) }}</span>
</template>
</el-table-column>
<el-table-column label="目标结束时间" align="center" prop="endTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.endTime) }}</span>
</template>
</el-table-column>
<el-table-column label="运输方式" align="center" prop="transportType" />
<el-table-column label="出货渠道" align="center" prop="shippingChannel" />
<el-table-column label="立方数" align="center" prop="cubeNum" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['ecw:dept-target:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['ecw:dept-target:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="部门" prop="deptId">
<el-select v-model="form.deptId" style="width: 300px;" placeholder="请选择部门">
<el-option v-for="item in this.deptData" :key="item.id" :label="item.name" :value="item.id"/>
</el-select>
</el-form-item>
<el-form-item label="目标类型" prop="targetType">
<el-select v-model="form.targetType" placeholder="请选择运输方式" @change="changeList">
<el-option v-for="dict in getDictDatas(DICT_TYPE.TARGET_TYPE)"
:key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
</el-select>
</el-form-item>
<el-form-item label="计算周期" prop="targetPeriodName">
<el-select v-model="form.targetPeriodName" placeholder="请选择计算周期" @change="setTime">
<el-option v-for="item in targetPeriod" :label="item.name" :value="item.name" :key="item.name"></el-option>
</el-select>
</el-form-item>
<el-form-item label="运输方式" prop="transportType">
<dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model="form.transportType" formatter="number" />
</el-form-item>
<el-form-item label="出货渠道" prop="shippingChannel">
<el-select v-model="form.shippingChannel" placeholder="请选择出货渠道">
<el-option v-for="item in channelList" :label="item.nameZh" :value="item.channelId" :key="item.channelId"></el-option>
</el-select>
</el-form-item>
<el-form-item label="立方数" prop="cubeNum">
<el-input v-model="form.cubeNum" placeholder="请输入立方数" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createDeptTarget, updateDeptTarget, deleteDeptTarget, getDeptTarget, getDeptTargetPage, exportDeptTargetExcel,getCreateInitData } from "@/api/ecw/deptTarget";
import { listSimpleDepts } from "@/api/system/dept";
import { getChannelList } from '@/api/ecw/channel';
export default {
name: "DeptTarget",
components: {
},
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 部门业绩目标设置列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
dateRangeCreateTime: [],
dateRangeStartTime: [],
dateRangeEndTime: [],
deptData:[],
deptArr:[],
channelList:[],
monthList:[],
quarterList:[],
yearList:[],
targetPeriod:[],
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
deptId: null,
targetType: null,
targetPeriodName: null,
transportType: null,
shippingChannel: null,
cubeNum: null,
},
// 表单参数
form: {},
// 表单校验
rules: {
deptId: [{ required: true, message: "部门ID不能为空", trigger: "blur" }],
targetType: [{ required: true, message: "目标类型不能为空", trigger: "change" }],
cubeNum: [{ required: true, message: "立方数不能为空", trigger: "blur" }],
}
};
},
created() {
listSimpleDepts().then(res =>{
res.data.forEach((item)=>{
if(item.parentId==0){
this.deptArr.push(item)
}else{
this.deptData.push(item)
}
})
this.deptData.forEach((value)=>{
var dept = this.deptArr.filter(itt=>itt.id==value.parentId)
if(dept.length>0){
value.name =dept[0].name+' | '+ value.name
}
})
});
this.getChannelList();
this.getList();
},
methods: {
getChannelList(){
getChannelList().then(res => this.channelList = res.data)
},
changeList(val){
if(val===1){
this.form.targetPeriodName=undefined;
this.targetPeriod = this.monthList;
} else if (val ===2 ){
this.form.targetPeriodName=undefined;
this.targetPeriod = this.quarterList;
} else{
this.form.targetPeriodName=undefined;
this.targetPeriod = this.yearList;
}
},
setTime(item){
this.targetPeriod.forEach((i,index)=>{
if(i.name===item){
this.form.startDate = i.startDate;
this.form.endDate = i.endDate;
}
})
},
/** 查询列表 */
getList() {
this.loading = true;
// 处理查询参数
let params = {...this.queryParams};
this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime');
this.addBeginAndEndTime(params, this.dateRangeStartTime, 'startTime');
this.addBeginAndEndTime(params, this.dateRangeEndTime, 'endTime');
// 执行查询
getDeptTargetPage(params).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
deptId: undefined,
targetType: undefined,
targetPeriodName: undefined,
startTime: undefined,
endTime: undefined,
transportType: undefined,
shippingChannel: undefined,
cubeNum: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.dateRangeCreateTime = [];
this.dateRangeStartTime = [];
this.dateRangeEndTime = [];
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
getCreateInitData().then(res=>{
this.monthList = res.data.month;
this.quarterList = res.data.quarter;
this.yearList = res.data.year;
})
this.targetPeriod = this.monthList;
this.reset();
this.open = true;
this.title = "添加部门业绩目标设置";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getDeptTarget(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改部门业绩目标设置";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateDeptTarget(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
// 添加的提交
createDeptTarget(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除部门业绩目标设置编号为"' + id + '"的数据项?').then(function() {
return deleteDeptTarget(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime');
this.addBeginAndEndTime(params, this.dateRangeStartTime, 'startTime');
this.addBeginAndEndTime(params, this.dateRangeEndTime, 'endTime');
// 执行导出
this.$modal.confirm('是否确认导出所有部门业绩目标设置数据项?').then(() => {
this.exportLoading = true;
return exportDeptTargetExcel(params);
}).then(response => {
this.$download.excel(response, '${table.classComment}.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>
......@@ -24,8 +24,10 @@
<el-table-column label="序号" type="index"></el-table-column>
<el-table-column label="订单号" prop="orderNo"></el-table-column>
<el-table-column label="唛头" prop="marks"></el-table-column>
<el-table-column label="货物数据"></el-table-column>
<el-table-column label="入仓时间" prop="rucangtime"></el-table-column>
<el-table-column label="货物数据">
</el-table-column>
<el-table-column label="入仓时间" prop="rucangTime"></el-table-column>
<el-table-column label="状态">
<template v-slot:default="scope">
<dict-tag :value="scope.row.status" :type="DICT_TYPE.ORDER_STATUS"></dict-tag>
......
......@@ -42,7 +42,11 @@
</template>
</el-table-column>
<el-table-column label="操作人"></el-table-column>
<el-table-column label="操作时间" prop="createTime"></el-table-column>
<el-table-column label="操作时间">
<template v-slot="{row}">
{{parseTime(row.createTime)}}
</template>
</el-table-column>
<el-table-column label="操作">
<template v-slot:default='scope'>
<el-button type="text" @click ="guanlianOrderByOrderId(scope.row.orderId)">
......@@ -72,6 +76,16 @@ export default {
components:{
ordeDetailsForm
},
computed:{
check(){
let flag = true;
if(this.list.length === 1 && this.list[0].status === 5){
flag = false
}else {
}
}
},
data(){
return {
orderDetails:{},
......
<template>
<div class="batch-single-application">
<h1 class="title">批量调仓申请</h1>
<el-table>
<el-table-column label="订单编号"></el-table-column>
<el-table-column label="唛头"></el-table-column>
<el-table-column label="已到箱数/总箱数"></el-table-column>
<el-table-column label="下单统计"></el-table-column>
<el-table-column label="入仓统计"></el-table-column>
<el-table-column label="运输方式"></el-table-column>
<el-table-column label="出货渠道"></el-table-column>
<el-table-column label="始发仓"></el-table-column>
<el-table-column label="目的地"></el-table-column>
<el-table-column label="送货时间"></el-table-column>
<h1 class="title">调仓申请</h1>
<el-table :data="list">
<el-table-column label="订单编号" prop="orderNo"></el-table-column>
<el-table-column label="唛头" prop="marks"></el-table-column>
<el-table-column label="已到箱数/总箱数">
<template v-slot = {row}>
{{row.sumQuantity || 0}}/{{row.totalNum}}
</template>
</el-table-column>
<el-table-column label="下单统计">
</el-table-column>
<el-table-column label="入仓统计" width="150">
<template v-slot="{row}">
<div>总箱数:{{row.sumNum || 0}}</div>
<div>体积:{{row.sumVolume || 0}}CBM</div>
<div>重量:{{row.sumWeight || 0}}KG</div>
</template>
</el-table-column>
<el-table-column label="入仓时间">
</el-table-column>
<el-table-column label="运输方式">
<template v-slot = {row}>
<dict-tag :type="DICT_TYPE.ECW_TRANSPORT_TYPE" :value="row.transportId"></dict-tag>
</template>
</el-table-column>
<el-table-column label="出货渠道">
</el-table-column>
<el-table-column label="始发仓" prop="startWarehouseName"></el-table-column>
<el-table-column label="目的地" prop="objectiveName"></el-table-column>
<el-table-column label="发货人">
<template v-slot="{row}">
<div>
<p>
</p>
</div>
</template>
</el-table-column>
<el-table-column label="收货人">
<template v-slot="{row}">
<div>
<p>
{{row.consigneeName}}
</p>
<p>
{{row.consigneePhone}}
</p>
</div>
</template>
</el-table-column>
</el-table>
<div style="display: flex;justify-content:center; margin-top: 20px">
<div style="width: 300px;height: 50px;border: 1px solid; margin: 0 10px"></div>
<div style="width: 300px;height: 50px;border: 1px solid;"></div>
<div style="width: 200px; margin: 0 10px">
{{list[0].startWarehouseName}}
</div>
<div style="width: 200px;">
<el-select v-model="params.warehouseInId">
<el-option v-for="(item ,index) in availableWarehouse" :value="item.id" :label="item.titleZh" :key="index"></el-option>
</el-select>
</div>
</div>
<el-divider></el-divider>
<h1 class="title">
审批流程
</h1>
<div style="padding: 20px">
<my-process-viewer key="designer" v-model="bpmnXML" v-bind="bpmnControlForm" />
</div>
<div style="height: 100px"></div>
<el-form label-width="200px">
<el-form-item label="抄送"></el-form-item>
<el-form-item label="抄送人"></el-form-item>
</el-form>
<!-- <el-form label-width="200px">-->
<!-- <el-form-item label="抄送"></el-form-item>-->
<!-- <el-form-item label="抄送人"></el-form-item>-->
<!-- </el-form>-->
<div style="text-align: center">
<el-button style="margin-right: 50px">提交申请</el-button>
<el-button>取消</el-button>
<el-button style="margin-right: 50px" @click="submit" :disabled="isSubmit">提交申请</el-button>
<el-button @click="$router.push('/order/order')">取消</el-button>
</div>
</div>
</template>
<script>
import {DICT_TYPE, getDictDatas} from "@/utils/dict";
import {
ecwOrderList,
orderWarehouseInAdjustApply,
warehouseAdjustmentList,
} from "@/api/ecw/batchSingleApplication";
import {getProcessDefinitionBpmnXMLByKey} from "@/api/bpm/definition";
import warehouseDetails from "@/views/ecw/order/components/warehouseDetails";
export default {
name: "batchSingleApplication"
name: "batchSingleApplication",
props:{
orderList:String,
},
components:{
warehouseDetails
},
created() {
this.list = JSON.parse(this.orderList);
warehouseAdjustmentList({id:this.list[0].startWarehouseId}).then( r => this.availableWarehouse = r.data)
getProcessDefinitionBpmnXMLByKey("warehouse_transfer").then(response => {
this.bpmnXML = response.data
})
},
computed:{
isSubmit(){
let flag = true;
if(this.list.length === 1 && this.list[0].status === 5){
flag = false
}else {
let l = this.list.map(e => e.startWarehouseId)
if(this.list.every(e => e.status === 5) && [...new Set(l)].length === 1) flag = false
}
return flag;
}
},
data(){
return {
list:[],
availableWarehouse:[],
DICT_TYPE,
departureWarehouse:undefined,
adjustment:undefined,
params:{
orderIds:undefined,
warehouseInId:undefined,
warehouseOutId: undefined
},
bpmnXML: null,
bpmnControlForm: {
prefix: "activiti"
},
}
},
methods:{
submit(){
let p = this.list.map(e => e.orderId).join(',');
this.params.orderIds = p;
this.params.warehouseOutId = this.list[0].startWarehouseId;
this.params.orderNo = this.list[0].orderNo
orderWarehouseInAdjustApply(this.params).then( r=>{
if(r.code === 0){
this.$message.success('调仓成功');
}
})
}
}
}
</script>
......@@ -45,6 +158,15 @@ export default {
box-sizing: border-box;
.title{
font-weight: 600;
text-align: left;
}
}
.my-process-designer {
height: calc(100vh - 200px);
}
.box-card {
width: 100%;
margin-bottom: 20px;
}
</style>
<template>
<el-dialog title="批量提货" visible :before-close="closeDialog" :close-on-click-modal="false">
<el-form :model="form">
<el-tabs v-model="current" type="card">
<el-tab-pane label="全部提货" name="createOrderPickupBatch">
<el-form-item label="订单号/提单号" required>
<el-input v-model="form.orderId" placeholder="例:NA2200001L"></el-input>
<div>注:单号之间使用逗号或空格隔开</div>
</el-form-item>
<el-form-item label="提货时间">
<el-date-picker v-model="form.pickTime" placeholder="" value-format="yyyy-MM-dd"></el-date-picker>
</el-form-item>
</el-tab-pane>
<el-tab-pane label="分批提货" name="createOrderPickupSplitBatch">
// TODO
</el-tab-pane>
</el-tabs>
<el-form-item label="">
<el-button type="primary" @click="submit">提交</el-button>
</el-form-item>
</el-form>
</el-dialog>
</template>
<script>
import {createOrderPickupBatch, createOrderPickupSplitBatch} from '@/api/ecw/order'
export default {
props:{
},
data(){
return {
current: 'createOrderPickupBatch',
show: false,
form:{
orderId: '',
pickTime: '',
pickType: 1
},
}
},
computed:{
},
created(){
},
methods:{
submit(){
if(this.form.orderId == '' || this.form.pickTime==''){
return this.$message.error('请填写订单号和提货时间')
}
let orderIdArr = this.form.orderId.replace(/,/g, ' ').split(' ').filter(item => item !='')
let data = []
for(let orderId of orderIdArr){
data.push({
pickType: 1,
orderId,
pickTime: this.form.pickTime
})
}
({createOrderPickupBatch, createOrderPickupSplitBatch}[this.current])(data).then(res => {
this.$message.success("操作成功");
this.form.orderId = ''
})
},
closeDialog(){
this.show = false
this.$emit('close');
}
}
}
</script>
\ No newline at end of file
......@@ -2,24 +2,24 @@
<div>
<el-descriptions class="margin-top" border :column="4">
<el-descriptions-item label="唛头">{{details.marks}}</el-descriptions-item>
<el-descriptions-item label="已到箱数/总箱数">{{details.sumQuantity}}/{{details.sumNum}}</el-descriptions-item>
<el-descriptions-item label="已到箱数/总箱数">{{details.sumQuantity || 0}}/{{details.totalsumNum || 0}}</el-descriptions-item>
<el-descriptions-item label="订单状态">
<dict-tag :type="DICT_TYPE.ORDER_ABNORMAL_STATE" :value="details.status" />
</el-descriptions-item>
<el-descriptions-item label="送货日期">{{}}</el-descriptions-item>
<el-descriptions-item label="送货日期"></el-descriptions-item>
<el-descriptions-item label="运输方式">
<dict-tag :type="DICT_TYPE.ECW_TRANSPORT_TYPE" :value="details.transportId"></dict-tag>
</el-descriptions-item>
<el-descriptions-item label="出货渠道">
<dict-tag :type="DICT_TYPE.ECW_TRANSPORT_TYPE" :value="details.channelId"></dict-tag>
</el-descriptions-item>
<el-descriptions-item label="始发地">{{details.logisticsInfoDto.startWarehouseId}}</el-descriptions-item>
<el-descriptions-item label="目的地">{{details.logisticsInfoDto.destWarehouseId}}</el-descriptions-item>
<el-descriptions-item label="发货人姓名">{{details.consignorVO.customerId}}</el-descriptions-item>
<el-descriptions-item label="始发地">{{details.logisticsInfoDto.startTitleZh}}</el-descriptions-item>
<el-descriptions-item label="目的地">{{details.logisticsInfoDto.destTitleZh}}</el-descriptions-item>
<el-descriptions-item label="发货人姓名">{{details.consignorVO.name}}</el-descriptions-item>
<el-descriptions-item label="发货人公司">{{details.consignorVO.company}}</el-descriptions-item>
<el-descriptions-item label="发货人电话">{{details.consignorVO.phone}}</el-descriptions-item>
<el-descriptions-item></el-descriptions-item>
<el-descriptions-item label="收货人姓名">{{details.consigneeVO.customerId}}</el-descriptions-item>
<el-descriptions-item label="收货人姓名">{{details.consigneeVO.name}}</el-descriptions-item>
<el-descriptions-item label="收货人公司">{{details.consigneeVO.company}}</el-descriptions-item>
<el-descriptions-item label="收货人电话">{{details.consigneeVO.phone}}</el-descriptions-item>
<el-descriptions-item></el-descriptions-item>
......
<template>
<div>
<h1>
申请信息【订单信息】
</h1>
<el-table v-if="type === 1">
<el-table-column
label="订单编号">
</el-table-column>
<el-table-column
label="唛头">
</el-table-column>
<el-table-column
label="已到箱数/总箱数">
</el-table-column>
<el-table-column
label="下单统计">
</el-table-column>
<el-table-column
label="入仓统计">
</el-table-column>
<el-table-column
label="入仓时间">
</el-table-column>
<el-table-column
label="运输方式">
</el-table-column>
<el-table-column
label="出货渠道">
</el-table-column>
<el-table-column
label="始发仓">
</el-table-column>
<el-table-column
label="目的地">
</el-table-column>
<el-table-column
label="发货人">
</el-table-column>
<el-table-column
label="收货人">
</el-table-column>
</el-table>
<el-descriptions v-else :column="4" border>
<el-descriptions-item label="订单号">{{FeeDetails.orderNo}}</el-descriptions-item>
<el-descriptions-item label="运输方式">
<dict-tag :type="DICT_TYPE.ECW_TRANSPORT_TYPE" :value="FeeDetails.transportId"></dict-tag>
</el-descriptions-item>
<el-descriptions-item label="出货方式">
{{selectChannel(FeeDetails.channelId)}}
</el-descriptions-item>
<el-descriptions-item label="订单状态">
<dict-tag :type="DICT_TYPE.ORDER_ABNORMAL_STATE" :value="FeeDetails.abnormalState"></dict-tag>
</el-descriptions-item>
<el-descriptions-item label="唛头">
{{FeeDetails.marks}}
</el-descriptions-item>
<el-descriptions-item label="始发仓">{{FeeDetails.startWarehouse}}</el-descriptions-item>
<el-descriptions-item label="目的仓">{{FeeDetails.destWarehouse}}</el-descriptions-item>
</el-descriptions>
<div v-if="type === 1">
<p>
申请说明
</p>
<div >
从【{{selectWarehouse(FeeDetails.details && FeeDetails.details.warehouseInId ? FeeDetails.details.warehouseInId : '' )}}】 调到
{{selectWarehouse(FeeDetails.details && FeeDetails.details.warehouseOutId ? FeeDetails.details.warehouseOutId : '' )}}
</div>
</div>
<div v-if="type === 2">
<p>申请理由</p>
<div>
{{FeeDetails.remarks}}
</div>
</div>
<div v-if="type === 3">
<p>申请理由</p>
<div>
{{ FeeDetails.details && FeeDetails.details.reason ? FeeDetails.details.reason :''}}
</div>
</div>
</div>
</template>
<script>
import {warehouseApprovalGetByFormId, warehouseAreaPositionList} from "@/api/ecw/batchSingleApplication";
import {applicationGetOrderByProcessId, getOrder} from "@/api/ecw/order";
import { getChannelList } from '@/api/ecw/channel';
export default {
props:{
type:{
type: Number,
default:1,
},
processId:{
type:[Number,String],
}
},
name: "warehouseDetails",
data(){
return{
FeeDetails:{},
transfer:{},
warehouseList:[],
channelList:[]
}
},
created() {
getChannelList().then(r => this.channelList = r.data);
warehouseAreaPositionList().then(r => this.warehouseList = r.data)
switch (this.type){
case 1:
//调仓
warehouseApprovalGetByFormId({formId:this.processId}).then( r => {
this.FeeDetails = r.data
this.FeeDetails.details = JSON.parse(r.data.details)
});
break;
case 2:
// 费用申请
applicationGetOrderByProcessId({processId:this.processId}).then(r => this.FeeDetails = r.data)
break;
case 3:
//退仓
warehouseApprovalGetByFormId({formId:this.processId}).then( res => {
getOrder(res.data.orderIds).then(r =>{
this.FeeDetails = r.data
this.FeeDetails.details = JSON.parse(res.data.details)
})
});
break;
}
},
methods:{
selectWarehouse(val){
if(this.warehouseList.length > 0 && !!val){
return this.warehouseList.find(e => e.id === val).titleZh
}
return ''
},
selectChannel(val){
if(this.channelList.length > 0 && !!val) return this.channelList.find(e => e.channelId === val).nameEn
return ''
}
}
}
</script>
<style scoped>
</style>
......@@ -59,6 +59,9 @@
<el-button style="margin-right: 30px;" @click="submit">提交</el-button>
<el-button>取消</el-button>
</div>
<div style="padding: 20px">
<my-process-viewer key="designer" v-model="bpmnXML" v-bind="bpmnControlForm" />
</div>
</div>
</template>
......@@ -66,6 +69,7 @@
import {getOrder, feeApplicationCreate, ApplicationListByOrderId, applicationUpdate} from "@/api/ecw/order";
import { getDictDatas, DICT_TYPE } from '@/utils/dict';
import Template from "@/views/cms/template";
import { getProcessDefinitionBpmnXMLByKey} from "@/api/bpm/definition";
export default {
name: "feeApplication",
components: {Template},
......@@ -80,7 +84,11 @@ export default {
getDictDatas,
STATUS:{},
isModify:[],
isModifyIf:false
isModifyIf:false,
bpmnXML: null,
bpmnControlForm: {
prefix: "activiti"
},
}
},
created() {
......@@ -92,6 +100,9 @@ export default {
this.getOrderList()
this.getDictDatas(this.DICT_TYPE.AUDIT_STATUS).forEach( e =>{
this.STATUS[e.value] = e.label
}),
getProcessDefinitionBpmnXMLByKey("free_apply").then(response => {
this.bpmnXML = response.data
})
},
computed:{
......@@ -145,13 +156,14 @@ export default {
if(r.code === 0){
this.list = r.data;
this.list.forEach(()=>this.isModify.push(true))
let p = this.list.find(e => e.status === 1)
}
})
},
modify(row){
this.isModifyIf = true;
this.$set(this.isModify, this.list.findIndex(e => e.id = row.id), false )
}
},
}
}
</script>
......@@ -167,4 +179,12 @@ export default {
width: 200px;
}
}
.my-process-designer {
height: calc(100vh - 200px);
}
.box-card {
width: 100%;
margin-bottom: 20px;
}
</style>
......@@ -102,6 +102,8 @@
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-setting" size="mini" @click="handleEdit" :disabled="multiple">批量调仓
</el-button>
<el-button type="primary" plain icon="el-icon-setting" size="mini" @click="showBatchPickup=true">批量提货
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
......@@ -176,7 +178,16 @@
</div>
</el-popover>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['ecw:order:update']">编辑</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="$router.push('/order/warehousing?id=' + scope.row.orderId)"
v-hasPermi="['ecw:order:update']">入仓</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['ecw:order:update']">退仓</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="$router.push('/order/special?id=' + scope.row.orderId)"
v-hasPermi="['ecw:order:update']">特价</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['ecw:order:delete']">删除</el-button>
<!--仓库相关的-->
<el-popover
style="margin-left: 10px;"
......@@ -187,8 +198,9 @@
<div style=" display:flex; flex-direction:column">
<el-button size="mini" type="text" icon="el-icon-edit" @click="$router.push('/order/warehousing?id=' + scope.row.orderId)"
v-hasPermi="['ecw:order:update']">入仓</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
<el-button size="mini" type="text" icon="el-icon-edit" @click= "$router.push(`/order/withdrawal/${scope.row.orderId}`)"
v-hasPermi="['ecw:order:update']">退仓</el-button>
<el-button type="text" v-if="scope.row.status === 5" size="mini" @click="$router.push({path:'/order/batch-single-application',query:{list:JSON.stringify([scope.row])}})" >调仓</el-button>
</div>
</el-popover>
......@@ -222,6 +234,7 @@
<print-tag v-if="printTagOrderId !== null" :order-id="printTagOrderId" @close="printTagOrderId=null" />
<print-warehouse-receipt v-if="printWarehouseReceiptOrderId !== null" :order-id="printWarehouseReceiptOrderId" @close="printWarehouseReceiptOrderId=null" />
<print-lading-bill v-if="printLadingBillInfo !== null" v-bind="printLadingBillInfo" @close="printLadingBillInfo=null" />
<batch-pickup v-if="showBatchPickup" @close="showBatchPickup=false"/>
</div>
</template>
......@@ -248,11 +261,11 @@ import {
import PrintTag from './components/PrintTag'
import PrintWarehouseReceipt from './components/PrintWarehouseReceipt'
import PrintLadingBill from './components/PrintLadingBill'
import BatchPickup from './components/BatchPickup'
export default {
name: "Order",
components: {
CustomerSelector, ProductSelector, Selector,specialNeeds,PrintTag, PrintWarehouseReceipt, PrintLadingBill
CustomerSelector, ProductSelector, Selector,specialNeeds,PrintTag, PrintWarehouseReceipt, PrintLadingBill, BatchPickup
},
props: {
mine: Boolean
......@@ -326,10 +339,12 @@ export default {
printTagOrderId: null, // 显示打印标签的订单ID
printWarehouseReceiptOrderId: null, // 打印入仓单的订单ID
printLadingBillInfo: null, // 打印提单
showBatchPickup: false, // 是否显示批量提货弹窗
isShow:false,//特殊显示
orderId:undefined,
/* DICT_TYPE,
getDictDatas */
adjustmentList:[]
};
},
computed: {
......@@ -381,6 +396,7 @@ export default {
this.getList()
})
},
/** 查询列表 */
getList() {
this.loading = true;
......@@ -433,11 +449,17 @@ export default {
},
// 表格多选
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.ids = selection.map(item => item.orderId)
this.single = selection.length !== 1
this.multiple = !selection.length
this.adjustmentList = selection;
},
handleEdit() {
this.$router.push({
path:'/order/batch-single-application',
query:{list:JSON.stringify(this.adjustmentList)}
})
},
handleEdit() { },
moleculeChange() { },
denominatorChange() { },
specialRendering(val){
......@@ -457,7 +479,7 @@ export default {
}
}
)
}
},
}
};
</script>
......@@ -2,10 +2,10 @@
<div class="app-container">
<el-form :model="form" label-position="left" label-width="120px">
<el-form-item label="放货方式">
<dict-selector :type="DICT_TYPE.ECW_HARVEST_METHOD" v-model="form.pickType" form-type="radio"></dict-selector>
<dict-selector :type="DICT_TYPE.ECW_HARVEST_METHOD" v-model="form.pickType" form-type="radio" formatter="number"></dict-selector>
</el-form-item>
<el-form-item label="提货时间" v-if="form.pickType == 1">
<el-date-picker v-model="form.pickTime" placeholder="" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
<el-date-picker v-model="form.pickTime" placeholder="" value-format="yyyy-MM-dd"></el-date-picker>
</el-form-item>
<template v-if="form.pickType == 2">
......@@ -13,7 +13,7 @@
{{order.consigneeVO.name}}
</el-form-item>
<el-form-item label="收货电话">
{{order.consigneeVO.phone}}
{{order.consigneeVO.countryCode}} {{order.consigneeVO.phone}}
</el-form-item>
<el-form-item label="收货地址">
<!--缺少国城名字-->
......@@ -23,15 +23,15 @@
<el-input v-model="form.trackingNumber" placeholder=""></el-input>
</el-form-item>
<el-form-item label="送货时间">
<el-date-picker v-model="form.deliverTime" placeholder="" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
<el-date-picker v-model="form.deliverTime" placeholder="" value-format="yyyy-MM-dd"></el-date-picker>
</el-form-item>
<el-form-item label="签收时间">
<el-date-picker v-model="form.pickTime" placeholder="" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
<el-date-picker v-model="form.pickTime" placeholder="" value-format="yyyy-MM-dd"></el-date-picker>
</el-form-item>
</template>
<el-form-item label="附件">
<dict-selector :type="DICT_TYPE.ECW_HARVEST_METHOD" v-model="form.harvest_method"></dict-selector>
<image-upload v-model="form.attachment" />
</el-form-item>
<el-form-item label="备注">
......@@ -45,8 +45,10 @@
</div>
</template>
<script>
import {getOrder} from '@/api/ecw/order'
import {getOrder, createOrderPickup} from '@/api/ecw/order'
import ImageUpload from '@/components/ImageUpload'
export default {
components: {ImageUpload},
data(){
return {
order: null,
......@@ -60,11 +62,15 @@ export default {
loadOrderData(){
getOrder(this.$route.query.orderId).then(res => {
this.order = res.data
this.$set(this.form, 'pickType', this.order.harvestMethod)
this.$set(this.form, 'pickType', this.order.consigneeVO.harvestMethod)
})
},
submit(){
this.$alert('暂未对接接口')
createOrderPickup(Object.assign({orderId: this.order.orderNo}, this.form)).then(res => {
return this.$alert(res.message || '操作成功')
}).then(res => {
this.$router.back()
})
}
}
}
......
<template>
<div style="padding: 0 20px">
<h1>调拨出仓</h1>
<el-divider content-position="left">
订单信息
</el-divider>
<ordeDetailsForm :details="{}"></ordeDetailsForm>
<el-divider content-position="left">
货物信息
</el-divider>
<el-table>
<el-table-column label="序号"></el-table-column>
<el-table-column label="品名"></el-table-column>
<el-table-column label="填单货物属性"></el-table-column>
<el-table-column label="入库货物属性"></el-table-column>
<el-table-column label="最后操作时间"></el-table-column>
<el-table-column label="状态"></el-table-column>
</el-table>
<el-divider content-position="left">
调仓明细
</el-divider>
<el-table>
<el-table-column label="调仓编号"></el-table-column>
<el-table-column label="调出仓库"></el-table-column>
<el-table-column label="调入仓库"></el-table-column>
<el-table-column label="申请人"></el-table-column>
<el-table-column label="申请时间"></el-table-column>
<el-table-column label="状态"></el-table-column>
<el-table-column label="操作"></el-table-column>
</el-table>
<el-descriptions :column="4" border>
<el-descriptions-item label="集运仓库">kooriookami</el-descriptions-item>
<el-descriptions-item label="储位">18100000000</el-descriptions-item>
<el-descriptions-item label="调拨目标仓">苏州市</el-descriptions-item>
<el-descriptions-item label="物流公司"></el-descriptions-item>
<el-descriptions-item label="物流单号"> 1188 号</el-descriptions-item>
<el-descriptions-item label="联系电话"> 1188 号</el-descriptions-item>
<el-descriptions-item label="出仓日期"> 1188 号</el-descriptions-item>
<el-descriptions-item label="到仓日期"> 1188 号</el-descriptions-item>
</el-descriptions>
<el-divider content-position="left">
出仓影像
</el-divider>
<el-from>
<el-form-item label="备注"></el-form-item>
</el-from>
<div>
<el-button>确认出仓</el-button>
<el-button>返回</el-button>
</div>
</div>
</template>
<script>
import ordeDetailsForm from "@/views/ecw/order/components/ordeDetailsForm";
export default {
name: "transferWarehousing",
components:{
ordeDetailsForm
},
}
</script>
<style scoped>
</style>
<template>
<div style="padding: 0 20px">
<h1>申请退仓-{{orderDetails.orderNo}}</h1>
<el-divider></el-divider>
<el-form label-width="150px">
<el-form-item label="退仓原因">
<el-input v-model="params.reason" style="width:500px" type="textarea"></el-input>
</el-form-item>
</el-form>
<el-divider></el-divider>
<h2>审批流程</h2>
<div style="padding: 20px">
<my-process-viewer key="designer" v-model="bpmnXML" v-bind="bpmnControlForm" />
</div>
<div>
<el-button @click="submit" type="primary" style="margin-right: 20px;">确定退仓</el-button>
<el-button @click="$router.push('/order/order')">不,再考虑考虑</el-button>
</div>
</div>
</template>
<!--退仓-->
<script>
import {getOrder} from "@/api/ecw/order";
import {orderWarehouseInDelete} from "@/api/ecw/batchSingleApplication";
import {getProcessDefinitionBpmnXMLByKey} from "@/api/bpm/definition";
export default {
name: "withdrawal",
props:{
orderId:String
},
data(){
return {
orderDetails:{},
bpmnXML: null,
bpmnControlForm: {
prefix: "activiti"
},
params:{
orderId:undefined,
orderNo:undefined,
reason:'',
}
}
},
created() {
getOrder(this.orderId).then(r => this.orderDetails = r.data);
getProcessDefinitionBpmnXMLByKey("retired_warehouse").then(response => {
this.bpmnXML = response.data
})
},
methods:{
submit(){
this.params.orderId = this.orderDetails.orderId;
this.params.orderNo =this.orderDetails.orderNo;
orderWarehouseInDelete(this.params).then(r => {
if(r.code === 0){
this.$message.success('退仓成功');
}
})
}
}
}
</script>
<style scoped>
</style>
......@@ -11,6 +11,10 @@
<ueditor />
</el-row>
<el-row>
<my-process-viewer key="designer" v-model="bpmnXML" v-bind="bpmnControlForm" />
</el-row>
<el-row :gutter="32">
<el-col :xs="24" :sm="24" :lg="8">
<div class="chart-wrapper">
......@@ -30,6 +34,8 @@
</el-row>
</div>
</template>
......@@ -40,6 +46,9 @@ import RaddarChart from './dashboard/RaddarChart'
import PieChart from './dashboard/PieChart'
import BarChart from './dashboard/BarChart'
import Ueditor from '@/components/Ueditor'
import {
getProcessDefinitionBpmnXMLByKey
} from "@/api/bpm/definition";
const lineChartData = {
newVisitis: {
......@@ -72,12 +81,26 @@ export default {
},
data() {
return {
lineChartData: lineChartData.newVisitis
lineChartData: lineChartData.newVisitis,
// BPMN 数据
bpmnXML: null,
bpmnControlForm: {
prefix: "activiti"
},
}
},
created() {
this.handlerBpm();
},
methods: {
handleSetLineChartData(type) {
this.lineChartData = lineChartData[type]
},
handlerBpm(){
getProcessDefinitionBpmnXMLByKey("free_apply").then(response => {
this.bpmnXML = response.data
})
}
}
}
......@@ -101,4 +124,12 @@ export default {
padding: 8px;
}
}
.my-process-designer {
height: calc(100vh - 200px);
}
.box-card {
width: 100%;
margin-bottom: 20px;
}
</style>
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