Commit 0e04201f authored by dragondean@qq.com's avatar dragondean@qq.com
parents 284f746f 453ae2ff
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
"build:prod": "vue-cli-service build", "build:prod": "vue-cli-service build",
"build:stage": "vue-cli-service build --mode staging", "build:stage": "vue-cli-service build --mode staging",
"build:demo1024": "vue-cli-service build --mode demo1024", "build:demo1024": "vue-cli-service build --mode demo1024",
"dev:demo1024": "vue-cli-service serve --mode demo1024",
"preview": "node build/index.js --preview", "preview": "node build/index.js --preview",
"lint": "eslint --ext .js,.vue src" "lint": "eslint --ext .js,.vue src"
}, },
......
...@@ -42,10 +42,11 @@ ...@@ -42,10 +42,11 @@
'directionalityltr', 'directionalityrtl', 'indent', '|', 'directionalityltr', 'directionalityrtl', 'indent', '|',
'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', '|', 'touppercase', 'tolowercase', '|', 'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', '|', 'touppercase', 'tolowercase', '|',
'link', 'unlink', 'anchor', '|', 'imagenone', 'imageleft', 'imageright', 'imagecenter', '|', 'link', 'unlink', 'anchor', '|', 'imagenone', 'imageleft', 'imageright', 'imagecenter', '|',
'simpleupload', 'insertimage', 'emotion', 'scrawl', 'insertvideo', 'music', 'attachment', 'map', 'gmap', 'insertframe', 'insertcode', 'webapp', 'pagebreak', 'template', 'background', '|', 'simpleupload'
'horizontal', 'date', 'time', 'spechars', 'snapscreen', 'wordimage', '|', // , 'insertimage', 'emotion', 'scrawl', 'insertvideo', 'music', 'attachment', 'map', 'gmap', 'insertframe', 'insertcode', 'webapp', 'pagebreak', 'template', 'background', '|',
'inserttable', 'deletetable', 'insertparagraphbeforetable', 'insertrow', 'deleterow', 'insertcol', 'deletecol', 'mergecells', 'mergeright', 'mergedown', 'splittocells', 'splittorows', 'splittocols', 'charts', '|', // 'horizontal', 'date', 'time', 'spechars', 'snapscreen', 'wordimage', '|',
'print', 'preview', 'searchreplace', 'drafts', 'help' // 'inserttable', 'deletetable', 'insertparagraphbeforetable', 'insertrow', 'deleterow', 'insertcol', 'deletecol', 'mergecells', 'mergeright', 'mergedown', 'splittocells', 'splittorows', 'splittocols', 'charts', '|',
// 'print', 'preview', 'searchreplace', 'drafts', 'help'
]] ]]
//当鼠标放在工具栏上时显示的tooltip提示,留空支持自动多语言配置,否则以配置值为准 //当鼠标放在工具栏上时显示的tooltip提示,留空支持自动多语言配置,否则以配置值为准
//,labelMap:{ //,labelMap:{
......
...@@ -22,3 +22,10 @@ export function getProcessDefinitionBpmnXML(id) { ...@@ -22,3 +22,10 @@ export function getProcessDefinitionBpmnXML(id) {
method: 'get' method: 'get'
}) })
} }
export function getProcessDefinitionBpmnXMLByKey(id) {
return request({
url: '/bpm/model/get-bpmn-xml-key?key=' + id,
method: 'get'
})
}
import request from '@/utils/request'
// 创建出货
export function createbox(data) {
return request({
url: '/shipment/box/create',
method: 'post',
data: data
})
}
// 更新出货
export function updatebox(data) {
return request({
url: '/shipment/box/update',
method: 'put',
data: data
})
}
// 删除出货
export function deletebox(id) {
return request({
url: '/shipment/box/delete?id=' + id,
method: 'delete'
})
}
// 获得出货
export function getbox(id) {
return request({
url: '/shipment/box/get?id=' + id,
method: 'get'
})
}
// 获得出货分页
export function getboxPage(query) {
return request({
url: '/shipment/box/page',
method: 'get',
params: query
})
}
// 导出出货 Excel
export function exportboxExcel(query) {
return request({
url: '/shipment/box/export-excel',
method: 'get',
params: query,
responseType: 'blob'
})
}
...@@ -92,7 +92,15 @@ export function createOfferSpecial(data) { ...@@ -92,7 +92,15 @@ export function createOfferSpecial(data) {
// 特价详情 // 特价详情
export function getOfferSpecial(offerProdId) { export function getOfferSpecial(offerProdId) {
return request({ return request({
url: '/ecw/offer/special/info/' + offerProdId + '?offerProdId=' + offerProdId, url: '/ecw/offer/special/info/' + offerProdId,
method: 'get'
})
}
// 特价详情
export function getOfferSpecialByApproveId(approveId) {
return request({
url: '/ecw/offer/special/info?approveId=' + approveId,
method: 'get' method: 'get'
}) })
} }
......
...@@ -275,14 +275,36 @@ export const constantRoutes = [ ...@@ -275,14 +275,36 @@ export const constantRoutes = [
meta: {title: '特价申请', icon: '', activeMenu: '/offer/index'} meta: {title: '特价申请', icon: '', activeMenu: '/offer/index'}
}, },
{ {
path: 'discount', path: 'discount/:offerProdId(\\d+)',
component: (resolve) => import('@/views/ecw/offer/specialDiscount'), component: (resolve) => import('@/views/ecw/offer/specialDiscount'),
props: true, props: true,
name: 'discount', name: 'discount',
meta: {title: '优惠申请', icon: '', activeMenu: '/offer/index'} meta: {title: '优惠申请', icon: '', activeMenu: '/offer/index'}
}, },
] ]
},
{
path: '/box',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: 'query/:boxId(\\d+)',
component: (resolve) => import('@/views/ecw/box/query'),
props: true,
name: 'boxQuery',
meta: {title: '出货详情', icon: '', activeMenu: '/shipment/box'}
},
{
path: 'shippingSea/:boxId(\\d+)',
component: (resolve) => import('@/views/ecw/box/shipping/shippingSea'),
props: true,
name: 'shippingSea',
meta: {title: '海运出货操作', icon: '', activeMenu: '/shipment/box'}
} }
]
},
] ]
// 防止连续点击多次路由报错 // 防止连续点击多次路由报错
......
...@@ -10,6 +10,7 @@ export const DICT_TYPE = { ...@@ -10,6 +10,7 @@ export const DICT_TYPE = {
COMMON_STATUS: 'common_status', COMMON_STATUS: 'common_status',
AUDIT_STATUS: 'audit_status', AUDIT_STATUS: 'audit_status',
ADVANCE_STATUS: 'advance_status', ADVANCE_STATUS: 'advance_status',
BOX_SHIPMENT_STATUS: 'box_shipment_status',
// ========== SYSTEM 模块 ========== // ========== SYSTEM 模块 ==========
SYSTEM_USER_SEX: 'system_user_sex', SYSTEM_USER_SEX: 'system_user_sex',
...@@ -132,7 +133,8 @@ export const DICT_TYPE = { ...@@ -132,7 +133,8 @@ export const DICT_TYPE = {
ORDER_TYPE: 'order_type', // 订单类型 ORDER_TYPE: 'order_type', // 订单类型
PRODUCT_RECORD_ATTRIBUTE: 'product_record_attribute', //产品备案属性 PRODUCT_RECORD_ATTRIBUTE: 'product_record_attribute', //产品备案属性
CONTROL_GOODS_STATUS: 'control_goods_status', //控货状态 CONTROL_GOODS_STATUS: 'control_goods_status', //控货状态
DISBURSEMENT_TYPE: 'disbursement_type' //垫付类型 DISBURSEMENT_TYPE: 'disbursement_type', //垫付类型
DRAWEE: 'drawee', // 付款人
} }
/** /**
......
...@@ -11,7 +11,7 @@ const baseURL = process.env.VUE_APP_BASE_API ...@@ -11,7 +11,7 @@ const baseURL = process.env.VUE_APP_BASE_API
* @param pattern {String} '{y}-{m}-{d} {h}:{i}:{s}' * @param pattern {String} '{y}-{m}-{d} {h}:{i}:{s}'
* @returns {string|null} * @returns {string|null}
*/ */
export function parseTime(time, pattern) { export function parseTime(time, pattern = undefined) {
if (arguments.length === 0 || !time) { if (arguments.length === 0 || !time) {
return null return null
} }
......
...@@ -53,7 +53,11 @@ ...@@ -53,7 +53,11 @@
</template> </template>
<script> <script>
import {getProcessDefinitionBpmnXML, getProcessDefinitionList} from "@/api/bpm/definition"; import {
getProcessDefinitionBpmnXML,
getProcessDefinitionBpmnXMLByKey,
getProcessDefinitionList
} from "@/api/bpm/definition";
import {DICT_TYPE, getDictDatas} from "@/utils/dict"; import {DICT_TYPE, getDictDatas} from "@/utils/dict";
import {getForm} from "@/api/bpm/form"; import {getForm} from "@/api/bpm/form";
import {decodeFields} from "@/utils/formGenerator"; import {decodeFields} from "@/utils/formGenerator";
...@@ -118,11 +122,13 @@ export default { ...@@ -118,11 +122,13 @@ export default {
...JSON.parse(row.formConf), ...JSON.parse(row.formConf),
fields: decodeFields(row.formFields) fields: decodeFields(row.formFields)
} }
// 加载流程图 // 加载流程图
getProcessDefinitionBpmnXML(row.id).then(response => { getProcessDefinitionBpmnXML(row.id).then(response => {
this.bpmnXML = response.data this.bpmnXML = response.data
}) })
/*getProcessDefinitionBpmnXMLByKey("sheet_sale").then(response => {
this.bpmnXML = response.data
})*/
} else if (row.formCustomCreatePath) { } else if (row.formCustomCreatePath) {
this.$router.push({ path: row.formCustomCreatePath}); this.$router.push({ path: row.formCustomCreatePath});
// 这里暂时无需加载流程图,因为跳出到另外个 Tab; // 这里暂时无需加载流程图,因为跳出到另外个 Tab;
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<div slot="header" class="clearfix"> <div slot="header" class="clearfix">
<span class="el-icon-picture-outline">审批任务【{{ item.name }}</span> <span class="el-icon-picture-outline">审批任务【{{ item.name }}</span>
</div> </div>
<el-col :span="16" :offset="6" > <el-col :span="16" :offset="6">
<el-form :ref="'form' + index" :model="auditForms[index]" :rules="auditRule" label-width="100px"> <el-form :ref="'form' + index" :model="auditForms[index]" :rules="auditRule" label-width="100px">
<el-form-item label="流程名" v-if="processInstance && processInstance.name"> <el-form-item label="流程名" v-if="processInstance && processInstance.name">
{{ processInstance.name }} {{ processInstance.name }}
...@@ -16,17 +16,21 @@ ...@@ -16,17 +16,21 @@
</el-form-item> </el-form-item>
<el-form-item label="抄送人" prop="copyUserIds"> <el-form-item label="抄送人" prop="copyUserIds">
<el-select v-model="auditForms[index].copyUserIds" clearable multiple filterable style="width: 100%"> <el-select v-model="auditForms[index].copyUserIds" clearable multiple filterable style="width: 100%">
<el-option v-for="item in userOptions" :key="parseInt(item.id)" :label="item.nickname" :value="parseInt(item.id)" /> <el-option v-for="item in userOptions" :key="parseInt(item.id)" :label="item.nickname"
:value="parseInt(item.id)"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="审批建议" prop="comment"> <el-form-item label="审批建议" prop="comment">
<el-input type="textarea" v-model="auditForms[index].comment" placeholder="请输入审批建议" /> <el-input type="textarea" v-model="auditForms[index].comment" placeholder="请输入审批建议"/>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div style="margin-left: 10%; margin-bottom: 20px; font-size: 14px;"> <div style="margin-left: 10%; margin-bottom: 20px; font-size: 14px;">
<el-button icon="el-icon-edit-outline" type="success" size="mini" @click="handleAudit(item, true)">通过</el-button> <el-button icon="el-icon-edit-outline" type="success" size="mini" @click="handleAudit(item, true)">通过
<el-button icon="el-icon-circle-close" type="danger" size="mini" @click="handleAudit(item, false)">不通过</el-button> </el-button>
<el-button icon="el-icon-edit-outline" type="primary" size="mini" @click="handleUpdateAssignee(item)">转办</el-button> <el-button icon="el-icon-circle-close" type="danger" size="mini" @click="handleAudit(item, false)">不通过
</el-button>
<el-button icon="el-icon-edit-outline" type="primary" size="mini" @click="handleUpdateAssignee(item)">转办
</el-button>
<el-button icon="el-icon-edit-outline" type="primary" size="mini" @click="handleDelegate(item)">委派</el-button> <el-button icon="el-icon-edit-outline" type="primary" size="mini" @click="handleDelegate(item)">委派</el-button>
<el-button icon="el-icon-refresh-left" type="warning" size="mini" @click="handleBack(item)">退回</el-button> <el-button icon="el-icon-refresh-left" type="warning" size="mini" @click="handleBack(item)">退回</el-button>
</div> </div>
...@@ -39,22 +43,30 @@ ...@@ -39,22 +43,30 @@
</div> </div>
<el-col v-if="this.processInstance.processDefinition && this.processInstance.processDefinition.formType === 10" <el-col v-if="this.processInstance.processDefinition && this.processInstance.processDefinition.formType === 10"
:span="16" :offset="6"> :span="16" :offset="6">
<div > <div>
<parser :key="new Date().getTime()" :form-conf="detailForm" @submit="submitForm" /> <parser :key="new Date().getTime()" :form-conf="detailForm" @submit="submitForm"/>
</div> </div>
</el-col> </el-col>
<div v-if="this.processInstance.processDefinition && this.processInstance.processDefinition.formType === 20"> <div v-if="this.processInstance.processDefinition && this.processInstance.processDefinition.formType === 20">
<!-- <span>{{this.processInstance.processDefinition.formCustomViewPath}}</span>-->
<div v-if="this.processInstance.processDefinition.formCustomViewPath=='special-discount'">
<special-discount :id="this.processInstance.businessKey" readonly="true"></special-discount>
</div>
<div v-else>
<router-link :to="this.processInstance.processDefinition.formCustomViewPath + '?id=' <router-link :to="this.processInstance.processDefinition.formCustomViewPath + '?id='
+ this.processInstance.businessKey"> + this.processInstance.businessKey">
<el-button type="primary">点击查看</el-button> <el-button type="primary">点击查看</el-button>
</router-link> </router-link>
</div> </div>
</div>
</el-card> </el-card>
<el-card class="box-card" v-loading="tasksLoad"> <el-card class="box-card" v-loading="tasksLoad">
<div slot="header" class="clearfix"> <div slot="header" class="clearfix">
<span class="el-icon-picture-outline">审批记录</span> <span class="el-icon-picture-outline">审批记录</span>
</div> </div>
<el-col :span="16" :offset="4" > <el-col :span="16" :offset="4">
<div class="block"> <div class="block">
<el-timeline> <el-timeline>
<el-timeline-item v-for="(item, index) in tasks" :key="index" <el-timeline-item v-for="(item, index) in tasks" :key="index"
...@@ -68,9 +80,12 @@ ...@@ -68,9 +80,12 @@
<label style="font-weight: normal">创建时间:</label> <label style="font-weight: normal">创建时间:</label>
<label style="color:#8a909c; font-weight: normal">{{ parseTime(item.createTime) }}</label> <label style="color:#8a909c; font-weight: normal">{{ parseTime(item.createTime) }}</label>
<label v-if="item.endTime" style="margin-left: 30px;font-weight: normal">审批时间:</label> <label v-if="item.endTime" style="margin-left: 30px;font-weight: normal">审批时间:</label>
<label v-if="item.endTime" style="color:#8a909c;font-weight: normal"> {{ parseTime(item.endTime) }}</label> <label v-if="item.endTime" style="color:#8a909c;font-weight: normal"> {{
parseTime(item.endTime)
}}</label>
<label v-if="item.durationInMillis" style="margin-left: 30px;font-weight: normal">耗时:</label> <label v-if="item.durationInMillis" style="margin-left: 30px;font-weight: normal">耗时:</label>
<label v-if="item.durationInMillis" style="color:#8a909c;font-weight: normal"> {{ getDateStar(item.durationInMillis) }} </label> <label v-if="item.durationInMillis" style="color:#8a909c;font-weight: normal">
{{ getDateStar(item.durationInMillis) }} </label>
<p v-if="item.comment"> <p v-if="item.comment">
<el-tag :type="getTimelineItemType(item)">{{ item.comment }}</el-tag> <el-tag :type="getTimelineItemType(item)">{{ item.comment }}</el-tag>
</p> </p>
...@@ -87,7 +102,7 @@ ...@@ -87,7 +102,7 @@
<span class="el-icon-picture-outline">流程图</span> <span class="el-icon-picture-outline">流程图</span>
</div> </div>
<my-process-viewer key="designer" v-model="bpmnXML" v-bind="bpmnControlForm" :activityData="activityList" <my-process-viewer key="designer" v-model="bpmnXML" v-bind="bpmnControlForm" :activityData="activityList"
:processInstanceData="processInstance" :taskData="tasks" /> :processInstanceData="processInstance" :taskData="tasks"/>
</el-card> </el-card>
<!-- 对话框(转派审批人) --> <!-- 对话框(转派审批人) -->
...@@ -95,7 +110,8 @@ ...@@ -95,7 +110,8 @@
<el-form ref="updateAssigneeForm" :model="updateAssignee.form" :rules="updateAssignee.rules" label-width="110px"> <el-form ref="updateAssigneeForm" :model="updateAssignee.form" :rules="updateAssignee.rules" label-width="110px">
<el-form-item label="新审批人" prop="assigneeUserId"> <el-form-item label="新审批人" prop="assigneeUserId">
<el-select v-model="updateAssignee.form.assigneeUserId" clearable style="width: 100%"> <el-select v-model="updateAssignee.form.assigneeUserId" clearable style="width: 100%">
<el-option v-for="item in userOptions" :key="parseInt(item.id)" :label="item.nickname" :value="parseInt(item.id)" /> <el-option v-for="item in userOptions" :key="parseInt(item.id)" :label="item.nickname"
:value="parseInt(item.id)"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-form> </el-form>
...@@ -118,12 +134,14 @@ import {approveTask, getTaskListByProcessInstanceId, rejectTask, updateTaskAssig ...@@ -118,12 +134,14 @@ import {approveTask, getTaskListByProcessInstanceId, rejectTask, updateTaskAssig
import {getDate} from "@/utils/dateUtils"; import {getDate} from "@/utils/dateUtils";
import {listSimpleUsers} from "@/api/system/user"; import {listSimpleUsers} from "@/api/system/user";
import {getActivityList} from "@/api/bpm/activity"; import {getActivityList} from "@/api/bpm/activity";
import specialDiscount from "@/views/ecw/offer/specialDiscount"
// 流程实例的详情页,可用于审批 // 流程实例的详情页,可用于审批
export default { export default {
name: "ProcessInstanceDetail", name: "ProcessInstanceDetail",
components: { components: {
Parser Parser,
specialDiscount
}, },
data() { data() {
return { return {
...@@ -153,7 +171,7 @@ export default { ...@@ -153,7 +171,7 @@ export default {
runningTasks: [], runningTasks: [],
auditForms: [], auditForms: [],
auditRule: { auditRule: {
comment: [{ required: true, message: "审批建议不能为空", trigger: "blur" }], comment: [{required: true, message: "审批建议不能为空", trigger: "blur"}],
}, },
// 转派审批人 // 转派审批人
...@@ -164,7 +182,7 @@ export default { ...@@ -164,7 +182,7 @@ export default {
assigneeUserId: undefined, assigneeUserId: undefined,
}, },
rules: { rules: {
assigneeUserId: [{ required: true, message: "新审批人不能为空", trigger: "change" }], assigneeUserId: [{required: true, message: "新审批人不能为空", trigger: "change"}],
} }
}, },
...@@ -285,7 +303,7 @@ export default { ...@@ -285,7 +303,7 @@ export default {
fields: decodeFields(row.formFields) fields: decodeFields(row.formFields)
} }
} else if (row.formCustomCreatePath) { } else if (row.formCustomCreatePath) {
this.$router.push({ path: row.formCustomCreatePath}); this.$router.push({path: row.formCustomCreatePath});
// 这里暂时无需加载流程图,因为跳出到另外个 Tab; // 这里暂时无需加载流程图,因为跳出到另外个 Tab;
} }
}, },
......
This diff is collapsed.
<template>
<div>
<el-row type="flex" style="margin-top: 15px; margin-bottom: 15px" justify="center">
<el-col :xs="24" :sm="24" :md="24" :lg="20" :xl="16">
<div style="display: flex; justify-content: space-between;align-items: flex-end;">
<h2>出货详情</h2>
<div>
<el-button size="small">编辑</el-button>
<el-button size="small">操作</el-button>
<el-button type="primary" size="small">异常登记</el-button>
<el-button type="primary" size="small">费用登记</el-button>
<el-button type="danger" size="small">删除</el-button>
</div>
</div>
<el-card style="margin-top: 15px">
<el-descriptions :column="4" border>
<el-descriptions-item label="自编号"></el-descriptions-item>
<el-descriptions-item label="运输方式"></el-descriptions-item>
<el-descriptions-item label="出货渠道"></el-descriptions-item>
<!-- <el-descriptions-item label="柜型"></el-descriptions-item> -->
<el-descriptions-item label="状态"></el-descriptions-item>
<el-descriptions-item label="总计"></el-descriptions-item>
<el-descriptions-item label="始发地"></el-descriptions-item>
<el-descriptions-item label="目的地"></el-descriptions-item>
<el-descriptions-item label="SO.NO"></el-descriptions-item>
</el-descriptions>
</el-card>
<el-tabs style="margin-top: 15px" type="border-card">
<el-tab-pane label="明细">
<div class="detail-pane">
<p>当前部分:</p>
<el-select v-model="value" placeholder="请选择">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
<p class="box-weight">9箱子xxx</p>
<p class="document-status">单证状态:我司全代</p>
</div>
<el-table :data="[]" style="width: 100%">
<el-table-column prop="" label="序号"> </el-table-column>
<el-table-column prop="" label="订单号"> </el-table-column>
<el-table-column prop="" label="货物信息"> </el-table-column>
<el-table-column prop="" label="计划箱数"> </el-table-column>
<el-table-column prop="" label="实装箱数"> </el-table-column>
<el-table-column prop="" label="卸柜箱数"> </el-table-column>
<el-table-column prop="" label="提货点"> </el-table-column>
<el-table-column prop="" label="体积"> </el-table-column>
<el-table-column prop="" label="重量"> </el-table-column>
<el-table-column prop="" label="货值"> </el-table-column>
<el-table-column prop="" label="报关方式"> </el-table-column>
<el-table-column prop="" label="报关费用"> </el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane label="状态"></el-tab-pane>
<el-tab-pane label="费用">
<el-table :data="[]" style="width: 100%">
<el-table-column prop="" label="序号"> </el-table-column>
<el-table-column prop="" label="费用类型"> </el-table-column>
<el-table-column prop="" label="供应商"> </el-table-column>
<el-table-column prop="" label="金额"> </el-table-column>
<el-table-column prop="" label="实付金额"> </el-table-column>
<el-table-column prop="" label="实付日期"> </el-table-column>
<el-table-column prop="" label="操作"> </el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane label="异常">
<el-table :data="[]" style="width: 100%">
<el-table-column prop="" label="序号"> </el-table-column>
<el-table-column prop="" label="操作步骤"> </el-table-column>
<el-table-column prop="" label="异常"> </el-table-column>
<el-table-column prop="" label="异常详情"> </el-table-column>
<el-table-column prop="" label="异常时间"> </el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane label="表单">
<el-table :data="[]" style="width: 50%">
<el-table-column prop="" label="文件类型"> </el-table-column>
<el-table-column prop="" label="下载链接"> </el-table-column>
</el-table>
</el-tab-pane>
</el-tabs>
</el-col>
</el-row>
</div>
</template>
<script>
import { getCustomer, getCustomerSelect } from "@/api/ecw/customer";
import { DICT_TYPE, getDictDataLabel } from "@/utils/dict";
import { getProductTypeList } from "@/api/ecw/productType";
import { getNodeList } from "@/api/ecw/node";
import CustomerFollow from "@/components/CustomerFollow";
import { parseTime } from "@/utils/ruoyi";
import CustomerComplaint from "@/views/ecw/customerComplaint";
import { listServiceUser } from "@/api/system/user";
import { getCustomerContactsListByCustomer } from "@/api/ecw/customerContacts";
export default {
name: "boxQuery",
props: {
customerId: String,
},
components: {
CustomerFollow,
CustomerComplaint,
},
created() {
getNodeList().then((r) => {
this.nodeList = r.data;
});
getCustomer(this.id).then((response) => {
this.customer = { ...this.customer, ...response.data };
getCustomerContactsListByCustomer({ customerId: this.id }).then((r) => {
this.customerContacts = r.data;
});
});
getProductTypeList().then((r) => {
this.productTypeList = r.data;
});
getCustomerSelect().then((r) => {
this.customerSelect = r.data;
});
listServiceUser().then((r) => {
this.serviceUserList = r.data;
});
},
data() {
return {
DICT_TYPE,
getDictDataLabel,
parseTime,
nodeList: [],
productTypeList: [],
customerSelect: [],
serviceUserList: [],
customerContacts: [],
customer: {
id: undefined,
number: undefined,
name: undefined,
level: undefined,
country: undefined,
type: undefined,
agentId: undefined,
company: undefined,
address: undefined,
productType: undefined,
productId: undefined,
pickupPoint: undefined,
memberId: undefined,
birthday: undefined,
balance: undefined,
source: undefined,
picture: undefined,
customerService: undefined,
customerLines: [],
promoter: undefined,
status: undefined,
founder: undefined,
department: undefined,
invoiceTitle: undefined,
licenseNumber: undefined,
bank: undefined,
bankNumber: undefined,
project: undefined,
billingAddress: undefined,
billingTell: undefined,
taxRate: undefined,
remarks: undefined,
arrivalConfirm: undefined,
weightUnit: undefined,
createTime: undefined,
},
};
},
computed: {
productType() {
const productType = this.productTypeList.find(
(p) => p.id === parseInt(this.customer.productType)
);
return productType ? productType.titleZh : "";
},
pickupPoint() {
const pickupPoint = this.nodeList.find(
(p) => p.id === parseInt(this.customer.pickupPoint)
);
return pickupPoint ? pickupPoint.titleZh : "";
},
promoter() {
return (
this.customerSelect.find((e) => e.id === this.customer.promoter)
?.name || ""
);
},
customerService() {
return (
this.serviceUserList.find((e) => e.id === this.customer.customerService)
?.nickname || ""
);
},
id() {
return this.customerId ? parseInt(this.customerId) : undefined;
},
},
};
</script>
<style lang="scss" scoped>
.detail-pane {
display: flex;
.box-weight {
margin-left: 10px;
}
.document-status {
flex: 1;
text-align: right;
}
}
</style>
<template>
<el-scrollbar :vertical="true">
<section class="shipping-chart">
<div v-for="(nodes,index) in chartData['sea']" :key="index" class="chart-nodes">
<div>
<div v-for="node in nodes" :key="node.title" @click="nodeClick(node)" class="node-div">
<img :src="node.imgSrc" alt="">
<p>{{node.title}}</p>
</div>
</div>
<div class="chart-arrow" v-if="index !== (chartData['sea'].length-1)">
<p>箭头</p>
</div>
</div>
</section>
</el-scrollbar>
</template>
<script>
export default {
name: "flowChart",
props: {
shippingType: String,
},
data() {
return {
chartData: {
sea: [
[
{
title: "订舱",
imgSrc: require("@/assets/images/shipping/dc-start.png"),
type: "booking",
},
],
[
{
title: "预装",
imgSrc: require("@/assets/images/shipping/yz-start.png"),
type: "preinstalled",
},
{
title: "拖车",
imgSrc: require("@/assets/images/shipping/tc-start.png"),
type: "trailer",
},
],
[
{
title: "装柜",
imgSrc: require("@/assets/images/shipping/zg-start.png"),
type: "cabinet",
},
],
[
{
title: "报关",
imgSrc: require("@/assets/images/shipping/bg-start.png"),
type: "customsDeclaration",
},
{
title: "配船",
imgSrc: require("@/assets/images/shipping/pc-start.png"),
type: "ship",
},
{
title: "提单材料",
imgSrc: require("@/assets/images/shipping/tdcl-start.png"),
type: "subMaterial",
},
],
[
{
title: "驳船",
imgSrc: require("@/assets/images/shipping/bc-start.png"),
type: "barge",
},
],
[
{
title: "起运",
imgSrc: require("@/assets/images/shipping/qy-start.png"),
type: "departure",
},
],
[
{
title: "清关文件",
imgSrc: require("@/assets/images/shipping/qg-start.png"),
type: "clearanceDocument",
},
],
[
{
title: "到港",
imgSrc: require("@/assets/images/shipping/dg-start.png"),
type: "arrival",
},
],
[
{
title: "清关",
imgSrc: require("@/assets/images/shipping/qg-start.png"),
type: "customsClearance",
},
],
[
{
title: "卸柜",
imgSrc: require("@/assets/images/shipping/xg-start.png"),
type: "unloading",
},
],
[
{
title: "结算",
imgSrc: require("@/assets/images/shipping/js-start.png"),
type: "settlement",
isEnd: true,
},
],
],
},
};
},
methods: {
nodeClick(node) {
console.log(node);
},
},
};
</script>
<style lang="scss" scoped>
.shipping-chart {
display: flex;
justify-content: center;
.chart-nodes {
p {
margin: 0;
text-align: center;
}
display: flex;
align-items: center;
justify-content: center;
.node-div {
cursor: pointer;
}
}
.chart-arrow {
margin: 0 10px;
}
}
</style>
<template>
<div>
<el-row type="flex" style="margin-top: 15px; margin-bottom: 15px" justify="center">
<el-col :xs="24" :sm="24" :md="24" :lg="20" :xl="20">
<div style="display: flex; justify-content: space-between;align-items: flex-end;">
<h2>海运出货操作</h2>
</div>
<el-card style="margin-top: 15px">
<el-descriptions :column="5" border>
<el-descriptions-item label="自编号"></el-descriptions-item>
<el-descriptions-item label="运输方式"></el-descriptions-item>
<el-descriptions-item label="始发地"></el-descriptions-item>
<el-descriptions-item label="目的地"></el-descriptions-item>
<el-descriptions-item label="状态"></el-descriptions-item>
</el-descriptions>
</el-card>
<div class="shipping-flow">
<flowChart />
</div>
</el-col>
</el-row>
</div>
</template>
<script>
import flowChart from "./flowChart";
export default {
name: "shippingSea",
components: {
flowChart,
},
props: {
boxId: String,
},
};
</script>
<style lang="scss" scoped>
.shipping-flow {
margin-top: 15px;
}
</style>
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
>跟进</el-button> >跟进</el-button>
<el-button type="primary" size="mini" @click="toResult" <el-button type="primary" size="mini" @click="toResult"
>结果</el-button> >结果</el-button>
<el-button size="mini" type="primary">特价</el-button> <el-button size="mini" type="primary" @click="$router.push('/offer/special/' + offerId)">特价</el-button>
<el-button type="danger" size="mini" @click="handleDelete" <el-button type="danger" size="mini" @click="handleDelete"
>删除</el-button> >删除</el-button>
</div> </div>
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<div slot="header" class="card-title">跟进记录列表</div> <div slot="header" class="card-title">跟进记录列表</div>
<!-- 列表 --> <!-- 列表 -->
<div class="offer-header"> <div class="offer-header">
<span style="font-size: 15px;">报价单号:{{list.length>0?list[0].number:''}}</span> <span style="font-size: 15px;">报价单号:{{number}}</span>
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
>新增</el-button> >新增</el-button>
</div> </div>
...@@ -64,6 +64,7 @@ export default { ...@@ -64,6 +64,7 @@ export default {
offerId:0, offerId:0,
type:2 type:2
}, },
number:'',
relationId:0, relationId:0,
creatorName:'test', creatorName:'test',
}; };
...@@ -91,6 +92,7 @@ export default { ...@@ -91,6 +92,7 @@ export default {
getRelationID(){ getRelationID(){
getOffer(this.params.offerId).then(response => { getOffer(this.params.offerId).then(response => {
this.relationId = response.data.consignorId; this.relationId = response.data.consignorId;
this.number = response.data.number;
}) })
}, },
/** 新增按钮操作 */ /** 新增按钮操作 */
...@@ -99,7 +101,7 @@ export default { ...@@ -99,7 +101,7 @@ export default {
path: "/offer/createLog", path: "/offer/createLog",
query:{ query:{
offerId:this.params.offerId, offerId:this.params.offerId,
number:this.list[0].number, number:this.number,
relationId:this.relationId, relationId:this.relationId,
} }
}); });
......
...@@ -12,44 +12,68 @@ ...@@ -12,44 +12,68 @@
<el-table-column <el-table-column
prop="prodTitleZh" prop="prodTitleZh"
label="品名"> label="品名">
<template v-slot="{row}">
{{ row.prodTitleZh }}/{{ row.prodTitleEn }}
</template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="prodAttrIds" prop="prodAttrIds"
label="填单货物属性"> label="填单货物属性">
<template v-slot="{row}">
{{ getProductNamesByIds(row.prodAttrIds) }}
</template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="address" prop="address"
label="入库货物属性"> label="入库货物属性">
<template v-slot="{row}">
品牌:{{ row.brand ? '' : '' }}<br>
箱数:{{ row.num }}<br>
体积:{{ row.volume }}<br>
重量:{{ row.weight }}Kg
</template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="address" prop="updateTime"
:formatter="(_, __, v) => parseTime(v)"
label="最后操作时间"> label="最后操作时间">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
label="原价"> label="原价">
<template v-slot="{row}"> <template v-slot="{row}">
运费:{{ row.originalSeaFreight }}美元/立方米 清关费:{{ row.originalClearanceFreight }}奈拉/立方米 运费:{{ row.originalSeaFreight }} {{ currentMap[row.seaFreightCurrency] }}/{{ unitMap[row.seaFreightVolume] }}
<br>
清关费:{{ row.originalClearanceFreight }} {{ currentMap[row.clearanceFreightCurrency] }}/{{ unitMap[row.clearanceFreightVolume] }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="address" prop="address"
label="成本价"> label="成本价">
<template v-slot="{row}"> <template v-slot="{row}">
运费:{{ row.seaFreight }}美元/立方米 清关费:{{ row.clearanceFreight }}奈拉/立方米 运费:{{ row.seaFreight }} {{ currentMap[row.seaFreightCurrency] }}/{{ unitMap[row.seaFreightVolume] }}
<br>
清关费:{{ row.clearanceFreight }} {{ currentMap[row.clearanceFreightCurrency] }}/{{ unitMap[row.clearanceFreightVolume] }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="address" prop="address"
label="销售价"> label="销售价">
<template v-slot="{row}"> <template v-slot="{row}">
运费:{{ row.seaFreight }}美元/立方米 清关费:{{ row.clearanceFreight }}奈拉/立方米 运费:{{ row.seaFreight }} {{ currentMap[row.seaFreightCurrency] }}/{{ unitMap[row.seaFreightVolume] }}
<br>
清关费:{{ row.clearanceFreight }} {{ currentMap[row.clearanceFreightCurrency] }}/{{ unitMap[row.clearanceFreightVolume] }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column
prop="status"
:formatter="(v) => ['取消报价', '特价审批中', '需求确认(草稿)', '跟进中', '赢单', '输单', '报价完成', '审批通过', '审批拒绝'][v.status]"
label="审核状态">
</el-table-column>
<el-table-column <el-table-column
prop="address" prop="address"
label="操作"> label="操作">
<template v-slot="{row}"> <template v-slot="{row}">
<el-button size="mini" type="text" v-hasPermi="['ecw:offer:update']" @click="$router.push(`/offer/discount?offerId=${row.offerId}&offerProdId=${row.offerProdId}`)">优惠申请</el-button> <el-button size="mini" type="text" v-hasPermi="['ecw:offer:update']" @click="$router.push(`/offer/discount/${row.offerProdId}?offerId=${row.offerId}`)">优惠申请</el-button>
<!-- <el-button size="mini" type="text" v-hasPermi="['ecw:offer:update']">佣金规则</el-button>--> <!-- <el-button size="mini" type="text" v-hasPermi="['ecw:offer:update']">佣金规则</el-button>-->
<!-- <el-button size="mini" type="text" v-hasPermi="['ecw:offer:update']">管理折扣</el-button>--> <!-- <el-button size="mini" type="text" v-hasPermi="['ecw:offer:update']">管理折扣</el-button>-->
</template> </template>
...@@ -67,19 +91,24 @@ ...@@ -67,19 +91,24 @@
</template> </template>
<script> <script>
import {getOfferLogPage} from "@/api/ecw/offerLog"; import {DICT_TYPE, getDictDataLabel} from '@/utils/dict'
import {DICT_TYPE} from '@/utils/dict'
import {getOffer} from '@/api/ecw/offer' import {getOffer} from '@/api/ecw/offer'
import {getUnitList} from "@/api/ecw/unit"
import {getCurrencyList} from "@/api/ecw/currency"
import {getProductAttrList} from "@/api/ecw/productAttr"
import { parseTime } from '@/utils/ruoyi'
export default { export default {
name: "OfferSpecial", name: "OfferSpecial",
components: { components: {
}, },
props: { props: {
offerId: String offerId: String
}, },
data() { data() {
return { return {
parseTime,
DICT_TYPE,
getDictDataLabel,
// 遮罩层 // 遮罩层
loading: true, loading: true,
list: [], list: [],
...@@ -95,7 +124,10 @@ export default { ...@@ -95,7 +124,10 @@ export default {
offer: { offer: {
number: '', number: '',
offerProdRespVOList: [] offerProdRespVOList: []
} },
unitList:[],
currencyList:[],
productAttrList:[],
}; };
}, },
created() { created() {
...@@ -103,6 +135,9 @@ export default { ...@@ -103,6 +135,9 @@ export default {
this.params.offerId = this.offerId this.params.offerId = this.offerId
this.getOffer() this.getOffer()
} }
getUnitList().then(res => this.unitList = res.data)
getCurrencyList().then(res => this.currencyList = res.data)
getProductAttrList().then(res => this.productAttrList = res.data)
}, },
methods: { methods: {
getOffer(){ getOffer(){
...@@ -111,8 +146,36 @@ export default { ...@@ -111,8 +146,36 @@ export default {
this.loading = false this.loading = false
this.offer = response.data this.offer = response.data
}) })
},
getProductNamesByIds(ids){
const result = []
ids.split(',').forEach(e => {
this.productAttrList.forEach(f => {
if (parseInt(e) === f.id) {
result.push(f.attrName)
} }
})
})
return result.join(',')
} }
},
computed: {
currentMap(){
let map = {}
this.currencyList.forEach(item => {
map[item.id] = item.titleZh
})
return map
},
unitMap(){
let map = {}
this.unitList.forEach(item => {
map[item.id] = item.titleZh
})
return map
}
}
}; };
</script> </script>
<style> <style>
......
This diff is collapsed.
This diff is collapsed.
...@@ -62,6 +62,12 @@ ...@@ -62,6 +62,12 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="订单状态" align="center" prop="status">
<template slot-scope="scope">
<span>{{ scope.row.status | customsTypeFilter(customsTypeList) }}</span>
</template>
</el-table-column>
<el-table-column label="入仓箱数" align="center" prop="sumNum" /> <el-table-column label="入仓箱数" align="center" prop="sumNum" />
<el-table-column label="入仓方数" align="center" prop="sumVolume" /> <el-table-column label="入仓方数" align="center" prop="sumVolume" />
<el-table-column label="入仓重量" align="center" prop="sumWeight" /> <el-table-column label="入仓重量" align="center" prop="sumWeight" />
......
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