266e97ec by lihua

证件管理

1 parent 3f016796
......@@ -205,13 +205,39 @@ export const getCertificateDetail = (params) => request({
params
})
/** 发证确认 */
/** 获取登记证件管理的资产列表 */
export const getRegisterSelectList = () => request({
url: `${import.meta.env.VITE_API_NEW_PORTAL}/register-base/register-select`,
method: 'get'
})
/** 新增发证 */
export const saveCertificate = (params) => request({
url: `${import.meta.env.VITE_API_NEW_PORTAL}/register-document/save`,
method: 'post',
data: params
})
export const updateCertificate = (params) => request({
url: `${import.meta.env.VITE_API_NEW_PORTAL}/register-document/update-state`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/register-document/update`,
method: 'post',
data: params
})
/** 删除发证 */
export const delCertificate = (params) => request({
url: `${import.meta.env.VITE_API_NEW_PORTAL}/register-document/del`,
method: 'delete',
data: params
})
/** 发证确认 */
// export const updateCertificate = (params) => request({
// url: `${import.meta.env.VITE_API_NEW_PORTAL}/register-document/update-state`,
// method: 'post',
// data: params
// })
/** 获取当前会员分配的交易所 */
export const getServiceDetail = (params) => request({
url: `${import.meta.env.VITE_APP_API_BASEURL}/tenant-service/list-by-tenant?tenantGuid=${params}`,
......
......@@ -9,13 +9,17 @@ import TableTools from "@/components/Tools/table_tools.vue";
import { ElMessage, ElMessageBox } from 'element-plus';
import {
getRegistDocumentList,
updateCertificate
updateCertificate,
getRegisterSelectList,
saveCertificate,
delCertificate
} from "@/api/modules/dataAsset";
import useUserStore from "@/store/modules/user";
import useDataAssetStore from "@/store/modules/dataAsset";
import { useValidator } from '@/hooks/useValidator';
const assetStore = useDataAssetStore();
const { required } = useValidator();
const router = useRouter();
const { proxy } = getCurrentInstance() as any;
......@@ -25,6 +29,8 @@ const userData = JSON.parse(userStore.userData);
/** 是否时企业端。不是企业端,则是服务端,需要显示企业名称。 */
const isCompanyPlatform = ref(userData.tenantType == 1);
const registerSelectData: any = ref([]);
onBeforeMount(() => {
if (isCompanyPlatform.value) {
tableInfo.value.fields = tableFields.value;
......@@ -40,6 +46,14 @@ onActivated(() => {
getTableData();
assetStore.set(false);
}
getRegisterSelectList().then((res: any) => {
if (res.code == proxy.$passCode) {
registerSelectData.value = res.data || [];
formItems.value[0].options = registerSelectData.value;
} else {
ElMessage.error(res.msg);
}
})
});
const searchItemList = ref([
......@@ -164,7 +178,7 @@ const tableInfo = ref({
actionInfo: {
label: "操作",
type: "btn",
width: 120,
width: 150,
btns: (scope) => {
let row = scope.row;
return getTableBtns(row);
......@@ -174,10 +188,14 @@ const tableInfo = ref({
const getTableBtns = (row) => {
let btnsArr: any[] = [];
if (row.state == 3) {
btnsArr.push({ label: "确认", value: "confirm" })
// if (row.state == 3) {
// btnsArr.push({ label: "确认", value: "confirm" })
// }
if (row.state != 0) {
btnsArr.push({ label: "编辑", value: "edit" })
}
btnsArr.push({ label: "详情", value: "path_detail" })
btnsArr.push({ label: "删除", value: "del" })
return btnsArr;
}
......@@ -190,7 +208,31 @@ const tableBtnClick = (scope, btn) => {
if (type == "confirm") {
formItems.value[0].default = [];
dialogInfo.value.visible = true;
} if (type === 'path_detail') { // 详情
} else if (type == "edit") {
dialogInfo.value.visible = true;
dialogInfo.value.type = 'edit';
dialogInfo.value.header.title = '编辑';
formItems.value.forEach(item => {
item.default = row[item.field];
if (item.field == 'registerGuid' || item.field == 'daCode') {
item.disabled = true;
}
})
} else if (type == 'del') {
proxy.$openMessageBox('确定删除该资产登记证件吗?', () => {
delCertificate([row.guid]).then((res: any) => {
if (res?.code == proxy.$passCode) {
ElMessage.success('删除资产登记证件成功');
page.value.curr = 1;
getTableData();
} else {
ElMessage.error(res.msg);
}
})
}, () => {
proxy.$ElMessage.info("已取消删除");
});
} else if (type === 'path_detail') { // 详情
router.push({
name: 'certificateDetail',
query: { guid: row.registerGuid, certificateGuid: row.guid, type: 'certificate', tenantGuid: row.tenantGuid }
......@@ -205,6 +247,104 @@ const tablePageChange = (info) => {
};
const formItems = ref([{
label: "资产名称",
type: "select",
placeholder: "请选择",
field: "registerGuid",
default: '',
options: registerSelectData.value,
props: {
label: 'daName',
value: 'guid'
},
disabled: false,
clearable: true,
required: true,
}, {
label: '资产编码',
type: 'input',
placeholder: '请输入',
field: 'daCode',
maxlength: 50,
default: '',
required: true,
visible: true
}, {
label: '',
type: 'input',
placeholder: '请输入',
field: 'daName',
default: '',
disabled: true,
required: false,
col: 'hide',
}, {
label: '登记时间',
type: 'input',
placeholder: '请输入',
field: 'registerTime',
default: '',
disabled: true,
required: false,
visible: true
}, {
label: '',
type: 'input',
placeholder: '请输入',
field: 'tenantGuid',
default: '',
disabled: true,
required: false,
col: 'hide',
}, {
label: '企业名称',
type: 'input',
placeholder: '请输入',
field: 'tenantName',
default: '',
disabled: true,
required: false,
visible: true
}, {
label: '发证主体',
type: 'input',
placeholder: '请输入',
field: 'issuingEntityName',
default: '',
disabled: true,
required: false,
visible: true
}, {
label: '',
type: 'input',
placeholder: '请输入',
field: 'issuingEntityGuid',
default: '',
disabled: true,
required: false,
col: 'hide',
}, {
label: '有限期',
type: 'date',
placeholder: '请输入',
field: 'effectiveDate',
default: "",
unlink: true,
clearable: true,
required: false
}, {
label: "证件类型",
type: "select",
placeholder: "请选择",
field: "documentType",
default: 1,
options: [{ label: 'A证', value: 1 },
{ label: 'B证', value: 2 },
{ label: 'C证', value: 3 }],
disabled: false,
clearable: true,
required: true,
}, {
label: '证件上传',
tip: '支持扩展名:.jpg .png',
accept: '.jpg, .png',
......@@ -217,6 +357,10 @@ const formItems = ref([{
}]);
const formRules = ref({
damGuid: [required('请选择资产')],
effectiveDate: [required('请选择有限期')],
documentType: [required('请选择证件类型')],
daCode: [required('请输入资产编码')],
documentFile: [{
validator: (rule: any, value: any, callback: any) => {
if (!value?.length) {
......@@ -230,10 +374,10 @@ const formRules = ref({
const dialogInfo = ref({
visible: false,
size: 400,
size: 600,
direction: "column",
header: {
title: "确认发证",
title: "新增",
},
type: '',
contents: [
......@@ -250,29 +394,42 @@ const dialogInfo = ref({
footer: {
btns: [
{ type: "default", label: "取消", value: "cancel" },
{ type: "primary", label: "确定", value: "submit" },
{ type: "primary", label: "确定", value: "submit", loading: false },
],
},
});
const updatePromise: any = ref(null);
/** 确认发证上传后的确定按钮处理。 */
const dialogBtnClick = (btn, info) => {
if (btn.value == 'submit') {
if (updatePromise.value) {
return;
if (info.documentFile?.length) {
info.documentFile = info.documentFile.map(f => {
return {
name: f.name,
url: f.url
}
updatePromise.value = updateCertificate({
guid: currTableData.value.guid,
tenantGuid: userData.tenantGuid,
daCode: currTableData.value.daCode,
state: 4,
documentFile: info.documentFile?.map(f => f.url) || []
}).then((res: any) => {
updatePromise.value = null;
})
}
if (dialogInfo.value.type == 'add') {
dialogInfo.value.footer.btns[1].loading = true;
saveCertificate(info).then((res: any) => {
dialogInfo.value.footer.btns[1].loading = false;
if (res?.code == proxy.$passCode) {
ElMessage.success('新增资产登记证件提交成功');
dialogInfo.value.visible = false;
page.value.curr = 1;
getTableData();
} else {
ElMessage.error(res.msg);
}
})
} else {
info.guid = currTableData.value.guid;
dialogInfo.value.footer.btns[1].loading = true;
updateCertificate(info).then((res: any) => {
dialogInfo.value.footer.btns[1].loading = false;
if (res?.code == proxy.$passCode) {
ElMessage.success('该资产发证确认成功');
ElMessage.success('编辑提交成功');
dialogInfo.value.visible = false;
page.value.curr = 1;
getTableData();
......@@ -280,22 +437,59 @@ const dialogBtnClick = (btn, info) => {
ElMessage.error(res.msg);
}
})
}
} else if (btn.value == 'cancel') {
dialogInfo.value.visible = false;
}
};
const handleDialogSelectChange = (val, row, info) => {
if (row.field == 'registerGuid') {
let register = val && registerSelectData.value.find(r => r.guid == val);
formItems.value.forEach(item => {
item.default = info[item.field];
if (item.field == 'daName' || item.field == 'registerTime' || item.field == 'tenantGuid' || item.field == 'tenantName') {
item.default = register?.[item.field] || '-';
} else if (item.field == 'issuingEntityGuid') {
item.default = register?.exchangeGuid || '';
} else if (item.field == 'issuingEntityName') {
item.default = register?.exchangeName || '-';
}
})
}
}
const handleCreate = () => {
dialogInfo.value.visible = true;
dialogInfo.value.type = 'add';
dialogInfo.value.header.title = '新增';
formItems.value.forEach(item => {
item.default = '';
if (item.field == 'documentType') {
item.default = 1;
} else if (item.field == 'documentFile') {
item.default = [];
}
if (item.field == 'registerGuid' || item.field == 'daCode') {
item.disabled = false;
}
})
}
</script>
<template>
<div class="container_wrap">
<div class="table_tool_wrap">
<TableTools :searchItems="searchItemList" :searchId="'register-data-search'" @search="toSearch" :init="true" />
<div class="tools_btns">
<el-button type="primary" @click="handleCreate">新增登记证件</el-button>
</div>
</div>
<div class="table_panel_wrap">
<Table :tableInfo="tableInfo" @tableBtnClick="tableBtnClick" @tablePageChange="tablePageChange" />
</div>
<Dialog :dialogInfo="dialogInfo" @btnClick="dialogBtnClick" />
<Dialog :dialogInfo="dialogInfo" @btnClick="dialogBtnClick" @select-change="handleDialogSelectChange" />
</div>
</template>
......
......@@ -558,7 +558,7 @@ function fetchRegisterUrl() {
d.documentTypeDesc = d.documentType === 1 ? 'A证' : d.documentType === 2 ? 'B证' : 'C证';
// 使用注释替换的代码逻辑
const refSignInfo: any = await getDownFileSignByUrl(parseAndDecodeUrl(d.documentFile[0]).fileName);
const refSignInfo: any = await getDownFileSignByUrl(parseAndDecodeUrl(d.documentFile[0].url).fileName);
if (!refSignInfo?.data) {
refSignInfo?.msg && ElMessage.error(refSignInfo?.msg);
return null;
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!