d65fd3dc by lihua

数据使用

1 parent d6fe651c
......@@ -38,4 +38,11 @@ export const getDataUsePageList = (params) => request({
url: `${import.meta.env.VITE_APP_DIGITAL_CONTRACT_URL}/contract-use/page-list`,
method: 'post',
data: params
})
\ No newline at end of file
})
/** 删除数据使用 */
export const deleteDataUse = (params) => request({
url: `${import.meta.env.VITE_APP_DIGITAL_CONTRACT_URL}/contract-use/delete`,
method: 'delete',
data: params
});
......
......@@ -179,8 +179,8 @@ onMounted(() => {
</template>
<template v-else-if="item.type == 'date-time'">
<el-date-picker v-model="formInline[item.field]" type="datetimerange" start-placeholder="开始时间"
end-placeholder="结束时间" />
<el-date-picker v-model="formInline[item.field]" type="datetimerange" :start-placeholder="item.startPlaceholder ?? '开始时间'"
:default-time="item.defaultTime ?? [item.defaultStartTime, item.defaultEndTime]" :end-placeholder="item.endPlaceholder ?? '结束时间'" />
</template>
<template v-else-if="item.type == 'date-range'">
<el-date-picker v-model="formInline[item.field]" type="daterange" :start-placeholder="item.startPlaceholder ?? '开始日期'" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
......
......@@ -69,7 +69,7 @@ const routes: RouteRecordRaw[] = [
name: 'apiDetail',
component: () => import('@/views/data_asset/detail_serviceApi.vue'),
meta: {
title: '流程详情',
title: '详情-',
sidebar: false,
breadcrumb: false,
cache: true,
......
......@@ -62,6 +62,42 @@ const routes: RouteRecordRaw[] = [
return;
}
}
},
{
path: 'usage-register-catalog-detail',
name: 'usageCatalogDetail',
component: () => import('@/views/data_asset/registerCatalogDetail.vue'),
meta: {
title: '详情-',
sidebar: false,
breadcrumb: false,
cache: true,
reuse: true
}
},
{
path: 'usage-api-detail',
name: 'usageApiDetail',
component: () => import('@/views/data_asset/detail_serviceApi.vue'),
meta: {
title: '详情-',
sidebar: false,
breadcrumb: false,
cache: true,
reuse: true
}
},
{
path: 'data-usage-log',
name: 'dataUsageLog',
component: () => import('@/views/data_asset/dataUsageLog.vue'),
meta: {
title: '使用日志-',
sidebar: false,
breadcrumb: false,
cache: true,
reuse: true
}
}
],
},
......
......@@ -234,7 +234,7 @@ const tableInfo = ref({
}
// 交付只有核验通过有。
let verifySatus = row.verifySatus;
(verifySatus == 1 || verifySatus == 4) && !row.isRefresh && btns.push({
(deliveryStatus == 3 || verifySatus == 1 || verifySatus == 4) && !row.isRefresh && btns.push({
value: 'refresh', label: '刷新', click: (scope) => {
scope.row.isRefresh = true;
//只刷新当前这一条数据
......@@ -273,7 +273,7 @@ const tableInfo = ref({
});
}
//已通过且未交付时,有交付按钮
verifySatus == 3 && deliveryStatus != 2 && btns.push({
verifySatus == 3 && deliveryStatus != 2 && deliveryStatus != 3 && btns.push({
value: 'delivery', label: '交付', click: (scope) => {
deliveryContract(scope.row.guid).then((res: any) => {
if (res?.code == proxy.$passCode) {
......
......@@ -3,9 +3,11 @@ import TableTools from "@/components/Tools/table_tools.vue";
import { commonPageConfig, TableColumnWidth } from '@/utils/enum';
import {
getDataUsePageList,
deleteDataUse,
} from "@/api/modules/dataDelivery";
import { useValidator } from "@/hooks/useValidator";
const { required } = useValidator();
const router = useRouter();
const route = useRoute();
const { proxy } = getCurrentInstance() as any;
......@@ -40,22 +42,20 @@ const page = ref({
const tableFields = ref([
{ label: "序号", type: "index", width: 56, align: "center" },
{
label: "数据产品名称", field: "dataProductName", width: 150, type: "text_btn", columClass: 'text_btn', value: "detail", click: (scope) => {
//TODO.是在数据使用方使用的
label: "数据产品名称", field: "dataProductName", width: 160, type: "text_btn", columClass: 'text_btn', value: "detail", click: (scope) => {
router.push({
path: '/data-asset/register-catalog/register-catalog-detail',
name: 'usageCatalogDetail',
query: {
guid: scope.row.dataProductGuid,
type: 'detail',
dataSources: 2,
foundMode: 1,
foundMode: 'use',
name: scope.row.dataProductName,
}
});
}
},
{
label: "合约名称", field: "contractName", width: 160, type: "text_btn", columClass: 'text_btn', value: "detail1", click: (scope) => {
label: "合约名称", field: "contractName", width: 170, type: "text_btn", columClass: 'text_btn', value: "detail1", click: (scope) => {
//履约中的合约状态
router.push({
name: 'smartContractDetail',
......@@ -73,7 +73,7 @@ const tableFields = ref([
return scope.row.deliveryMethod == 1 ? '文件' : 'API';
}
},
{ label: "交付方", field: "deliveryPartyName", width: 240 },
{ label: "交付方", field: "deliveryPartyName", width: 220 },
{ label: "交付时间", field: "deliveryTime", width: 170 },
]);
......@@ -92,16 +92,75 @@ const tableInfo = ref({
actionInfo: {
label: "操作",
type: "btn",
width: 160,
width: 230,
btns: (scope) => {
let btns: any = [];
//TODO。根据返回值显示按钮
btns.push({ label: '日志', value: 'log' });
return btns;
let actions = scope.row.actions || {};
let arrBtns: any = [];
for (let action in actions) {
arrBtns.push({ label: actions[action], value: action, click: btnHanldesMap[action] });
}
arrBtns.push({ label: '日志', value: 'log', click: btnHanldesMap['log'] });
return arrBtns;
}
}
});
const btnHanldesMap = {
/** 查看产品详情 */
read: (scope) => {
router.push({
name: 'usageCatalogDetail',
query: {
guid: scope.row.dataProductGuid,
type: 'detail',
foundMode: 'read',
name: scope.row.dataProductName,
}
});
},
download: (scope) => { //下载
router.push({
name: 'usageCatalogDetail',
query: {
guid: scope.row.dataProductGuid,
type: 'detail',
foundMode: 'download',
name: scope.row.dataProductName,
}
});
},
distribute: (scope) => { //分发
currTableData.value = scope.row;
tenantDialogInfo.value.visible = true;
templateFormItems.value[0].options = currTableData.value.deliveryNodes || [];
templateFormItems.value[0].default = '';
},
delete: (scope) => {//删除
proxy.$openMessageBox('确定要删除该数据使用吗?', () => {
deleteDataUse([scope.row.guid]).then((res: any) => {
if (res.code == proxy.$passCode) {
page.value.curr = 1;
getTableData();
proxy.$ElMessage.success("删除成功");
} else {
proxy.$ElMessage.error(res.msg);
}
});
}, () => {
proxy.$ElMessage.info("已取消");
})
},
log: (scope) => { //日志
router.push({
name: 'dataUsageLog',
query: {
contractGuid: scope.row.contractGuid,
contractName: scope.row.contractName
}
});
}
}
const toSearch = (val: any, clear: boolean = false) => {
if (clear) {
searchItemList.value.map((item) => (item.default = ""));
......@@ -149,6 +208,51 @@ onBeforeMount(() => {
toSearch({});
});
const templateFormItems = ref([{
type: 'select',
label: '分发连接器',
field: 'tenantGuids',
default: '',
block: true,
placeholder: '请选择',
options: [],
props: {
value: 'guid',
label: 'tenantName'
},
filterable: true,
multiple: true,
clearable: true,
required: true
}]);
const templateFormRules = ref({
tenantGuids: [required('请选择分发连接器')]
});
const tenantDialogInfo = ref({
visible: false,
size: 480,
title: "选择分发连接器",
type: 'edit',
formInfo: {
id: 'copy-form',
items: templateFormItems.value,
rules: templateFormRules.value
},
submitBtnLoading: false,
btns: {
submit: (btn, info) => {
tenantDialogInfo.value.submitBtnLoading = true;
tenantDialogInfo.value.visible = false;
},
cancel: () => {
tenantDialogInfo.value.visible = false;
}
}
});
</script>
<template>
......@@ -159,6 +263,8 @@ onBeforeMount(() => {
<div class="table_panel_wrap" style="height: calc(100% - 44px);">
<Table :tableInfo="tableInfo" @tablePageChange="tablePageChange" />
</div>
<!-- 选择分发企业的对话框 -->
<Dialog_form :dialogConfigInfo="tenantDialogInfo" />
</div>
</template>
......
<route lang="yaml">
name: dataUsageLog
</route>
<script lang="ts" setup name="dataUsageLog">
import TableTools from "@/components/Tools/table_tools.vue";
import { commonPageConfig, TableColumnWidth } from "@/utils/enum";
import {
getContractProcessLog,
getContractProcessLogDetail
} from "@/api/modules/dataSmartContract";
import useUserStore from "@/store/modules/user";
const { proxy } = getCurrentInstance() as any;
const route = useRoute();
const router = useRouter();
const fullPath = route.fullPath;
const userStore = useUserStore();
const userData = JSON.parse(userStore.userData)
/** 过程记录筛选框 */
const processTableSearchItemList = ref([{
type: 'date-time',
label: '',
field: 'operatorTime',
default: [],
defaultStartTime: new Date(2000, 1, 1, 0, 0, 0),
defaultEndTime: new Date(2000, 1, 1, 23, 59, 59),
startPlaceholder: '执行开始时间',
endPlaceholder: '执行结束时间',
clearable: true
}, {
type: 'select',
label: '',
field: 'executionProcess',
default: '',
placeholder: '执行环节',
props: {
value: 'value',
label: 'label'
},
options: [{
value: '策略解析',
}, {
value: '行为校验',
}, {
value: '操作执行',
}],
filterable: true,
clearable: true
}, {
type: "input",
label: "",
field: "executionEntityName",
default: "",
placeholder: "执行节点名称",
maxlength: 50,
clearable: true,
},]);
const currTableData: any = ref({});
/** ------------------ 过程记录 ----------------------- */
const processPage = ref({
...commonPageConfig,
executionEntityName: '',
operatorTime: [],
executionProcess: ''
});
const processTableInfo = ref({
id: "process-table",
rowKey: 'guid',
fields: [
{ label: "序号", type: "index", width: TableColumnWidth.INDEX, align: "center" },
{ label: "执行编号", field: "operationId", width: 140 },
{ label: "执行时间", field: "operationTime", width: 170 },
{ label: "执行节点名称", field: "executionEntityName", width: 220 },
{ label: "执行节点标识", field: "executionEntityId", width: 175 },
{ label: "执行合约名称", field: "contractName", width: 160 },
{ label: "执行环节", field: "executionProcess", width: 120 },
],
data: [],
showPage: true,
page: {
type: "normal",
rows: 0,
...processPage.value,
},
actionInfo: {
label: "操作",
type: "btn",
width: 80,
btns: [{
value: 'view', label: '查看', click: (scope) => {
currTableData.value = scope.row;
processDetailDialogInfo.value.visible = true;
processDetailDialogInfo.value.contentLoading = true;
getContractProcessLogDetail(scope.row.guid).then((res: any) => {
processDetailDialogInfo.value.contentLoading = false;
if (res?.code == proxy.$passCode) {
processDetailInfo.value = res.data || {};
execContractTableInfo.value.data = processDetailInfo.value.policys || [];
} else {
res?.msg && proxy.$ElMessage.error(res?.msg)
}
})
}
}]
},
loading: false
});
const toProcessTableSearch = (val: any, clear: boolean = false) => {
if (clear) {
processTableSearchItemList.value.map((item) => (item.default = ""));
processPage.value.executionEntityName = '';
processPage.value.executionProcess = '';
processPage.value.operatorTime = [];
} else {
processPage.value.executionEntityName = val.executionEntityName;
processPage.value.executionProcess = val.executionProcess;
processPage.value.operatorTime = val.operatorTime;
}
getProcessTableData();
};
const getProcessTableData = () => {
processTableInfo.value.loading = true
getContractProcessLog({
pageIndex: processPage.value.curr,
pageSize: processPage.value.limit,
executionEntityName: processPage.value.executionEntityName,
executionProcess: processPage.value.executionProcess,
operationTimeStart: processPage.value.operatorTime?.[0],
operationTimeEnd: processPage.value.operatorTime?.[1],
contractGuid: route.query.contractGuid
}).then((res: any) => {
processTableInfo.value.data = [];
if (res?.code == proxy.$passCode) {
const data = res.data || {};
processTableInfo.value.loading = false
processTableInfo.value.data = data.records || []
processTableInfo.value.page.limit = data.pageSize
processTableInfo.value.page.curr = data.pageIndex
processTableInfo.value.page.rows = data.totalRows
} else {
res?.msg && proxy.$ElMessage.error(res?.msg)
processTableInfo.value.loading = false
}
}).catch(() => {
processTableInfo.value.loading = false
})
}
const processTablePageChange = (info) => {
processPage.value.curr = Number(info.curr);
processPage.value.limit = Number(info.limit);
processTableInfo.value.page.curr = processPage.value.curr;
processTableInfo.value.page.limit = processPage.value.limit;
getProcessTableData();
};
onBeforeMount(() => {
toProcessTableSearch({});
})
onActivated(() => {
if (fullPath === route.fullPath) {
document.title = `使用日志-${route.query.contractName}`;
let tab: any = userStore.tabbar.find((tab: any) => tab.fullPath === fullPath);
if (tab) {
tab.meta.title = `使用日志-${route.query.contractName}`;
}
}
})
/** 过程记录详情对话框 */
const processDetailDialogInfo = ref({
visible: false,
size: 855,
direction: "column",
header: {
title: "查看过程记录",
},
type: '',
contents: [],
footer: {
show: false
},
contentLoading: false,
});
/** 查看过程记录详情 */
const processDetailInfo: any = ref({});
const handleProcessDialogBtnClick = (btn) => {
if (btn.value == 'cancel') {
processDetailDialogInfo.value.visible = false;
}
}
const execContractTableInfo = ref({
id: "exec-contract-table",
height: '214px',
fields: <any[]>[
{ label: "序号", type: "index", width: TableColumnWidth.INDEX, align: "center" },
{ label: "策略id", field: "strategyId", width: 260 },
{ label: "操作行为", field: "action", width: 120 },
{ label: "操作行为英文名称", field: "actionEnName", width: 140 },
{ label: "约束条件", field: "constraintName", width: 120 },
{ label: "约束条件英文名称", field: "constraintEnName", width: 140 },
{ label: "约束条件运算符", field: "constraintOperatorName", width: 140 },
{ label: "约束条件值", field: "constraintValue", width: 150 },
{ label: "执行结果", field: "result", width: 130 },
// { label: "上报时间", field: "reportingTime", width: 170 },
],
data: [],
showPage: false,
actionInfo: {
show: false
},
loading: false
});
</script>
<template>
<div class="container_wrap">
<div class="table_tool_wrap">
<TableTools :searchItems="processTableSearchItemList" :init="false" searchId="process-table-search"
@search="toProcessTableSearch" />
</div>
<div class="table_panel_wrap">
<Table :tableInfo="processTableInfo" @tablePageChange="processTablePageChange" />
</div>
<Dialog ref="processDialogRef" :dialogInfo="processDetailDialogInfo" class="log-process-detail"
@btnClick="handleProcessDialogBtnClick">
<template #extra-content>
<div class="main-content" v-loading="processDetailDialogInfo.contentLoading">
<div class="list_panel">
<div class="list_item">
<span class="item_label">执行时间:</span>
<span class="item_value">{{ processDetailInfo?.operationTime || '--' }}</span>
</div>
<div class="list_item">
<span class="item_label">执行结果:</span>
<span class="item_value"><ellipsis-tooltip :content="processDetailInfo?.executionResult || '--'"
class-name="w100f mr8-i" :refName="'tooltipOver' + 'executionResult'"></ellipsis-tooltip></span>
</div>
<div class="list_item">
<span class="item_label">执行环节:</span>
<span class="item_value"><ellipsis-tooltip :content="processDetailInfo?.executionProcess || '--'"
class-name="w100f mr8-i" :refName="'tooltipOver' + 'executionProcess'"></ellipsis-tooltip></span>
</div>
<div class="list_item">
<span class="item_label">合约名称:</span>
<span class="item_value"><ellipsis-tooltip :content="processDetailInfo?.contractName || '--'"
class-name="w100f mr8-i" :refName="'tooltipOver' + 'contractName'"></ellipsis-tooltip></span>
</div>
<div class="list_item">
<span class="item_label">执行节点标识:</span>
<span class="item_value"><ellipsis-tooltip :content="processDetailInfo?.executionEntityId || '--'"
class-name="w100f mr8-i" :refName="'tooltipOver' + 'executionEntityId'"></ellipsis-tooltip></span>
</div>
<div class="list_item">
<span class="item_label">执行节点名称:</span>
<span class="item_value"><ellipsis-tooltip :content="processDetailInfo?.executionEntityName || '--'"
class-name="w100f mr8-i" :refName="'tooltipOver' + 'executionEntityName'"></ellipsis-tooltip></span>
</div>
<div class="h-title">策略信息</div>
<Table :table-info="execContractTableInfo"></Table>
</div>
</div>
</template>
</Dialog>
</div>
</template>
<style lang="scss" scoped>
.table_panel_wrap {
height: calc(100% - 44px);
}
.main-content {
margin: 20px;
}
.list_panel {
display: flex;
flex-wrap: wrap;
display: flex;
align-items: flex-start;
&.main {
.list_item {
width: 25%;
}
}
.list_item {
width: 50%;
line-height: 32px;
font-size: 14px;
color: var(--el-text-color-regular);
display: flex;
justify-content: space-between;
min-width: 120px;
.item_label {
text-align: left;
}
.item_value {
color: var(--el-color-regular);
padding: 0 4px 0 0;
flex: 1;
text-align: justify;
min-width: 0;
.link {
color: var(--el-color-primary);
cursor: pointer;
margin-left: 4px;
}
}
&.is_block {
width: 100%;
.item_value {
white-space: pre-wrap;
}
}
}
}
:deep(.policy-table-detail) {
.dialog_content {
padding: 0px 20px 20px;
}
}
.h-title {
font-size: 14px;
color: #212121;
font-weight: 600;
margin-right: 8px;
margin-bottom: 8px;
}
</style>
\ No newline at end of file
......@@ -41,6 +41,8 @@ const evaGuid = route.query.evaGuid;
const costAssessGuid = route.query.costAssessGuid;
const certificateGuid = route.query.certificateGuid;
const detailType = ref(route.query.type);
const dataSources = ref(route.query.dataSources || 2)
const foundMode = ref(route.query.foundMode);
const { proxy } = getCurrentInstance() as any;
/** 当前主要类型的详情信息。 */
......@@ -175,7 +177,7 @@ const registerDetailTableInfo = ref({
});
} else if (row.type == 'trade') {
router.push({
path: route.query.dataSources == '1' ? '/data-asset/authordata-catalog/register-catalog-transaction-detail' : '/data-asset/register-catalog/register-catalog-transaction-detail',
path: dataSources.value == '1' ? '/data-asset/authordata-catalog/register-catalog-transaction-detail' : '/data-asset/register-catalog/register-catalog-transaction-detail',
//name: 'transactionManagement'
query: {
guid: row.guid,
......@@ -341,7 +343,24 @@ const productTableInfo = ref({
data: [],
showPage: false,
actionInfo: {
show: false
label: "操作",
type: "btn",
isMore: false,
width: 130,
btns: (scope) => {
let arrBtns: any = [];
//若是使用方,则换一个api地址
arrBtns.push({
label: '查看', value: 'view', click: (scope) => {
router.push({
name: (route.query.foundMode == 'read' || route.query.foundMode == 'download') ? 'useApiDetail' : 'apiDetail',
query: { guid: scope.row.guid, apiName: scope.row.apiName }
});
}
})
// 是否显示下载等。
return arrBtns;
}
},
loading: false
});
......@@ -355,10 +374,10 @@ onBeforeMount(() => {
onActivated(() => {
if (detailInfo.value?.damName) {
if (fullPath === route.fullPath) {
document.title = `详情-${detailInfo.value?.damName}`;
document.title = foundMode.value == 'download' ? `下载详情-${detailInfo.value?.damName}` : (foundMode.value == 'read' ? `查看详情-${detailInfo.value?.damName}` : `详情-${detailInfo.value?.damName}`);
let tab: any = userStore.tabbar.find((tab: any) => tab.fullPath === fullPath);
if (tab) {
tab.meta.title = `详情-${detailInfo.value?.damName}`;
tab.meta.title = foundMode.value == 'download' ? `下载详情-${detailInfo.value?.damName}` : (foundMode.value == 'read' ? `查看详情-${detailInfo.value?.damName}` : `详情-${detailInfo.value?.damName}`);
}
}
}
......@@ -417,7 +436,7 @@ const handleTableViewData = (scope) => {
let row = scope.row;
router.push({
// name: 'damTableDataView',
path: route.query.dataSources == '1' ? '/data-asset/authordata-catalog/damTableDataView' : '/data-asset/register-catalog/damTableDataView',
path: dataSources.value == '1' ? '/data-asset/authordata-catalog/damTableDataView' : '/data-asset/register-catalog/damTableDataView',
query: {
guid: row.guid,
name: row.tableChName,
......@@ -426,6 +445,11 @@ const handleTableViewData = (scope) => {
});
}
/** 下载数据 */
const handleTableViewDataDown = (scope) => {
//TODO
}
const toolBtns: any = computed(() => {
let btnsArr: any = [{
label: "关闭", value: "cancel", plain: true
......@@ -453,7 +477,7 @@ const btnClick = (btn) => {
console.log('detailType', detailType.value);
if (detailType.value == 'asset') {
router.push({
path: route.query.dataSources == '1' ? '/data-asset/authordata-catalog' : '/data-asset/register-catalog',
path: dataSources.value == '1' ? '/data-asset/authordata-catalog' : '/data-asset/register-catalog',
//name: 'registerCatalogManagement',
query: {}
});
......@@ -1100,16 +1124,16 @@ const formattedAmount = computed(() => {
const handleClick = () => {
// 跳转到 apiDetail 页面
if (detailInfo.value.foundMode == '2') {
router.push({
path: route.query.dataSources == '1' ? '/data-asset/authordata-catalog/api-detail' : '/data-asset/register-catalog/api-detail',
//name: 'apiDetail',
query: {
guid: detailInfo.value.guid,
type: 'detaile',
}
});
}
// if (detailInfo.value.foundMode == '2') {
// router.push({
// path: route.query.dataSources == '1' ? '/data-asset/authordata-catalog/api-detail' : '/data-asset/register-catalog/api-detail',
// //name: 'apiDetail',
// query: {
// guid: detailInfo.value.guid,
// type: 'detaile',
// }
// });
// }
};
const deliverySpanMethod = ({
......@@ -1229,7 +1253,7 @@ const respParamsTableInfo = ref({
<div class="right-main">
<div class="asset-title">
<div style="display: flex;align-items: center;width: 100%">
<div @click="handleClick" :class="{ 'foundMode': detailInfo.foundMode == '2', 'title1': true }"><ellipsis-tooltip :content="detailInfo.damName ?? '--'"
<div :class="{ 'title1': true }"><ellipsis-tooltip :content="detailInfo.damName ?? '--'"
class-name="w100f" :refName="'tooltipOver' + 'damName'"></ellipsis-tooltip></div>
<div class="dataLabel">{{ detailInfo.damTypeName }}</div>
<div class="dataLabel" v-show="detailInfo.domainName">{{ detailInfo.domainName }}</div>
......@@ -1448,9 +1472,10 @@ const respParamsTableInfo = ref({
<span>{{ scope.row["updateTime"] || '--' }}</span>
</template>
</el-table-column>
<el-table-column label="操作" v-if="!detailInfo?.nodeId" minWidth="120px" align="left" fixed="right" show-overflow-tooltip>
<el-table-column label="操作" v-if="!detailInfo?.nodeId || foundMode == 'download'" minWidth="120px" align="left" fixed="right" show-overflow-tooltip>
<template #default="scope">
<span class="text_btn" @click="handleTableViewData(scope)">查看样例数据</span>
<span class="text_btn" @click="handleTableViewDataDown(scope)">下载数据</span>
</template>
</el-table-column>
</el-table>
......
......@@ -196,10 +196,10 @@ const tableInfo = ref({
btns: (scope) => {
const { row } = scope;
let list: any = [];
list.push({ label: "编辑", disabled: row.apiState == 1, value: "edit", click: apiManageTableBtnMap.EDIT });
list.push({ label: "删除", disabled: row.apiState == 1, value: "del", click: apiManageTableBtnMap.DELETE });
list.push({ label: "编辑", disabled: row.apiState == 1 || !!row.nodeId, value: "edit", click: apiManageTableBtnMap.EDIT });
list.push({ label: "删除", disabled: row.apiState == 1 || !!row.nodeId, value: "del", click: apiManageTableBtnMap.DELETE });
list.push({ label: "详情", value: "detail", click: apiManageTableBtnMap.DETAIL });
list.push({ label: "复制", value: "copy", click: apiManageTableBtnMap.COPY })
list.push({ label: "复制", value: "copy", disabled: !!row.nodeId, click: apiManageTableBtnMap.COPY })
return list;
// const approveVO = row.approveVO || {};
// if (!approveVO && row.isApprove == 'N') {
......
......@@ -64,8 +64,8 @@ const processTableSearchItemList = ref([{
default: [],
defaultStartTime: new Date(2000, 1, 1, 0, 0, 0),
defaultEndTime: new Date(2000, 1, 1, 23, 59, 59),
startPlaceholder: '操作开始时间',
endPlaceholder: '操作结束时间',
startPlaceholder: '执行开始时间',
endPlaceholder: '执行结束时间',
clearable: true
}, {
type: 'select',
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!