feat(order): 新增合同文件上传与审批流程功能- 修改订单状态选项数据源为字典类型
- 调整合作伙伴表单字段布局与顺序 - 新增合同文件删除与上传接口- 订单详情页增加文件上传区域控制逻辑- 实现合同文件预览、下载及删除功能 - 添加审批流程时间线展示不同版本记录- 增加订单状态判断禁用编辑和提交操作- 引入合同文件相关API并扩展详情页功能 - 优化订单详情页面结构与交互逻辑- 完善合同文件上传类型与操作按钮控制master
parent
ab40ad4c27
commit
582f03bff3
|
|
@ -51,3 +51,22 @@ export function exportOrder(query) {
|
||||||
data: query
|
data: query
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 删除合同文件
|
||||||
|
export function delContractFile(ids) {
|
||||||
|
return request({
|
||||||
|
url: '/project/order/file/remove',
|
||||||
|
method: 'post',
|
||||||
|
data: { ids: ids }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 上传合同文件
|
||||||
|
export function uploadContractFile(data) {
|
||||||
|
return request({
|
||||||
|
url: '/project/order/importContractData',
|
||||||
|
method: 'post',
|
||||||
|
data: data,
|
||||||
|
headers: { 'Content-Type': 'multipart/form-data' }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
<div>
|
<div>
|
||||||
<!-- 添加或修改订单管理对话框 -->
|
<!-- 添加或修改订单管理对话框 -->
|
||||||
<el-dialog :title="title" :visible.sync="internalVisible" width="1400px" append-to-body @close="handleClose">
|
<el-dialog :title="title" :visible.sync="internalVisible" width="1400px" append-to-body @close="handleClose">
|
||||||
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
|
<el-form ref="form" :model="form" :rules="rules" label-width="120px" :disabled="isOrderApprovedOrInReview">
|
||||||
<el-tabs v-model="activeTab">
|
<el-tabs v-model="activeTab">
|
||||||
<el-tab-pane label="基础信息" name="basic">
|
<el-tab-pane label="基础信息" name="basic">
|
||||||
<div style="max-height: 60vh; overflow-y: auto; padding: 15px;">
|
<div style="max-height: 60vh; overflow-y: auto; padding: 15px;">
|
||||||
|
|
@ -218,26 +218,133 @@
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="配置信息" name="config">
|
<el-tab-pane label="配置信息" name="config">
|
||||||
<div style="max-height: 60vh; overflow-y: auto; padding: 15px;">
|
<div style="max-height: 60vh; overflow-y: auto; padding: 15px;">
|
||||||
<product-config v-model="form" :disabled="!isEdit" />
|
<product-config v-model="form" :disabled="!isEdit || isOrderApprovedOrInReview" />
|
||||||
</div>
|
</div>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="流转过程" name="flow">
|
<el-tab-pane label="流转过程" name="flow">
|
||||||
<!-- 流转过程 -->
|
<div style="max-height: 60vh; overflow-y: auto; padding: 15px;">
|
||||||
</el-tab-pane>
|
<el-tabs v-model="activeVersionTab" type="card" v-if="uniqueVersions.length > 0">
|
||||||
<el-tab-pane label="备货信息" name="stock">
|
<el-tab-pane
|
||||||
<!-- 备货信息 -->
|
v-for="version in uniqueVersions"
|
||||||
</el-tab-pane>
|
:key="version"
|
||||||
<el-tab-pane label="物流信息" name="delivery">
|
:label="'版本号Rev.' + version"
|
||||||
<!-- 物流信息 -->
|
:name="version">
|
||||||
|
<el-timeline>
|
||||||
|
<el-timeline-item
|
||||||
|
v-for="log in groupedApproveLogs[version]"
|
||||||
|
:key="log.id"
|
||||||
|
:timestamp="log.approveTime"
|
||||||
|
placement="top">
|
||||||
|
<el-card>
|
||||||
|
<h4>{{ log.approveOpinion }}</h4>
|
||||||
|
<p><b>操作人:</b> {{ log.approveUserName }} ({{ log.roleName }})</p>
|
||||||
|
<p><b>接收人:</b> {{ log.nextAllApproveUserName }}</p>
|
||||||
|
<p><b>审批状态:</b> <el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ formatApproveStatus(log.approveStatus) }}</el-tag></p>
|
||||||
|
</el-card>
|
||||||
|
</el-timeline-item>
|
||||||
|
</el-timeline>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
<div v-else>暂无流转过程数据。</div>
|
||||||
|
</div>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
|
<!-- <el-tab-pane label="备货信息" name="stock">-->
|
||||||
|
<!-- <!– 备货信息 –>-->
|
||||||
|
<!-- </el-tab-pane>-->
|
||||||
|
<!-- <el-tab-pane label="物流信息" name="delivery">-->
|
||||||
|
<!-- <!– 物流信息 –>-->
|
||||||
|
<!-- </el-tab-pane>-->
|
||||||
<el-tab-pane label="合同信息" name="contract">
|
<el-tab-pane label="合同信息" name="contract">
|
||||||
<!-- 合同信息 -->
|
<div style="max-height: 60vh; overflow-y: auto; padding: 15px;">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-12">
|
||||||
|
<div class="tabs-container">
|
||||||
|
<div class="col-xs-12" style="display: flex; justify-content: flex-end; padding: 5px 20px;" v-if="showFileFlag">
|
||||||
|
<el-button type="text" icon="el-icon-download" @click="downloadTem" style="margin-bottom: 5px;" :disabled="isOrderApprovedOrInReview">下载模板</el-button>
|
||||||
|
</div>
|
||||||
|
<el-tabs v-model="activeContractVersionTab" type="card" v-if="uniqueContractVersions.length > 0">
|
||||||
|
<el-tab-pane
|
||||||
|
v-for="version in uniqueContractVersions"
|
||||||
|
:key="version"
|
||||||
|
:label="'版本号Rev.' + version"
|
||||||
|
:name="version">
|
||||||
|
|
||||||
|
<div v-if="groupedContractFiles[version] && groupedContractFiles[version].bakFile" style="display: flex; justify-content: space-between; padding: 5px 20px;">
|
||||||
|
<h3>历史订单记录</h3>
|
||||||
|
<span class="file-view" @click="previewFile(groupedContractFiles[version].bakFile.filePath, groupedContractFiles[version].bakFile.fileName)">
|
||||||
|
{{ form.projectName + 'Rev.' + version }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="panel-body" v-if="showFileFlag">
|
||||||
|
<h3 style="margin-bottom: 5px">附件信息</h3>
|
||||||
|
<el-table :data="groupedContractFiles[version] ? groupedContractFiles[version].files : []" style="width: 100%;
|
||||||
|
def-border-radius: 8px;
|
||||||
|
overflow: hidden;
|
||||||
|
margin-top: 10px;">
|
||||||
|
<el-table-column label="序号" type="index" width="50"></el-table-column>
|
||||||
|
<el-table-column label="类型" width="150">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.$index + 1 == 1 ? '商务折扣审批' : scope.$index + 1 == 2 ? '合同' : '补充附件' }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="附件名称">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span v-if="scope.row.id !== -1">{{ scope.row.fileName }}</span>
|
||||||
|
<span v-else>{{ file_log_arr[scope.$index] }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="上传人" prop="uploadUserName" width="120"></el-table-column>
|
||||||
|
<el-table-column label="上传时间" prop="uploadTime" width="180"></el-table-column>
|
||||||
|
<el-table-column label="操作" width="200">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-button
|
||||||
|
v-if="scope.row.id === -1 && ((form.canUpdate && scope.row.fileSort !== '3') || (form.uploadFinalFile && scope.row.fileSort === '3'))"
|
||||||
|
type="text"
|
||||||
|
icon="el-icon-upload"
|
||||||
|
@click="importList(scope.$index)"
|
||||||
|
:disabled="isOrderApprovedOrInReview"
|
||||||
|
>上传</el-button>
|
||||||
|
<el-button
|
||||||
|
v-if="scope.row.id !== -1"
|
||||||
|
type="text"
|
||||||
|
icon="el-icon-view"
|
||||||
|
@click="previewFile(scope.row.filePath, scope.row.fileName)"
|
||||||
|
>预览</el-button>
|
||||||
|
<el-button
|
||||||
|
v-if="scope.row.id !== -1"
|
||||||
|
type="text"
|
||||||
|
icon="el-icon-download"
|
||||||
|
@click="downFile(scope.row.filePath, scope.row.fileName)"
|
||||||
|
>下载</el-button>
|
||||||
|
<el-button
|
||||||
|
v-if="scope.row.id !== -1 && version == form.versionCode && ((form.canUpdate && scope.row.fileSort !== '3') || (form.uploadFinalFile && scope.row.fileSort === '3'))"
|
||||||
|
type="text"
|
||||||
|
icon="el-icon-delete"
|
||||||
|
@click="delUploadRow(scope.$index, scope.row.id)"
|
||||||
|
:disabled="isOrderApprovedOrInReview"
|
||||||
|
>删除</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
<div v-else>暂无合同信息数据。</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<input id="uploadInput" type="file" accept=".pdf,.jpg,.png" style="display: none" @change="handleUploadFile"/>
|
||||||
|
<input id="uploadInput1" type="file" accept=".pdf,.jpg,.png" style="display: none" @change="handleUploadFile"/>
|
||||||
|
<input id="uploadInput2" type="file" accept=".zip,.rar,.jpg,.png" style="display: none" @change="handleUploadFile"/>
|
||||||
|
<input id="fileSort" type="hidden" v-model="fileSort"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
|
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
</el-form>
|
</el-form>
|
||||||
<div slot="footer" class="dialog-footer">
|
<div slot="footer" class="dialog-footer">
|
||||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
<el-button type="primary" @click="submitForm" v-if="!isOrderApprovedOrInReview">确 定</el-button>
|
||||||
<el-button @click="cancel">取 消</el-button>
|
<el-button @click="cancel">取 消</el-button>
|
||||||
</div>
|
</div>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
@ -256,7 +363,7 @@
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { getOrder, addOrder, updateOrder } from "@/api/project/order";
|
import { getOrder, addOrder, updateOrder, delContractFile, uploadContractFile } from "@/api/project/order";
|
||||||
import { getDicts } from "@/api/system/dict/data";
|
import { getDicts } from "@/api/system/dict/data";
|
||||||
import ProductConfig from '@/views/project/info/ProductConfig.vue';
|
import ProductConfig from '@/views/project/info/ProductConfig.vue';
|
||||||
import SelectAgent from "@/views/system/agent/selectAgent.vue";
|
import SelectAgent from "@/views/system/agent/selectAgent.vue";
|
||||||
|
|
@ -291,6 +398,13 @@ export default {
|
||||||
return {
|
return {
|
||||||
// 表单参数
|
// 表单参数
|
||||||
form: {},
|
form: {},
|
||||||
|
approveLogList: [],
|
||||||
|
activeVersionTab: null,
|
||||||
|
activeContractVersionTab: null, // 当前激活的合同版本Tab
|
||||||
|
showFileFlag: false, // 是否显示文件上传区域
|
||||||
|
uploadInput: null, // 文件上传的引用
|
||||||
|
fileSort: null, // 文件类型排序
|
||||||
|
file_log_arr: [ "(请上传商务折扣审批邮件信息).pdf/.jpg/.png","(请上传合同信息).pdf/.jpg/.png", "(补充附件).zip/.rar/.jpg/.png","(请上传已盖章合同信息).pdf/.jpg/.png"],
|
||||||
// 内部可见性控制
|
// 内部可见性控制
|
||||||
internalVisible: this.visible,
|
internalVisible: this.visible,
|
||||||
selectAgentVisible: false,
|
selectAgentVisible: false,
|
||||||
|
|
@ -336,6 +450,59 @@ export default {
|
||||||
computed: {
|
computed: {
|
||||||
isEdit() {
|
isEdit() {
|
||||||
return this.orderId != null;
|
return this.orderId != null;
|
||||||
|
},
|
||||||
|
isOrderApprovedOrInReview() {
|
||||||
|
return this.form.orderStatus === '1' || this.form.orderStatus === '2';
|
||||||
|
},
|
||||||
|
uniqueVersions() {
|
||||||
|
if (!this.approveLogList || this.approveLogList.length === 0) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
const versions = [...new Set(this.approveLogList.map(log => log.extendField1))];
|
||||||
|
return versions.sort((a, b) => b - a); // 降序排列版本号
|
||||||
|
},
|
||||||
|
groupedApproveLogs() {
|
||||||
|
if (!this.approveLogList || this.approveLogList.length === 0) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
return this.approveLogList.reduce((acc, log) => {
|
||||||
|
const version = log.extendField1;
|
||||||
|
if (!acc[version]) {
|
||||||
|
acc[version] = [];
|
||||||
|
}
|
||||||
|
acc[version].push(log);
|
||||||
|
return acc;
|
||||||
|
}, {});
|
||||||
|
},
|
||||||
|
uniqueContractVersions() {
|
||||||
|
const versions = new Set();
|
||||||
|
if (this.form.contractTableData) {
|
||||||
|
Object.keys(this.form.contractTableData).forEach(version => versions.add(version));
|
||||||
|
}
|
||||||
|
if (this.orderBakFile) {
|
||||||
|
Object.keys(this.orderBakFile).forEach(version => versions.add(version));
|
||||||
|
}
|
||||||
|
return Array.from(versions).sort((a, b) => b - a); // 降序排列版本号
|
||||||
|
},
|
||||||
|
groupedContractFiles() {
|
||||||
|
const grouped = {};
|
||||||
|
if (this.form.contractTableData) {
|
||||||
|
for (const version in this.form.contractTableData) {
|
||||||
|
if (!grouped[version]) {
|
||||||
|
grouped[version] = { files: [], bakFile: null };
|
||||||
|
}
|
||||||
|
grouped[version].files = this.form.contractTableData[version];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this.orderBakFile) {
|
||||||
|
for (const version in this.orderBakFile) {
|
||||||
|
if (!grouped[version]) {
|
||||||
|
grouped[version] = { files: [], bakFile: null };
|
||||||
|
}
|
||||||
|
grouped[version].bakFile = this.orderBakFile[version];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return grouped;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
|
|
@ -395,7 +562,17 @@ export default {
|
||||||
this.reset();
|
this.reset();
|
||||||
if (this.isEdit) {
|
if (this.isEdit) {
|
||||||
getOrder(this.orderId).then(response => {
|
getOrder(this.orderId).then(response => {
|
||||||
this.form = response.data;
|
this.form = response.data.projectOrderInfo;
|
||||||
|
this.approveLogList=response.data.approveLog;
|
||||||
|
this.orderBakFile = response.data.orderBakFile || {};
|
||||||
|
this.showFileFlag = response.data.showFileFlag || false;
|
||||||
|
|
||||||
|
if (this.uniqueVersions.length > 0) {
|
||||||
|
this.activeVersionTab = this.uniqueVersions[0]; // 默认显示最新版本
|
||||||
|
}
|
||||||
|
if (this.uniqueContractVersions.length > 0) {
|
||||||
|
this.activeContractVersionTab = this.uniqueContractVersions[0]; // 默认显示最新合同版本
|
||||||
|
}
|
||||||
// 手动触发联动
|
// 手动触发联动
|
||||||
this.handleBgChange(this.form.bgProperty);
|
this.handleBgChange(this.form.bgProperty);
|
||||||
this.handleChannelChange(this.form.orderChannel);
|
this.handleChannelChange(this.form.orderChannel);
|
||||||
|
|
@ -459,7 +636,10 @@ export default {
|
||||||
hardwareProjectProductInfoList: [],
|
hardwareProjectProductInfoList: [],
|
||||||
maintenanceProjectProductInfoList: []
|
maintenanceProjectProductInfoList: []
|
||||||
};
|
};
|
||||||
|
this.orderBakFile = {};
|
||||||
this.activeTab = 'basic';
|
this.activeTab = 'basic';
|
||||||
|
this.activeContractVersionTab = null;
|
||||||
|
this.showFileFlag = false;
|
||||||
this.resetForm("form");
|
this.resetForm("form");
|
||||||
},
|
},
|
||||||
/** 提交按钮 */
|
/** 提交按钮 */
|
||||||
|
|
@ -566,7 +746,101 @@ export default {
|
||||||
/** 选择合作伙伴按钮操作 */
|
/** 选择合作伙伴按钮操作 */
|
||||||
handleSelectPartner() {
|
handleSelectPartner() {
|
||||||
this.msgWarning("选择合作伙伴功能待实现");
|
this.msgWarning("选择合作伙伴功能待实现");
|
||||||
}
|
},
|
||||||
|
|
||||||
|
formatApproveStatus(status) {
|
||||||
|
const statusMap = {
|
||||||
|
'1': '提交审批',
|
||||||
|
'2': '驳回',
|
||||||
|
'3': '批准'
|
||||||
|
};
|
||||||
|
return statusMap[status] || '提交审批';
|
||||||
|
},
|
||||||
|
downloadTem() {
|
||||||
|
if (!this.form.orderChannel) {
|
||||||
|
this.$modal.alertWarning("请先选择下单通路");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const orderId = this.form.id;
|
||||||
|
window.location.href = process.env.VUE_APP_BASE_API + `/project/order/contract/export?orderId=${orderId}`;
|
||||||
|
},
|
||||||
|
previewFile(filePath, fileName) {
|
||||||
|
if (filePath.endsWith(".png") || filePath.endsWith(".jpg") || filePath.endsWith(".jpeg") || filePath.endsWith(".pdf")) {
|
||||||
|
const url = process.env.VUE_APP_BASE_API + `/project/order/file/view?filePath=${encodeURIComponent(filePath)}&fileName=${encodeURIComponent(fileName)}`;
|
||||||
|
window.open(url);
|
||||||
|
} else {
|
||||||
|
this.downFile(filePath, fileName);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
downFile(filePath, fileName) {
|
||||||
|
window.location.href = process.env.VUE_APP_BASE_API + `/project/order/file/download?filePath=${encodeURIComponent(filePath)}&fileName=${encodeURIComponent(fileName)}`;
|
||||||
|
},
|
||||||
|
handleUploadFile(event) {
|
||||||
|
const file = event.target.files[0];
|
||||||
|
if (!file) return;
|
||||||
|
|
||||||
|
const formData = new FormData();
|
||||||
|
formData.append('file', file);
|
||||||
|
formData.append('orderId', this.form.id);
|
||||||
|
formData.append('versionCode', this.form.versionCode);
|
||||||
|
formData.append('fileSort', this.fileSort);
|
||||||
|
|
||||||
|
uploadContractFile(formData).then(response => {
|
||||||
|
this.$modal.msgSuccess('导入成功');
|
||||||
|
this.addFile(response.data);
|
||||||
|
// 清空文件输入框,以便再次上传相同文件
|
||||||
|
event.target.value = '';
|
||||||
|
}).catch(() => {
|
||||||
|
this.$modal.msgError('导入失败');
|
||||||
|
event.target.value = '';
|
||||||
|
});
|
||||||
|
},
|
||||||
|
importList(sortNum) {
|
||||||
|
this.fileSort = sortNum;
|
||||||
|
if (sortNum === 0) {
|
||||||
|
document.getElementById('uploadInput').click();
|
||||||
|
} else if (sortNum === 1) {
|
||||||
|
document.getElementById('uploadInput1').click();
|
||||||
|
} else {
|
||||||
|
document.getElementById('uploadInput2').click();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
addFile(data) {
|
||||||
|
const sortNum = data.fileSort;
|
||||||
|
if (!this.groupedContractFiles[this.form.versionCode]) {
|
||||||
|
this.$set(this.groupedContractFiles, this.form.versionCode, { files: [], bakFile: null });
|
||||||
|
}
|
||||||
|
const currentVersionFiles = this.groupedContractFiles[this.form.versionCode].files;
|
||||||
|
const fileIndex = currentVersionFiles.findIndex(file => file.fileSort === sortNum);
|
||||||
|
|
||||||
|
if (fileIndex !== -1) {
|
||||||
|
this.$set(currentVersionFiles, fileIndex, data);
|
||||||
|
} else {
|
||||||
|
currentVersionFiles.push(data);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
delUploadRow(sortNum, id) {
|
||||||
|
this.$modal.confirm("确定删除该文件吗?").then(() => {
|
||||||
|
delContractFile(id).then(() => {
|
||||||
|
this.$modal.msgSuccess("删除成功");
|
||||||
|
// 找到当前版本的文件列表并更新
|
||||||
|
const currentVersionFiles = this.groupedContractFiles[this.activeContractVersionTab].files;
|
||||||
|
const fileIndex = currentVersionFiles.findIndex(file => file.id === id);
|
||||||
|
if (fileIndex !== -1) {
|
||||||
|
this.$set(currentVersionFiles, fileIndex, {
|
||||||
|
id: -1,
|
||||||
|
fileSort: sortNum,
|
||||||
|
fileName: this.file_log_arr[sortNum],
|
||||||
|
uploadUserName: '',
|
||||||
|
uploadTime: '',
|
||||||
|
filePath: ''
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}).catch(() => {
|
||||||
|
this.$modal.msgError("删除失败");
|
||||||
|
});
|
||||||
|
}).catch(() => {});
|
||||||
|
},
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="订单状态" prop="orderStatus">
|
<el-form-item label="订单状态" prop="orderStatus">
|
||||||
<el-select v-model="queryParams.orderStatus" placeholder="请选择订单状态" clearable size="small">
|
<el-select v-model="queryParams.orderStatus" placeholder="请选择订单状态" clearable size="small">
|
||||||
<el-option v-for="dict in orderStatusOptions" :key="dict.dictValue" :label="dict.dictLabel" :value="dict.dictValue"/>
|
<el-option v-for="dict in dict.type.order_status" :key="dict.value" :label="dict.label" :value="dict.value"/>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="代表处" prop="agentName">
|
<el-form-item label="代表处" prop="agentName">
|
||||||
|
|
|
||||||
|
|
@ -193,30 +193,32 @@
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="系统用户" prop="systemUserName">
|
<el-form-item label="邮件" prop="contactEmail">
|
||||||
<el-input v-model="form.systemUserName" placeholder="请选择系统用户" readonly @click.native="openSelectUser" />
|
<el-input v-model="form.contactEmail" placeholder="请输入邮件" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row>
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="系统用户" prop="systemUserName">
|
||||||
|
<el-input v-model="form.systemUserName" placeholder="请选择系统用户" readonly @click.native="openSelectUser" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="联系人" prop="contactPerson">
|
<el-form-item label="联系人" prop="contactPerson">
|
||||||
<el-input v-model="form.contactPerson" placeholder="请输入联系人" />
|
<el-input v-model="form.contactPerson" placeholder="请输入联系人" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="联系电话" prop="contactPhone">
|
|
||||||
<el-input v-model="form.contactPhone" placeholder="请输入联系电话" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="邮件" prop="contactEmail">
|
<el-form-item label="联系电话" prop="contactPhone">
|
||||||
<el-input v-model="form.contactEmail" placeholder="请输入邮件" />
|
<el-input v-model="form.contactPhone" placeholder="请输入联系电话" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-form-item label="地址" prop="address">
|
<el-form-item label="地址" prop="address">
|
||||||
<el-input v-model="form.address" type="textarea" placeholder="请输入详细地址" />
|
<el-input v-model="form.address" type="textarea" placeholder="请输入详细地址" />
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package com.ruoyi.sip.controller.vue;
|
package com.ruoyi.sip.controller.vue;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import com.ruoyi.common.annotation.Log;
|
import com.ruoyi.common.annotation.Log;
|
||||||
import com.ruoyi.common.core.controller.BaseController;
|
import com.ruoyi.common.core.controller.BaseController;
|
||||||
import com.ruoyi.common.core.domain.AjaxResult;
|
import com.ruoyi.common.core.domain.AjaxResult;
|
||||||
|
|
@ -7,14 +8,20 @@ import com.ruoyi.common.core.page.TableDataInfo;
|
||||||
import com.ruoyi.common.enums.BusinessType;
|
import com.ruoyi.common.enums.BusinessType;
|
||||||
import com.ruoyi.common.utils.ShiroUtils;
|
import com.ruoyi.common.utils.ShiroUtils;
|
||||||
import com.ruoyi.common.utils.StringUtils;
|
import com.ruoyi.common.utils.StringUtils;
|
||||||
|
import com.ruoyi.sip.domain.ProjectOrderFileLog;
|
||||||
import com.ruoyi.sip.domain.ProjectOrderInfo;
|
import com.ruoyi.sip.domain.ProjectOrderInfo;
|
||||||
|
import com.ruoyi.sip.flowable.domain.Todo;
|
||||||
|
import com.ruoyi.sip.flowable.service.TodoService;
|
||||||
|
import com.ruoyi.sip.service.IProjectOrderFileLogService;
|
||||||
import com.ruoyi.sip.service.IProjectOrderInfoService;
|
import com.ruoyi.sip.service.IProjectOrderInfoService;
|
||||||
import org.apache.shiro.authz.annotation.Logical;
|
import org.apache.shiro.authz.annotation.Logical;
|
||||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 订单管理 (Vue)
|
* 订单管理 (Vue)
|
||||||
|
|
@ -28,7 +35,10 @@ public class VueProjectOrderInfoController extends BaseController {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private IProjectOrderInfoService projectOrderInfoService;
|
private IProjectOrderInfoService projectOrderInfoService;
|
||||||
|
@Autowired
|
||||||
|
private TodoService todoService;
|
||||||
|
@Autowired
|
||||||
|
private IProjectOrderFileLogService projectOrderFileLogService;
|
||||||
/**
|
/**
|
||||||
* 查询订单管理列表
|
* 查询订单管理列表
|
||||||
*/
|
*/
|
||||||
|
|
@ -49,7 +59,35 @@ public class VueProjectOrderInfoController extends BaseController {
|
||||||
@RequiresPermissions("project:order:query")
|
@RequiresPermissions("project:order:query")
|
||||||
@GetMapping(value = "/{id}")
|
@GetMapping(value = "/{id}")
|
||||||
public AjaxResult getInfo(@PathVariable("id") Long id) {
|
public AjaxResult getInfo(@PathVariable("id") Long id) {
|
||||||
return AjaxResult.success(projectOrderInfoService.selectProjectOrderInfoById(id));
|
Map<String,Object> mmap=new HashMap<>();
|
||||||
|
ProjectOrderInfo projectOrderInfo = projectOrderInfoService.selectProjectOrderInfoById(id);
|
||||||
|
mmap.put("projectOrderInfo", projectOrderInfo);
|
||||||
|
mmap.put("user", ShiroUtils.getSysUser());
|
||||||
|
mmap.put("canUpdate", ProjectOrderInfo.OrderStatus.WAIT_COMMIT.getCode().equals(projectOrderInfo.getOrderStatus()) ||ProjectOrderInfo.OrderStatus.APPROVE_REJECT.getCode().equals(projectOrderInfo.getOrderStatus()));
|
||||||
|
// boolean showFileFlag=!ProjectOrderInfo.OrderStatus.WAIT_COMMIT.getCode().equals(projectOrderInfo.getOrderStatus())
|
||||||
|
// && !ProjectOrderInfo.OrderStatus.APPROVE_REJECT.getCode().equals(projectOrderInfo.getOrderStatus())
|
||||||
|
// && !"1".equals(projectOrderInfo.getProcessTemplate());
|
||||||
|
mmap.put("showFileFlag", true);
|
||||||
|
|
||||||
|
ProjectOrderFileLog fileLog = new ProjectOrderFileLog();
|
||||||
|
fileLog.setOrderId(projectOrderInfo.getId());
|
||||||
|
fileLog.setFileType(ProjectOrderFileLog.FileTypeEnum.CONTRACT_BAK.getCode());
|
||||||
|
mmap.put("orderBakFile", projectOrderFileLogService.mapBakFile(fileLog));
|
||||||
|
Todo todo = new Todo();
|
||||||
|
todo.setBusinessKey(projectOrderInfo.getOrderCode());
|
||||||
|
List<Todo> todoCompletedList = todoService.selectTodoCompletedList(todo);
|
||||||
|
mmap.put("approveLog", todoCompletedList);
|
||||||
|
//判断商务角色 并且是产品或自己审批
|
||||||
|
boolean updateFlag = CollUtil.isNotEmpty(todoCompletedList) && ProjectOrderInfo.OrderStatus.WAIT_APPROVE.getCode().equals(projectOrderInfo.getOrderStatus()) ?
|
||||||
|
("产品经理".equals(todoCompletedList.get(0).getTaskName()) || "售前".equals(todoCompletedList.get(0).getTaskName()))
|
||||||
|
: (boolean) mmap.get("canUpdate");
|
||||||
|
mmap.put("updateFile", (ShiroUtils.getSubject().hasRole("sale_assistant")||ShiroUtils.getSubject().hasRole("business") ||ShiroUtils.getSysUser().isAdmin()) && updateFlag);
|
||||||
|
mmap.put("uploadFinalFile", (ShiroUtils.getSubject().hasRole("business") || ShiroUtils.getSysUser().isAdmin()) &&
|
||||||
|
ProjectOrderInfo.OrderStatus.APPROVE_COMPLETE.getCode().equals(projectOrderInfo.getOrderStatus()));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return AjaxResult.success(mmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue