Commit c901bd59 authored by lanbaoming's avatar lanbaoming

2024-06-07提交

parent fd420d94
......@@ -159,6 +159,13 @@ export const constantRoutes = [
component: (resolve) => require(['@/views/bpm/processInstance/detail'], resolve),
name: 'Flow details',
meta: {title: '流程详情',titleEn:'Flow details', activeMenu: '/bpm/task/my'}
},
{
//lanbm 2024-06-07 add
path: 'process-instance/detail2',
component: (resolve) => require(['@/views/bpm/processInstance/detail2'], resolve),
name: 'Flow details2',
meta: {title: '流程详情',titleEn:'Flow details', activeMenu: '/bpm/task/my'}
}
]
},
......
......@@ -88,6 +88,7 @@
</div>
</el-col>
</el-card>
<!-- 申请信息 -->
<el-card class="box-card mt-10" v-loading="processInstanceLoading">
<div slot="header" class="clearfix">
......
<template>
<div class="app-container">
<!-- 申请信息 -->
<el-card class="box-card mt-10" v-loading="processInstanceLoading">
<div slot="header" class="clearfix">
<span class="el-icon-document"
>{{ $t("申请信息") }}{{ processInstance.name }}</span
>
</div>
<el-col
v-if="
this.processInstance.processDefinition &&
this.processInstance.processDefinition.formType === 10
"
:span="16"
:offset="6"
>
<div>
<parser
:key="new Date().getTime()"
:form-conf="detailForm"
@submit="submitForm"
/>
</div>
</el-col>
<div
v-if="
this.processInstance.processDefinition &&
this.processInstance.processDefinition.formType === 20
"
>
<component
v-if="businessKeyToComponent"
:is="businessKeyToComponent.component"
v-bind="businessKeyToComponent"
/>
<div v-else>
<router-link
:to="
this.processInstance.processDefinition.formCustomViewPath +
'?id=' +
this.processInstance.businessKey
"
>
<el-button type="primary">{{ $t("点击查看") }}</el-button>
</router-link>
</div>
</div>
</el-card>
<!-- 审批信息 -->
<el-card
class="box-card"
v-loading="processInstanceLoading"
v-for="(item, index) in runningTasks"
:key="index"
>
<div slot="header" class="clearfix">
<span class="el-icon-picture-outline"
>{{ $t("审批任务") }}{{ item.name }}</span
>
</div>
<el-col :span="16" :offset="6">
<el-form
:ref="'form' + index"
:model="auditForms[index]"
:rules="auditRule2"
label-width="100px"
>
<el-form-item
:label="$t('流程名')"
v-if="processInstance && processInstance.name"
>
{{ processInstance.name }}
</el-form-item>
<el-form-item
:label="$t('流程发起人')"
v-if="processInstance && processInstance.startUser"
>
{{ processInstance.startUser.nickname }}
<el-tag type="info" size="mini">{{
processInstance.startUser.deptName
}}</el-tag>
</el-form-item>
<el-form-item :label="$t('抄送人')" prop="copyUserIds">
<el-select
v-model="auditForms[index].copyUserIds"
clearable
multiple
filterable
style="width: 100%"
>
<el-option
v-for="item in userOptions"
:key="parseInt(item.id)"
:label="item.nickname"
:value="parseInt(item.id)"
/>
</el-select>
</el-form-item>
<el-form-item :label="$t('审批建议')" prop="comment">
<el-input
type="textarea"
v-model="auditForms[index].comment"
:placeholder="$t('请输入审批建议')"
/>
</el-form-item>
</el-form>
<div style="margin-left: 10%; margin-bottom: 20px; font-size: 14px">
<el-button
:loading="loading"
icon="el-icon-edit-outline"
type="success"
size="mini"
@click="handleAudit(item, true)"
>{{ $t("通过") }}
</el-button>
<el-button
:loading="loading"
icon="el-icon-circle-close"
type="danger"
size="mini"
@click="handleAudit(item, false)"
>{{ $t("不通过") }}
</el-button>
<el-button
:loading="loading"
icon="el-icon-edit-outline"
type="primary"
size="mini"
@click="handleUpdateAssignee(item)"
>{{ $t("转办") }}
</el-button>
<!--<el-button icon="el-icon-edit-outline" type="primary" size="mini" @click="handleDelegate(item)">{{ $t('委派') }}</el-button>-->
<!--<el-button icon="el-icon-refresh-left" type="warning" size="mini" @click="handleBack(item)">{{ $t('退回') }}</el-button>-->
</div>
</el-col>
</el-card>
<el-card class="box-card mt-10" v-loading="tasksLoad">
<div slot="header" class="clearfix">
<span class="el-icon-picture-outline">{{ $t("审批记录") }}</span>
</div>
<el-col :span="16" :offset="4">
<div class="block">
<el-timeline>
<el-timeline-item
v-for="(item, index) in tasks"
:key="index"
:icon="getTimelineItemIcon(item)"
:type="getTimelineItemType(item)"
>
<p style="font-weight: 700">{{ $t("任务") }}{{ item.name }}</p>
<el-card :body-style="{ padding: '10px' }">
<label
v-if="item.assigneeUser"
style="font-weight: normal; margin-right: 30px"
>
{{ $t("审批人") }}{{ item.assigneeUser.nickname }}
<el-tag type="info" size="mini">{{
item.assigneeUser.deptName
}}</el-tag>
</label>
<label style="font-weight: normal"
>{{ $t("创建时间") }}</label
>
<label style="color: #8a909c; font-weight: normal">{{
parseTime(item.createTime)
}}</label>
<label
v-if="item.endTime"
style="margin-left: 30px; font-weight: normal"
>{{ $t("审批时间") }}</label
>
<label
v-if="item.endTime"
style="color: #8a909c; font-weight: normal"
>
{{ parseTime(item.endTime) }}</label
>
<label
v-if="item.durationInMillis"
style="margin-left: 30px; font-weight: normal"
>{{ $t("耗时") }}</label
>
<label
v-if="item.durationInMillis"
style="color: #8a909c; font-weight: normal"
>
{{ getDateStar(item.durationInMillis) }}
</label>
<p v-if="item.comment">
<el-tag :type="getTimelineItemType(item)">{{
item.comment
}}</el-tag>
</p>
</el-card>
</el-timeline-item>
</el-timeline>
</div>
</el-col>
</el-card>
<!-- 高亮流程图 -->
<el-card class="box-card mt-10" v-loading="processInstanceLoading">
<div slot="header" class="clearfix">
<span class="el-icon-picture-outline">{{ $t("流程图") }}</span>
</div>
<my-process-viewer
key="designer"
v-model="bpmnXML"
v-bind="bpmnControlForm"
:activityData="activityList"
:processInstanceData="processInstance"
:taskData="tasks"
/>
</el-card>
<!-- 对话框(转派审批人) -->
<el-dialog
:title="$t('转派审批人')"
:visible.sync="updateAssignee.open"
width="500px"
append-to-body
>
<el-form
ref="updateAssigneeForm"
:model="updateAssignee.form"
:rules="updateAssignee.rules"
label-width="110px"
>
<el-form-item :label="$t('新审批人')" prop="assigneeUserId">
<el-select
v-model="updateAssignee.form.assigneeUserId"
clearable
style="width: 100%"
>
<el-option
v-for="item in userOptions"
:key="parseInt(item.id)"
:label="item.nickname"
:value="parseInt(item.id)"
/>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitUpdateAssigneeForm">{{
$t("确定")
}}</el-button>
<el-button @click="cancelUpdateAssigneeForm">{{
$t("取消")
}}</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { getProcessDefinitionBpmnXML } from "@/api/bpm/definition";
import { DICT_TYPE, getDictDatas } from "@/utils/dict";
import store from "@/store";
import { decodeFields } from "@/utils/formGenerator";
import Parser from "@/components/parser/Parser";
import {
createProcessInstance,
getProcessInstance,
} from "@/api/bpm/processInstance";
import {
approveTask,
getTaskListByProcessInstanceId,
rejectTask,
updateTaskAssignee,
} from "@/api/bpm/task";
import { getDate } from "@/utils/dateUtils";
import { listSimpleUsers } from "@/api/system/user";
import { getActivityList } from "@/api/bpm/activity";
import OfferSpecialDetail from "@/views/ecw/offer/components/SpecialDetail";
import warehouseDetails from "@/views/ecw/order/components/warehouseDetails";
import shippingDetail from "@/views/ecw/box/shippingDetail";
import SplitDetail from "@/views/ecw/order/components/SplitDetail";
import MergeDetail from "@/views/ecw/order/components/MergeDetail";
import CargoControlDetail from "@/views/ecw/order/components/CargoControlDetail";
import BoxSplitDetail from "@/views/ecw/order/components/BoxSplitDetail";
// 流程实例的详情页,可用于审批
export default {
name: "ProcessInstanceDetail",
components: {
Parser,
OfferSpecialDetail,
warehouseDetails,
shippingDetail,
SplitDetail,
MergeDetail,
CargoControlDetail,
BoxSplitDetail,
},
computed: {
auditRule2() {
if (this.isMust == true) {
var obj = {
comment: [
{
required: true,
message: this.$t("审批建议不能为空"),
trigger: "blur",
},
],
};
return obj;
} else {
return {};
}
},
matterNum() {
return this.$store.state.user.matterNum;
},
businessKeyToComponent() {
if (
!this.processInstance.processDefinition ||
!this.processInstance.processDefinition.formCustomViewPath
) {
return false;
}
const map = {
shippingDetail: {
component: "shippingDetail",
processId: this.processInstance.businessKey,
},
// 报价单特价审核,原来配置的组件名
"special-discount": {
component: "OfferSpecialDetail",
id: this.processInstance.businessKey,
type: 1,
},
// 报价单特价审核,符合命名规则的组件名
offer_special: {
component: "OfferSpecialDetail",
id: this.processInstance.businessKey,
type: 1,
},
offer_commission: {
component: "OfferSpecialDetail",
id: this.processInstance.businessKey,
type: 2,
},
// 原来的费用申请
free_apply: {
component: "warehouseDetails",
processId: this.processInstance.businessKey,
type: 2,
},
// 2.0空运加的批量申请
batch_free_apply: {
component: () =>
import("@/views/ecw/order/components/BatchFeeApplication"),
businessId: this.processInstance.businessKey,
processInstanceId: this.$route.query.id,
},
retired_warehouse: {
component: "warehouseDetails",
processId: this.processInstance.businessKey,
type: 3,
},
warehouse_transfer: {
component: "warehouseDetails",
processId: this.processInstance.businessKey,
type: 1,
},
warehouse_update: {
component: "warehouseDetails",
processId: this.processInstance.businessKey,
type: 4,
},
container_modify: {
component: "shippingDetail",
processId: this.processInstance.businessKey,
},
trailer_modify: {
component: "shippingDetail",
processId: this.processInstance.businessKey,
},
ship_modify: {
component: "shippingDetail",
processId: this.processInstance.businessKey,
},
customs_declare_modify: {
component: "shippingDetail",
processId: this.processInstance.businessKey,
},
arrival_modify: {
component: "shippingDetail",
processId: this.processInstance.businessKey,
},
customs_clearance_modify: {
component: "shippingDetail",
processId: this.processInstance.businessKey,
},
customs_exit_part: {
component: "shippingDetail",
processId: this.processInstance.businessKey,
},
customs_exit_all: {
component: "shippingDetail",
processId: this.processInstance.businessKey,
},
start_port_modify: {
component: "shippingDetail",
processId: this.processInstance.businessKey,
},
book_space_modify: {
component: "shippingDetail",
processId: this.processInstance.businessKey,
},
sorting_apply_no: {
component: "shippingDetail",
processId: this.processInstance.businessKey,
},
sorting_apply: {
component: "shippingDetail",
processId: this.processInstance.businessKey,
},
unload_container_no: {
component: "shippingDetail",
processId: this.processInstance.businessKey,
},
unload_container: {
component: "shippingDetail",
processId: this.processInstance.businessKey,
type: "unload_container",
},
close_container: {
component: "shippingDetail",
processId: this.processInstance.businessKey,
type: "close_container",
},
shipment_preassemble: {
component: "shippingDetail",
processId: this.processInstance.businessKey,
},
close_container_no: {
component: "shippingDetail",
processId: this.processInstance.businessKey,
},
// 拆单审核
split_detail: {
component: "SplitDetail",
id: this.processInstance.businessKey,
},
// 出货拆单审核
shipment_split_detail: {
component: "BoxSplitDetail",
id: this.processInstance.businessKey,
},
// 退场拆单,跟出货装柜拆单一样
exit_split: {
component: "BoxSplitDetail",
id: this.processInstance.businessKey,
},
merge_detail: {
component: "MergeDetail",
id: this.processInstance.businessKey,
},
// 放货修改
order_update_release: {
component: "CargoControlDetail",
id: this.processInstance.businessKey,
applyType: 7,
},
// 反复核
order_fallback: {
component: "CargoControlDetail",
id: this.processInstance.businessKey,
applyType: 8,
},
// 调货审核
order_transfer: {
component: "CargoControlDetail",
id: this.processInstance.businessKey,
applyType: 9,
},
// 取消放货审核
order_cancel_release: {
component: "CargoControlDetail",
id: this.processInstance.businessKey,
applyType: 10,
},
// 提单审核
order_landing_bill: {
component: () =>
import("@/views/ecw/order/components/LandingBillDetail"),
id: this.processInstance.businessKey,
path: this.processInstance.processDefinition?.formCustomViewPath,
},
// 订单审核详情
order_approval: {
component: () =>
import("@/views/ecw/order/components/ApprovalDetail"),
id: this.processInstance.businessKey,
path: this.processInstance.processDefinition?.formCustomViewPath,
},
// 订单修改审批
order_update: {
component: () => import("@/views/ecw/order/components/UpdateDetail"),
id: this.processInstance.businessKey,
path: this.processInstance.processDefinition?.formCustomViewPath,
},
// 预付异常审核
prepay_excetion: {
component: () =>
import("@/views/ecw/order/components/PrepayExceptionDetail"),
id: this.processInstance.businessKey,
path: this.processInstance.processDefinition?.formCustomViewPath,
},
// 客户延期
customer_delay: {
component: () => import("@/views/ecw/customer/components/Delay"),
id: this.processInstance.businessKey,
path: this.processInstance.processDefinition?.formCustomViewPath,
},
//付款单审核-所有审核流程详情组件
finance_payment_approve: {
component: () =>
import("@/views/ecw/financial/components/PaymentApproval"),
id: this.processInstance.businessKey,
path: this.processInstance.processDefinition?.formCustomViewPath,
},
//收款单审核
finance_receipt_approve: {
component: () =>
import("@/views/ecw/financial/components/CollectionApproval"),
id: this.processInstance.businessKey,
path: this.processInstance.processDefinition?.formCustomViewPath,
},
//收款单核销
finance_receipt_write_off: {
component: () =>
import("@/views/ecw/financial/components/CollectionWriteoff"),
id: this.processInstance.businessKey,
path: this.processInstance.processDefinition?.formCustomViewPath,
},
//收款单反核销审核
finance_receipt_write_off_no: {
component: () =>
import("@/views/ecw/financial/components/CollectionApproval"),
id: this.processInstance.businessKey,
path: this.processInstance.processDefinition?.formCustomViewPath,
},
//收款单核销反审核
finance_receipt_approve_no: {
component: () =>
import("@/views/ecw/financial/components/CollectionApproval"),
id: this.processInstance.businessKey,
path: this.processInstance.processDefinition?.formCustomViewPath,
},
//收款单银行实收明细核销
finance_receipt_item_write_off: {
component: () =>
import("@/views/ecw/financial/components/CollectionBankDetail"),
id: this.processInstance.businessKey,
path: this.processInstance.processDefinition?.formCustomViewPath,
},
//收款单银行实收反核销
finance_receipt_item_write_off_no: {
component: () =>
import("@/views/ecw/financial/components/CollectionBankDetail"),
id: this.processInstance.businessKey,
path: this.processInstance.processDefinition?.formCustomViewPath,
},
//佣金付款单审核详情-关于佣金付款单所有审核详情
commissionPaymentDetails: {
component: () =>
import(
"@/views/ecw/financial/components/commissionPaymentDetails.vue"
),
id: this.processInstance.businessKey,
path: this.processInstance.processDefinition?.formCustomViewPath,
},
/*撤销拆单*/
split_revoke: {
component: () =>
import("@/views/ecw/order/components/SplitRevokeDetail"),
id: this.processInstance.businessKey,
},
// 不可出渠道异常审核
not_shiping_channel: {
component: () =>
import("@/views/ecw/order/components/NotShipingChannel"),
id: this.processInstance.businessKey,
path: this.processInstance.processDefinition?.formCustomViewPath,
},
// 出货批量加价审核
box_batch_markup: {
component: () =>
import("@/views/ecw/box/components/batchMakeUpDetail.vue"),
processId: this.processInstance.businessKey,
type: this.processInstance.processDefinition?.formCustomViewPath,
},
// 可获移交详情
customer_handover_details: {
component: () =>
import(
"@/views/ecw/customer/components/customer-handover-details.vue"
),
processId: this.processInstance.businessKey,
type: this.processInstance.processDefinition?.formCustomViewPath,
},
// 出货审核
air_shipment: {
component: "shippingDetail",
processId: this.processInstance.businessKey,
type: "shipment",
},
//排单分拣审核
shipment_order_sorting: {
component: "shippingDetail",
processId: this.processInstance.businessKey,
},
// 出货反审
shipment_review: {
component: "shippingDetail",
processId: this.processInstance.businessKey,
},
// 删单退场
customs_declare_remove: {
component: "shippingDetail",
processId: this.processInstance.businessKey,
type: "deleteExit",
},
// 空运到仓审核
air_warehouse: {
component: "shippingDetail",
processId: this.processInstance.businessKey,
type: "air_warehouse",
},
// 空运到仓审核
air_warehouse_no: {
component: "shippingDetail",
processId: this.processInstance.businessKey,
type: "air_warehouse",
},
revoke_clear: {
component: () => import("@/views/ecw/box/components/RevokeClear"),
id: this.processInstance.businessKey,
},
// 重量超限
over_weight_exception: {
component: () =>
import(
"@/views/ecw/order/exception/components/overweightException"
),
id: this.processInstance.businessKey,
path: this.processInstance.processDefinition?.formCustomViewPath,
},
// 线路重量超限
line_weight_exception: {
component: () =>
import(
"@/views/ecw/order/exception/components/overweightException"
),
id: this.processInstance.businessKey,
path: this.processInstance.processDefinition?.formCustomViewPath,
},
};
console.log(
"formCustomViewPath",
this.processInstance.processDefinition.formCustomViewPath.trim()
);
return map[
this.processInstance.processDefinition.formCustomViewPath.trim()
];
},
},
data() {
return {
// 提交中
loading: false,
// 遮罩层
processInstanceLoading: true,
// 流程实例
id: undefined, // 流程实例的编号
processInstance: {},
// 流程表单详情
detailForm: {
fields: [],
},
isMust: true,
// BPMN 数据
bpmnXML: null,
bpmnControlForm: {
prefix: "activiti",
},
activityList: [],
// 审批记录
tasksLoad: true,
tasks: [],
// 审批表单
runningTasks: [],
auditForms: [],
auditRule: {
comment: [
{
required: this.isMust,
message: this.$t("审批建议不能为空"),
trigger: "blur",
},
],
},
// 转派审批人
userOptions: [],
updateAssignee: {
open: false,
form: {
assigneeUserId: undefined,
},
rules: {
assigneeUserId: [
{
required: true,
message: this.$t("新审批人不能为空"),
trigger: "change",
},
],
},
},
// 数据字典
categoryDictDatas: getDictDatas(DICT_TYPE.BPM_MODEL_CATEGORY),
};
},
created() {
this.id = this.$route.query.id;
if (!this.id) {
this.$message.error("未传递 id 参数,无法查看流程信息");
return;
}
this.getDetail();
// 获得用户列表
this.userOptions = [];
listSimpleUsers().then((response) => {
this.userOptions.push(...response.data);
});
},
methods: {
/** 获得流程实例 */
getDetail() {
// 获得流程实例相关
this.processInstanceLoading = true;
getProcessInstance(this.id).then((response) => {
if (!response.data) {
this.$message.error("查询不到流程信息!");
return;
}
// 设置流程信息
this.processInstance = response.data;
console.log(this.processInstance);
//银行实收明细核销不限制必填 lanbm 2024-05-24 add
if (
this.processInstance.processDefinition.formCustomViewPath ==
undefined ||
this.processInstance.processDefinition.formCustomViewPath == null ||
this.processInstance.processDefinition.formCustomViewPath == ""
) {
this.isMust = true;
} else {
if (
this.processInstance.processDefinition.formCustomViewPath.trim() ==
"finance_receipt_item_write_off"
) {
this.isMust = false;
} else {
this.isMust = true;
}
}
//end 银行实收明细核销不限制必填 lanbm 2024-05-24 add
// 设置表单信息
if (this.processInstance.processDefinition.formType === 10) {
this.detailForm = {
...JSON.parse(this.processInstance.processDefinition.formConf),
disabled: true, // 表单禁用
formBtns: false, // 按钮隐藏
fields: decodeFields(
this.processInstance.processDefinition.formFields
),
};
// 设置表单的值
this.detailForm.fields.forEach((item) => {
const val = this.processInstance.formVariables[item.__vModel__];
if (val) {
item.__config__.defaultValue = val;
}
});
}
// 加载流程图
getProcessDefinitionBpmnXML(
this.processInstance.processDefinition.id
).then((response) => {
this.bpmnXML = response.data;
});
// 加载活动列表
getActivityList({
processInstanceId: this.processInstance.id,
}).then((response) => {
this.activityList = response.data;
});
// 取消加载中
this.processInstanceLoading = false;
});
// 获得流程任务列表(审批记录)
this.tasksLoad = true;
this.runningTasks = [];
this.auditForms = [];
getTaskListByProcessInstanceId(this.id).then((response) => {
// 审批记录
this.tasks = response.data;
// 排序,将未完成的排在前面,已完成的排在后面;
this.tasks.sort((a, b) => {
// 有已完成的情况,按照完成时间倒序
if (a.endTime && b.endTime) {
return b.endTime - a.endTime;
} else if (a.endTime) {
return 1;
} else if (b.endTime) {
return -1;
// 都是未完成,按照创建时间倒序
} else {
return b.createTime - a.createTime;
}
});
// 需要审核的记录
const userId = store.getters.userId;
this.tasks.forEach((task) => {
if (task.result !== 1) {
// 只有待处理才需要
return;
}
if (!task.assigneeUser || task.assigneeUser.id !== userId) {
// 自己不是处理人
return;
}
this.runningTasks.push({ ...task });
this.auditForms.push({
comment: "",
});
});
// 取消加载中
this.tasksLoad = false;
});
},
/** 处理选择流程的按钮操作 **/
handleSelect(row) {
// 设置选择的流程
this.selectProcessInstance = row;
// 流程表单
if (row.formId) {
// 设置对应的表单
this.detailForm = {
...JSON.parse(row.formConf),
fields: decodeFields(row.formFields),
};
} else if (row.formCustomCreatePath) {
this.$router.push({ path: row.formCustomCreatePath });
// 这里暂时无需加载流程图,因为跳出到另外个 Tab;
}
},
/** 提交按钮 */
submitForm(params) {
if (!params) {
return;
}
// 设置表单禁用
const conf = params.conf;
conf.disabled = true; // 表单禁用
conf.formBtns = false; // 按钮隐藏
// 提交表单,创建流程
const variables = params.values;
createProcessInstance({
processDefinitionId: this.selectProcessInstance.id,
variables: variables,
})
.then((response) => {
this.$modal.msgSuccess("发起流程成功");
// 关闭当前窗口
this.$tab.closeOpenPage();
this.$router.go(-1);
})
.catch(() => {
conf.disabled = false; // 表单开启
conf.formBtns = true; // 按钮展示
});
},
getDateStar(ms) {
return getDate(ms);
},
getTimelineItemIcon(item) {
if (item.result === 1) {
return "el-icon-time";
}
if (item.result === 2) {
return "el-icon-check";
}
if (item.result === 3) {
return "el-icon-close";
}
if (item.result === 4) {
return "el-icon-remove-outline";
}
return "";
},
getTimelineItemType(item) {
if (item.result === 1) {
return "primary";
}
if (item.result === 2) {
return "success";
}
if (item.result === 3) {
return "danger";
}
if (item.result === 4) {
return "info";
}
return "";
},
/** 处理审批通过和不通过的操作 */
handleAudit(task, pass) {
const index = this.runningTasks.indexOf(task);
this.$refs["form" + index][0].validate((valid) => {
if (!valid) {
return;
}
const data = {
id: task.id,
comment: this.auditForms[index].comment,
copyUserIds: this.auditForms[index].copyUserIds,
};
this.loading = true;
if (pass) {
approveTask(data)
.then((response) => {
let p = this.matterNum;
//this.$store.commit('GET_MAATER', --p)
this.$modal.msgSuccess("审批通过成功!");
this.getDetail(); // 获得最新详情
})
.finally(() => {
this.loading = false;
});
} else {
rejectTask(data)
.then((response) => {
let p = this.matterNum;
//this.$store.commit('GET_MAATER', --p)
this.$modal.msgSuccess("审批不通过成功!");
this.getDetail(); // 获得最新详情
})
.finally(() => {
this.loading = false;
});
}
});
},
/** 处理转派审批人 */
handleUpdateAssignee(task) {
// 设置表单
this.resetUpdateAssigneeForm();
this.updateAssignee.form.id = task.id;
// 设置为打开
this.updateAssignee.open = true;
},
/** 提交转派审批人 */
submitUpdateAssigneeForm() {
this.$refs["updateAssigneeForm"].validate((valid) => {
if (!valid) {
return;
}
updateTaskAssignee(this.updateAssignee.form).then((response) => {
this.$modal.msgSuccess("转派任务成功!");
let p = this.matterNum;
// this.$store.commit('GET_MAATER', --p)
this.updateAssignee.open = false;
this.getDetail(); // 获得最新详情
});
});
},
/** 取消转派审批人 */
cancelUpdateAssigneeForm() {
this.updateAssignee.open = false;
this.resetUpdateAssigneeForm();
},
/** 重置转派审批人 */
resetUpdateAssigneeForm() {
this.updateAssignee.form = {
id: undefined,
assigneeUserId: undefined,
};
this.resetForm("updateAssigneeForm");
},
/** 处理审批退回的操作 */
handleDelegate(task) {
this.$modal.msgError("暂不支持【委派】功能,可以使用【转派】替代!");
},
/** 处理审批退回的操作 */
handleBack(task) {
this.$modal.msgError("暂不支持【退回】功能!");
},
},
};
</script>
<style lang="scss" scoped>
.my-process-designer {
height: calc(100vh - 200px);
}
.box-card {
width: 100%;
margin-bottom: 20px;
}
</style>
\ No newline at end of file
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<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="$t('流程编号')" prop="processInstanceId">
<el-input v-model="queryParams.processInstanceId" :placeholder="$t('流程编号')" clearable
@keyup.enter.native="handleQuery"/>
<el-input
v-model="queryParams.processInstanceId"
:placeholder="$t('流程编号')"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item :label="$t('流程名称')" prop="name">
<el-input v-model="queryParams.name" :placeholder="$t('流程名称')" clearable @keyup.enter.native="handleQuery"/>
<el-input
v-model="queryParams.name"
:placeholder="$t('流程名称')"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item :label="$t('流程分类')" prop="category">
<el-select v-model="queryParams.category" :placeholder="$t('请选择流程分类')" clearable>
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.BPM_MODEL_CATEGORY)"
:key="dict.value" :label="$l(dict, 'label')" :value="dict.value"/>
<el-select
v-model="queryParams.category"
:placeholder="$t('请选择流程分类')"
clearable
>
<el-option
v-for="dict in this.getDictDatas(DICT_TYPE.BPM_MODEL_CATEGORY)"
:key="dict.value"
:label="$l(dict, 'label')"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item :label="$t('提交时间')">
<el-date-picker v-model="dateRangeCreateTime" style="width: 240px" value-format="yyyy-MM-dd"
type="daterange" range-separator="-" :start-placeholder="$t('开始日期')"
:end-placeholder="$t('结束日期')"/>
<el-date-picker
v-model="dateRangeCreateTime"
style="width: 240px"
value-format="yyyy-MM-dd"
type="daterange"
range-separator="-"
:start-placeholder="$t('开始日期')"
:end-placeholder="$t('结束日期')"
/>
</el-form-item>
<el-form-item :label="$t('业务编号')" prop="businessNo">
<el-input v-model="queryParams.businessNo" :placeholder="$t('请输入业务编号')" clearable
@keyup.enter.native="handleQuery"/>
<el-form-item :label="$t('业务编号')" prop="businessNo">
<el-input
v-model="queryParams.businessNo"
:placeholder="$t('请输入业务编号')"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">{{ $t('搜索') }}</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">{{ $t('重置') }}</el-button>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">{{
$t("搜索")
}}</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">{{
$t("重置")
}}</el-button>
</el-form-item>
</el-form>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column :label="$t('流程编号')" align="center" prop="processInstance.id" width="320" fixed/>
<el-table-column :label="$t('流程名称')" align="center" prop="processInstance.name" width="200"/>
<el-table-column :label="$t('业务编号')" align="center" prop="businessNo"/>
<el-table-column :label="$t('流程分类')" align="center" prop="category" width="200">
<el-table-column
:label="$t('流程编号')"
align="center"
prop="processInstance.id"
width="320"
fixed
/>
<el-table-column
:label="$t('流程名称')"
align="center"
prop="processInstance.name"
width="200"
/>
<el-table-column
:label="$t('业务编号')"
align="center"
prop="businessNo"
/>
<el-table-column
:label="$t('流程分类')"
align="center"
prop="category"
width="200"
>
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.BPM_MODEL_CATEGORY" :value="scope.row.category"/>
<dict-tag
:type="DICT_TYPE.BPM_MODEL_CATEGORY"
:value="scope.row.category"
/>
</template>
</el-table-column>
<el-table-column :label="$t('当前审批节点')" align="center" prop="name" width="200"/>
<el-table-column
:label="$t('当前审批节点')"
align="center"
prop="name"
width="200"
/>
<!-- <el-table-column :label="$t('状态')" align="center" prop="" width="200" >{{ $t('缺少字段') }}</el-table-column> -->
<!-- <el-table-column :label="$t('流程发起人')" align="center" prop="processInstance.startUserNickname" width="120"/>-->
<el-table-column :label="$t('结果')" align="center" prop="result">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT" :value="scope.row.result"/>
<dict-tag
:type="DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT"
:value="scope.row.result"
/>
</template>
</el-table-column>
<el-table-column :label="$t('提交时间')" align="center" prop="createTime" width="180">
<el-table-column
:label="$t('提交时间')"
align="center"
prop="createTime"
width="180"
>
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('结束时间')" align="center" prop="endTime" width="180">
<el-table-column
:label="$t('结束时间')"
align="center"
prop="endTime"
width="180"
>
<template slot-scope="scope">
<span>{{ parseTime(scope.row.endTime) }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('操作')" align="center" fixed="right" class-name="small-padding fixed-width">
<el-table-column
:label="$t('操作')"
align="center"
fixed="right"
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleAudit(scope.row)"
v-hasPermi="['bpm:task:query']">{{ $t('详情') }}
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleAudit(scope.row)"
v-hasPermi="['bpm:task:query']"
>{{ $t("详情") }}
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</div>
</template>
<script>
import {getDoneTaskPage} from '@/api/bpm/task'
import {getDate} from "@/utils/dateUtils";
import { getDoneTaskPage } from "@/api/bpm/task";
import { getDate } from "@/utils/dateUtils";
export default {
//lanbm 2024-05-08 添加查询条件不清空优化
......@@ -118,9 +210,9 @@ export default {
getList() {
this.loading = true;
// 处理查询参数
let params = {...this.queryParams};
this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime');
getDoneTaskPage(params).then(response => {
let params = { ...this.queryParams };
this.addBeginAndEndTime(params, this.dateRangeCreateTime, "createTime");
getDoneTaskPage(params).then((response) => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
......@@ -142,8 +234,11 @@ export default {
},
/** 处理审批按钮 */
handleAudit(row) {
this.$router.push({path: "/bpm/process-instance/detail", query: {id: row.processInstance.id}});
this.$router.push({
path: "/bpm/process-instance/detail",
query: { id: row.processInstance.id },
});
},
}
},
};
</script>
......@@ -290,7 +290,7 @@ export default {
return;
}
}
this.form.comment="";
this.form.comment = "";
this.title = "批量通过";
this.titleType = 1;
this.open = true;
......@@ -309,11 +309,10 @@ export default {
return;
}
}
this.form.comment="";
this.form.comment = "";
this.title = "批量不通过";
this.titleType = 2;
this.open = true;
},
submitForm() {
this.$refs["form"].validate((valid) => {
......@@ -380,10 +379,19 @@ export default {
},
/** 处理审批按钮 */
handleAudit(row) {
this.$router.push({
path: "/bpm/process-instance/detail",
query: { id: row.processInstance.id },
});
//lanbm 2024-06-07 添加根据不同的业务打开不同的展示页面
let name1 = row.processInstance.name;
if (name1.includes("银行实收明细核销审核")) {
this.$router.push({
path: "/bpm/process-instance/detail2",
query: { id: row.processInstance.id },
});
} else {
this.$router.push({
path: "/bpm/process-instance/detail",
query: { id: row.processInstance.id },
});
}
},
handleCancel(row) {
const id = row.id;
......
......@@ -115,11 +115,16 @@
<span>{{ scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column
:label="$t('收款单号')"
align="center"
prop="receiptNo"
/>
<!--lanbm 2024-06-06 添加链接-->
<el-table-column :label="$t('收款单号')" align="center" prop="receiptNo">
<template slot-scope="scope">
<span
style="color: #1890ff"
@click="verificationCancelClick(scope.row)"
>{{ scope.row.receiptNo }}</span
>
</template>
</el-table-column>
<!--订单号,提单号,lanbm 2024-05-29 add-->
<el-table-column :label="$t('订单号')" align="center" prop="orderNo">
<template slot-scope="scope">
......@@ -171,6 +176,20 @@
></span>
</template>
</el-table-column>
<el-table-column
:label="$t('应收')"
align="center"
prop="ysShow"
>
</el-table-column>
<el-table-column :label="$t('实收')" align="center" prop="ssShow">
</el-table-column>
<el-table-column
:label="$t('核销比例')"
align="center"
prop="hxBiLi"
>
</el-table-column>
<el-table-column :label="$t('是否开票')" align="center">
<template slot-scope="scope">
{{ scope.row.openInvoice === 0 ? $t("") : $t("") }}
......@@ -414,7 +433,6 @@
<el-button @click="cancelShow = false">{{ $t("取消") }}</el-button>
</span>
</el-dialog>
<!--收款单批量反审核 对话框,一个逻辑一个对话框,
避免做过多的逻辑判断 lanbm 2024-05-29 add-->
<el-dialog :title="dialogTitle2" :visible.sync="dialogVisible2" width="30%">
......@@ -460,6 +478,7 @@
import { listSimpleUsers } from "@/api/system/user";
import { DICT_TYPE } from "@/utils/dict";
import CustomerSelector from "@/components/CustomerSelector";
import { getCurrencyPage } from "@/api/ecw/currency";
import {
getReceiptList,
// receiptVerification,
......@@ -544,14 +563,21 @@ export default {
dialogTitle2: "收款单批量反审核",
dialogVisible3: false, //批量反核销对话框
dialogTitle3: "收款单批量反核销",
currencyList: [],
};
},
activated() {
this.getList();
},
created() {
//获取汇率 lanbm 2024-06-06 add
getCurrencyPage(this.params).then(
(res) => (this.currencyList = res.data.list)
);
let that = this;
listSimpleUsers().then((res) => (that.creatorData = res.data));
this.getList();
},
methods: {
......@@ -606,6 +632,14 @@ export default {
// })
// .catch(() => {});
},
getCurrencyLabel(id) {
let label = this.currencyList.filter((item) => item.id == id);
if (label.length > 0)
return this.$i18n.locale == "zh_CN"
? label[0].titleZh
: label[0].titleEn;
return "";
},
//显示取消审核弹窗
cancelClick(index, type) {
this.selectIndex = index;
......@@ -809,7 +843,7 @@ export default {
);
return;
}
let obj = {
receiptId: this.ids[i].id,
receiptNo: this.ids[i].receiptNo,
......
<template>
<div class="app-container">
<doc-alert :title="$t('上传下载')" url="https://doc.iocoder.cn/file/" />
<!-- 搜索工作栏 -->
<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="$t('配置名')" prop="name">
<el-input v-model="queryParams.name" :placeholder="$t('请输入配置名')" clearable @keyup.enter.native="handleQuery"/>
<el-input
v-model="queryParams.name"
:placeholder="$t('请输入配置名')"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item :label="$t('存储器')" prop="storage">
<el-select v-model="queryParams.storage" :placeholder="$t('请选择存储器')" clearable>
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.INFRA_FILE_STORAGE)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
<el-select
v-model="queryParams.storage"
:placeholder="$t('请选择存储器')"
clearable
>
<el-option
v-for="dict in this.getDictDatas(DICT_TYPE.INFRA_FILE_STORAGE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item :label="$t('创建时间')">
<el-date-picker v-model="dateRangeCreateTime" style="width: 240px" value-format="yyyy-MM-dd"
type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" />
<el-date-picker
v-model="dateRangeCreateTime"
style="width: 240px"
value-format="yyyy-MM-dd"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">{{ $t('搜索') }}</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">{{ $t('重置') }}</el-button>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">{{
$t("搜索")
}}</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">{{
$t("重置")
}}</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['infra:file-config:create']">{{ $t('新增') }}</el-button>
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['infra:file-config:create']"
>{{ $t("新增") }}</el-button
>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row>
<!-- 列表 -->
......@@ -37,35 +77,81 @@
<el-table-column :label="$t('配置名')" align="center" prop="name" />
<el-table-column :label="$t('存储器')" align="center" prop="storage">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.INFRA_FILE_STORAGE" :value="scope.row.storage" />
<dict-tag
:type="DICT_TYPE.INFRA_FILE_STORAGE"
:value="scope.row.storage"
/>
</template>
</el-table-column>
<el-table-column :label="$t('备注')" align="center" prop="remark" />
<el-table-column :label="$t('主配置')" align="center" prop="primary">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.master" />
<dict-tag
:type="DICT_TYPE.INFRA_BOOLEAN_STRING"
:value="scope.row.master"
/>
</template>
</el-table-column>
<el-table-column :label="$t('创建时间')" align="center" prop="createTime" width="180">
<el-table-column
:label="$t('创建时间')"
align="center"
prop="createTime"
width="180"
>
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('操作')" align="center" class-name="small-padding fixed-width" width="240">
<el-table-column
:label="$t('操作')"
align="center"
class-name="small-padding fixed-width"
width="240"
>
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['infra:file-config:update']">{{ $t('修改') }}</el-button>
<el-button size="mini" type="text" icon="el-icon-attract" @click="handleMaster(scope.row)"
:disabled="scope.row.master" v-hasPermi="['infra:file-config:update']">{{ $t('主配置') }}</el-button>
<el-button size="mini" type="text" icon="el-icon-share" @click="handleTest(scope.row)">{{ $t('测试') }}</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['infra:file-config:delete']">{{ $t('删除') }}</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['infra:file-config:update']"
>{{ $t("修改") }}</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-attract"
@click="handleMaster(scope.row)"
:disabled="scope.row.master"
v-hasPermi="['infra:file-config:update']"
>{{ $t("主配置") }}</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-share"
@click="handleTest(scope.row)"
>{{ $t("测试") }}</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['infra:file-config:delete']"
>{{ $t("删除") }}</el-button
>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
......@@ -77,58 +163,148 @@
<el-input v-model="form.remark" :placeholder="$t('请输入备注')" />
</el-form-item>
<el-form-item :label="$t('存储器')" prop="storage">
<el-select v-model="form.storage" :placeholder="$t('请选择存储器')" :disabled="form.id">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.INFRA_FILE_STORAGE)"
:key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
<el-select
v-model="form.storage"
:placeholder="$t('请选择存储器')"
:disabled="form.id"
>
<el-option
v-for="dict in this.getDictDatas(DICT_TYPE.INFRA_FILE_STORAGE)"
:key="dict.value"
:label="dict.label"
:value="parseInt(dict.value)"
/>
</el-select>
</el-form-item>
<!-- DB -->
<!-- Local / FTP / SFTP -->
<el-form-item v-if="form.storage >= 10 && form.storage <= 12" :label="$t('基础路径')" prop="config.basePath">
<el-input v-model="form.config.basePath" :placeholder="$t('请输入基础路径')" />
<el-form-item
v-if="form.storage >= 10 && form.storage <= 12"
:label="$t('基础路径')"
prop="config.basePath"
>
<el-input
v-model="form.config.basePath"
:placeholder="$t('请输入基础路径')"
/>
</el-form-item>
<el-form-item v-if="form.storage >= 11 && form.storage <= 12" :label="$t('主机地址')" prop="config.host">
<el-input v-model="form.config.host" :placeholder="$t('请输入主机地址')" />
<el-form-item
v-if="form.storage >= 11 && form.storage <= 12"
:label="$t('主机地址')"
prop="config.host"
>
<el-input
v-model="form.config.host"
:placeholder="$t('请输入主机地址')"
/>
</el-form-item>
<el-form-item v-if="form.storage >= 11 && form.storage <= 12" :label="$t('主机端口')" prop="config.port">
<el-input-number min="0" v-model="form.config.port" :placeholder="$t('请输入主机端口')" />
<el-form-item
v-if="form.storage >= 11 && form.storage <= 12"
:label="$t('主机端口')"
prop="config.port"
>
<el-input-number
min="0"
v-model="form.config.port"
:placeholder="$t('请输入主机端口')"
/>
</el-form-item>
<el-form-item v-if="form.storage >= 11 && form.storage <= 12" :label="$t('用户名')" prop="config.username">
<el-input v-model="form.config.username" :placeholder="$t('请输入密码')" />
<el-form-item
v-if="form.storage >= 11 && form.storage <= 12"
:label="$t('用户名')"
prop="config.username"
>
<el-input
v-model="form.config.username"
:placeholder="$t('请输入密码')"
/>
</el-form-item>
<el-form-item v-if="form.storage >= 11 && form.storage <= 12" :label="$t('密码')" prop="config.password">
<el-input v-model="form.config.password" :placeholder="$t('请输入密码')" />
<el-form-item
v-if="form.storage >= 11 && form.storage <= 12"
:label="$t('密码')"
prop="config.password"
>
<el-input
v-model="form.config.password"
:placeholder="$t('请输入密码')"
/>
</el-form-item>
<el-form-item v-if="form.storage === 11" :label="$t('连接模式')" prop="config.mode">
<el-form-item
v-if="form.storage === 11"
:label="$t('连接模式')"
prop="config.mode"
>
<el-radio-group v-model="form.config.mode">
<el-radio key="Active" label="Active">{{ $t('主动模式') }}</el-radio>
<el-radio key="Passive" label="Passive">{{ $t('主动模式') }}</el-radio>
<el-radio key="Active" label="Active">{{
$t("主动模式")
}}</el-radio>
<el-radio key="Passive" label="Passive">{{
$t("主动模式")
}}</el-radio>
</el-radio-group>
</el-form-item>
<!-- S3 -->
<el-form-item v-if="form.storage === 20" :label="$t('节点地址')" prop="config.endpoint">
<el-input v-model="form.config.endpoint" :placeholder="$t('请输入节点地址')" />
<el-form-item
v-if="form.storage === 20"
:label="$t('节点地址')"
prop="config.endpoint"
>
<el-input
v-model="form.config.endpoint"
:placeholder="$t('请输入节点地址')"
/>
</el-form-item>
<el-form-item v-if="form.storage === 20" label="存储 bucket" prop="config.bucket">
<el-form-item
v-if="form.storage === 20"
label="存储 bucket"
prop="config.bucket"
>
<el-input v-model="form.config.bucket" placeholder="请输入 bucket" />
</el-form-item>
<el-form-item v-if="form.storage === 20" label="accessKey" prop="config.accessKey">
<el-input v-model="form.config.accessKey" placeholder="请输入 accessKey" />
<el-form-item
v-if="form.storage === 20"
label="accessKey"
prop="config.accessKey"
>
<el-input
v-model="form.config.accessKey"
placeholder="请输入 accessKey"
/>
</el-form-item>
<el-form-item v-if="form.storage === 20" label="accessSecret" prop="config.accessSecret">
<el-input v-model="form.config.accessSecret" placeholder="请输入 accessSecret" />
<el-form-item
v-if="form.storage === 20"
label="accessSecret"
prop="config.accessSecret"
>
<el-input
v-model="form.config.accessSecret"
placeholder="请输入 accessSecret"
/>
</el-form-item>
<!-- 通用 -->
<el-form-item v-if="form.storage === 20" :label="$t('自定义域名')"> <!-- 无需参数校验,所以去掉 prop -->
<el-input v-model="form.config.domain" :placeholder="$t('请输入自定义域名')" />
<el-form-item v-if="form.storage === 20" :label="$t('自定义域名')">
<!-- 无需参数校验,所以去掉 prop -->
<el-input
v-model="form.config.domain"
:placeholder="$t('请输入自定义域名')"
/>
</el-form-item>
<el-form-item v-else-if="form.storage" :label="$t('自定义域名')" prop="config.domain">
<el-input v-model="form.config.domain" :placeholder="$t('请输入自定义域名')" />
<el-form-item
v-else-if="form.storage"
:label="$t('自定义域名')"
prop="config.domain"
>
<el-input
v-model="form.config.domain"
:placeholder="$t('请输入自定义域名')"
/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">{{ $t('确 定') }}</el-button>
<el-button @click="cancel">{{ $t('取 消') }}</el-button>
<el-button type="primary" @click="submitForm">{{
$t("确 定")
}}</el-button>
<el-button @click="cancel">{{ $t("取 消") }}</el-button>
</div>
</el-dialog>
</div>
......@@ -141,13 +317,13 @@ import {
deleteFileConfig,
getFileConfig,
getFileConfigPage,
testFileConfig, updateFileConfigMaster
testFileConfig,
updateFileConfigMaster,
} from "@/api/infra/fileConfig";
export default {
name: "FileConfig",
components: {
},
components: {},
data() {
return {
// 遮罩层
......@@ -173,26 +349,100 @@ export default {
// 表单参数
form: {
storage: undefined,
config: {}
config: {},
},
// 表单校验
rules: {
name: [{ required: true, message: this.$t("配置名不能为空"), trigger: "blur" }],
storage: [{ required: true, message: this.$t("存储器不能为空"), trigger: "change" }],
name: [
{
required: true,
message: this.$t("配置名不能为空"),
trigger: "blur",
},
],
storage: [
{
required: true,
message: this.$t("存储器不能为空"),
trigger: "change",
},
],
config: {
basePath: [{ required: true, message: this.$t("基础路径不能为空"), trigger: "blur" }],
host: [{ required: true, message: this.$t("主机地址不能为空"), trigger: "blur" }],
port: [{ required: true, message: this.$t("主机端口不能为空"), trigger: "blur" }],
username: [{ required: true, message: this.$t("用户名不能为空"), trigger: "blur" }],
password: [{ required: true, message: this.$t("密码不能为空"), trigger: "blur" }],
mode: [{ required: true, message: this.$t("连接模式不能为空"), trigger: "change" }],
endpoint: [{ required: true, message: this.$t("节点地址不能为空"), trigger: "blur" }],
bucket: [{ required: true, message: "存储 bucket 不能为空", trigger: "blur" }],
accessKey: [{ required: true, message: "accessKey 不能为空", trigger: "blur" }],
accessSecret: [{ required: true, message: "accessSecret 不能为空", trigger: "blur" }],
domain: [{ required: true, message: this.$t("自定义域名不能为空"), trigger: "blur" }],
basePath: [
{
required: true,
message: this.$t("基础路径不能为空"),
trigger: "blur",
},
],
host: [
{
required: true,
message: this.$t("主机地址不能为空"),
trigger: "blur",
},
],
port: [
{
required: true,
message: this.$t("主机端口不能为空"),
trigger: "blur",
},
],
username: [
{
required: true,
message: this.$t("用户名不能为空"),
trigger: "blur",
},
],
password: [
{
required: true,
message: this.$t("密码不能为空"),
trigger: "blur",
},
],
mode: [
{
required: true,
message: this.$t("连接模式不能为空"),
trigger: "change",
},
],
endpoint: [
{
required: true,
message: this.$t("节点地址不能为空"),
trigger: "blur",
},
],
bucket: [
{
required: true,
message: "存储 bucket 不能为空",
trigger: "blur",
},
],
accessKey: [
{ required: true, message: "accessKey 不能为空", trigger: "blur" },
],
accessSecret: [
{
required: true,
message: "accessSecret 不能为空",
trigger: "blur",
},
],
domain: [
{
required: true,
message: this.$t("自定义域名不能为空"),
trigger: "blur",
},
],
},
}
},
};
},
created() {
......@@ -203,10 +453,10 @@ export default {
getList() {
this.loading = true;
// 处理查询参数
let params = {...this.queryParams};
this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime');
let params = { ...this.queryParams };
this.addBeginAndEndTime(params, this.dateRangeCreateTime, "createTime");
// 执行查询
getFileConfigPage(params).then(response => {
getFileConfigPage(params).then((response) => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
......@@ -249,7 +499,7 @@ export default {
handleUpdate(row) {
this.reset();
const id = row.id;
getFileConfig(id).then(response => {
getFileConfig(id).then((response) => {
this.form = response.data;
this.open = true;
this.title = this.$t("修改文件配置");
......@@ -257,13 +507,13 @@ export default {
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
this.$refs["form"].validate((valid) => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateFileConfig(this.form).then(response => {
updateFileConfig(this.form).then((response) => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
......@@ -271,7 +521,7 @@ export default {
return;
}
// 添加的提交
createFileConfig(this.form).then(response => {
createFileConfig(this.form).then((response) => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
......@@ -281,29 +531,41 @@ export default {
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除文件配置编号为"' + id + '"的数据项?').then(function() {
return deleteFileConfig(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
this.$modal
.confirm('是否确认删除文件配置编号为"' + id + '"的数据项?')
.then(function () {
return deleteFileConfig(id);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => {});
},
/** 主配置按钮操作 */
handleMaster(row) {
const id = row.id;
this.$modal.confirm('是否确认修改配置编号为"' + id + '"的数据项为主配置?').then(function() {
return updateFileConfigMaster(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("修改成功");
}).catch(() => {});
this.$modal
.confirm('是否确认修改配置编号为"' + id + '"的数据项为主配置?')
.then(function () {
return updateFileConfigMaster(id);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("修改成功");
})
.catch(() => {});
},
/** 测试按钮操作 */
handleTest(row) {
testFileConfig(row.id).then((response) => {
this.$modal.alert("测试通过,上传文件成功!访问地址:" + response.data);
}).catch(() => {});
testFileConfig(row.id)
.then((response) => {
this.$modal.alert(
"测试通过,上传文件成功!访问地址:" + response.data
);
})
.catch(() => {});
},
}
},
};
</script>
......@@ -90,6 +90,24 @@
placeholder="请输截止月"
/>
</el-form-item>
<el-form-item label="实收日期" prop="ssDate">
<el-date-picker
v-model="queryParams.sDate4"
type="date"
style="width: 150px"
value-format="yyyy-MM-dd"
clearable
placeholder="请输起始月"
/>
<el-date-picker
v-model="queryParams.eDate4"
type="date"
style="width: 150px"
value-format="yyyy-MM-dd"
clearable
placeholder="请输截止月"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery"
>搜索</el-button
......@@ -169,8 +187,8 @@
</el-table-column>
<el-table-column :label="$t('水单号')" align="center" prop="billNo" />
<el-table-column :label="$t('水单附件')" align="center" prop="attr">
<template slot-scope="scope" v-if="scope.row.attr">
<div v-for="(v, i) in scope.row.attr" :key="i">
<template slot-scope="scope" v-if="scope.row.attrList">
<div v-for="(v, i) in scope.row.attrList" :key="i">
<el-link :href="v.url" type="primary" target="_blank">{{
v.name
}}</el-link>
......@@ -185,6 +203,22 @@
/>
</template>
</el-table-column>
<el-table-column :label="$t('创建人')" align="center" prop="creator" />
<el-table-column
:label="$t('创建时间')"
align="center"
prop="createTime"
/>
<el-table-column
:label="$t('提交审批时间')"
align="center"
prop="createTimeBpm"
/>
<el-table-column
:label="$t('审批通过时间')"
align="center"
prop="updateTimeBpm"
/>
<el-table-column :label="$t('操作')" align="center" width="200">
<template slot-scope="scope">
<el-button
......@@ -222,14 +256,14 @@
v-hasPermi="['ecw:payment:detail:cancelWriteOff']"
>{{ $t("反核销") }}</el-button
>
<!--
<el-button
v-if="scope.row.status == 0"
type="text"
@click="editClick(scope.row)"
v-hasPermi="['ecw:payment:detail:bankEdit']"
>{{ $t("编辑") }}</el-button
>-->
>
<el-button
v-if="scope.row.status == 2"
type="text"
......@@ -312,27 +346,40 @@
<div style="padding: 0 24px">
<el-form ref="addForm" label-width="250px">
<el-form-item :label="$t('收款单号')">
<el-input disabled v-model="form.receipt_no" style="width: 220px"></el-input>
<el-input
:disabled="isEdit"
v-model="form.receipt_no"
style="width: 220px"
></el-input>
</el-form-item>
<!--
<el-form-item :label="$t('剩余应收金额')">
<template v-if="surplusData.length == 0"> 0 </template>
<div v-else>
<div v-for="(amount, currency) in surplusData" :key="currency">
<span v-if="amount">
{{ amount }}{{ getCurrencyLabel(currency) }}</span
>
</div>
</div>
</el-form-item>-->
<span v-if="amount">
{{ amount }}{{ getCurrencyLabel(currency) }}</span
>
</el-form-item>
<el-form-item :label="$t('收款账户')" prop="accountNo">
<el-input disabled
v-model="form.accountBankName"
<el-select
:disabled="isEdit"
filterable
clear
v-model="form.accountId"
:placeholder="$t('请选择收款账户')"
style="width: 220px"
></el-input>
@change="accountChange"
v-el-select-loadmore="loadmore"
>
<el-option
v-for="item in bankData"
:key="item.id"
:label="item.baAccountName + '(' + item.baAccountNum + ')'"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item :label="$t('实收日期')" prop="amountDate">
<el-date-picker disabled
<el-date-picker
:disabled="isEdit"
v-model="form.amountDate"
type="date"
style="width: 150px"
......@@ -341,15 +388,24 @@
</el-form-item>
<div style="display: flex">
<el-form-item :label="$t('实收')" prop="amount">
<el-input v-model="form.amount" disabled style="width: 100px"></el-input>
<el-input
v-model="form.amount"
:disabled="isEdit"
style="width: 100px"
></el-input>
{{ form.currencyName }}
</el-form-item>
</div>
<el-form-item prop="rate" :label="$t('兑核销基准币种汇率')">
<el-input v-model="form.rate" disabled style="width: 220px"></el-input>
<el-input
v-model="form.rate"
:disabled="isEdit"
style="width: 220px"
></el-input>
</el-form-item>
<el-form-item :label="$t('兑核销基准币种金额')">
<el-input disabled
<el-input
:disabled="isEdit"
v-model="form.writeOffAmount"
style="width: 220px"
></el-input>
......@@ -364,10 +420,14 @@
</div>
</el-form-item>
<el-form-item :label="$t('水单号')" prop="billNo">
<el-input v-model="form.billNo" disabled style="width: 220px"></el-input>
<el-input
v-model="form.billNo"
:disabled="isEdit"
style="width: 220px"
></el-input>
</el-form-item>
</el-form>
<div slot="footer" v-show="false">
<div slot="footer">
<el-button type="primary" @click="saveFrom">{{
saveBtnText
}}</el-button>
......@@ -383,6 +443,7 @@ import { getPageList, test } from "@/api/report/bankReceiptDetail";
import { getReceivableItem2 } from "@/api/ecw/financial";
import Treeselect from "@riophae/vue-treeselect";
import "@/assets/styles/vue-treeselect.css";
import { getBankAccountPage } from "@/api/ecw/bankAccount";
import { getCurrencyPage } from "@/api/ecw/currency";
import {
deleteReceiptItem, //删除收款单明细
......@@ -445,6 +506,8 @@ export default {
eDate2: undefined, //提交审批日期
sDate3: undefined,
eDate3: undefined, //审批通过日期
sDate4: undefined,
eDate4: undefined, //实收日期
creator: undefined, //创建人
},
currencyList: [],
......@@ -456,9 +519,21 @@ export default {
ids: [],
// 表单参数
form: {},
isEdit: false, //是否编辑
bankData: [],
codePage: {
pageNo: 1,
pageSize: 20,
},
pages: 1,
};
},
async created() {
getBankAccountPage(this.codePage).then((res) => {
this.bankData = res.data.list;
this.pages = res.data.total / this.codePage.pageSize + 1;
});
// 获取汇率
await getCurrencyPage(this.params).then(
(res) => (this.currencyList = res.data.list)
......@@ -488,6 +563,15 @@ export default {
},
},
methods: {
// 懒加载
loadmore() {
this.codePage.pageNo++;
// 大于页码不请求了
if (this.codePage.pageNo > this.pages) {
return;
}
this.getCodeList();
},
/** 查询列表 */
getList() {
this.loading = true;
......@@ -778,7 +862,9 @@ export default {
});
},
detailClick(row) {
//查看详情
let id = row.id;
this.isEdit = true;
getReceivableItem2(id).then((response) => {
this.form = response.data;
//收款单号
......@@ -793,20 +879,21 @@ export default {
});
},
editClick(row) {
//this.getsurplusData();
this.openAddDialog = true;
this.dialogTitle = this.$t("编辑银行实收明细");
this.saveBtnText = this.$t("提交");
this.isView = false;
/*
setTimeout(() => {
this.addForm = { ...row };
let bank = this.bankData.find(
(v) => v.baAccountNum == this.addForm.accountNo
);
if (bank) this.addForm.accountId = bank.id;
this.setWriteOffAmount();
}, 0);*/
let id = row.id;
this.isEdit = false;
getReceivableItem2(id).then((response) => {
this.form = response.data;
//收款单号
this.form.receipt_no = row.receiptNo;
//实收币种
this.form.currencyName = this.getCurrencyLabel(row.currencyId);
//水单附件
this.form.attr = row.attr;
this.openAddDialog = true;
this.dialogTitle = this.$t("编辑银行实收明细");
this.saveBtnText = this.$t("提交");
this.isView = false;
});
},
deleteClick(row) {
const id = row.id;
......
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