Commit 1d9ac66f authored by 邓春圆's avatar 邓春圆

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

parents a3da49d1 a555f571
...@@ -19,7 +19,7 @@ if (process.env.npm_config_preview || rawArgv.includes('--preview')) { ...@@ -19,7 +19,7 @@ if (process.env.npm_config_preview || rawArgv.includes('--preview')) {
app.use( app.use(
publicPath, publicPath,
serveStatic('./dist', { serveStatic('./dist', {
index: ['index.html', '/'] index: ['', '/']
}) })
) )
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
"author": "捷道", "author": "捷道",
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {
"local": "vue-cli-service serve --mode local",
"dev": "vue-cli-service serve", "dev": "vue-cli-service serve",
"build:dev": "vue-cli-service build --mode dev", "build:dev": "vue-cli-service build --mode dev",
"build:prod": "vue-cli-service build", "build:prod": "vue-cli-service build",
......
...@@ -89,3 +89,10 @@ export function batchOff(query) { ...@@ -89,3 +89,10 @@ export function batchOff(query) {
}) })
} }
export function getPriceSnapshotList(priceId){
return request({
url: '/ecw/product-price/priceSnapshotList',
method: 'get',
params: {priceId}
})
}
\ No newline at end of file
...@@ -72,7 +72,7 @@ ...@@ -72,7 +72,7 @@
<el-button :size="headerButtonSize" icon="el-icon-refresh" @click="processRestart" /> <el-button :size="headerButtonSize" icon="el-icon-refresh" @click="processRestart" />
</el-tooltip> </el-tooltip>
</el-button-group> </el-button-group>
<el-button :size="headerButtonSize" :type="headerButtonType" icon="el-icon-plus" @click="processSave">保存模型</el-button> <el-button :size="headerButtonSize" :type="headerButtonType" icon="el-icon-plus" @click="processSave" :disabled = "simulationStatus">保存模型</el-button>
</template> </template>
<!-- 用于打开本地文件--> <!-- 用于打开本地文件-->
<input type="file" id="files" ref="refFile" style="display: none" accept=".xml, .bpmn" @change="importLocalFile" /> <input type="file" id="files" ref="refFile" style="display: none" accept=".xml, .bpmn" @change="importLocalFile" />
...@@ -118,6 +118,7 @@ export default { ...@@ -118,6 +118,7 @@ export default {
componentName: "MyProcessDesigner", componentName: "MyProcessDesigner",
props: { props: {
value: String, // xml 字符串 value: String, // xml 字符串
valueWatch: true, // xml 字符串的 watch 状态
processId: String, // 流程 key 标识 processId: String, // 流程 key 标识
processName: String, // 流程 name 名字 processName: String, // 流程 name 名字
formId: Number, // 流程 form 表单编号 formId: Number, // 流程 form 表单编号
...@@ -252,11 +253,6 @@ export default { ...@@ -252,11 +253,6 @@ export default {
this.bpmnModeler = null; this.bpmnModeler = null;
}); });
}, },
watch: {
value: function (newValue) { // 在 xmlString 发生变化时,重新创建,从而绘制流程图
this.createNewDiagram(newValue);
}
},
methods: { methods: {
initBpmnModeler() { initBpmnModeler() {
if (this.bpmnModeler) return; if (this.bpmnModeler) return;
...@@ -307,7 +303,7 @@ export default { ...@@ -307,7 +303,7 @@ export default {
let newName = this.processName || `业务流程_${new Date().getTime()}`; let newName = this.processName || `业务流程_${new Date().getTime()}`;
let xmlString = xml || DefaultEmptyXML(newId, newName, this.prefix); let xmlString = xml || DefaultEmptyXML(newId, newName, this.prefix);
try { try {
console.log(this.bpmnModeler.importXML); // console.log(this.bpmnModeler.importXML);
let { warnings } = await this.bpmnModeler.importXML(xmlString); let { warnings } = await this.bpmnModeler.importXML(xmlString);
if (warnings && warnings.length) { if (warnings && warnings.length) {
warnings.forEach(warn => console.warn(warn)); warnings.forEach(warn => console.warn(warn));
...@@ -459,7 +455,7 @@ export default { ...@@ -459,7 +455,7 @@ export default {
this.previewModelVisible = true; this.previewModelVisible = true;
}); });
}, },
/* ------------------------------------------------ 道源码 methods ------------------------------------------------------ */ /* ------------------------------------------------ 道源码 methods ------------------------------------------------------ */
async processSave() { async processSave() {
const { err, xml } = await this.bpmnModeler.saveXML(); const { err, xml } = await this.bpmnModeler.saveXML();
// 读取异常时抛出异常 // 读取异常时抛出异常
...@@ -478,8 +474,3 @@ export default { ...@@ -478,8 +474,3 @@ export default {
} }
}; };
</script> </script>
<style scoped>
.my-process-designer{
height: calc(100vh - 84px - 40px);
}
</style>
...@@ -90,15 +90,14 @@ export default { ...@@ -90,15 +90,14 @@ export default {
let xmlString = xml || DefaultEmptyXML(newId, newName, this.prefix); let xmlString = xml || DefaultEmptyXML(newId, newName, this.prefix);
try { try {
// console.log(this.bpmnModeler.importXML); // console.log(this.bpmnModeler.importXML);
let { warnings } = await this.bpmnModeler.importXML(xmlString) let { warnings } = await this.bpmnModeler.importXML(xmlString);
// 220906 增加一个缩放,自动适应尺寸
this.bpmnModeler.get('canvas').zoom('fit-viewport');
if (warnings && warnings.length) { if (warnings && warnings.length) {
warnings.forEach(warn => console.warn(warn)); warnings.forEach(warn => console.warn(warn));
} }
// 高亮流程图 // 高亮流程图
await this.highlightDiagram(); await this.highlightDiagram();
const canvas = this.bpmnModeler.get('canvas');
canvas.zoom("fit-viewport", "auto");
} catch (e) { } catch (e) {
console.error(e); console.error(e);
// console.error(`[Process Designer Warn]: ${e?.message || e}`); // console.error(`[Process Designer Warn]: ${e?.message || e}`);
...@@ -117,23 +116,25 @@ export default { ...@@ -117,23 +116,25 @@ export default {
let todoActivity = activityList.find(m => !m.endTime) // 找到待办的任务 let todoActivity = activityList.find(m => !m.endTime) // 找到待办的任务
let endActivity = activityList[activityList.length - 1] // 获得最后一个任务 let endActivity = activityList[activityList.length - 1] // 获得最后一个任务
// debugger // debugger
console.log(this.bpmnModeler.getDefinitions().rootElements[0].flowElements); // console.log(this.bpmnModeler.getDefinitions().rootElements[0].flowElements);
this.bpmnModeler.getDefinitions().rootElements[0].flowElements?.forEach(n => { this.bpmnModeler.getDefinitions().rootElements[0].flowElements?.forEach(n => {
let activity = activityList.find(m => m.key === n.id) // 找到对应的活动 let activity = activityList.find(m => m.key === n.id) // 找到对应的活动
if (n.$type === 'bpmn:UserTask') { // 用户任务
if (!activity) { if (!activity) {
return; return;
} }
if (n.$type === 'bpmn:UserTask') { // 用户任务
// 处理用户任务的高亮 // 处理用户任务的高亮
const task = this.taskList.find(m => m.id === activity.taskId); // 找到活动对应的 taskId const task = this.taskList.find(m => m.id === activity.taskId); // 找到活动对应的 taskId
if (task) { if (!task) {
return;
}
// 高亮任务
canvas.addMarker(n.id, this.getResultCss(task.result)); canvas.addMarker(n.id, this.getResultCss(task.result));
// 如果非通过,就不走后面的线条了 // 如果非通过,就不走后面的线条了
if (task.result !== 2) { if (task.result !== 2) {
return; return;
} }
}
// 处理 outgoing 出线 // 处理 outgoing 出线
const outgoing = this.getActivityOutgoing(activity); const outgoing = this.getActivityOutgoing(activity);
outgoing?.forEach(nn => { outgoing?.forEach(nn => {
...@@ -157,9 +158,6 @@ export default { ...@@ -157,9 +158,6 @@ export default {
} }
}); });
} else if (n.$type === 'bpmn:ExclusiveGateway') { // 排它网关 } else if (n.$type === 'bpmn:ExclusiveGateway') { // 排它网关
if (!activity) {
return
}
// 设置【bpmn:ExclusiveGateway】排它网关的高亮 // 设置【bpmn:ExclusiveGateway】排它网关的高亮
canvas.addMarker(n.id, this.getActivityHighlightCss(activity)); canvas.addMarker(n.id, this.getActivityHighlightCss(activity));
// 查找需要高亮的连线 // 查找需要高亮的连线
...@@ -184,9 +182,6 @@ export default { ...@@ -184,9 +182,6 @@ export default {
canvas.addMarker(matchNN.id, this.getActivityHighlightCss(matchActivity)); canvas.addMarker(matchNN.id, this.getActivityHighlightCss(matchActivity));
} }
} else if (n.$type === 'bpmn:ParallelGateway') { // 并行网关 } else if (n.$type === 'bpmn:ParallelGateway') { // 并行网关
if (!activity) {
return
}
// 设置【bpmn:ParallelGateway】并行网关的高亮 // 设置【bpmn:ParallelGateway】并行网关的高亮
canvas.addMarker(n.id, this.getActivityHighlightCss(activity)); canvas.addMarker(n.id, this.getActivityHighlightCss(activity));
n.outgoing?.forEach(nn => { n.outgoing?.forEach(nn => {
...@@ -212,6 +207,17 @@ export default { ...@@ -212,6 +207,17 @@ export default {
return; return;
} }
canvas.addMarker(n.id, this.getResultCss(this.processInstance.result)); canvas.addMarker(n.id, this.getResultCss(this.processInstance.result));
} else if (n.$type === 'bpmn:ServiceTask'){ //服务任务
if(activity.startTime>0 && activity.endTime===0){//进入执行,标识进行色
canvas.addMarker(n.id, this.getResultCss(1));
}
if(activity.endTime>0){// 执行完成,节点标识完成色, 所有outgoing标识完成色。
canvas.addMarker(n.id, this.getResultCss(2));
const outgoing = this.getActivityOutgoing(activity)
outgoing?.forEach(out=>{
canvas.addMarker(out.id,this.getResultCss(2))
})
}
} }
}) })
}, },
...@@ -219,13 +225,13 @@ export default { ...@@ -219,13 +225,13 @@ export default {
return activity.endTime ? 'highlight' : 'highlight-todo'; return activity.endTime ? 'highlight' : 'highlight-todo';
}, },
getResultCss(result) { getResultCss(result) {
if (result === 1) { if (result === 1) { // 审批中
return 'highlight-todo'; return 'highlight-todo';
} else if (result === 2) { } else if (result === 2) { // 已通过
return 'highlight'; return 'highlight';
} else if (result === 3) { } else if (result === 3) { // 不通过
return 'highlight-reject'; return 'highlight-reject';
} else if (result === 4) { } else if (result === 4) { // 已取消
return 'highlight-cancel'; return 'highlight-cancel';
} }
return ''; return '';
...@@ -267,6 +273,10 @@ export default { ...@@ -267,6 +273,10 @@ export default {
!this.elementOverlayIds && (this.elementOverlayIds = {}); !this.elementOverlayIds && (this.elementOverlayIds = {});
!this.overlays && (this.overlays = this.bpmnModeler.get("overlays")); !this.overlays && (this.overlays = this.bpmnModeler.get("overlays"));
// 展示信息 // 展示信息
const activity = this.activityList.find(m => m.key === element.id);
if (!activity) {
return;
}
if (!this.elementOverlayIds[element.id] && element.type !== "bpmn:Process") { if (!this.elementOverlayIds[element.id] && element.type !== "bpmn:Process") {
let html = `<div class="element-overlays"> let html = `<div class="element-overlays">
<p>Elemet id: ${element.id}</p> <p>Elemet id: ${element.id}</p>
...@@ -278,10 +288,6 @@ export default { ...@@ -278,10 +288,6 @@ export default {
<p>创建时间:${this.parseTime(this.processInstance.createTime)}`; <p>创建时间:${this.parseTime(this.processInstance.createTime)}`;
} else if (element.type === 'bpmn:UserTask') { } else if (element.type === 'bpmn:UserTask') {
// debugger // debugger
const activity = this.activityList.find(m => m.key === element.id);
if (!activity) {
return;
}
let task = this.taskList.find(m => m.id === activity.taskId); // 找到活动对应的 taskId let task = this.taskList.find(m => m.id === activity.taskId); // 找到活动对应的 taskId
if (!task) { if (!task) {
return; return;
...@@ -293,9 +299,17 @@ export default { ...@@ -293,9 +299,17 @@ export default {
if (task.endTime) { if (task.endTime) {
html += `<p>结束时间:${this.parseTime(task.endTime)}</p>` html += `<p>结束时间:${this.parseTime(task.endTime)}</p>`
} }
if (task.comment) { if (task.reason) {
html += `<p>审批建议:${task.comment}</p>` html += `<p>审批建议:${task.reason}</p>`
} }
} else if (element.type === 'bpmn:ServiceTask' && this.processInstance) {
if(activity.startTime>0){
html = `<p>创建时间:${this.parseTime(activity.startTime)}</p>`;
}
if(activity.endTime>0){
html += `<p>结束时间:${this.parseTime(activity.endTime)}</p>`
}
console.log(html)
} else if (element.type === 'bpmn:EndEvent' && this.processInstance) { } else if (element.type === 'bpmn:EndEvent' && this.processInstance) {
html = `<p>结果:${this.getDictDataLabel(this.DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT, this.processInstance.result)}</p>`; html = `<p>结果:${this.getDictDataLabel(this.DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT, this.processInstance.result)}</p>`;
if (this.processInstance.endTime) { if (this.processInstance.endTime) {
...@@ -317,7 +331,8 @@ export default { ...@@ -317,7 +331,8 @@ export default {
}; };
</script> </script>
<style scoped> <style>
/** 处理中 */ /** 处理中 */
.highlight-todo.djs-connection > .djs-visual > path { .highlight-todo.djs-connection > .djs-visual > path {
stroke: #1890ff !important; stroke: #1890ff !important;
...@@ -331,13 +346,13 @@ export default { ...@@ -331,13 +346,13 @@ export default {
fill-opacity: 0.2 !important; fill-opacity: 0.2 !important;
} }
/deep/.highlight-todo.djs-connection > .djs-visual > path { :deep(.highlight-todo.djs-connection > .djs-visual > path) {
stroke: #1890ff !important; stroke: #1890ff !important;
stroke-dasharray: 4px !important; stroke-dasharray: 4px !important;
fill-opacity: 0.2 !important; fill-opacity: 0.2 !important;
marker-end: url(#sequenceflow-end-_E7DFDF-_E7DFDF-803g1kf6zwzmcig1y2ulm5egr); marker-end: url(#sequenceflow-end-_E7DFDF-_E7DFDF-803g1kf6zwzmcig1y2ulm5egr);
} }
/deep/.highlight-todo.djs-shape .djs-visual > :nth-child(1) { :deep(.highlight-todo.djs-shape .djs-visual > :nth-child(1)) {
fill: #1890ff !important; fill: #1890ff !important;
stroke: #1890ff !important; stroke: #1890ff !important;
stroke-dasharray: 4px !important; stroke-dasharray: 4px !important;
...@@ -366,20 +381,20 @@ export default { ...@@ -366,20 +381,20 @@ export default {
fill: green !important; /* color elements as green */ fill: green !important; /* color elements as green */
} }
/deep/.highlight.djs-shape .djs-visual > :nth-child(1) { :deep(.highlight.djs-shape .djs-visual > :nth-child(1)) {
fill: green !important; fill: green !important;
stroke: green !important; stroke: green !important;
fill-opacity: 0.2 !important; fill-opacity: 0.2 !important;
} }
/deep/.highlight.djs-shape .djs-visual > :nth-child(2) { :deep(.highlight.djs-shape .djs-visual > :nth-child(2)) {
fill: green !important; fill: green !important;
} }
/deep/.highlight.djs-shape .djs-visual > path { :deep(.highlight.djs-shape .djs-visual > path) {
fill: green !important; fill: green !important;
fill-opacity: 0.2 !important; fill-opacity: 0.2 !important;
stroke: green !important; stroke: green !important;
} }
/deep/.highlight.djs-connection > .djs-visual > path { :deep(.highlight.djs-connection > .djs-visual > path) {
stroke: green !important; stroke: green !important;
} }
...@@ -405,20 +420,20 @@ export default { ...@@ -405,20 +420,20 @@ export default {
fill: red !important; /* color elements as green */ fill: red !important; /* color elements as green */
} }
/deep/.highlight-reject.djs-shape .djs-visual > :nth-child(1) { :deep(.highlight-reject.djs-shape .djs-visual > :nth-child(1)) {
fill: red !important; fill: red !important;
stroke: red !important; stroke: red !important;
fill-opacity: 0.2 !important; fill-opacity: 0.2 !important;
} }
/deep/.highlight-reject.djs-shape .djs-visual > :nth-child(2) { :deep(.highlight-reject.djs-shape .djs-visual > :nth-child(2)) {
fill: red !important; fill: red !important;
} }
/deep/.highlight-reject.djs-shape .djs-visual > path { :deep(.highlight-reject.djs-shape .djs-visual > path) {
fill: red !important; fill: red !important;
fill-opacity: 0.2 !important; fill-opacity: 0.2 !important;
stroke: red !important; stroke: red !important;
} }
/deep/.highlight-reject.djs-connection > .djs-visual > path { :deep(.highlight-reject.djs-connection > .djs-visual > path) {
stroke: red !important; stroke: red !important;
} }
...@@ -444,20 +459,20 @@ export default { ...@@ -444,20 +459,20 @@ export default {
fill: grey !important; /* color elements as green */ fill: grey !important; /* color elements as green */
} }
/deep/.highlight-cancel.djs-shape .djs-visual > :nth-child(1) { :deep(.highlight-cancel.djs-shape .djs-visual > :nth-child(1)) {
fill: grey !important; fill: grey !important;
stroke: grey !important; stroke: grey !important;
fill-opacity: 0.2 !important; fill-opacity: 0.2 !important;
} }
/deep/.highlight-cancel.djs-shape .djs-visual > :nth-child(2) { :deep(.highlight-cancel.djs-shape .djs-visual > :nth-child(2)) {
fill: grey !important; fill: grey !important;
} }
/deep/.highlight-cancel.djs-shape .djs-visual > path { :deep(.highlight-cancel.djs-shape .djs-visual > path) {
fill: grey !important; fill: grey !important;
fill-opacity: 0.2 !important; fill-opacity: 0.2 !important;
stroke: grey !important; stroke: grey !important;
} }
/deep/.highlight-cancel.djs-connection > .djs-visual > path { :deep(.highlight-cancel.djs-connection > .djs-visual > path) {
stroke: grey !important; stroke: grey !important;
} }
......
...@@ -49,14 +49,14 @@ export default function ContextPadProvider( ...@@ -49,14 +49,14 @@ export default function ContextPadProvider(
} }
eventBus.on("create.end", 250, function(event) { eventBus.on("create.end", 250, function(event) {
var context = event.context, const context = event.context,
shape = context.shape; shape = context.shape
if (!hasPrimaryModifier(event) || !contextPad.isOpen(shape)) { if (!hasPrimaryModifier(event) || !contextPad.isOpen(shape)) {
return; return;
} }
var entries = contextPad.getEntries(shape); const entries = contextPad.getEntries(shape)
if (entries.replace) { if (entries.replace) {
entries.replace.action.click(event, shape); entries.replace.action.click(event, shape);
...@@ -81,7 +81,7 @@ ContextPadProvider.$inject = [ ...@@ -81,7 +81,7 @@ ContextPadProvider.$inject = [
]; ];
ContextPadProvider.prototype.getContextPadEntries = function(element) { ContextPadProvider.prototype.getContextPadEntries = function(element) {
var contextPad = this._contextPad, const contextPad = this._contextPad,
modeling = this._modeling, modeling = this._modeling,
elementFactory = this._elementFactory, elementFactory = this._elementFactory,
connect = this._connect, connect = this._connect,
...@@ -90,15 +90,15 @@ ContextPadProvider.prototype.getContextPadEntries = function(element) { ...@@ -90,15 +90,15 @@ ContextPadProvider.prototype.getContextPadEntries = function(element) {
canvas = this._canvas, canvas = this._canvas,
rules = this._rules, rules = this._rules,
autoPlace = this._autoPlace, autoPlace = this._autoPlace,
translate = this._translate; translate = this._translate
var actions = {}; const actions = {}
if (element.type === "label") { if (element.type === "label") {
return actions; return actions;
} }
var businessObject = element.businessObject; const businessObject = element.businessObject
function startConnect(event, element) { function startConnect(event, element) {
connect.start(event, element); connect.start(event, element);
...@@ -109,21 +109,21 @@ ContextPadProvider.prototype.getContextPadEntries = function(element) { ...@@ -109,21 +109,21 @@ ContextPadProvider.prototype.getContextPadEntries = function(element) {
} }
function getReplaceMenuPosition(element) { function getReplaceMenuPosition(element) {
var Y_OFFSET = 5; const Y_OFFSET = 5
var diagramContainer = canvas.getContainer(), const diagramContainer = canvas.getContainer(),
pad = contextPad.getPad(element).html; pad = contextPad.getPad(element).html
var diagramRect = diagramContainer.getBoundingClientRect(), const diagramRect = diagramContainer.getBoundingClientRect(),
padRect = pad.getBoundingClientRect(); padRect = pad.getBoundingClientRect()
var top = padRect.top - diagramRect.top; const top = padRect.top - diagramRect.top
var left = padRect.left - diagramRect.left; const left = padRect.left - diagramRect.left
var pos = { const pos = {
x: left, x: left,
y: top + padRect.height + Y_OFFSET y: top + padRect.height + Y_OFFSET
}; }
return pos; return pos;
} }
...@@ -145,19 +145,19 @@ ContextPadProvider.prototype.getContextPadEntries = function(element) { ...@@ -145,19 +145,19 @@ ContextPadProvider.prototype.getContextPadEntries = function(element) {
} }
function appendStart(event, element) { function appendStart(event, element) {
var shape = elementFactory.createShape(assign({ type: type }, options)); const shape = elementFactory.createShape(assign({ type: type }, options))
create.start(event, shape, { create.start(event, shape, {
source: element source: element
}); });
} }
var append = autoPlace const append = autoPlace
? function(event, element) { ? function(event, element) {
var shape = elementFactory.createShape(assign({ type: type }, options)); const shape = elementFactory.createShape(assign({ type: type }, options))
autoPlace.append(element, shape); autoPlace.append(element, shape)
} }
: appendStart; : appendStart
return { return {
group: "model", group: "model",
...@@ -182,7 +182,7 @@ ContextPadProvider.prototype.getContextPadEntries = function(element) { ...@@ -182,7 +182,7 @@ ContextPadProvider.prototype.getContextPadEntries = function(element) {
} }
if (isAny(businessObject, ["bpmn:Lane", "bpmn:Participant"]) && isExpanded(businessObject)) { if (isAny(businessObject, ["bpmn:Lane", "bpmn:Participant"]) && isExpanded(businessObject)) {
var childLanes = getChildLanes(element); const childLanes = getChildLanes(element)
assign(actions, { assign(actions, {
"lane-insert-above": { "lane-insert-above": {
...@@ -302,9 +302,9 @@ ContextPadProvider.prototype.getContextPadEntries = function(element) { ...@@ -302,9 +302,9 @@ ContextPadProvider.prototype.getContextPadEntries = function(element) {
title: translate("Change type"), title: translate("Change type"),
action: { action: {
click: function(event, element) { click: function(event, element) {
var position = assign(getReplaceMenuPosition(element), { const position = assign(getReplaceMenuPosition(element), {
cursor: { x: event.x, y: event.y } cursor: { x: event.x, y: event.y }
}); })
popupMenu.open(element, "bpmn-replace", position); popupMenu.open(element, "bpmn-replace", position);
} }
...@@ -350,7 +350,7 @@ ContextPadProvider.prototype.getContextPadEntries = function(element) { ...@@ -350,7 +350,7 @@ ContextPadProvider.prototype.getContextPadEntries = function(element) {
} }
// delete element entry, only show if allowed by rules // delete element entry, only show if allowed by rules
var deleteAllowed = rules.allowed("elements.delete", { elements: [element] }); let deleteAllowed = rules.allowed('elements.delete', { elements: [element] })
if (isArray(deleteAllowed)) { if (isArray(deleteAllowed)) {
// was the element returned as a deletion candidate? // was the element returned as a deletion candidate?
...@@ -376,10 +376,10 @@ ContextPadProvider.prototype.getContextPadEntries = function(element) { ...@@ -376,10 +376,10 @@ ContextPadProvider.prototype.getContextPadEntries = function(element) {
// helpers ///////// // helpers /////////
function isEventType(eventBo, type, definition) { function isEventType(eventBo, type, definition) {
var isType = eventBo.$instanceOf(type); const isType = eventBo.$instanceOf(type)
var isDefinition = false; let isDefinition = false
var definitions = eventBo.eventDefinitions || []; const definitions = eventBo.eventDefinitions || []
forEach(definitions, function(def) { forEach(definitions, function(def) {
if (def.$type === definition) { if (def.$type === definition) {
isDefinition = true; isDefinition = true;
......
"use strict"; "use strict";
var some = require("min-dash").some; const some = require('min-dash').some
var ALLOWED_TYPES = { const ALLOWED_TYPES = {
FailedJobRetryTimeCycle: ["bpmn:StartEvent", "bpmn:BoundaryEvent", "bpmn:IntermediateCatchEvent", "bpmn:Activity"], FailedJobRetryTimeCycle: ['bpmn:StartEvent', 'bpmn:BoundaryEvent', 'bpmn:IntermediateCatchEvent', 'bpmn:Activity'],
Connector: ["bpmn:EndEvent", "bpmn:IntermediateThrowEvent"], Connector: ['bpmn:EndEvent', 'bpmn:IntermediateThrowEvent'],
Field: ["bpmn:EndEvent", "bpmn:IntermediateThrowEvent"] Field: ['bpmn:EndEvent', 'bpmn:IntermediateThrowEvent']
}; }
function is(element, type) { function is(element, type) {
return element && typeof element.$instanceOf === "function" && element.$instanceOf(type); return element && typeof element.$instanceOf === "function" && element.$instanceOf(type);
...@@ -32,8 +32,8 @@ function anyType(element, types) { ...@@ -32,8 +32,8 @@ function anyType(element, types) {
} }
function isAllowed(propName, propDescriptor, newElement) { function isAllowed(propName, propDescriptor, newElement) {
var name = propDescriptor.name, const name = propDescriptor.name,
types = ALLOWED_TYPES[name.replace(/activiti:/, "")]; types = ALLOWED_TYPES[name.replace(/activiti:/, '')]
return name === propName && anyType(newElement, types); return name === propName && anyType(newElement, types);
} }
...@@ -42,8 +42,8 @@ function ActivitiModdleExtension(eventBus) { ...@@ -42,8 +42,8 @@ function ActivitiModdleExtension(eventBus) {
eventBus.on( eventBus.on(
"property.clone", "property.clone",
function(context) { function(context) {
var newElement = context.newElement, const newElement = context.newElement,
propDescriptor = context.propertyDescriptor; propDescriptor = context.propertyDescriptor
this.canCloneProperty(newElement, propDescriptor); this.canCloneProperty(newElement, propDescriptor);
}, },
......
"use strict"; "use strict";
var isFunction = require("min-dash").isFunction, const isFunction = require('min-dash').isFunction,
isObject = require("min-dash").isObject, isObject = require('min-dash').isObject,
some = require("min-dash").some; some = require('min-dash').some
var WILDCARD = "*"; const WILDCARD = '*'
function CamundaModdleExtension(eventBus) { function CamundaModdleExtension(eventBus) {
var self = this; const self = this
eventBus.on("moddleCopy.canCopyProperty", function(context) { eventBus.on("moddleCopy.canCopyProperty", function(context) {
var property = context.property, const property = context.property,
parent = context.parent; parent = context.parent
return self.canCopyProperty(property, parent); return self.canCopyProperty(property, parent);
}); });
...@@ -45,14 +45,14 @@ CamundaModdleExtension.prototype.canCopyProperty = function(property, parent) { ...@@ -45,14 +45,14 @@ CamundaModdleExtension.prototype.canCopyProperty = function(property, parent) {
CamundaModdleExtension.prototype.canHostInputOutput = function(parent) { CamundaModdleExtension.prototype.canHostInputOutput = function(parent) {
// allowed in camunda:Connector // allowed in camunda:Connector
var connector = getParent(parent, "camunda:Connector"); const connector = getParent(parent, 'camunda:Connector')
if (connector) { if (connector) {
return true; return true;
} }
// special rules inside bpmn:FlowNode // special rules inside bpmn:FlowNode
var flowNode = getParent(parent, "bpmn:FlowNode"); const flowNode = getParent(parent, 'bpmn:FlowNode')
if (!flowNode) { if (!flowNode) {
return false; return false;
...@@ -62,15 +62,13 @@ CamundaModdleExtension.prototype.canHostInputOutput = function(parent) { ...@@ -62,15 +62,13 @@ CamundaModdleExtension.prototype.canHostInputOutput = function(parent) {
return false; return false;
} }
if (is(flowNode, "bpmn:SubProcess") && flowNode.get("triggeredByEvent")) { return !(is(flowNode, "bpmn:SubProcess") && flowNode.get("triggeredByEvent"));
return false;
}
return true;
}; };
CamundaModdleExtension.prototype.canHostConnector = function(parent) { CamundaModdleExtension.prototype.canHostConnector = function(parent) {
var serviceTaskLike = getParent(parent, "camunda:ServiceTaskLike"); const serviceTaskLike = getParent(parent, 'camunda:ServiceTaskLike')
if (is(serviceTaskLike, "bpmn:MessageEventDefinition")) { if (is(serviceTaskLike, "bpmn:MessageEventDefinition")) {
// only allow on throw and end events // only allow on throw and end events
...@@ -81,13 +79,13 @@ CamundaModdleExtension.prototype.canHostConnector = function(parent) { ...@@ -81,13 +79,13 @@ CamundaModdleExtension.prototype.canHostConnector = function(parent) {
}; };
CamundaModdleExtension.prototype.canHostIn = function(parent) { CamundaModdleExtension.prototype.canHostIn = function(parent) {
var callActivity = getParent(parent, "bpmn:CallActivity"); const callActivity = getParent(parent, 'bpmn:CallActivity')
if (callActivity) { if (callActivity) {
return true; return true;
} }
var signalEventDefinition = getParent(parent, "bpmn:SignalEventDefinition"); const signalEventDefinition = getParent(parent, 'bpmn:SignalEventDefinition')
if (signalEventDefinition) { if (signalEventDefinition) {
// only allow on throw and end events // only allow on throw and end events
...@@ -129,9 +127,9 @@ function getParent(element, type) { ...@@ -129,9 +127,9 @@ function getParent(element, type) {
function isAllowedInParent(property, parent) { function isAllowedInParent(property, parent) {
// (1) find property descriptor // (1) find property descriptor
var descriptor = property.$type && property.$model.getTypeDescriptor(property.$type); const descriptor = property.$type && property.$model.getTypeDescriptor(property.$type)
var allowedIn = descriptor && descriptor.meta && descriptor.meta.allowedIn; const allowedIn = descriptor && descriptor.meta && descriptor.meta.allowedIn
if (!allowedIn || isWildcard(allowedIn)) { if (!allowedIn || isWildcard(allowedIn)) {
return true; return true;
......
"use strict"; "use strict";
var some = require("min-dash").some; const some = require('min-dash').some
var ALLOWED_TYPES = { const ALLOWED_TYPES = {
FailedJobRetryTimeCycle: ["bpmn:StartEvent", "bpmn:BoundaryEvent", "bpmn:IntermediateCatchEvent", "bpmn:Activity"], FailedJobRetryTimeCycle: ['bpmn:StartEvent', 'bpmn:BoundaryEvent', 'bpmn:IntermediateCatchEvent', 'bpmn:Activity'],
Connector: ["bpmn:EndEvent", "bpmn:IntermediateThrowEvent"], Connector: ['bpmn:EndEvent', 'bpmn:IntermediateThrowEvent'],
Field: ["bpmn:EndEvent", "bpmn:IntermediateThrowEvent"] Field: ['bpmn:EndEvent', 'bpmn:IntermediateThrowEvent']
}; }
function is(element, type) { function is(element, type) {
return element && typeof element.$instanceOf === "function" && element.$instanceOf(type); return element && typeof element.$instanceOf === "function" && element.$instanceOf(type);
...@@ -32,8 +32,8 @@ function anyType(element, types) { ...@@ -32,8 +32,8 @@ function anyType(element, types) {
} }
function isAllowed(propName, propDescriptor, newElement) { function isAllowed(propName, propDescriptor, newElement) {
var name = propDescriptor.name, const name = propDescriptor.name,
types = ALLOWED_TYPES[name.replace(/flowable:/, "")]; types = ALLOWED_TYPES[name.replace(/flowable:/, '')]
return name === propName && anyType(newElement, types); return name === propName && anyType(newElement, types);
} }
...@@ -42,8 +42,8 @@ function FlowableModdleExtension(eventBus) { ...@@ -42,8 +42,8 @@ function FlowableModdleExtension(eventBus) {
eventBus.on( eventBus.on(
"property.clone", "property.clone",
function(context) { function(context) {
var newElement = context.newElement, const newElement = context.newElement,
propDescriptor = context.propertyDescriptor; propDescriptor = context.propertyDescriptor
this.canCloneProperty(newElement, propDescriptor); this.canCloneProperty(newElement, propDescriptor);
}, },
......
...@@ -10,18 +10,18 @@ F.prototype = PaletteProvider.prototype; // 核心,将父类的原型赋值给 ...@@ -10,18 +10,18 @@ F.prototype = PaletteProvider.prototype; // 核心,将父类的原型赋值给
// 利用中介函数重写原型链方法 // 利用中介函数重写原型链方法
F.prototype.getPaletteEntries = function() { F.prototype.getPaletteEntries = function() {
var actions = {}, const actions = {},
create = this._create, create = this._create,
elementFactory = this._elementFactory, elementFactory = this._elementFactory,
spaceTool = this._spaceTool, spaceTool = this._spaceTool,
lassoTool = this._lassoTool, lassoTool = this._lassoTool,
handTool = this._handTool, handTool = this._handTool,
globalConnect = this._globalConnect, globalConnect = this._globalConnect,
translate = this._translate; translate = this._translate
function createAction(type, group, className, title, options) { function createAction(type, group, className, title, options) {
function createListener(event) { function createListener(event) {
var shape = elementFactory.createShape(assign({ type: type }, options)); const shape = elementFactory.createShape(assign({ type: type }, options))
if (options) { if (options) {
shape.businessObject.di.isExpanded = options.isExpanded; shape.businessObject.di.isExpanded = options.isExpanded;
...@@ -30,7 +30,7 @@ F.prototype.getPaletteEntries = function() { ...@@ -30,7 +30,7 @@ F.prototype.getPaletteEntries = function() {
create.start(event, shape); create.start(event, shape);
} }
var shortType = type.replace(/^bpmn:/, ""); const shortType = type.replace(/^bpmn:/, '')
return { return {
group: group, group: group,
...@@ -44,19 +44,19 @@ F.prototype.getPaletteEntries = function() { ...@@ -44,19 +44,19 @@ F.prototype.getPaletteEntries = function() {
} }
function createSubprocess(event) { function createSubprocess(event) {
var subProcess = elementFactory.createShape({ const subProcess = elementFactory.createShape({
type: "bpmn:SubProcess", type: 'bpmn:SubProcess',
x: 0, x: 0,
y: 0, y: 0,
isExpanded: true isExpanded: true
}); })
var startEvent = elementFactory.createShape({ const startEvent = elementFactory.createShape({
type: "bpmn:StartEvent", type: 'bpmn:StartEvent',
x: 40, x: 40,
y: 82, y: 82,
parent: subProcess parent: subProcess
}); })
create.start(event, [subProcess, startEvent], { create.start(event, [subProcess, startEvent], {
hints: { hints: {
......
...@@ -19,18 +19,18 @@ export default function PaletteProvider(palette, create, elementFactory, spaceTo ...@@ -19,18 +19,18 @@ export default function PaletteProvider(palette, create, elementFactory, spaceTo
PaletteProvider.$inject = ["palette", "create", "elementFactory", "spaceTool", "lassoTool", "handTool", "globalConnect", "translate"]; PaletteProvider.$inject = ["palette", "create", "elementFactory", "spaceTool", "lassoTool", "handTool", "globalConnect", "translate"];
PaletteProvider.prototype.getPaletteEntries = function() { PaletteProvider.prototype.getPaletteEntries = function() {
var actions = {}, const actions = {},
create = this._create, create = this._create,
elementFactory = this._elementFactory, elementFactory = this._elementFactory,
spaceTool = this._spaceTool, spaceTool = this._spaceTool,
lassoTool = this._lassoTool, lassoTool = this._lassoTool,
handTool = this._handTool, handTool = this._handTool,
globalConnect = this._globalConnect, globalConnect = this._globalConnect,
translate = this._translate; translate = this._translate
function createAction(type, group, className, title, options) { function createAction(type, group, className, title, options) {
function createListener(event) { function createListener(event) {
var shape = elementFactory.createShape(assign({ type: type }, options)); const shape = elementFactory.createShape(assign({ type: type }, options))
if (options) { if (options) {
shape.businessObject.di.isExpanded = options.isExpanded; shape.businessObject.di.isExpanded = options.isExpanded;
...@@ -39,7 +39,7 @@ PaletteProvider.prototype.getPaletteEntries = function() { ...@@ -39,7 +39,7 @@ PaletteProvider.prototype.getPaletteEntries = function() {
create.start(event, shape); create.start(event, shape);
} }
var shortType = type.replace(/^bpmn:/, ""); const shortType = type.replace(/^bpmn:/, '')
return { return {
group: group, group: group,
...@@ -53,19 +53,19 @@ PaletteProvider.prototype.getPaletteEntries = function() { ...@@ -53,19 +53,19 @@ PaletteProvider.prototype.getPaletteEntries = function() {
} }
function createSubprocess(event) { function createSubprocess(event) {
var subProcess = elementFactory.createShape({ const subProcess = elementFactory.createShape({
type: "bpmn:SubProcess", type: 'bpmn:SubProcess',
x: 0, x: 0,
y: 0, y: 0,
isExpanded: true isExpanded: true
}); })
var startEvent = elementFactory.createShape({ const startEvent = elementFactory.createShape({
type: "bpmn:StartEvent", type: 'bpmn:StartEvent',
x: 40, x: 40,
y: 82, y: 82,
parent: subProcess parent: subProcess
}); })
create.start(event, [subProcess, startEvent], { create.start(event, [subProcess, startEvent], {
hints: { hints: {
......
...@@ -163,7 +163,6 @@ export default { ...@@ -163,7 +163,6 @@ export default {
// 初始化数据 // 初始化数据
initFormOnChanged(element) { initFormOnChanged(element) {
let activatedElement = element; let activatedElement = element;
// debugger
if (!activatedElement) { if (!activatedElement) {
activatedElement = activatedElement =
window.bpmnInstances.elementRegistry.find(el => el.type === "bpmn:Process") ?? window.bpmnInstances.elementRegistry.find(el => el.type === "bpmn:Process") ??
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
<div class="panel-tab__content"> <div class="panel-tab__content">
<el-form size="mini" label-width="90px" :model="model" :rules="rules" @submit.native.prevent> <el-form size="mini" label-width="90px" :model="model" :rules="rules" @submit.native.prevent>
<div v-if="elementBaseInfo.$type === 'bpmn:Process'"> <!-- 如果是 Process 信息的时候,使用自定义表单 --> <div v-if="elementBaseInfo.$type === 'bpmn:Process'"> <!-- 如果是 Process 信息的时候,使用自定义表单 -->
<el-form-item label="流程标识" prop="key"> <el-form-item label="流程标识" prop="key">
<el-input v-model="model.key" placeholder="请输入流标标识" <el-input v-model="model.key" placeholder="请输入流标标识"
:disabled="model.id !== undefined && model.id.length > 0" @change="handleKeyUpdate" /> :disabled="model.id !== undefined && model.id.length > 0" @change="handleKeyUpdate" />
...@@ -66,6 +67,7 @@ export default { ...@@ -66,6 +67,7 @@ export default {
}, },
methods: { methods: {
resetBaseInfo() { resetBaseInfo() {
debugger;
this.bpmnElement = window?.bpmnInstances?.bpmnElement; this.bpmnElement = window?.bpmnInstances?.bpmnElement;
this.elementBaseInfo = JSON.parse(JSON.stringify(this.bpmnElement.businessObject)); this.elementBaseInfo = JSON.parse(JSON.stringify(this.bpmnElement.businessObject));
}, },
...@@ -74,7 +76,7 @@ export default { ...@@ -74,7 +76,7 @@ export default {
if (!value) { if (!value) {
return; return;
} }
if (!value.match(/[a-zA-Z_][\-_.0-9_a-zA-Z$]*/)) { if (!value.match(/[a-zA-Z_][\-_.0-9a-zA-Z$]*/)) {
console.log('key 不满足 XML NCName 规则,所以不进行赋值'); console.log('key 不满足 XML NCName 规则,所以不进行赋值');
return; return;
} }
...@@ -101,6 +103,7 @@ export default { ...@@ -101,6 +103,7 @@ export default {
const attrObj = Object.create(null); const attrObj = Object.create(null);
attrObj[key] = this.elementBaseInfo[key]; attrObj[key] = this.elementBaseInfo[key];
if (key === "id") { if (key === "id") {
debugger;
window.bpmnInstances.modeling.updateProperties(this.bpmnElement, { window.bpmnInstances.modeling.updateProperties(this.bpmnElement, {
id: this.elementBaseInfo[key], id: this.elementBaseInfo[key],
di: { id: `${this.elementBaseInfo[key]}_di` } di: { id: `${this.elementBaseInfo[key]}_di` }
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="表达式" v-if="flowConditionForm.conditionType && flowConditionForm.conditionType === 'expression'" key="express"> <el-form-item label="表达式" v-if="flowConditionForm.conditionType && flowConditionForm.conditionType === 'expression'" key="express">
<el-input v-model="flowConditionForm.body" clearable @change="updateFlowCondition" /> <el-input v-model="flowConditionForm.body" style="width:192px;" clearable @change="updateFlowCondition" />
</el-form-item> </el-form-item>
<template v-if="flowConditionForm.conditionType && flowConditionForm.conditionType === 'script'"> <template v-if="flowConditionForm.conditionType && flowConditionForm.conditionType === 'script'">
<el-form-item label="脚本语言" key="language"> <el-form-item label="脚本语言" key="language">
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
<el-form-item label="循环基数" key="loopCardinality"> <el-form-item label="循环基数" key="loopCardinality">
<el-input v-model="loopInstanceForm.loopCardinality" clearable @change="updateLoopCardinality" /> <el-input v-model="loopInstanceForm.loopCardinality" clearable @change="updateLoopCardinality" />
</el-form-item> </el-form-item>
<el-form-item label="集合" key="collection"> <el-form-item label="集合" key="collection" v-show="false">
<el-input v-model="loopInstanceForm.collection" clearable @change="updateLoopBase" /> <el-input v-model="loopInstanceForm.collection" clearable @change="updateLoopBase" />
</el-form-item> </el-form-item>
<el-form-item label="元素变量" key="elementVariable"> <el-form-item label="元素变量" key="elementVariable">
...@@ -131,7 +131,7 @@ export default { ...@@ -131,7 +131,7 @@ export default {
if (type === "SequentialMultiInstance") { if (type === "SequentialMultiInstance") {
this.multiLoopInstance = window.bpmnInstances.moddle.create("bpmn:MultiInstanceLoopCharacteristics", { isSequential: true }); this.multiLoopInstance = window.bpmnInstances.moddle.create("bpmn:MultiInstanceLoopCharacteristics", { isSequential: true });
} else { } else {
this.multiLoopInstance = window.bpmnInstances.moddle.create("bpmn:MultiInstanceLoopCharacteristics"); this.multiLoopInstance = window.bpmnInstances.moddle.create("bpmn:MultiInstanceLoopCharacteristics", { collection: "${coll_userList}" });
} }
window.bpmnInstances.modeling.updateProperties(this.bpmnElement, { window.bpmnInstances.modeling.updateProperties(this.bpmnElement, {
loopCharacteristics: this.multiLoopInstance loopCharacteristics: this.multiLoopInstance
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
width: 100%; width: 100%;
height: 100%; height: 500px;
box-sizing: border-box; box-sizing: border-box;
.my-process-designer__header { .my-process-designer__header {
width: 100%; width: 100%;
...@@ -141,11 +141,11 @@ ...@@ -141,11 +141,11 @@
} }
} }
pre { pre {
/* margin: 0; margin: 0;
height: 100%; height: 100%;
overflow: hidden; overflow: hidden;
max-height: calc(80vh - 32px); max-height: calc(80vh - 32px);
overflow-y: auto; */ overflow-y: auto;
} }
.hljs { .hljs {
word-break: break-word; word-break: break-word;
......
...@@ -458,3 +458,9 @@ export function dataURLtoBlob(base64Data) { ...@@ -458,3 +458,9 @@ export function dataURLtoBlob(base64Data) {
}); });
return blob; return blob;
} }
// 将字符串转成数组
export function str2arr(str, separator = ','){
if(!str) return []
return str.split(separator).filter(item => item)
}
\ No newline at end of file
<template> <template>
<div class="app-container"> <div class="app-container">
<!-- 流程设计器,负责绘制流程等 --> <!-- 流程设计器,负责绘制流程等 -->
<my-process-designer :key="`designer-${reloadIndex}`" v-model="xmlString" v-bind="controlForm" <my-process-designer v-if="xmlString !== undefined" :key="`designer-${reloadIndex}`" v-model="xmlString" v-bind="controlForm"
keyboard ref="processDesigner" @init-finished="initModeler" keyboard ref="processDesigner" @init-finished="initModeler"
@save="save"/> @save="save"/>
...@@ -29,7 +30,7 @@ export default { ...@@ -29,7 +30,7 @@ export default {
components: { MyProcessPalette }, components: { MyProcessPalette },
data() { data() {
return { return {
xmlString: "", // BPMN XML xmlString: undefined, // BPMN XML
modeler: null, modeler: null,
reloadIndex: 0, reloadIndex: 0,
controlDrawerVisible: false, controlDrawerVisible: false,
...@@ -38,7 +39,7 @@ export default { ...@@ -38,7 +39,7 @@ export default {
simulation: true, simulation: true,
labelEditing: false, labelEditing: false,
labelVisible: false, labelVisible: false,
prefix: "activiti", prefix: "flowable",
headerButtonSize: "mini", headerButtonSize: "mini",
additionalModel: [CustomContentPadProvider, CustomPaletteProvider] additionalModel: [CustomContentPadProvider, CustomPaletteProvider]
}, },
...@@ -53,6 +54,7 @@ export default { ...@@ -53,6 +54,7 @@ export default {
created() { created() {
// 如果 modelId 非空,说明是修改流程模型 // 如果 modelId 非空,说明是修改流程模型
const modelId = this.$route.query && this.$route.query.modelId const modelId = this.$route.query && this.$route.query.modelId
if (modelId) { if (modelId) {
getModel(modelId).then(response => { getModel(modelId).then(response => {
this.xmlString = response.data.bpmnXml this.xmlString = response.data.bpmnXml
...@@ -68,24 +70,8 @@ export default { ...@@ -68,24 +70,8 @@ export default {
initModeler(modeler) { initModeler(modeler) {
setTimeout(() => { setTimeout(() => {
this.modeler = modeler; this.modeler = modeler;
console.log(modeler);
}, 10); }, 10);
}, },
reloadProcessDesigner(deep) {
this.controlForm.additionalModel = [];
for (let key in this.addis) {
if (this.addis[key]) {
this.controlForm.additionalModel.push(this.addis[key]);
}
}
deep && (this.xmlString = undefined);
this.reloadIndex += 1;
this.modeler = null; // 避免 panel 异常
// if (deep) {
// this.xmlString = undefined;
// this.$refs.processDesigner.processRestart();
// }
},
save(bpmnXml) { save(bpmnXml) {
const data = { const data = {
...this.model, ...this.model,
...@@ -129,9 +115,6 @@ export default { ...@@ -129,9 +115,6 @@ export default {
// display: inline-grid; // display: inline-grid;
// grid-template-columns: 100px auto max-content; // grid-template-columns: 100px auto max-content;
//} //}
.app-container{
min-height: calc(100vh - 84px);
}
.demo-control-bar { .demo-control-bar {
position: fixed; position: fixed;
right: 8px; right: 8px;
...@@ -174,9 +157,9 @@ export default { ...@@ -174,9 +157,9 @@ export default {
color: #fafafa; color: #fafafa;
} }
/* .my-process-designer { .my-process-designer {
height: calc(100vh - 84px); height: calc(100vh - 84px);
} */ }
.process-panel__container { .process-panel__container {
position: absolute; position: absolute;
right: 0; right: 0;
......
...@@ -38,10 +38,10 @@ ...@@ -38,10 +38,10 @@
<!-- 操作工具栏 --> <!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<!-- <el-col :span="1.5"> <el-col :span="1.5">
<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"
v-hasPermi="['bpm:process-instance:query']">{{$t('发起流程')}}</el-button> v-hasPermi="['bpm:process-instance:query']">{{$t('发起流程')}}</el-button>
</el-col> --> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
......
<script>
import Edit from './edit'
Edit.name = 'CouponDetail'
export default Edit
</script>
\ No newline at end of file
...@@ -261,6 +261,7 @@ import ProductsSelector from '@/components/ProductsSelector' ...@@ -261,6 +261,7 @@ import ProductsSelector from '@/components/ProductsSelector'
import Editor from '@/components/Editor' import Editor from '@/components/Editor'
import Selector from '@/components/Selector/index' import Selector from '@/components/Selector/index'
import {parseTime} from '@/utils/ruoyi' import {parseTime} from '@/utils/ruoyi'
import {str2arr} from '@/utils/index'
export default { export default {
...@@ -304,6 +305,7 @@ export default { ...@@ -304,6 +305,7 @@ export default {
}, },
errTips: {}, // 跟fee对应的错误提示 errTips: {}, // 跟fee对应的错误提示
isAllProduct: false, // 是否全部商品 isAllProduct: false, // 是否全部商品
initing: false, // 初始化中,编辑或者查看的时候,初始化中修改type不改默认值
}; };
}, },
computed:{ computed:{
...@@ -371,6 +373,7 @@ export default { ...@@ -371,6 +373,7 @@ export default {
if(val && val != 1){ if(val && val != 1){
this.getCouponSelect() this.getCouponSelect()
if(!this.initing){
// 非优惠券给默认数据 // 非优惠券给默认数据
this.$set(this.form, 'documentDeclarationArr', ["1", "2", "3"]) this.$set(this.form, 'documentDeclarationArr', ["1", "2", "3"])
this.$set(this.form, 'isCargoControlArr', ["0", "1"]) this.$set(this.form, 'isCargoControlArr', ["0", "1"])
...@@ -378,6 +381,7 @@ export default { ...@@ -378,6 +381,7 @@ export default {
this.$set(this.form, 'brandArr', ["0","1", "2"]) this.$set(this.form, 'brandArr', ["0","1", "2"])
this.$set(this.form, 'suitableLineType', 0) this.$set(this.form, 'suitableLineType', 0)
} }
}
// 过一遍费用,禁用/启用、同步 部分货币单位 // 过一遍费用,禁用/启用、同步 部分货币单位
[1,2].forEach(index => { [1,2].forEach(index => {
...@@ -416,8 +420,12 @@ export default { ...@@ -416,8 +420,12 @@ export default {
} }
getCurrencyList().then(res => this.currencyList = res.data) getCurrencyList().then(res => this.currencyList = res.data)
if (this.$route.query.id) { if (this.$route.query.id) {
this.initing = true
getCoupon(this.$route.query.id).then((res) => { getCoupon(this.$route.query.id).then((res) => {
this.form = res.data this.form = res.data;
['orderAttr', 'isCargoControl', 'brand', 'documentDeclaration'].forEach(field => {
this.$set(this.form, field + 'Arr', str2arr(res.data[field]))
})
// 没有商品则表示全部 // 没有商品则表示全部
if(!this.form.prodIds){ if(!this.form.prodIds){
...@@ -464,6 +472,10 @@ export default { ...@@ -464,6 +472,10 @@ export default {
this.fee[type] = [{type}] this.fee[type] = [{type}]
} }
}) })
}).finally(() => {
this.$nextTick(() => {
this.initing = false
})
}) })
} }
// 不是编辑查看则给默认的费用表格 // 不是编辑查看则给默认的费用表格
...@@ -489,7 +501,14 @@ export default { ...@@ -489,7 +501,14 @@ export default {
// 只要不是按产品单位满减 // 只要不是按产品单位满减
if(!item.combUnit || item.combUnit.split('_')[0] != 'prodUnit'){ if(!item.combUnit || item.combUnit.split('_')[0] != 'prodUnit'){
this.$set(item, 'reduceCurrencyDisabled', true) this.$set(item, 'reduceCurrencyDisabled', true)
this.$set(item, 'reduceCurrencyId', +item.fullCurrencyId || +item.combUnit.split('_')[1]) let currencyId = +item.fullCurrencyId
if(!currencyId && item.combUnit){
currencyId = +item.combUnit.split('_')[1]
}
if(!currencyId){
currencyId = this.currencyList[0].id
}
this.$set(item, 'reduceCurrencyId', currencyId)
} }
return return
...@@ -522,7 +541,7 @@ export default { ...@@ -522,7 +541,7 @@ export default {
}, },
getCouponSelect(){ getCouponSelect(){
getCouponSelect({overdueStatus: 1, status: 1}).then(res => { getCouponSelect({overdueStatus: 1, status: 1, pageSize: 100}).then(res => {
this.couponList = res.data this.couponList = res.data
}) })
}, },
...@@ -639,7 +658,7 @@ export default { ...@@ -639,7 +658,7 @@ export default {
} }
// 没勾选全部就需要选择商品 // 没勾选全部就需要选择商品
if(!this.isAllProduct && !this.form.prodIds){ if(this.form.type != 1 && !this.isAllProduct && !this.form.prodIds){
return this.$message.error('请选择商品') return this.$message.error('请选择商品')
} }
......
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="标题" prop="titleZh"> <!-- <el-form-item label="标题" prop="titleZh">
<el-input v-model="queryParams.titleZh" placeholder="请输入标题" clearable @keyup.enter.native="handleQuery"/> <el-input v-model="queryParams.titleZh" placeholder="请输入标题" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> </el-form-item> -->
<!-- <el-form-item label="标题" prop="titleEn"> <!-- <el-form-item label="标题" prop="titleEn">
<el-input v-model="queryParams.titleEn" placeholder="请输入标题" clearable @keyup.enter.native="handleQuery"/> <el-input v-model="queryParams.titleEn" placeholder="请输入标题" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> --> </el-form-item> -->
...@@ -16,6 +16,12 @@ ...@@ -16,6 +16,12 @@
</el-select> --> </el-select> -->
<dict-selector :type='DICT_TYPE.ECW_COUPON_TYPE' v-model="queryParams.type" /> <dict-selector :type='DICT_TYPE.ECW_COUPON_TYPE' v-model="queryParams.type" />
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="status">
<dict-selector :type="DICT_TYPE.ECW_COUPON_STATUS" v-model="queryParams.status"/>
</el-form-item>
<el-form-item label="关键字" prop="conditionCurrencyId">
<el-input v-model="queryParams.searchKey" placeholder="请输入关键字" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<!-- <el-form-item label="使用条件(优惠卷专用)" prop="cashCondition"> <!-- <el-form-item label="使用条件(优惠卷专用)" prop="cashCondition">
<el-input v-model="queryParams.cashCondition" placeholder="请输入使用条件(优惠卷专用)" clearable @keyup.enter.native="handleQuery"/> <el-input v-model="queryParams.cashCondition" placeholder="请输入使用条件(优惠卷专用)" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> </el-form-item>
...@@ -25,26 +31,26 @@ ...@@ -25,26 +31,26 @@
<el-form-item label="条件货币ID" prop="conditionCurrencyId"> <el-form-item label="条件货币ID" prop="conditionCurrencyId">
<el-input v-model="queryParams.conditionCurrencyId" placeholder="请输入条件货币ID" clearable @keyup.enter.native="handleQuery"/> <el-input v-model="queryParams.conditionCurrencyId" placeholder="请输入条件货币ID" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> --> </el-form-item> -->
<el-form-item label="开始时间"> <!-- <el-form-item label="开始时间">
<el-date-picker v-model="dateRangeStartTime" style="width: 240px" value-format="yyyy-MM-dd" <el-date-picker v-model="dateRangeStartTime" style="width: 240px" value-format="yyyy-MM-dd"
type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" /> type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" />
</el-form-item> </el-form-item> -->
<!-- <el-form-item label="减免货币ID" prop="reduceCurrencyId"> <!-- <el-form-item label="减免货币ID" prop="reduceCurrencyId">
<el-input v-model="queryParams.reduceCurrencyId" placeholder="请输入减免货币ID" clearable @keyup.enter.native="handleQuery"/> <el-input v-model="queryParams.reduceCurrencyId" placeholder="请输入减免货币ID" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> --> </el-form-item> -->
<el-form-item label="结束时间"> <!-- <el-form-item label="结束时间">
<el-date-picker v-model="dateRangeEndTime" style="width: 240px" value-format="yyyy-MM-dd" <el-date-picker v-model="dateRangeEndTime" style="width: 240px" value-format="yyyy-MM-dd"
type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" /> type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" />
</el-form-item> </el-form-item> -->
<!-- <el-form-item label="领券后X天起生效" prop="afterReceiveDays"> <!-- <el-form-item label="领券后X天起生效" prop="afterReceiveDays">
<el-input v-model="queryParams.afterReceiveDays" placeholder="请输入领券后X天起生效" clearable @keyup.enter.native="handleQuery"/> <el-input v-model="queryParams.afterReceiveDays" placeholder="请输入领券后X天起生效" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> </el-form-item>
<el-form-item label="有效天数" prop="validDays"> <el-form-item label="有效天数" prop="validDays">
<el-input v-model="queryParams.validDays" placeholder="请输入有效天数" clearable @keyup.enter.native="handleQuery"/> <el-input v-model="queryParams.validDays" placeholder="请输入有效天数" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> --> </el-form-item> -->
<el-form-item label="费用类型" prop="costType"> <!-- <el-form-item label="费用类型" prop="costType">
<dict-selector :type="DICT_TYPE.ECW_COUPON_COST_TYPE" v-model="queryParams.costType"/> <dict-selector :type="DICT_TYPE.ECW_COUPON_COST_TYPE" v-model="queryParams.costType"/>
</el-form-item> </el-form-item> -->
<!-- <el-form-item label="优惠清单" prop="discountDetailed"> <!-- <el-form-item label="优惠清单" prop="discountDetailed">
<el-input v-model="queryParams.discountDetailed" placeholder="请输入优惠清单" clearable @keyup.enter.native="handleQuery"/> <el-input v-model="queryParams.discountDetailed" placeholder="请输入优惠清单" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> </el-form-item>
...@@ -74,12 +80,12 @@ ...@@ -74,12 +80,12 @@
<el-form-item label="每个用户领券上限,如不填则默认为1" prop="limitNum"> <el-form-item label="每个用户领券上限,如不填则默认为1" prop="limitNum">
<el-input v-model="queryParams.limitNum" placeholder="请输入每个用户领券上限,如不填则默认为1" clearable @keyup.enter.native="handleQuery"/> <el-input v-model="queryParams.limitNum" placeholder="请输入每个用户领券上限,如不填则默认为1" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> --> </el-form-item> -->
<el-form-item label="过期状态" prop="overdueStatus"> <!-- <el-form-item label="过期状态" prop="overdueStatus">
<dict-selector :type="DICT_TYPE.ECW_COUPON_OVERDUE_STATUS" v-model="queryParams.overdueStatus"/> <dict-selector :type="DICT_TYPE.ECW_COUPON_OVERDUE_STATUS" v-model="queryParams.overdueStatus"/>
</el-form-item> </el-form-item> -->
<el-form-item label="投放状态" prop="putonStatus"> <!-- <el-form-item label="投放状态" prop="putonStatus">
<dict-selector :type="DICT_TYPE.ECW_COUPON_PUTON_STATUS" v-model="queryParams.putonStatus"/> <dict-selector :type="DICT_TYPE.ECW_COUPON_PUTON_STATUS" v-model="queryParams.putonStatus"/>
</el-form-item> </el-form-item> -->
<!-- <el-form-item label="获取方式 0=客户领取 1=平台发放" prop="getWay"> <!-- <el-form-item label="获取方式 0=客户领取 1=平台发放" prop="getWay">
<el-input v-model="queryParams.getWay" placeholder="请输入获取方式 0=客户领取 1=平台发放" clearable @keyup.enter.native="handleQuery"/> <el-input v-model="queryParams.getWay" placeholder="请输入获取方式 0=客户领取 1=平台发放" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> </el-form-item>
...@@ -97,9 +103,7 @@ ...@@ -97,9 +103,7 @@
<el-form-item label="单证报关(可多选) 1 我司全代 2自单代报 3混合报关" prop="documentDeclaration"> <el-form-item label="单证报关(可多选) 1 我司全代 2自单代报 3混合报关" prop="documentDeclaration">
<el-input v-model="queryParams.documentDeclaration" placeholder="请输入单证报关(可多选) 1 我司全代 2自单代报 3混合报关" clearable @keyup.enter.native="handleQuery"/> <el-input v-model="queryParams.documentDeclaration" placeholder="请输入单证报关(可多选) 1 我司全代 2自单代报 3混合报关" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> --> </el-form-item> -->
<el-form-item label="状态" prop="status">
<dict-selector :type="DICT_TYPE.ECW_COUPON_STATUS" v-model="queryParams.status"/>
</el-form-item>
<!-- <el-form-item label="创建时间"> <!-- <el-form-item label="创建时间">
<el-date-picker v-model="dateRangeCreateTime" style="width: 240px" value-format="yyyy-MM-dd" <el-date-picker v-model="dateRangeCreateTime" style="width: 240px" value-format="yyyy-MM-dd"
type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" /> type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" />
...@@ -132,23 +136,29 @@ ...@@ -132,23 +136,29 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="标题" align="center" prop="titleZh" /> <el-table-column label="标题" align="center" prop="titleZh" />
<el-table-column label="描述" align="center" prop="type">
<template slot-scope="{row}">
{{$l(row, 'content')}}
</template>
</el-table-column>
<el-table-column label="发布人/发布时间" align="center" prop="startTime" width="180"> <el-table-column label="发布人/发布时间" align="center" prop="startTime" width="180">
<template slot-scope="scope"> <template slot-scope="scope">
<div>{{ scope.row.creatorName }}</div> <div>{{ scope.row.creatorName }}</div>
<div>{{ parseTime(scope.row.createTime) }}</div> <div>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="开始时间" align="center" prop="startTime" width="180"> <el-table-column label="开始时间" align="center" prop="startTime" width="180">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ parseTime(scope.row.startTime) }}</span> <span>{{ parseTime(scope.row.startTime, '{y}-{m}-{d}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="结束时间" align="center" prop="endTime" width="180"> <el-table-column label="结束时间" align="center" prop="endTime" width="180">
<template slot-scope="scope"> <template slot-scope="{row}">
<span>{{ parseTime(scope.row.endTime) }}</span> <div :style="{red: row.overdueStatus ==0 ? 'red' : null}">{{ parseTime(row.endTime, '{y}-{m}-{d}') }}</div>
<div v-if="row.overdueStatus == 0" style="color: red">已过期</div>
</template> </template>
</el-table-column> </el-table-column>
<!--
<el-table-column label="创建时间" align="center" prop="createTime" width="180"> <el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
...@@ -158,10 +168,10 @@ ...@@ -158,10 +168,10 @@
<template slot-scope="{row}"> <template slot-scope="{row}">
<dict-tag :type="DICT_TYPE.ECW_IS_DRAFT" :value="row.status" /> <dict-tag :type="DICT_TYPE.ECW_IS_DRAFT" :value="row.status" />
</template> </template>
</el-table-column> </el-table-column> -->
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row, true)" <el-button size="mini" type="text" icon="el-icon-edit" @click="handleDetail(scope.row, true)"
v-hasPermi="['ecw:coupon:update']">查看</el-button> v-hasPermi="['ecw:coupon:update']">查看</el-button>
<el-button v-if="scope.row.status != 1" size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" <el-button v-if="scope.row.status != 1" size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['ecw:coupon:update']">编辑</el-button> v-hasPermi="['ecw:coupon:update']">编辑</el-button>
...@@ -287,6 +297,9 @@ export default { ...@@ -287,6 +297,9 @@ export default {
} }
return this.$router.push(url) return this.$router.push(url)
}, },
handleDetail(row){
this.$router.push('detail?id=' + row.couponId + '&readonly=1')
},
handleCopy(row){ handleCopy(row){
this.$router.push('edit?action=copy&id=' + row.couponId) this.$router.push('edit?action=copy&id=' + row.couponId)
}, },
......
...@@ -275,9 +275,9 @@ ...@@ -275,9 +275,9 @@
{{ `${NP.minus(scope.row.receivableAmount, scope.row.discountTotal || 0)}${scope.row.discountTotal > 0 ? `(${scope.row.receivableAmount} - ${scope.row.discountTotal})` : ''}` }} {{ `${NP.minus(scope.row.receivableAmount, scope.row.discountTotal || 0)}${scope.row.discountTotal > 0 ? `(${scope.row.receivableAmount} - ${scope.row.discountTotal})` : ''}` }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column align="center" width="220"> <el-table-column align="center">
<template #header> <template #header>
{{ $t('核销基准币种') }}{{getCurrencyLabel(showCurrencyId)}}{{ $t('汇率') }} {{ $t('核销基准币种')+''+getCurrencyLabel(showCurrencyId)+''+ $t('汇率') }}
</template> </template>
<template slot-scope="scope"> <template slot-scope="scope">
<template v-if="scope.row.type !== 'total'"> <template v-if="scope.row.type !== 'total'">
...@@ -293,13 +293,13 @@ ...@@ -293,13 +293,13 @@
</el-form-item> </el-form-item>
</template> </template>
<template v-else> <template v-else>
{{ $t('应收总金额') }} {{getCurrencyLabel(showCurrencyId)}} {{ $t('应收总金额')+''+getCurrencyLabel(showCurrencyId)+''}}
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column align="center" prop="writeOffAmount"> <el-table-column align="center" prop="writeOffAmount">
<template #header> <template #header>
{{ $t('核销基准金额') }} {{getCurrencyLabel(showCurrencyId)}} {{ $t('核销基准金额')+''+getCurrencyLabel(showCurrencyId)+''}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('期望收款账户')" align="center"> <el-table-column :label="$t('期望收款账户')" align="center">
......
...@@ -56,7 +56,11 @@ ...@@ -56,7 +56,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('箱数')" align="center" prop="num" /> <el-table-column :label="$t('箱数')" align="center" prop="num" />
<el-table-column :label="$t('体积/重量')" align="center" prop="weight"></el-table-column> <el-table-column :label="$t('体积/重量')" align="center" prop="weight">
<template slot-scope="scope">
{{ scope.row.volume?(scope.row.volume + '/'+scope.row.weight):'' }}
</template>
</el-table-column>
<el-table-column :label="$t('收入类型')" align="center" prop="feeType"> <el-table-column :label="$t('收入类型')" align="center" prop="feeType">
<template slot-scope="scope"> <template slot-scope="scope">
<dict-tag <dict-tag
...@@ -76,6 +80,16 @@ ...@@ -76,6 +80,16 @@
<span>{{ scope.row.totalAmount }}{{getCurrencyLabel(scope.row.currencyId)}}</span> <span>{{ scope.row.totalAmount }}{{getCurrencyLabel(scope.row.currencyId)}}</span>
<!-- <dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="scope.row.currencyId" /> --> <!-- <dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="scope.row.currencyId" /> -->
</template> </template>
</el-table-column>
<el-table-column :label="$t('优惠金额')" align="center">
<template slot-scope="scope">
{{ scope.row.discountTotal ?scope.row.discountTotal : '' }}
</template>
</el-table-column>
<el-table-column :label="$t('优惠后金额')" align="center">
<template slot-scope="scope">
{{ scope.row.disCountAmount ?scope.row.disCountAmount :0 }}
</template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('税额')" align="center" prop="tax"> <el-table-column :label="$t('税额')" align="center" prop="tax">
<template slot-scope="scope"> <template slot-scope="scope">
...@@ -157,14 +171,22 @@ export default { ...@@ -157,14 +171,22 @@ export default {
res.data.map(v => { res.data.map(v => {
v.tax = NP.times(v.totalAmount, this.invoiceData.taxRate/100) v.tax = NP.times(v.totalAmount, this.invoiceData.taxRate/100)
v.taxAndTotalAmount = NP.plus(v.totalAmount, NP.times(v.totalAmount, this.invoiceData.taxRate/100)) v.taxAndTotalAmount = NP.plus(v.totalAmount, NP.times(v.totalAmount, this.invoiceData.taxRate/100))
if(v.discountTotal){
v.disCountAmount = NP.minus(v.totalAmount,v.discountTotal)
}else{
v.disCountAmount = v.totalAmount
}
}) })
const t = { const t = {
orderNo: this.$t('合计'), orderNo: this.$t('合计'),
totalAmount: res.data.reduce((total, curr) => NP.plus(total, curr.totalAmount), 0), totalAmount: res.data.reduce((total, curr) => NP.plus(total, curr.totalAmount), 0),
disCountAmount:res.data.reduce((total, curr) => NP.plus(total, curr.disCountAmount), 0),
tax: res.data.reduce((total, curr) => NP.plus(total, curr.tax), 0), tax: res.data.reduce((total, curr) => NP.plus(total, curr.tax), 0),
taxAndTotalAmount: res.data.reduce((total, curr) => NP.plus(total, curr.taxAndTotalAmount), 0) taxAndTotalAmount: res.data.reduce((total, curr) => NP.plus(total, curr.taxAndTotalAmount), 0)
} }
this.list = [...res.data, t] this.list = [...res.data, t]
console.log(this.list)
}) })
}, },
submitForm() { submitForm() {
...@@ -180,7 +202,7 @@ export default { ...@@ -180,7 +202,7 @@ export default {
}, },
getSummaries(param) { getSummaries(param) {
const t = this.list[this.list.length - 1].taxAndTotalAmount const t = this.list[this.list.length - 1].taxAndTotalAmount
return [this.$t('收款人'), this.invoiceData.payeeName, this.$t('核销人'), this.invoiceData.writeOffName, this.$t('开票人'), this.invoiceData.issuerName, '', this.$t('价税合计大写'), this.convertCurrency(t)]; return [this.$t('收款人'), this.invoiceData.salesmanName, this.$t('核销人'), this.invoiceData.writeOffName, this.$t('开票人'), this.invoiceData.issuerName, '', this.$t('价税合计大写'), this.convertCurrency(t)];
}, },
convertCurrency(money) { convertCurrency(money) {
//汉字的数字 //汉字的数字
......
...@@ -508,7 +508,9 @@ export default { ...@@ -508,7 +508,9 @@ export default {
writeOffAmount(){ writeOffAmount(){
let total = 0 let total = 0
this.detailed.forEach(item => { this.detailed.forEach(item => {
if(item.status){
total = NP.plus(total, item.writeOffAmount) total = NP.plus(total, item.writeOffAmount)
}
}) })
return total.toFixed(2) return total.toFixed(2)
}, },
......
...@@ -52,9 +52,10 @@ ...@@ -52,9 +52,10 @@
<el-col style="width: 592px"> <el-col style="width: 592px">
<el-form-item :label="$t('创建时间')"> <el-form-item :label="$t('创建时间')">
<el-date-picker <el-date-picker
v-model="queryParams.beginCreateTime" v-model="dateFilter"
type="datetimerange" type="datetimerange"
range-separator="-" range-separator="-"
value-format="yyyy-MM-dd HH:mm:ss"
:start-placeholder="$t('请选择日期')" :start-placeholder="$t('请选择日期')"
:end-placeholder="$t('请选择日期')" :end-placeholder="$t('请选择日期')"
> >
...@@ -301,6 +302,7 @@ export default { ...@@ -301,6 +302,7 @@ export default {
productRecord: null, productRecord: null,
followUpSalesmanId: null, followUpSalesmanId: null,
}, },
dateFilter:[],
downloading: false, // 导出状态 downloading: false, // 导出状态
}; };
}, },
...@@ -368,7 +370,14 @@ export default { ...@@ -368,7 +370,14 @@ export default {
}, },
/** 搜索按钮操作 */ /** 搜索按钮操作 */
handleQuery() { handleQuery() {
console.log(11) if(this.dateFilter&&this.dateFilter.length>0){
this.queryParams.beginCreateTime = this.dateFilter[0]
this.queryParams.endCreateTime = this.dateFilter[1]
}else{
this.queryParams.beginCreateTime = ''
this.queryParams.endCreateTime = ''
}
this.queryParams.pageNo = 1; this.queryParams.pageNo = 1;
this.getList(); this.getList();
}, },
......
...@@ -122,7 +122,8 @@ ...@@ -122,7 +122,8 @@
<el-table-column prop="prodTitleEn" :label="$t('英文品名')" /> <el-table-column prop="prodTitleEn" :label="$t('英文品名')" />
<el-table-column prop="brand" :label="$t('品牌')" width="90px"> <el-table-column prop="brand" :label="$t('品牌')" width="90px">
<template slot-scope="{row}"> <template slot-scope="{row}">
<dict-tag :type="DICT_TYPE.ECW_IS_BRAND" :value="row.brandType" /> <template v-if="row.brandName">{{row.brandName}}</template>
<dict-tag v-else :type="DICT_TYPE.ECW_IS_BRAND" :value="row.brandType" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="num" :label="$t('填单件数')" width="90px"/> <el-table-column prop="num" :label="$t('填单件数')" width="90px"/>
...@@ -169,16 +170,16 @@ ...@@ -169,16 +170,16 @@
<template v-if="row.charging ==1"> <template v-if="row.charging ==1">
<template v-if="!row.seaFreight">未报价</template> <template v-if="!row.seaFreight">未报价</template>
<template v-else>{{$t('全包价')}} {{row.oneSeaFreight}} {{currencyMap[row.seaFreightCurrency]}} / {{unitMap[row.seaFreightVolume]}}</template> <el-link type="primary" @click="showFeeDetail(row, 'clearance')" v-else>{{$t('全包价')}} {{row.oneSeaFreight}} {{currencyMap[row.seaFreightCurrency]}} / {{unitMap[row.seaFreightVolume]}}</el-link>
</template> </template>
<template v-else-if="!row.seaFreight && !row.clearanceFreight">未报价</template> <template v-else-if="!row.seaFreight && !row.clearanceFreight">未报价</template>
<template v-else> <template v-else>
<div> <el-link type="primary" @click="showFeeDetail(row, 'freight')">
{{$t('运费')}}{{row.oneSeaFreight}} {{currencyMap[row.seaFreightCurrency]}} / {{unitMap[row.seaFreightVolume]}} {{$t('运费')}}{{row.oneSeaFreight}} {{currencyMap[row.seaFreightCurrency]}} / {{unitMap[row.seaFreightVolume]}}
</div> </el-link>
<div> <el-link type="primary" @click="showFeeDetail(row, 'clearance')">
{{$t('清关费')}}{{row.oneClearanceFreight}} {{currencyMap[row.clearanceFreightCurrency]}} / {{unitMap[row.clearanceFreightVolume]}} {{$t('清关费')}}{{row.oneClearanceFreight}} {{currencyMap[row.clearanceFreightCurrency]}} / {{unitMap[row.clearanceFreightVolume]}}
</div> </el-link >
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
...@@ -252,20 +253,43 @@ ...@@ -252,20 +253,43 @@
<print-warehouse-receipt v-if="showWarehouseReceipt" :order-id="order.orderId" @close="showWarehouseReceipt=false" /> <print-warehouse-receipt v-if="showWarehouseReceipt" :order-id="order.orderId" @close="showWarehouseReceipt=false" />
<print-lading-bill v-if="showLadingBill" :order-id="order.orderId" :transport-type="order.transportId" @close="showLadingBill=false" /> <print-lading-bill v-if="showLadingBill" :order-id="order.orderId" :transport-type="order.transportId" @close="showLadingBill=false" />
<warehouse-detail :order="order" :orderItemId="showWarehouseInItemId" v-if="showWarehouseInItemId" @close="showWarehouseInItemId=null" /> <warehouse-detail :order="order" :orderItemId="showWarehouseInItemId" v-if="showWarehouseInItemId" @close="showWarehouseInItemId=null" />
<el-dialog title="付款人" :visible.sync="showDarweeDialog" v-if="order && order.customDraweeVOList"> <el-dialog :title="$t('付款人')" :visible.sync="showDarweeDialog" v-if="order && order.customDraweeVOList">
<el-table :data="order.customDraweeVOList" v-if="order.drawee==3" > <el-table :data="order.customDraweeVOList" v-if="order.drawee==3" >
<el-table-column label="费用类型" prop="label" width="200px"> <el-table-column :label="$t('费用类型')" prop="label" width="200px">
<template slot-scope="{row}"> <template slot-scope="{row}">
<dict-tag :type="DICT_TYPE.ECW_CUSTOM_DRAWEE" :value="row.name"/> <dict-tag :type="DICT_TYPE.ECW_CUSTOM_DRAWEE" :value="row.name"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="付款人" width="300px"> <el-table-column :label="$t('付款人')" width="300px">
<template slot-scope="{row}"> <template slot-scope="{row}">
<dict-tag :type="DICT_TYPE.DRAWEE" :value="row.value" /> <dict-tag :type="DICT_TYPE.DRAWEE" :value="row.value" />
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-dialog> </el-dialog>
<el-dialog :title="$t('费用详情')" :visible="!!showFeeDetailDialog" :before-close="closeFeeDetail">
<el-row v-if="feeDetail">
<el-col :span="12">
<div>{{feeDetail.charging ? $t('全包价') : $t('运费')}}</div>
<div v-for="item in feeDetail.freight">
{{item.label}}: {{item.value}}
<template v-if="item.currency">
{{currencyMap[item.currency]}} / {{unitMap[item.volume]}} <span v-if="item.remark">{{item.remark}}</span>
</template>
</div>
</el-col>
<el-col :span="12" v-if="feeDetail.charging != 1">
<div>{{$t('清关费')}}</div>
<div v-for="item in feeDetail.clearance">
{{item.label}}: {{item.value}}
<template v-if="item.currency">
{{currencyMap[item.currency]}} / {{unitMap[item.volume]}} <span v-if="item.remark">{{item.remark}}</span>
</template>
</div>
</el-col>
</el-row>
</el-dialog>
</div> </div>
</template> </template>
...@@ -280,6 +304,8 @@ import {getReceivableListByOrderId} from '@/api/ecw/receipt' ...@@ -280,6 +304,8 @@ import {getReceivableListByOrderId} from '@/api/ecw/receipt'
import { getChannel } from '@/api/ecw/channel'; import { getChannel } from '@/api/ecw/channel';
import {listByIds} from '@/api/ecw/region' import {listByIds} from '@/api/ecw/region'
import WarehouseDetail from './components/WarehouseDetail'; import WarehouseDetail from './components/WarehouseDetail';
import {getProductBrank} from '@/api/ecw/productBrank'
import { parseTime } from '@/utils/ruoyi';
export default { export default {
name: "detail", name: "detail",
...@@ -319,6 +345,8 @@ export default { ...@@ -319,6 +345,8 @@ export default {
region: '', region: '',
orderWarehouseIn: null, // 入仓详情 orderWarehouseIn: null, // 入仓详情
showWarehouseInItemId: null, // 当前显示的入仓 showWarehouseInItemId: null, // 当前显示的入仓
showFeeDetailDialog: null, // 是否显示费用详情弹层
feeDetail: null, // 费用详情
} }
}, },
computed:{ computed:{
...@@ -380,6 +408,91 @@ export default { ...@@ -380,6 +408,91 @@ export default {
getUnitList().then(res => this.unitList = res.data) getUnitList().then(res => this.unitList = res.data)
}, },
methods: { methods: {
// 显示费用详情
showFeeDetail(row, type){
this.showFeeDetailDialog = true
const freight = [], clearance = []
let freightFields = []
let clearanceFields = []
const brandType = row.warehouseInInfoVO ? row.feeType : row.brandType
// 不是特价则显示其他字段
if(!row.specialPriceType){
freightFields = [
// {field: 'oneSeaFreight', label: '成交单价'},
{field: 'originalSeaFreight', label: this.$t('默认单价(无牌无液无电)')},
// {field: 'brandFreightPrice', label: this.$t('品牌加价')},
{field: 'liquidFreightPrice', label: this.$t('液体加价')},
{field: 'electrifiedFreightPrice', label: this.$t('带电加价')},
{field: 'discountFreightPrice', label: this.$t('优惠活动减免')},
{field: 'plainCommission', label: this.$t('明佣')}
]
// 品牌加价
if(row['brandFreightPrice'] && row['brandFreightPrice'] > 0){
freightFields.push({field: 'brandFreightPrice', label: brandType == 1 ? this.$t('有品牌加价') : this.$t('中性品牌加价')})
}
// 有减免金额才显示优惠后单价
if(row['discountFreightPrice'] && row['discountFreightPrice'] > 0){
freightFields.push({field: 'afterDiscountSeaFreight', label: this.$t('优惠后单价')})
}
freightFields.push({field: 'oneSeaFreight', label: this.$t('成交单价')})
freightFields.forEach(item => {
if(row[item.field]){
freight.push({
label: item.label,
value: row[item.field],
currency: row.seaFreightCurrency,
volume: row.seaFreightVolume,
remark: row.specialPriceType && item.field == 'oneSeaFreight' ? this.$t('特价') : null
})
}
})
clearanceFields = [
{field: 'originalClearanceFreight', label: this.$t('默认单价(无牌无液无电)')},
// {field: 'brandClearanceFeePrice', label: this.$t('品牌加价')},
{field: 'liquidClearanceFeePrice', label: this.$t('液体加价')},
{field: 'electrifiedClearanceFeePrice', label: this.$t('带电加价')},
{field: 'discountClearanceFeePrice', label: this.$t('优惠活动减免')}
]
// 品牌加价
if(row['brandClearanceFeePrice'] && row['brandClearanceFeePrice'] > 0){
freightFields.push({field: 'brandClearanceFeePrice', label: brandType == 1 ? this.$t('有品牌加价') : this.$t('中性品牌加价')})
}
if(row['discountClearanceFeePrice'] && row['discountClearanceFeePrice'] > 0){
clearanceFields.push({field: 'afterDiscountClearanceFreight', label: this.$t('优惠后单价')})
}
clearanceFields.push({field: 'oneClearanceFreight', label: this.$t('成交单价')})
clearanceFields.forEach(item => {
if(row[item.field]){
clearance.push({
label: item.label,
value: row[item.field],
currency: row.clearanceFreightCurrency,
volume: row.clearanceFreightVolume,
remark: row.specialPriceType && item.field == 'oneClearanceFreight' ? this.$t('特价') : null
})
}
})
}
freight.push({
label: '价格更新时间',
value: parseTime(row.updateTime)
})
clearance.push({
label: '价格更新时间',
value: parseTime(row.updateTime)
})
this.feeDetail = {freight, clearance, charging: row.charging}
},
closeFeeDetail(){
this.showFeeDetailDialog = null
},
/** 查询列表 */ /** 查询列表 */
getOrder() { getOrder() {
let that = this let that = this
...@@ -387,8 +500,23 @@ export default { ...@@ -387,8 +500,23 @@ export default {
// 执行查询 // 执行查询
getOrder(that.orderId).then(response => { getOrder(that.orderId).then(response => {
that.order = response.data; that.order = response.data;
// this.loadBrand()
}); });
}, },
/* loadBrands(){
let brandIds = []
this.form.orderItemVOList.forEach(item => {
if(item.brand){
brandIds.push(item.brand)
}
})
if(!brandIds.length) return
Array.form(new Set(brandIds)).forEach(brandId => {
getProductBrank(brandId).then(res => {
this.brands.push(res.dat)
})
})
}, */
getChannel(){ getChannel(){
if(!this.order || !this.order.channelId || this.order.transportId == 1 || this.order.transportId == 2) return if(!this.order || !this.order.channelId || this.order.transportId == 1 || this.order.transportId == 2) return
getChannel(this.order.channelId).then(res => { getChannel(this.order.channelId).then(res => {
......
...@@ -131,7 +131,7 @@ ...@@ -131,7 +131,7 @@
<router-link :to="{path: '/order/detail',query: {orderId: scope.row.orderId}}" class="link-type"> <router-link :to="{path: '/order/detail',query: {orderId: scope.row.orderId}}" class="link-type">
<span>{{ scope.row.orderNo }}</span> <span>{{ scope.row.orderNo }}</span>
</router-link> </router-link>
<div style="display: flex;flex-wrap: wrap;"> <div style="display: flex;flex-wrap: wrap;" v-if="scope.row.advanceType">
<el-button @click="deleteSpecial(item.value,scope.row.orderId)" size="mini" style="margin-left: 20px" type="danger" circle v-for="(item,index) in specialRendering(scope.row.advanceType)" :key="index">{{item.label[0]}}</el-button> <el-button @click="deleteSpecial(item.value,scope.row.orderId)" size="mini" style="margin-left: 20px" type="danger" circle v-for="(item,index) in specialRendering(scope.row.advanceType)" :key="index">{{item.label[0]}}</el-button>
</div> </div>
</template> </template>
...@@ -272,7 +272,7 @@ ...@@ -272,7 +272,7 @@
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
<template v-if="scope.row.status != 0 && [204,205,206].indexOf(scope.row.inWarehouseState) < 0"> <template v-if="exclude(scope.row.status, [0, 11,12,13,14,15,17,18]) && exclude(scope.row.inWarehouseState, [204,205,206])">
<!-- <el-divider direction="vertical"></el-divider> --> <!-- <el-divider direction="vertical"></el-divider> -->
<!--仓库相关的--> <!--仓库相关的-->
<el-dropdown> <el-dropdown>
...@@ -292,7 +292,8 @@ ...@@ -292,7 +292,8 @@
</template> </template>
<!-- 入仓修改 --> <!-- 入仓修改 -->
<template v-if=" <template v-if="
include(scope.row.inWarehouseState, [202, 207, 202, 209, 210, 202, 211, 212, 202, 213, 214, 215, 216, 204, 205]) include(scope.row.inWarehouseState, [202, 207, 202, 209, 210, 202, 211, 212, 202, 213, 214, 215, 216, 204, 205]) &&
scope.row.status != 11 && exclude(scope.row.shipmentState, [314,315,317,318])
"> ">
<el-dropdown-item @click.native="$router.push('/order/warehousing-update?id=' + scope.row.orderId)" v-hasPermi="['ecw:order:update']">{{$t('入仓修改')}}</el-dropdown-item> <el-dropdown-item @click.native="$router.push('/order/warehousing-update?id=' + scope.row.orderId)" v-hasPermi="['ecw:order:update']">{{$t('入仓修改')}}</el-dropdown-item>
</template> </template>
......
...@@ -108,7 +108,7 @@ ...@@ -108,7 +108,7 @@
<template v-slot="{r,c,$index}"> <template v-slot="{r,c,$index}">
<el-form-item :rules="tableFormRules.boxGauge1" :prop="!tableData[$index].id && $index + '.boxGauge1'"> <el-form-item :rules="tableFormRules.boxGauge1" :prop="!tableData[$index].id && $index + '.boxGauge1'">
<span v-if="tableData[$index].id && !edit">{{ tableData[$index].boxGauge ? tableData[$index].boxGauge.split('*')[0] : '' }}</span> <span v-if="tableData[$index].id && !edit">{{ tableData[$index].boxGauge ? tableData[$index].boxGauge.split('*')[0] : '' }}</span>
<el-input v-else v-model.number="tableData[$index].boxGauge1" placeholder="" @blur="handleVolume($index)"></el-input> <el-input v-else type="number" v-model="tableData[$index].boxGauge1" placeholder="" @blur="handleVolume($index)"></el-input>
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
...@@ -116,7 +116,7 @@ ...@@ -116,7 +116,7 @@
<template v-slot="{r,c,$index}"> <template v-slot="{r,c,$index}">
<el-form-item :rules="tableFormRules.boxGauge2" :prop="!tableData[$index].id && $index + '.boxGauge2'"> <el-form-item :rules="tableFormRules.boxGauge2" :prop="!tableData[$index].id && $index + '.boxGauge2'">
<span v-if="tableData[$index].id && !edit">{{ tableData[$index].boxGauge ? tableData[$index].boxGauge.split('*')[1] : '' }}</span> <span v-if="tableData[$index].id && !edit">{{ tableData[$index].boxGauge ? tableData[$index].boxGauge.split('*')[1] : '' }}</span>
<el-input v-else v-model.number="tableData[$index].boxGauge2" placeholder="" @blur="handleVolume($index)"></el-input> <el-input v-else type="number" v-model="tableData[$index].boxGauge2" placeholder="" @blur="handleVolume($index)"></el-input>
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
...@@ -124,7 +124,7 @@ ...@@ -124,7 +124,7 @@
<template v-slot="{r,c,$index}"> <template v-slot="{r,c,$index}">
<el-form-item :rules="tableFormRules.boxGauge3" :prop="!tableData[$index].id && $index + '.boxGauge3'"> <el-form-item :rules="tableFormRules.boxGauge3" :prop="!tableData[$index].id && $index + '.boxGauge3'">
<span v-if="tableData[$index].id && !edit">{{ tableData[$index].boxGauge ? tableData[$index].boxGauge.split('*')[2] : '' }}</span> <span v-if="tableData[$index].id && !edit">{{ tableData[$index].boxGauge ? tableData[$index].boxGauge.split('*')[2] : '' }}</span>
<el-input v-else v-model.number="tableData[$index].boxGauge3" placeholder="" @blur="handleVolume($index)"></el-input> <el-input v-else type="number" v-model="tableData[$index].boxGauge3" placeholder="" @blur="handleVolume($index)"></el-input>
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
......
...@@ -97,7 +97,7 @@ ...@@ -97,7 +97,7 @@
- -
<el-input v-model="item.endNum" type="number" placeholder="" class="w-100"></el-input> <el-input v-model="item.endNum" type="number" placeholder="" class="w-100"></el-input>
/ /
<selector v-model="form.weightUnit" :options="unitList" :label-field="$l(null, 'title')" value-field="id" defaultable2 class="w-100" /> <selector v-model="item.weightUnit" :options="unitList" :label-field="$l(null, 'title')" value-field="id" defaultable2 class="w-100" />
</el-form-item> </el-form-item>
<el-form-item :label="$t('默认运费')" v-if="form.priceType != 1" :prop="`priceStepList.${index}.transportPrice`" :rules="{validator: priceValidator, trigger: 'blur', message: '价格错误'}"> <el-form-item :label="$t('默认运费')" v-if="form.priceType != 1" :prop="`priceStepList.${index}.transportPrice`" :rules="{validator: priceValidator, trigger: 'blur', message: '价格错误'}">
<inputor default2="0" v-model.number="item.transportPrice" type="number" :placeholder="$t('整数或者两位小数')" class="w-100 mr-10"/> <inputor default2="0" v-model.number="item.transportPrice" type="number" :placeholder="$t('整数或者两位小数')" class="w-100 mr-10"/>
...@@ -117,7 +117,7 @@ ...@@ -117,7 +117,7 @@
:rules="{validator: priceValidator, trigger: 'blur', message: '价格错误'}" :rules="{validator: priceValidator, trigger: 'blur', message: '价格错误'}"
> >
<selector v-model="item.allPriceUnit" :options="currencyList" :label-field="$l(null, 'title')" value-field="id" defaultable2 class="w-100" /> <selector v-model="item.allPriceUnit" :options="currencyList" :label-field="$l(null, 'title')" value-field="id" defaultable2 class="w-100" />
<inputor default2="0" v-model.number="item.allPrice" type="number" :placeholder="$t('整数或者两位小数')" class="w-100 mr-10" :rules="{validator: priceValidator, trigger: 'blur', message: '价格错误'}"/> <inputor default2="0" v-model.number="item.allPrice" type="number" :placeholder="$t('整数或者两位小数')" class="w-100 ml-10" :rules="{validator: priceValidator, trigger: 'blur', message: '价格错误'}"/>
/ <selector v-model="item.allVolumeUnit" :options="unitList" :label-field="$l(null, 'title')" value-field="id" defaultable2 class="w-100" /> / <selector v-model="item.allVolumeUnit" :options="unitList" :label-field="$l(null, 'title')" value-field="id" defaultable2 class="w-100" />
</el-form-item> </el-form-item>
</div> </div>
...@@ -154,10 +154,10 @@ ...@@ -154,10 +154,10 @@
:prop="`specialList.${specialIndex}`.allPrice" :prop="`specialList.${specialIndex}`.allPrice"
:rules="{validator: priceValidator, trigger: 'blur', message: '价格错误'}" :rules="{validator: priceValidator, trigger: 'blur', message: '价格错误'}"
> >
<selector v-model="special.allPriceUnit" :options="currencyList" :label-field="$l(null, 'title')" value-field="id" defaultable2 class="w-100 mr-10" /> <selector disabled v-model="special.allPriceUnit" :options="currencyList" :label-field="$l(null, 'title')" value-field="id" defaultable2 class="w-100 mr-10" />
<inputor default2="0" v-model.number="special.allPrice" type="number" :placeholder="$t('整数或者两位小数')" class="w-100 mr-10" /> <inputor default2="0" v-model.number="special.allPrice" type="number" :placeholder="$t('整数或者两位小数')" class="w-100 mr-10" />
<span class="mr-10">/</span> <span class="mr-10">/</span>
<selector v-model="special.allVolumeUnit" :options="unitList" :label-field="$l(null, 'title')" value-field="id" defaultable2 class="w-100" /> <selector disabled v-model="special.allVolumeUnit" :options="unitList" :label-field="$l(null, 'title')" value-field="id" defaultable2 class="w-100" />
</el-form-item> </el-form-item>
</template> </template>
<template v-else v-for="(special, specialIndex) in this.form.specialList"> <template v-else v-for="(special, specialIndex) in this.form.specialList">
...@@ -167,10 +167,10 @@ ...@@ -167,10 +167,10 @@
:prop="`specialList.${specialIndex}.transportPrice`" :prop="`specialList.${specialIndex}.transportPrice`"
:rules="{validator: priceValidator, trigger: 'blur', message: '价格错误'}" :rules="{validator: priceValidator, trigger: 'blur', message: '价格错误'}"
> >
<selector v-model="special.transportPriceUnit" :options="currencyList" :label-field="$l(null, 'title')" value-field="id" defaultable2 class="w-100 mr-10" /> <selector disabled v-model="special.transportPriceUnit" :options="currencyList" :label-field="$l(null, 'title')" value-field="id" defaultable2 class="w-100 mr-10" />
<inputor default2="0" v-model.number="special.transportPrice" type="number" :placeholder="$t('整数或者两位小数')" class="w-100 mr-10" /> <inputor default2="0" v-model.number="special.transportPrice" type="number" :placeholder="$t('整数或者两位小数')" class="w-100 mr-10" />
<span class="mr-10">/</span> <span class="mr-10">/</span>
<selector v-model="special.transportVolumeUnit" :options="unitList" :label-field="$l(null, 'title')" value-field="id" defaultable2 class="w-100" /> <selector disabled v-model="special.transportVolumeUnit" :options="unitList" :label-field="$l(null, 'title')" value-field="id" defaultable2 class="w-100" />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
:label="getDictDataLabel(DICT_TYPE.ECW_SPECIAL_REQ_FOR_LINE_PRODUCTS, special.specialDictType) + $t('清关费')" :label="getDictDataLabel(DICT_TYPE.ECW_SPECIAL_REQ_FOR_LINE_PRODUCTS, special.specialDictType) + $t('清关费')"
...@@ -178,10 +178,10 @@ ...@@ -178,10 +178,10 @@
:prop="`specialList.${specialIndex}.clearancePrice`" :prop="`specialList.${specialIndex}.clearancePrice`"
:rules="{validator: priceValidator, trigger: 'blur', message: '价格错误'}" :rules="{validator: priceValidator, trigger: 'blur', message: '价格错误'}"
> >
<selector v-model="special.clearancePriceUnit" :options="currencyList" :label-field="$l(null, 'title')" value-field="id" defaultable2 class="w-100 mr-10" /> <selector disabled v-model="special.clearancePriceUnit" :options="currencyList" :label-field="$l(null, 'title')" value-field="id" defaultable2 class="w-100 mr-10" />
<inputor default2="0" v-model.number="special.clearancePrice" type="number" :placeholder="$t('整数或者两位小数')" class="w-100 mr-10" /> <inputor default2="0" v-model.number="special.clearancePrice" type="number" :placeholder="$t('整数或者两位小数')" class="w-100 mr-10" />
<span class="mr-10">/</span> <span class="mr-10">/</span>
<selector v-model="special.clearanceVolumeUnit" :options="unitList" :label-field="$l(null, 'title')" value-field="id" defaultable2 class="w-100" /> <selector disabled v-model="special.clearanceVolumeUnit" :options="unitList" :label-field="$l(null, 'title')" value-field="id" defaultable2 class="w-100" />
</el-form-item> </el-form-item>
</template> </template>
</template> </template>
...@@ -218,15 +218,99 @@ ...@@ -218,15 +218,99 @@
</el-card> </el-card>
</el-form> </el-form>
<el-card class="mt-10" v-if="readonly">
<el-descriptions :column="1">
<el-descriptions-item :label="$t('创建时间')">{{form.createTime|parseTime}}</el-descriptions-item>
<el-descriptions-item :label="$t('创建人')">{{form.creatorName}}</el-descriptions-item>
<el-descriptions-item :label="$t('最新修改时间')">{{form.updateTime|parseTime}}</el-descriptions-item>
<el-descriptions-item :label="$t('最新修改人')">{{form.updaterName}}</el-descriptions-item>
</el-descriptions>
</el-card>
<div style="margin: 20px 0"> <div style="margin: 20px 0">
<el-button @click="submitForm" type="primary" v-if="!readonly" :loading="loading">{{$t('确认提交')}}</el-button> <el-button @click="submitForm" type="primary" v-if="!readonly" :loading="loading">{{$t('确认提交')}}</el-button>
<el-button type="default" @click="$router.back()">{{$t('返回上一页')}}</el-button> <el-button type="default" @click="$router.back()">{{$t('返回上一页')}}</el-button>
<el-button @click="showLogsDialog=true" type="primary" v-if="readonly">{{$t('查看价格日志')}}</el-button>
</div>
<el-dialog :title="$t('查看价格日志')" :visible="showLogsDialog" :before-close="closeLogsDialog" width="1000px">
<el-table :data="logs">
<el-table-column label="序号" type="index"></el-table-column>
<el-table-column label="修改人" prop="creatorName"></el-table-column>
<el-table-column label="修改时间">
<template slot-scope="{row}">{{row.createTime|parseTime}}</template>
</el-table-column>
<el-table-column label="修改前">
<template slot-scope="{row}">
<div>预付:<dict-tag :type="DICT_TYPE.ECW_PAY_ADVANCE" :value="row.detail.needPay" /></div>
<div>单价模式:<dict-tag :type="DICT_TYPE.ECW_PRICE_TYPE" :value="row.detail.priceType" /></div>
<!----阶梯定价-->
<template v-if="row.detail.stepPrice == 1">
<template v-for="(item, index) in row.detail.priceStepList">
<div class="mt-10">
{{index+1}}阶段
{{item.startNum}} - {{item.endNum}} {{unitMap[item.weightUnit]}}
</div> </div>
<template v-if="row.detail.priceType != 1">
<div :key="index + '_freight'" class="pl-10" >
运费:
{{item.transportPrice}} {{currencyMap[item.transportPriceUnit]}} / {{unitMap[item.transportVolumeUnit]}}
</div>
<div :key="item.specialDictType + '_clearance'" class="pl-10">
清关费:
{{item.clearancePrice}} {{currencyMap[item.clearancePriceUnit]}} / {{unitMap[item.clearanceVolumeUnit]}}
</div>
</template>
<div v-else class="pl-10">
全包价:
{{item.allPrice}} {{currencyMap[item.allPriceUnit]}} / {{unitMap[item.allVolumeUnit]}}
</div>
</template>
</template>
<template v-else>
<template v-if="row.detail.priceType != 1">
<div>
默认运费:
{{row.detail.transportPrice}} {{currencyMap[row.detail.transportPriceUnit]}} / {{unitMap[row.detail.transportVolumeUnit]}}
</div>
<div>
默认清关费:
{{row.detail.clearancePrice}} {{currencyMap[row.detail.clearancePriceUnit]}} / {{unitMap[row.detail.clearanceVolumeUnit]}}
</div>
</template>
<div v-else>
全包价:
{{row.detail.allPrice}} {{currencyMap[row.detail.allPriceUnit]}} / {{unitMap[row.detail.allVolumeUnit]}}
</div>
<template v-for="(item, index) in row.detail.specialList">
<template v-if="row.detail.priceType != 1">
<div :key="item.specialDictType + '_freight'" >
{{getDictDataLabel(DICT_TYPE.ECW_SPECIAL_REQ_FOR_LINE_PRODUCTS, item.specialDictType)}} 运费:
{{item.transportPrice}} {{currencyMap[item.transportPriceUnit]}} / {{unitMap[item.transportVolumeUnit]}}
</div>
<div :key="item.specialDictType + '_clearance'" >
{{getDictDataLabel(DICT_TYPE.ECW_SPECIAL_REQ_FOR_LINE_PRODUCTS, item.specialDictType)}} 清关费:
{{item.clearancePrice}} {{currencyMap[item.clearancePriceUnit]}} / {{unitMap[item.clearanceVolumeUnit]}}
</div>
</template>
<div v-else>
{{getDictDataLabel(DICT_TYPE.ECW_SPECIAL_REQ_FOR_LINE_PRODUCTS, item.specialDictType)}} 全包价:
{{item.allPrice}} {{currencyMap[item.allPriceUnit]}} / {{unitMap[item.allVolumeUnit]}}
</div>
</template>
</template>
</template>
</el-table-column>
</el-table>
</el-dialog>
</div> </div>
</template> </template>
<script> <script>
import RoutersSelector from '@/components/RoutersSelector' import RoutersSelector from '@/components/RoutersSelector'
import { createProductPrice, updateProductPrice, batchUpdateProductPrice, deleteProductPrice, getProductPrice, getProductPriceList, getProductPricePage, exportProductPriceExcel } from "@/api/ecw/productPrice"; import { createProductPrice, updateProductPrice, batchUpdateProductPrice, getProductPrice, getProductPriceList, getPriceSnapshotList } from "@/api/ecw/productPrice";
import { getProductType, getProductTypeList } from '@/api/ecw/productType' import { getProductType, getProductTypeList } from '@/api/ecw/productType'
import { getCurrencyList } from '@/api/ecw/currency'; import { getCurrencyList } from '@/api/ecw/currency';
import { getUnitList } from '@/api/ecw/unit'; import { getUnitList } from '@/api/ecw/unit';
...@@ -238,6 +322,7 @@ import {parseTime} from '@/utils/ruoyi' ...@@ -238,6 +322,7 @@ import {parseTime} from '@/utils/ruoyi'
import {openedRouterList} from '@/api/ecw/warehouse' import {openedRouterList} from '@/api/ecw/warehouse'
export default { export default {
components: { RoutersSelector, ProductSelector, Selector, Inputor }, components: { RoutersSelector, ProductSelector, Selector, Inputor },
filters: {parseTime},
data() { data() {
return { return {
checkList: [], checkList: [],
...@@ -264,15 +349,37 @@ export default { ...@@ -264,15 +349,37 @@ export default {
productDisabled: true, productDisabled: true,
readonly: false, readonly: false,
lineList: [], //路线数组 lineList: [], //路线数组
loading: false loading: false,
showLogsDialog: false, // 显示价格日志弹层
logs: []
} }
}, },
computed: { computed: {
routerOption(){ routerOption(){
return this.$route.query return this.$route.query
},
currencyMap(){
let map = {}
this.currencyList.forEach(item => {
map[item.id] = this.$l(item, 'title')
})
return map
},
unitMap(){
let map = {}
this.unitList.forEach(item => {
map[item.id] = this.$l(item, 'title')
})
return map
} }
}, },
watch: { watch: {
showLogsDialog(showLogsDialog){
if(showLogsDialog){
this.laodLogs()
}
},
checkList() { //选择路线 checkList() { //选择路线
if (this.checkList.length > 0) { if (this.checkList.length > 0) {
this.form.lineChannelList = this.checkList.map(item => { this.form.lineChannelList = this.checkList.map(item => {
...@@ -385,6 +492,9 @@ export default { ...@@ -385,6 +492,9 @@ export default {
if(this.form.needPay){ if(this.form.needPay){
this.needPay = true this.needPay = true
} }
if(this.form.stepPrice == 1){
this.stepPrice = true
}
if(res.data.validateStartDate){ if(res.data.validateStartDate){
this.form.validateStartDate = parseTime(res.data.validateStartDate) this.form.validateStartDate = parseTime(res.data.validateStartDate)
} }
...@@ -426,6 +536,7 @@ export default { ...@@ -426,6 +536,7 @@ export default {
stepPrice: 0, stepPrice: 0,
advanceStatus: 0, advanceStatus: 0,
needBook: 0, needBook: 0,
specialList: [],
// dayLimit: 10000, // dayLimit: 10000,
validateEndDate: undefined, validateEndDate: undefined,
validateStartDate: undefined, validateStartDate: undefined,
...@@ -471,7 +582,7 @@ export default { ...@@ -471,7 +582,7 @@ export default {
getCurrencyList().then(res => this.currencyList = res.data) getCurrencyList().then(res => this.currencyList = res.data)
getUnitList().then(res => this.unitList = res.data) getUnitList().then(res => this.unitList = res.data)
if(!this.form.specialList || !this.form.specialList.length){ /* if(!this.form.specialList || !this.form.specialList.length){
console.log('specialList默认给[]') console.log('specialList默认给[]')
this.$set(this.form, 'specialList', []) this.$set(this.form, 'specialList', [])
this.getDictDatas(this.DICT_TYPE.ECW_SPECIAL_REQ_FOR_LINE_PRODUCTS).forEach(item => { this.getDictDatas(this.DICT_TYPE.ECW_SPECIAL_REQ_FOR_LINE_PRODUCTS).forEach(item => {
...@@ -485,8 +596,23 @@ export default { ...@@ -485,8 +596,23 @@ export default {
"transportVolumeUnit": null, "transportVolumeUnit": null,
}) })
}) })
} */
console.log(this.getDictDatas(this.DICT_TYPE.ECW_SPECIAL_REQ_FOR_LINE_PRODUCTS))
this.getDictDatas(this.DICT_TYPE.ECW_SPECIAL_REQ_FOR_LINE_PRODUCTS).forEach(item => {
if(!this.form.specialList.find(special => special.specialDictType == item.value)){
this.form.specialList.push({
"clearancePrice": !this.$route.query.action ? 0 : null, // 新建默认给0,否则默认是null
"clearancePriceUnit": null,
"clearanceVolumeUnit": null,
"specialDictType": item.value,
"transportPrice": !this.$route.query.action ? 0 : null, // 新建默认给0,否则默认是null
"transportPriceUnit": null,
"transportVolumeUnit": null,
})
} }
})
}, },
methods: { methods: {
priceValidator(rule, value, callback){ priceValidator(rule, value, callback){
...@@ -592,6 +718,17 @@ export default { ...@@ -592,6 +718,17 @@ export default {
}).finally(res => this.loading = false); }).finally(res => this.loading = false);
}); });
}, },
closeLogsDialog(){
this.showLogsDialog = false
},
laodLogs(){
getPriceSnapshotList(this.form.id).then(res => {
this.logs = res.data
this.logs.forEach(item => {
item.detail = JSON.parse(item.content)
})
})
}
} }
} }
</script> </script>
......
...@@ -178,7 +178,13 @@ ...@@ -178,7 +178,13 @@
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('最后修改时间')">
<template slot-scope="{row}">
<div>
{{ row.updateTime|parseTime }}
</div>
</template>
</el-table-column>
<el-table-column :label="$t('操作')" align="center" class-name="small-padding fixed-width" width="140"> <el-table-column :label="$t('操作')" align="center" class-name="small-padding fixed-width" width="140">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row, true)" <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row, true)"
...@@ -216,8 +222,10 @@ import { getChannelList } from '@/api/ecw/channel'; ...@@ -216,8 +222,10 @@ import { getChannelList } from '@/api/ecw/channel';
import DictTag from '@/components/DictTag' import DictTag from '@/components/DictTag'
import {arrryToKeyedObjectBy} from '@/utils/index' import {arrryToKeyedObjectBy} from '@/utils/index'
import { getProduct } from '@/api/ecw/product'; import { getProduct } from '@/api/ecw/product';
import {parseTime} from '@/utils/ruoyi'
export default { export default {
name: "ProductPrice", name: "ProductPrice",
filters: {parseTime},
components: { components: {
DictTag DictTag
}, },
......
...@@ -1038,6 +1038,42 @@ ...@@ -1038,6 +1038,42 @@
"@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/resolve-uri" "^3.0.3"
"@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/sourcemap-codec" "^1.4.10"
"@messageformat/core@^3.0.0":
version "3.0.1"
resolved "https://registry.npmmirror.com/@messageformat/core/-/core-3.0.1.tgz#191e12cf9643704d1fd32e592a3fbdc194dd588e"
integrity sha512-yxj2+0e46hcZqJfNf0ZYbC2q6WlcGoh4g11mCyRtTueR0AD8F9z4JMYAS1aOiFG8Vl1LZg/h5hZHKmWTAyZq8g==
dependencies:
"@messageformat/date-skeleton" "^1.0.0"
"@messageformat/number-skeleton" "^1.0.0"
"@messageformat/parser" "^5.0.0"
"@messageformat/runtime" "^3.0.1"
make-plural "^7.0.0"
safe-identifier "^0.4.1"
"@messageformat/date-skeleton@^1.0.0":
version "1.0.1"
resolved "https://registry.npmmirror.com/@messageformat/date-skeleton/-/date-skeleton-1.0.1.tgz#980b8babe21a11433b6e1e8f6dc8c4cae4f5f56b"
integrity sha512-jPXy8fg+WMPIgmGjxSlnGJn68h/2InfT0TNSkVx0IGXgp4ynnvYkbZ51dGWmGySEK+pBiYUttbQdu5XEqX5CRg==
"@messageformat/number-skeleton@^1.0.0":
version "1.1.0"
resolved "https://registry.npmmirror.com/@messageformat/number-skeleton/-/number-skeleton-1.1.0.tgz#eb636738da8abbd35ccbeb84f7d84d63302aeb61"
integrity sha512-F0Io+GOSvFFxvp9Ze3L5kAoZ2NnOAT0Mr/jpGNd3fqo8A0t4NxNIAcCdggtl2B/gN2ErkIKSBVPrF7xcW1IGvA==
"@messageformat/parser@^5.0.0":
version "5.0.0"
resolved "https://registry.npmmirror.com/@messageformat/parser/-/parser-5.0.0.tgz#5737e69d7d4a469998b527710f1891174fc1b262"
integrity sha512-WiDKhi8F0zQaFU8cXgqq69eYFarCnTVxKcvhAONufKf0oUxbqLMW6JX6rV4Hqh+BEQWGyKKKHY4g1XA6bCLylA==
dependencies:
moo "^0.5.1"
"@messageformat/runtime@^3.0.1":
version "3.0.1"
resolved "https://registry.npmmirror.com/@messageformat/runtime/-/runtime-3.0.1.tgz#94d1f6c43265c28ef7aed98ecfcc0968c6c849ac"
integrity sha512-6RU5ol2lDtO8bD9Yxe6CZkl0DArdv0qkuoZC+ZwowU+cdRlVE1157wjCmlA5Rsf1Xc/brACnsZa5PZpEDfTFFg==
dependencies:
make-plural "^7.0.0"
"@mrmlnc/readdir-enhanced@^2.2.1": "@mrmlnc/readdir-enhanced@^2.2.1":
version "2.2.1" version "2.2.1"
resolved "https://registry.npmmirror.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz" resolved "https://registry.npmmirror.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz"
...@@ -1469,11 +1505,40 @@ ...@@ -1469,11 +1505,40 @@
estree-walker "^2.0.2" estree-walker "^2.0.2"
magic-string "^0.25.7" magic-string "^0.25.7"
"@vue/reactivity@3.2.45":
version "3.2.45"
resolved "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.45.tgz#412a45b574de601be5a4a5d9a8cbd4dee4662ff0"
integrity sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==
dependencies:
"@vue/shared" "3.2.45"
"@vue/runtime-core@3.2.45":
version "3.2.45"
resolved "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.45.tgz#7ad7ef9b2519d41062a30c6fa001ec43ac549c7f"
integrity sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==
dependencies:
"@vue/reactivity" "3.2.45"
"@vue/shared" "3.2.45"
"@vue/runtime-dom@latest":
version "3.2.45"
resolved "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.45.tgz#1a2ef6ee2ad876206fbbe2a884554bba2d0faf59"
integrity sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==
dependencies:
"@vue/runtime-core" "3.2.45"
"@vue/shared" "3.2.45"
csstype "^2.6.8"
"@vue/shared@3.2.31": "@vue/shared@3.2.31":
version "3.2.31" version "3.2.31"
resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.31.tgz" resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.31.tgz"
integrity sha512-ymN2pj6zEjiKJZbrf98UM2pfDd6F2H7ksKw7NDt/ZZ1fh5Ei39X5tABugtT03ZRlWd9imccoK0hE8hpjpU7irQ== integrity sha512-ymN2pj6zEjiKJZbrf98UM2pfDd6F2H7ksKw7NDt/ZZ1fh5Ei39X5tABugtT03ZRlWd9imccoK0hE8hpjpU7irQ==
"@vue/shared@3.2.45":
version "3.2.45"
resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz#a3fffa7489eafff38d984e23d0236e230c818bc2"
integrity sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==
"@vue/web-component-wrapper@^1.2.0": "@vue/web-component-wrapper@^1.2.0":
version "1.3.0" version "1.3.0"
resolved "https://registry.npmmirror.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz" resolved "https://registry.npmmirror.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz"
...@@ -1677,6 +1742,11 @@ address@^1.1.2: ...@@ -1677,6 +1742,11 @@ address@^1.1.2:
resolved "https://registry.npmmirror.com/address/-/address-1.1.2.tgz" resolved "https://registry.npmmirror.com/address/-/address-1.1.2.tgz"
integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==
adler-32@~1.3.0:
version "1.3.1"
resolved "https://registry.npmmirror.com/adler-32/-/adler-32-1.3.1.tgz#1dbf0b36dda0012189a32b3679061932df1821e2"
integrity sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==
aggregate-error@^3.0.0: aggregate-error@^3.0.0:
version "3.1.0" version "3.1.0"
resolved "https://registry.npmmirror.com/aggregate-error/-/aggregate-error-3.1.0.tgz" resolved "https://registry.npmmirror.com/aggregate-error/-/aggregate-error-3.1.0.tgz"
...@@ -2046,6 +2116,11 @@ balanced-match@^1.0.0: ...@@ -2046,6 +2116,11 @@ balanced-match@^1.0.0:
resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz" resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
base64-arraybuffer@^1.0.2:
version "1.0.2"
resolved "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz#1c37589a7c4b0746e34bd1feb951da2df01c1bdc"
integrity sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==
base64-js@^1.0.2: base64-js@^1.0.2:
version "1.5.1" version "1.5.1"
resolved "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz" resolved "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz"
...@@ -2161,6 +2236,11 @@ boolbase@^1.0.0, boolbase@~1.0.0: ...@@ -2161,6 +2236,11 @@ boolbase@^1.0.0, boolbase@~1.0.0:
resolved "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz" resolved "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz"
integrity "sha1-aN/1++YMUes3cl6p4+0xDcwed24= sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" integrity "sha1-aN/1++YMUes3cl6p4+0xDcwed24= sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
boolean@^3.1.4:
version "3.2.0"
resolved "https://registry.npmmirror.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b"
integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==
bpmn-js-properties-panel@0.46.0: bpmn-js-properties-panel@0.46.0:
version "0.46.0" version "0.46.0"
resolved "https://registry.npmmirror.com/bpmn-js-properties-panel/-/bpmn-js-properties-panel-0.46.0.tgz" resolved "https://registry.npmmirror.com/bpmn-js-properties-panel/-/bpmn-js-properties-panel-0.46.0.tgz"
...@@ -2543,6 +2623,14 @@ caseless@~0.12.0: ...@@ -2543,6 +2623,14 @@ caseless@~0.12.0:
resolved "https://registry.npmmirror.com/caseless/-/caseless-0.12.0.tgz" resolved "https://registry.npmmirror.com/caseless/-/caseless-0.12.0.tgz"
integrity "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" integrity "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
cfb@~1.2.1:
version "1.2.2"
resolved "https://registry.npmmirror.com/cfb/-/cfb-1.2.2.tgz#94e687628c700e5155436dac05f74e08df23bc44"
integrity sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==
dependencies:
adler-32 "~1.3.0"
crc-32 "~1.2.0"
chalk@2.3.0: chalk@2.3.0:
version "2.3.0" version "2.3.0"
resolved "https://registry.npmmirror.com/chalk/-/chalk-2.3.0.tgz" resolved "https://registry.npmmirror.com/chalk/-/chalk-2.3.0.tgz"
...@@ -2795,6 +2883,11 @@ coa@^2.0.2: ...@@ -2795,6 +2883,11 @@ coa@^2.0.2:
chalk "^2.4.1" chalk "^2.4.1"
q "^1.1.2" q "^1.1.2"
codepage@~1.15.0:
version "1.15.0"
resolved "https://registry.npmmirror.com/codepage/-/codepage-1.15.0.tgz#2e00519024b39424ec66eeb3ec07227e692618ab"
integrity sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==
collection-visit@^1.0.0: collection-visit@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.npmmirror.com/collection-visit/-/collection-visit-1.0.0.tgz" resolved "https://registry.npmmirror.com/collection-visit/-/collection-visit-1.0.0.tgz"
...@@ -3129,6 +3222,11 @@ cosmiconfig@^7.0.0: ...@@ -3129,6 +3222,11 @@ cosmiconfig@^7.0.0:
path-type "^4.0.0" path-type "^4.0.0"
yaml "^1.10.0" yaml "^1.10.0"
crc-32@~1.2.0, crc-32@~1.2.1:
version "1.2.2"
resolved "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff"
integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==
create-ecdh@^4.0.0: create-ecdh@^4.0.0:
version "4.0.4" version "4.0.4"
resolved "https://registry.npmmirror.com/create-ecdh/-/create-ecdh-4.0.4.tgz" resolved "https://registry.npmmirror.com/create-ecdh/-/create-ecdh-4.0.4.tgz"
...@@ -3219,6 +3317,13 @@ css-declaration-sorter@^4.0.1: ...@@ -3219,6 +3317,13 @@ css-declaration-sorter@^4.0.1:
postcss "^7.0.1" postcss "^7.0.1"
timsort "^0.3.0" timsort "^0.3.0"
css-line-break@^2.1.0:
version "2.1.0"
resolved "https://registry.npmmirror.com/css-line-break/-/css-line-break-2.1.0.tgz#bfef660dfa6f5397ea54116bb3cb4873edbc4fa0"
integrity sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==
dependencies:
utrie "^1.0.2"
css-loader@^3.5.3: css-loader@^3.5.3:
version "3.6.0" version "3.6.0"
resolved "https://registry.npmmirror.com/css-loader/-/css-loader-3.6.0.tgz" resolved "https://registry.npmmirror.com/css-loader/-/css-loader-3.6.0.tgz"
...@@ -3375,6 +3480,11 @@ csso@^4.0.2: ...@@ -3375,6 +3480,11 @@ csso@^4.0.2:
dependencies: dependencies:
css-tree "^1.1.2" css-tree "^1.1.2"
csstype@^2.6.8:
version "2.6.21"
resolved "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz#2efb85b7cc55c80017c66a5ad7cbd931fda3a90e"
integrity sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==
csstype@^3.1.0: csstype@^3.1.0:
version "3.1.0" version "3.1.0"
resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2"
...@@ -3423,11 +3533,23 @@ debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0: ...@@ -3423,11 +3533,23 @@ debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0:
dependencies: dependencies:
ms "2.1.2" ms "2.1.2"
debug@^4.3.3:
version "4.3.4"
resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
dependencies:
ms "2.1.2"
decamelize@^1.2.0: decamelize@^1.2.0:
version "1.2.0" version "1.2.0"
resolved "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz" resolved "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz"
integrity "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" integrity "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA=="
decimal.js@^10.4.1:
version "10.4.2"
resolved "https://registry.npmmirror.com/decimal.js/-/decimal.js-10.4.2.tgz#0341651d1d997d86065a2ce3a441fbd0d8e8b98e"
integrity sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==
decode-uri-component@^0.2.0: decode-uri-component@^0.2.0:
version "0.2.0" version "0.2.0"
resolved "https://registry.npmmirror.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz" resolved "https://registry.npmmirror.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz"
...@@ -4414,6 +4536,13 @@ fast-levenshtein@^2.0.6: ...@@ -4414,6 +4536,13 @@ fast-levenshtein@^2.0.6:
resolved "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" resolved "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"
integrity "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" integrity "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="
fast-printf@^1.6.9:
version "1.6.9"
resolved "https://registry.npmmirror.com/fast-printf/-/fast-printf-1.6.9.tgz#212f56570d2dc8ccdd057ee93d50dd414d07d676"
integrity sha512-FChq8hbz65WMj4rstcQsFB0O7Cy++nmbNfLYnD9cYv2cRn8EG6k/MGn9kO/tjO66t09DLDugj3yL+V2o6Qftrg==
dependencies:
boolean "^3.1.4"
faye-websocket@^0.11.3: faye-websocket@^0.11.3:
version "0.11.4" version "0.11.4"
resolved "https://registry.npmmirror.com/faye-websocket/-/faye-websocket-0.11.4.tgz" resolved "https://registry.npmmirror.com/faye-websocket/-/faye-websocket-0.11.4.tgz"
...@@ -4613,6 +4742,11 @@ forwarded@0.2.0: ...@@ -4613,6 +4742,11 @@ forwarded@0.2.0:
resolved "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz" resolved "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz"
integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
frac@~1.1.2:
version "1.1.2"
resolved "https://registry.npmmirror.com/frac/-/frac-1.1.2.tgz#3d74f7f6478c88a1b5020306d747dc6313c74d0b"
integrity sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==
fragment-cache@^0.2.1: fragment-cache@^0.2.1:
version "0.2.1" version "0.2.1"
resolved "https://registry.npmmirror.com/fragment-cache/-/fragment-cache-0.2.1.tgz" resolved "https://registry.npmmirror.com/fragment-cache/-/fragment-cache-0.2.1.tgz"
...@@ -5112,6 +5246,14 @@ html-webpack-plugin@^3.2.0: ...@@ -5112,6 +5246,14 @@ html-webpack-plugin@^3.2.0:
toposort "^1.0.0" toposort "^1.0.0"
util.promisify "1.0.0" util.promisify "1.0.0"
html2canvas@^1.4.1:
version "1.4.1"
resolved "https://registry.npmmirror.com/html2canvas/-/html2canvas-1.4.1.tgz#7cef1888311b5011d507794a066041b14669a543"
integrity sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==
dependencies:
css-line-break "^2.1.0"
text-segmentation "^1.0.3"
htmlparser2@^3.8.3: htmlparser2@^3.8.3:
version "3.10.1" version "3.10.1"
resolved "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-3.10.1.tgz" resolved "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-3.10.1.tgz"
...@@ -5203,6 +5345,18 @@ human-signals@^1.1.1: ...@@ -5203,6 +5345,18 @@ human-signals@^1.1.1:
resolved "https://registry.npmmirror.com/human-signals/-/human-signals-1.1.1.tgz" resolved "https://registry.npmmirror.com/human-signals/-/human-signals-1.1.1.tgz"
integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
i18n@^0.15.0:
version "0.15.1"
resolved "https://registry.npmmirror.com/i18n/-/i18n-0.15.1.tgz#68fb8993c461cc440bc2485d82f72019f2b92de8"
integrity sha512-yue187t8MqUPMHdKjiZGrX+L+xcUsDClGO0Cz4loaKUOK9WrGw5pgan4bv130utOwX7fHE9w2iUeHFalVQWkXA==
dependencies:
"@messageformat/core" "^3.0.0"
debug "^4.3.3"
fast-printf "^1.6.9"
make-plural "^7.0.0"
math-interval-parser "^2.0.1"
mustache "^4.2.0"
iconv-lite@0.4.24, iconv-lite@^0.4.24: iconv-lite@0.4.24, iconv-lite@^0.4.24:
version "0.4.24" version "0.4.24"
resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz" resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz"
...@@ -6218,6 +6372,11 @@ make-dir@^3.0.2, make-dir@^3.1.0: ...@@ -6218,6 +6372,11 @@ make-dir@^3.0.2, make-dir@^3.1.0:
dependencies: dependencies:
semver "^6.0.0" semver "^6.0.0"
make-plural@^7.0.0:
version "7.2.0"
resolved "https://registry.npmmirror.com/make-plural/-/make-plural-7.2.0.tgz#93174b1419672a48a2340db6c1d3fb217530c684"
integrity sha512-WkdI+iaWaBCFM2wUXwos8Z7spg5Dt64Xe/VI6NpRaly21cDtD76N6S97K//UtzV0dHOiXX+E90TnszdXHG0aMg==
map-cache@^0.2.2: map-cache@^0.2.2:
version "0.2.2" version "0.2.2"
resolved "https://registry.npmmirror.com/map-cache/-/map-cache-0.2.2.tgz" resolved "https://registry.npmmirror.com/map-cache/-/map-cache-0.2.2.tgz"
...@@ -6240,6 +6399,11 @@ material-colors@^1.2.6: ...@@ -6240,6 +6399,11 @@ material-colors@^1.2.6:
resolved "https://registry.npmmirror.com/material-colors/-/material-colors-1.2.6.tgz" resolved "https://registry.npmmirror.com/material-colors/-/material-colors-1.2.6.tgz"
integrity sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg== integrity sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==
math-interval-parser@^2.0.1:
version "2.0.1"
resolved "https://registry.npmmirror.com/math-interval-parser/-/math-interval-parser-2.0.1.tgz#e22cd6d15a0a7f4c03aec560db76513da615bed4"
integrity sha512-VmlAmb0UJwlvMyx8iPhXUDnVW1F9IrGEd9CIOmv+XL8AErCUUuozoDMrgImvnYt2A+53qVX/tPW6YJurMKYsvA==
md5.js@^1.3.4: md5.js@^1.3.4:
version "1.3.5" version "1.3.5"
resolved "https://registry.npmmirror.com/md5.js/-/md5.js-1.3.5.tgz" resolved "https://registry.npmmirror.com/md5.js/-/md5.js-1.3.5.tgz"
...@@ -6571,6 +6735,11 @@ moddle@^5.0.2: ...@@ -6571,6 +6735,11 @@ moddle@^5.0.2:
dependencies: dependencies:
min-dash "^3.0.0" min-dash "^3.0.0"
moo@^0.5.1:
version "0.5.2"
resolved "https://registry.npmmirror.com/moo/-/moo-0.5.2.tgz#f9fe82473bc7c184b0d32e2215d3f6e67278733c"
integrity sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==
move-concurrently@^1.0.1: move-concurrently@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.npmmirror.com/move-concurrently/-/move-concurrently-1.0.1.tgz" resolved "https://registry.npmmirror.com/move-concurrently/-/move-concurrently-1.0.1.tgz"
...@@ -6611,6 +6780,11 @@ multicast-dns@^6.0.1: ...@@ -6611,6 +6780,11 @@ multicast-dns@^6.0.1:
dns-packet "^1.3.1" dns-packet "^1.3.1"
thunky "^1.0.2" thunky "^1.0.2"
mustache@^4.2.0:
version "4.2.0"
resolved "https://registry.npmmirror.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64"
integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==
mute-stream@0.0.8: mute-stream@0.0.8:
version "0.0.8" version "0.0.8"
resolved "https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.8.tgz" resolved "https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.8.tgz"
...@@ -6829,6 +7003,11 @@ num2fraction@^1.2.2: ...@@ -6829,6 +7003,11 @@ num2fraction@^1.2.2:
resolved "https://registry.npmmirror.com/num2fraction/-/num2fraction-1.2.2.tgz" resolved "https://registry.npmmirror.com/num2fraction/-/num2fraction-1.2.2.tgz"
integrity "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==" integrity "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg=="
number-precision@^1.5.2:
version "1.6.0"
resolved "https://registry.npmmirror.com/number-precision/-/number-precision-1.6.0.tgz#e309d28f80871d36ac9f6ecd974e13afb1ec0de0"
integrity sha512-05OLPgbgmnixJw+VvEh18yNPUo3iyp4BEWJcrLu4X9W05KmMifN7Mu5exYvQXqxxeNWhvIF+j3Rij+HmddM/hQ==
oauth-sign@~0.9.0: oauth-sign@~0.9.0:
version "0.9.0" version "0.9.0"
resolved "https://registry.npmmirror.com/oauth-sign/-/oauth-sign-0.9.0.tgz" resolved "https://registry.npmmirror.com/oauth-sign/-/oauth-sign-0.9.0.tgz"
...@@ -8364,6 +8543,11 @@ safe-buffer@5.2.1, safe-buffer@^5.2.0, safe-buffer@~5.2.0: ...@@ -8364,6 +8543,11 @@ safe-buffer@5.2.1, safe-buffer@^5.2.0, safe-buffer@~5.2.0:
resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz" resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
safe-identifier@^0.4.1:
version "0.4.2"
resolved "https://registry.npmmirror.com/safe-identifier/-/safe-identifier-0.4.2.tgz#cf6bfca31c2897c588092d1750d30ef501d59fcb"
integrity sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==
safe-regex@^1.1.0: safe-regex@^1.1.0:
version "1.1.0" version "1.1.0"
resolved "https://registry.npmmirror.com/safe-regex/-/safe-regex-1.1.0.tgz" resolved "https://registry.npmmirror.com/safe-regex/-/safe-regex-1.1.0.tgz"
...@@ -8865,6 +9049,13 @@ sprintf-js@~1.0.2: ...@@ -8865,6 +9049,13 @@ sprintf-js@~1.0.2:
resolved "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz" resolved "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz"
integrity "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" integrity "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
ssf@~0.11.2:
version "0.11.2"
resolved "https://registry.npmmirror.com/ssf/-/ssf-0.11.2.tgz#0b99698b237548d088fc43cdf2b70c1a7512c06c"
integrity sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==
dependencies:
frac "~1.1.2"
sshpk@^1.7.0: sshpk@^1.7.0:
version "1.17.0" version "1.17.0"
resolved "https://registry.npmmirror.com/sshpk/-/sshpk-1.17.0.tgz" resolved "https://registry.npmmirror.com/sshpk/-/sshpk-1.17.0.tgz"
...@@ -9292,6 +9483,13 @@ terser@^5.3.4: ...@@ -9292,6 +9483,13 @@ terser@^5.3.4:
source-map "~0.7.2" source-map "~0.7.2"
source-map-support "~0.5.20" source-map-support "~0.5.20"
text-segmentation@^1.0.3:
version "1.0.3"
resolved "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz#52a388159efffe746b24a63ba311b6ac9f2d7943"
integrity sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==
dependencies:
utrie "^1.0.2"
text-table@^0.2.0: text-table@^0.2.0:
version "0.2.0" version "0.2.0"
resolved "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz" resolved "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz"
...@@ -9723,6 +9921,13 @@ utils-merge@1.0.1: ...@@ -9723,6 +9921,13 @@ utils-merge@1.0.1:
resolved "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz" resolved "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz"
integrity "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" integrity "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="
utrie@^1.0.2:
version "1.0.2"
resolved "https://registry.npmmirror.com/utrie/-/utrie-1.0.2.tgz#d42fe44de9bc0119c25de7f564a6ed1b2c87a645"
integrity sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==
dependencies:
base64-arraybuffer "^1.0.2"
uuid@^3.3.2: uuid@^3.3.2:
version "3.4.0" version "3.4.0"
resolved "https://registry.npmmirror.com/uuid/-/uuid-3.4.0.tgz" resolved "https://registry.npmmirror.com/uuid/-/uuid-3.4.0.tgz"
...@@ -9798,6 +10003,11 @@ vue-hot-reload-api@^2.3.0: ...@@ -9798,6 +10003,11 @@ vue-hot-reload-api@^2.3.0:
resolved "https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz" resolved "https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz"
integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog== integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==
vue-i18n@^8.27.2:
version "8.28.2"
resolved "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-8.28.2.tgz#913558066e274395c0a9f40b2f3393d5c2636840"
integrity sha512-C5GZjs1tYlAqjwymaaCPDjCyGo10ajUphiwA922jKt9n7KPpqR7oM1PCwYzhB/E7+nT3wfdG3oRre5raIT1rKA==
vue-loader@^15.9.2: vue-loader@^15.9.2:
version "15.9.8" version "15.9.8"
resolved "https://registry.npmmirror.com/vue-loader/-/vue-loader-15.9.8.tgz" resolved "https://registry.npmmirror.com/vue-loader/-/vue-loader-15.9.8.tgz"
...@@ -10096,11 +10306,21 @@ which@^2.0.1: ...@@ -10096,11 +10306,21 @@ which@^2.0.1:
dependencies: dependencies:
isexe "^2.0.0" isexe "^2.0.0"
wmf@~1.0.1:
version "1.0.2"
resolved "https://registry.npmmirror.com/wmf/-/wmf-1.0.2.tgz#7d19d621071a08c2bdc6b7e688a9c435298cc2da"
integrity sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==
word-wrap@^1.2.3: word-wrap@^1.2.3:
version "1.2.3" version "1.2.3"
resolved "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.3.tgz" resolved "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.3.tgz"
integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
word@~0.3.0:
version "0.3.0"
resolved "https://registry.npmmirror.com/word/-/word-0.3.0.tgz#8542157e4f8e849f4a363a288992d47612db9961"
integrity sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==
worker-farm@^1.7.0: worker-farm@^1.7.0:
version "1.7.0" version "1.7.0"
resolved "https://registry.npmmirror.com/worker-farm/-/worker-farm-1.7.0.tgz" resolved "https://registry.npmmirror.com/worker-farm/-/worker-farm-1.7.0.tgz"
...@@ -10147,6 +10367,19 @@ ws@^6.0.0, ws@^6.2.1: ...@@ -10147,6 +10367,19 @@ ws@^6.0.0, ws@^6.2.1:
dependencies: dependencies:
async-limiter "~1.0.0" async-limiter "~1.0.0"
xlsx@^0.18.5:
version "0.18.5"
resolved "https://registry.npmmirror.com/xlsx/-/xlsx-0.18.5.tgz#16711b9113c848076b8a177022799ad356eba7d0"
integrity sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==
dependencies:
adler-32 "~1.3.0"
cfb "~1.2.1"
codepage "~1.15.0"
crc-32 "~1.2.1"
ssf "~0.11.2"
wmf "~1.0.1"
word "~0.3.0"
xml-js@^1.6.11: xml-js@^1.6.11:
version "1.6.11" version "1.6.11"
resolved "https://registry.npmmirror.com/xml-js/-/xml-js-1.6.11.tgz" resolved "https://registry.npmmirror.com/xml-js/-/xml-js-1.6.11.tgz"
......
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