🔥 移除合规对账功能
This commit is contained in:
@@ -48,30 +48,6 @@ export const downloadAttachment = (fdId, name) =>
|
|||||||
timeout: 120000,
|
timeout: 120000,
|
||||||
});
|
});
|
||||||
|
|
||||||
export const reconProject = projectCode =>
|
|
||||||
request({
|
|
||||||
url: `${baseUrl}/recon/project`,
|
|
||||||
method: 'get',
|
|
||||||
params: { projectCode },
|
|
||||||
timeout: 30000,
|
|
||||||
});
|
|
||||||
|
|
||||||
export const reconContract = contractNo =>
|
|
||||||
request({
|
|
||||||
url: `${baseUrl}/recon/contract`,
|
|
||||||
method: 'get',
|
|
||||||
params: { contractNo },
|
|
||||||
timeout: 30000,
|
|
||||||
});
|
|
||||||
|
|
||||||
export const reconContractDetail = params =>
|
|
||||||
request({
|
|
||||||
url: `${baseUrl}/recon/contract/detail`,
|
|
||||||
method: 'get',
|
|
||||||
params,
|
|
||||||
timeout: 30000,
|
|
||||||
});
|
|
||||||
|
|
||||||
export const applyContractSpec = data =>
|
export const applyContractSpec = data =>
|
||||||
request({
|
request({
|
||||||
url: `${baseUrl}/contract/spec-apply`,
|
url: `${baseUrl}/contract/spec-apply`,
|
||||||
|
|||||||
@@ -20,7 +20,6 @@
|
|||||||
>
|
>
|
||||||
确认特批结果
|
确认特批结果
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button type="primary" plain @click="reconVisible = true">合规对账</el-button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -103,12 +102,6 @@
|
|||||||
<el-button @click="specDialogVisible = false">取消</el-button>
|
<el-button @click="specDialogVisible = false">取消</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
<hcs-recon-dialog
|
|
||||||
v-model="reconVisible"
|
|
||||||
title="合同合规对账"
|
|
||||||
:loader="reconLoader"
|
|
||||||
/>
|
|
||||||
</section>
|
</section>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -117,10 +110,8 @@ import { UploadFilled } from '@element-plus/icons-vue';
|
|||||||
import {
|
import {
|
||||||
applyContractSpec,
|
applyContractSpec,
|
||||||
confirmContractSpec,
|
confirmContractSpec,
|
||||||
reconContract,
|
|
||||||
uploadAttachment,
|
uploadAttachment,
|
||||||
} from '@/api/business/hcs';
|
} from '@/api/business/hcs';
|
||||||
import HcsReconDialog from './hcs-recon-dialog.vue';
|
|
||||||
|
|
||||||
const SYNC_STATUS_OPTIONS = [
|
const SYNC_STATUS_OPTIONS = [
|
||||||
{ label: '待推送', value: 'unsynced', type: 'info' },
|
{ label: '待推送', value: 'unsynced', type: 'info' },
|
||||||
@@ -137,7 +128,7 @@ const SPEC_STATUS_OPTIONS = [
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'HcsContractPanel',
|
name: 'HcsContractPanel',
|
||||||
components: { UploadFilled, HcsReconDialog },
|
components: { UploadFilled },
|
||||||
props: {
|
props: {
|
||||||
// 合同详情行(须含 id/hcsSyncStatus/hcsFdId/hcsRiskLevel/hcsBlackStatus/hcsSpecStatus 等)
|
// 合同详情行(须含 id/hcsSyncStatus/hcsFdId/hcsRiskLevel/hcsBlackStatus/hcsSpecStatus 等)
|
||||||
contract: { type: Object, required: true },
|
contract: { type: Object, required: true },
|
||||||
@@ -148,7 +139,6 @@ export default {
|
|||||||
specDialogVisible: false,
|
specDialogVisible: false,
|
||||||
specApplying: false,
|
specApplying: false,
|
||||||
materials: [],
|
materials: [],
|
||||||
reconVisible: false,
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@@ -176,9 +166,6 @@ export default {
|
|||||||
canApplySpec() {
|
canApplySpec() {
|
||||||
return ['need', 'rejected'].includes(this.contract.hcsSpecStatus);
|
return ['need', 'rejected'].includes(this.contract.hcsSpecStatus);
|
||||||
},
|
},
|
||||||
reconLoader() {
|
|
||||||
return () => reconContract(this.contract.contractNo);
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
openSpecDialog() {
|
openSpecDialog() {
|
||||||
|
|||||||
@@ -1,147 +0,0 @@
|
|||||||
<template>
|
|
||||||
<el-dialog
|
|
||||||
:model-value="modelValue"
|
|
||||||
:title="title"
|
|
||||||
width="720px"
|
|
||||||
append-to-body
|
|
||||||
destroy-on-close
|
|
||||||
class="hcs-recon-dialog"
|
|
||||||
@update:model-value="value => $emit('update:modelValue', value)"
|
|
||||||
>
|
|
||||||
<div v-loading="loading" class="hcs-recon-dialog__body">
|
|
||||||
<el-alert
|
|
||||||
v-if="error"
|
|
||||||
:title="error"
|
|
||||||
type="error"
|
|
||||||
:closable="false"
|
|
||||||
class="hcs-recon-dialog__alert"
|
|
||||||
/>
|
|
||||||
<template v-else-if="!loading">
|
|
||||||
<div class="hcs-recon-dialog__download">
|
|
||||||
<el-input
|
|
||||||
v-model="downloadFdId"
|
|
||||||
placeholder="合规附件ID(C103-5 下载)"
|
|
||||||
clearable
|
|
||||||
style="width: 320px"
|
|
||||||
/>
|
|
||||||
<el-input
|
|
||||||
v-model="downloadName"
|
|
||||||
placeholder="保存文件名(可选)"
|
|
||||||
clearable
|
|
||||||
style="width: 200px"
|
|
||||||
/>
|
|
||||||
<el-button type="primary" plain :disabled="!downloadFdId" @click="download">
|
|
||||||
下载附件
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
<pre class="hcs-recon-dialog__json">{{ jsonText }}</pre>
|
|
||||||
</template>
|
|
||||||
</div>
|
|
||||||
<template #footer>
|
|
||||||
<el-button @click="$emit('update:modelValue', false)">关闭</el-button>
|
|
||||||
</template>
|
|
||||||
</el-dialog>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { downloadAttachment } from '@/api/business/hcs';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'HcsReconDialog',
|
|
||||||
props: {
|
|
||||||
modelValue: Boolean,
|
|
||||||
title: { type: String, default: '合规对账' },
|
|
||||||
// 对账加载函数:返回 Promise,resolve 结果对象
|
|
||||||
loader: { type: Function, default: null },
|
|
||||||
},
|
|
||||||
emits: ['update:modelValue'],
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
loading: false,
|
|
||||||
error: '',
|
|
||||||
result: null,
|
|
||||||
downloadFdId: '',
|
|
||||||
downloadName: '',
|
|
||||||
};
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
jsonText() {
|
|
||||||
if (this.result === null || this.result === undefined) return '';
|
|
||||||
try {
|
|
||||||
return JSON.stringify(this.result, null, 2);
|
|
||||||
} catch (error) {
|
|
||||||
return String(this.result);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
watch: {
|
|
||||||
modelValue(visible) {
|
|
||||||
if (visible) this.load();
|
|
||||||
},
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
load() {
|
|
||||||
if (!this.loader) return;
|
|
||||||
this.loading = true;
|
|
||||||
this.error = '';
|
|
||||||
this.result = null;
|
|
||||||
this.loader()
|
|
||||||
.then(response => {
|
|
||||||
const data = response?.data?.data ?? response?.data;
|
|
||||||
this.result = data && typeof data === 'object' && 'data' in data ? data.data : data;
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
this.error = error?.response?.data?.msg || error?.message || '合规对账查询失败';
|
|
||||||
})
|
|
||||||
.finally(() => {
|
|
||||||
this.loading = false;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
download() {
|
|
||||||
downloadAttachment(this.downloadFdId, this.downloadName || undefined)
|
|
||||||
.then(response => {
|
|
||||||
const blob = new Blob([response.data]);
|
|
||||||
const url = URL.createObjectURL(blob);
|
|
||||||
const link = document.createElement('a');
|
|
||||||
link.href = url;
|
|
||||||
link.download = this.downloadName || `hcs-attachment-${this.downloadFdId}`;
|
|
||||||
link.click();
|
|
||||||
URL.revokeObjectURL(url);
|
|
||||||
this.$message.success('下载成功');
|
|
||||||
})
|
|
||||||
.catch(() => {
|
|
||||||
this.$message.error('附件下载失败,请确认合规附件ID');
|
|
||||||
});
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
.hcs-recon-dialog__body {
|
|
||||||
min-height: 120px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hcs-recon-dialog__alert {
|
|
||||||
margin-bottom: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hcs-recon-dialog__download {
|
|
||||||
display: flex;
|
|
||||||
gap: 8px;
|
|
||||||
margin-bottom: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hcs-recon-dialog__json {
|
|
||||||
max-height: 420px;
|
|
||||||
margin: 0;
|
|
||||||
padding: 12px;
|
|
||||||
overflow: auto;
|
|
||||||
font-size: 12px;
|
|
||||||
line-height: 1.6;
|
|
||||||
word-break: break-all;
|
|
||||||
white-space: pre-wrap;
|
|
||||||
background: #f5f7fa;
|
|
||||||
border-radius: 4px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -102,17 +102,10 @@
|
|||||||
<el-link v-if="canHcsRepush(row)" type="warning" @click="handleHcsRepush(row)">
|
<el-link v-if="canHcsRepush(row)" type="warning" @click="handleHcsRepush(row)">
|
||||||
{{ hcsRepushingId === row.id ? '推送中…' : '推送合规' }}
|
{{ hcsRepushingId === row.id ? '推送中…' : '推送合规' }}
|
||||||
</el-link>
|
</el-link>
|
||||||
<el-link v-if="canHcsRecon(row)" type="info" @click="openHcsRecon(row)">合规对账</el-link>
|
|
||||||
<el-link v-if="canDelete(row)" type="danger" @click="removeRow(row)">删除</el-link>
|
<el-link v-if="canDelete(row)" type="danger" @click="removeRow(row)">删除</el-link>
|
||||||
</template>
|
</template>
|
||||||
</avue-crud>
|
</avue-crud>
|
||||||
|
|
||||||
<hcs-recon-dialog
|
|
||||||
v-model="hcsReconVisible"
|
|
||||||
title="合同合规对账"
|
|
||||||
:loader="hcsReconLoader"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<empty-pagination
|
<empty-pagination
|
||||||
:page="page"
|
:page="page"
|
||||||
@size-change="sizeChange"
|
@size-change="sizeChange"
|
||||||
@@ -1043,7 +1036,7 @@ import NProgress from 'nprogress';
|
|||||||
import 'nprogress/nprogress.css';
|
import 'nprogress/nprogress.css';
|
||||||
import { exportBlob } from '@/api/common';
|
import { exportBlob } from '@/api/common';
|
||||||
import * as api from '@/api/business/contract-manage';
|
import * as api from '@/api/business/contract-manage';
|
||||||
import { repush as hcsRepush, reconContract, getRisk } from '@/api/business/hcs';
|
import { repush as hcsRepush, getRisk } from '@/api/business/hcs';
|
||||||
import { getMkPublicDetail } from '@/api/mk-process';
|
import { getMkPublicDetail } from '@/api/mk-process';
|
||||||
import { getList as getProjectList } from '@/api/business/project-apply';
|
import { getList as getProjectList } from '@/api/business/project-apply';
|
||||||
import { getList as getCustomerArchiveList } from '@/api/vehicle/customer-archive';
|
import { getList as getCustomerArchiveList } from '@/api/vehicle/customer-archive';
|
||||||
@@ -1061,7 +1054,6 @@ import ContractAttachmentSection, {
|
|||||||
attachmentUrl as sharedAttachmentUrl,
|
attachmentUrl as sharedAttachmentUrl,
|
||||||
normalizeContractFileRows,
|
normalizeContractFileRows,
|
||||||
} from './components/contract-attachment-section.vue';
|
} from './components/contract-attachment-section.vue';
|
||||||
import HcsReconDialog from './components/hcs-recon-dialog.vue';
|
|
||||||
import HcsContractPanel from './components/hcs-contract-panel.vue';
|
import HcsContractPanel from './components/hcs-contract-panel.vue';
|
||||||
import PdfPreview from '@/components/pdf-preview/main.vue';
|
import PdfPreview from '@/components/pdf-preview/main.vue';
|
||||||
import { ElImageViewer, ElCascader } from 'element-plus';
|
import { ElImageViewer, ElCascader } from 'element-plus';
|
||||||
@@ -1219,7 +1211,6 @@ export default {
|
|||||||
ContractAttachmentSection,
|
ContractAttachmentSection,
|
||||||
BillingPlanEditor,
|
BillingPlanEditor,
|
||||||
ChangeRecordDetailDialog,
|
ChangeRecordDetailDialog,
|
||||||
HcsReconDialog,
|
|
||||||
HcsContractPanel,
|
HcsContractPanel,
|
||||||
ElImageViewer,
|
ElImageViewer,
|
||||||
OpenFileViewer,
|
OpenFileViewer,
|
||||||
@@ -1327,8 +1318,6 @@ export default {
|
|||||||
detailRow: {},
|
detailRow: {},
|
||||||
// 合规(HCS)推送/对账状态
|
// 合规(HCS)推送/对账状态
|
||||||
hcsRepushingId: null,
|
hcsRepushingId: null,
|
||||||
hcsReconVisible: false,
|
|
||||||
hcsReconLoader: null,
|
|
||||||
detailContractFileRows: [],
|
detailContractFileRows: [],
|
||||||
detailAttachmentRows: [],
|
detailAttachmentRows: [],
|
||||||
detailBillingPlanRows: [],
|
detailBillingPlanRows: [],
|
||||||
@@ -1646,9 +1635,6 @@ export default {
|
|||||||
row.hcsSyncStatus !== 'synced'
|
row.hcsSyncStatus !== 'synced'
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
canHcsRecon(row) {
|
|
||||||
return ['approved', 'change_approved'].includes(row.approvalStatus);
|
|
||||||
},
|
|
||||||
handleHcsRepush(row) {
|
handleHcsRepush(row) {
|
||||||
if (this.hcsRepushingId) return;
|
if (this.hcsRepushingId) return;
|
||||||
this.$confirm('确定推送该数据到合同合规系统?', '提示', {
|
this.$confirm('确定推送该数据到合同合规系统?', '提示', {
|
||||||
@@ -1674,14 +1660,6 @@ export default {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
openHcsRecon(row) {
|
|
||||||
if (!row.contractNo) {
|
|
||||||
this.$message.warning('该合同无合同编号,无法对账');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.hcsReconLoader = () => reconContract(row.contractNo);
|
|
||||||
this.hcsReconVisible = true;
|
|
||||||
},
|
|
||||||
canEdit(row) {
|
canEdit(row) {
|
||||||
return (
|
return (
|
||||||
this.hasPermission(`${this.config.permission}_edit`) &&
|
this.hasPermission(`${this.config.permission}_edit`) &&
|
||||||
|
|||||||
@@ -146,19 +146,10 @@
|
|||||||
>
|
>
|
||||||
{{ hcsRepushingId === row.id ? '推送中…' : '推送合规' }}
|
{{ hcsRepushingId === row.id ? '推送中…' : '推送合规' }}
|
||||||
</el-link>
|
</el-link>
|
||||||
<el-link v-if="canHcsRecon(row)" type="info" @click="openHcsRecon(row)">
|
|
||||||
合规对账
|
|
||||||
</el-link>
|
|
||||||
<el-link type="danger" v-if="canDelete(row)" @click="rowDel(row)"> 删除 </el-link>
|
<el-link type="danger" v-if="canDelete(row)" @click="rowDel(row)"> 删除 </el-link>
|
||||||
</template>
|
</template>
|
||||||
</avue-crud>
|
</avue-crud>
|
||||||
|
|
||||||
<hcs-recon-dialog
|
|
||||||
v-model="hcsReconVisible"
|
|
||||||
title="项目立项合规对账"
|
|
||||||
:loader="hcsReconLoader"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<empty-pagination
|
<empty-pagination
|
||||||
v-if="!isProjectFormPage"
|
v-if="!isProjectFormPage"
|
||||||
:page="page"
|
:page="page"
|
||||||
@@ -929,7 +920,7 @@
|
|||||||
import { exportBlob } from '@/api/common';
|
import { exportBlob } from '@/api/common';
|
||||||
import { defineAsyncComponent } from 'vue';
|
import { defineAsyncComponent } from 'vue';
|
||||||
import * as api from '@/api/business/project-apply';
|
import * as api from '@/api/business/project-apply';
|
||||||
import { repush as hcsRepush, reconProject } from '@/api/business/hcs';
|
import { repush as hcsRepush } from '@/api/business/hcs';
|
||||||
import { getMkPublicDetail } from '@/api/mk-process';
|
import { getMkPublicDetail } from '@/api/mk-process';
|
||||||
import {
|
import {
|
||||||
getList as getCustomerArchiveList,
|
getList as getCustomerArchiveList,
|
||||||
@@ -1070,7 +1061,6 @@ export default {
|
|||||||
name: 'ProjectApply',
|
name: 'ProjectApply',
|
||||||
components: {
|
components: {
|
||||||
CustomerArchive: defineAsyncComponent(() => import('@/views/vehicle/customer-archive.vue')),
|
CustomerArchive: defineAsyncComponent(() => import('@/views/vehicle/customer-archive.vue')),
|
||||||
HcsReconDialog: defineAsyncComponent(() => import('./components/hcs-recon-dialog.vue')),
|
|
||||||
ChangeRecordDetailDialog,
|
ChangeRecordDetailDialog,
|
||||||
ElImageViewer,
|
ElImageViewer,
|
||||||
OpenFileViewer,
|
OpenFileViewer,
|
||||||
@@ -1136,10 +1126,8 @@ export default {
|
|||||||
{ label: '高风险', value: 'high', statKey: 'high' },
|
{ label: '高风险', value: 'high', statKey: 'high' },
|
||||||
{ label: '中风险', value: 'medium', statKey: 'medium' },
|
{ label: '中风险', value: 'medium', statKey: 'medium' },
|
||||||
],
|
],
|
||||||
// 合规(HCS)推送/对账状态
|
// 合规(HCS)推送状态
|
||||||
hcsRepushingId: null,
|
hcsRepushingId: null,
|
||||||
hcsReconVisible: false,
|
|
||||||
hcsReconLoader: null,
|
|
||||||
page: {
|
page: {
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
pageSizes: [10, 20, 50, 100],
|
pageSizes: [10, 20, 50, 100],
|
||||||
@@ -1625,9 +1613,6 @@ export default {
|
|||||||
row.hcsSyncStatus !== 'synced'
|
row.hcsSyncStatus !== 'synced'
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
canHcsRecon(row) {
|
|
||||||
return ['approved', 'change_approved'].includes(row.approvalStatus);
|
|
||||||
},
|
|
||||||
handleHcsRepush(row) {
|
handleHcsRepush(row) {
|
||||||
if (this.hcsRepushingId) return;
|
if (this.hcsRepushingId) return;
|
||||||
this.$confirm('确定推送该数据到合同合规系统?', '提示', {
|
this.$confirm('确定推送该数据到合同合规系统?', '提示', {
|
||||||
@@ -1653,14 +1638,6 @@ export default {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
openHcsRecon(row) {
|
|
||||||
if (!row.projectCode) {
|
|
||||||
this.$message.warning('该项目无项目编号,无法对账');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.hcsReconLoader = () => reconProject(row.projectCode);
|
|
||||||
this.hcsReconVisible = true;
|
|
||||||
},
|
|
||||||
canOperation(operation, row) {
|
canOperation(operation, row) {
|
||||||
const permission = operation.permission || `${this.config.permission}_${operation.action}`;
|
const permission = operation.permission || `${this.config.permission}_${operation.action}`;
|
||||||
if (!this.hasPermission(permission) || this.readonlyScope || row.readonly) return false;
|
if (!this.hasPermission(permission) || this.readonlyScope || row.readonly) return false;
|
||||||
|
|||||||
Reference in New Issue
Block a user