This commit is contained in:
‘huanghaiixia’
2025-10-23 17:41:19 +08:00
parent 6f2a425ef4
commit 3df6e12184
8 changed files with 198 additions and 95 deletions

View File

@ -142,7 +142,7 @@ export async function disableLngBBank(ids: string[], mode: ErrorMessageMode = 'm
* @description: 获取数据日志 * @description: 获取数据日志
*/ */
export async function getDataLog(id: string, mode: ErrorMessageMode = 'modal', path:string) { export async function getDataLog(id: string, mode: ErrorMessageMode = 'modal', path:string) {
return defHttp.post<boolean>( return defHttp.get<boolean>(
{ {
url: path, url: path,
params: { id }, params: { id },

View File

@ -1,31 +1,44 @@
<template> <template>
<div :style="{ height: '100%', background: '#fff' }"> <div >
<a-modal
:width="1150"
v-model:visible="visible"
title="数据日志"
@ok="handleOk"
@cancel="handleCancel"
>
<a-table :style="{ padding: '0 5px'}" :columns="columns" :data-source="data" :scroll="{y: 400}" :pagination="false" :row-key="record => record.id"/>
</a-modal>
<a-table :columns="columns" :data-source="data" :scroll="{y: 500}" :row-key="record => record.id"
/>
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { getDataLog } from '/@/api/mdm/Bank'; import { getDataLog } from '/@/api/mdm/Bank';
import { defineProps, ref, computed, onMounted, onUnmounted, createVNode, reactive, } from 'vue'; import { watch, defineProps, ref, computed, onMounted, onUnmounted, createVNode, reactive, } from 'vue';
const columns = [ const columns = [
{ {
title: '表名', title: '表名',
dataIndex: 'tableName', dataIndex: 'tableName',
key: 'tableName', key: 'tableName',
width: 80 width: 100,
ellipsis: true,
sorter: true
}, },
{ {
title: '属性名称', title: '属性名称',
dataIndex: 'name', dataIndex: 'name',
key: 'name', key: 'name',
width: 140 width: 100,
ellipsis: true,
sorter: true
}, },
{ {
title: '操作类型', title: '操作类型',
dataIndex: 'operationType', dataIndex: 'operationType',
key: 'operationType', key: 'operationType',
width: 100, width: 80,
sorter: true,
customRender: ({ record }) => { customRender: ({ record }) => {
let text = record.operationType let text = record.operationType
if (record.operationType == 'INSERT') text='新增' if (record.operationType == 'INSERT') text='新增'
@ -38,43 +51,92 @@
title: '原数据', title: '原数据',
dataIndex: 'oldValue', dataIndex: 'oldValue',
key: 'oldValue', key: 'oldValue',
width: 150 width: 150,
ellipsis: true,
sorter: true
}, },
{ {
title: '新数据', title: '新数据',
dataIndex: 'newValue', dataIndex: 'newValue',
key: 'newValue', key: 'newValue',
width: 150 width: 150,
ellipsis: true,
sorter: true
}, },
{ {
title: '操作人', title: '操作人',
dataIndex: 'operatorName', dataIndex: 'operatorName',
key: 'operatorName', key: 'operatorName',
width: 100 width: 100,
sorter: true
}, },
{ {
title: '操作IP', title: '操作IP',
dataIndex: 'operationIp', dataIndex: 'operationIp',
key: 'operationIp', key: 'operationIp',
width: 150 width: 150,
sorter: true
}, },
{ {
title: '操作时间', title: '操作时间',
dataIndex: 'operationTime', dataIndex: 'operationTime',
key: 'operationTime', key: 'operationTime',
width: 150 width: 170,
sorter: true
}, },
]; ];
const props = defineProps({ // 定义props
interface Props {
visible: boolean;
logId?: string;
logPath?: string;
}
const props = withDefaults(defineProps<Props>(), {
logId: { logId: {
type: String, type: String,
required: true required: true
}, },
logPath: { logPath: {
type: String, type: String,
required: true required: true
}, },
}) });
// 定义emit
const emit = defineEmits<{
(e: 'update:visible', value: boolean): void;
(e: 'ok', value: string): void;
(e: 'cancel'): void;
}>();
// 使用ref来管理visible因为需要响应式更新
const visible = ref(props.visible);
// 监听props.visible的变化同步到visible
watch(() => props.visible, (newVal) => {
visible.value = newVal;
console.log(visible.value, 42424)
getLogData()
});
// 监听visible的变化通知父组件更新
watch(visible, (newVal) => {
console.log(visible.value, 42425)
emit('update:visible', newVal);
});
const handleOk = () => {
// 可以在这里处理确定按钮的逻辑,然后关闭弹框
emit('ok', '来自子组件的消息');
visible.value = false;
};
const handleCancel = () => {
emit('cancel');
visible.value = false;
};
console.log(props.logId, 444, props.logPath) console.log(props.logId, 444, props.logPath)
interface DataItem { interface DataItem {
children?: DataItem[]; children?: DataItem[];
@ -83,10 +145,14 @@ console.log(props.logId, 444, props.logPath)
// const data: DataItem[] = []; // const data: DataItem[] = [];
const data = ref<DataItem[]>([]); const data = ref<DataItem[]>([]);
async function getLogData() {
data.value = await getDataLog(props.logId, {},props.logPath)
console.log(data.value, 88)
}
onMounted( async() => { onMounted( async() => {
data.value = await getDataLog(props.logId, {},props.logPath)
console.log(data.value, 88)
}); });
</script> </script>

View File

@ -21,18 +21,19 @@
</template> </template>
</BasicTable> </BasicTable>
<BankModal @register="registerModal" @success="handleSuccess" /> <BankModal @register="registerModal" @success="handleSuccess" />
<!-- <div>
<DataLog :logId="logId" :logPath="logPath" />
</div> --> <DataLog :logId="logId" :logPath="logPath" v-model:visible="modalVisible"/>
</PageWrapper> </PageWrapper>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { ref, computed, onMounted, onUnmounted, createVNode, reactive, import { ref, computed, onMounted, onUnmounted, createVNode, reactive,
} from 'vue'; } from 'vue';
const logId = ref('77773434') const modalVisible = ref(false);
const logPath = ref('/bank/b') const logId = ref('')
const logPath = ref('/mdm/bank/datalog');
import { Modal } from 'ant-design-vue'; import { Modal } from 'ant-design-vue';
import { ExclamationCircleOutlined } from '@ant-design/icons-vue'; import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
import { BasicTable, useTable, TableAction, ActionItem } from '/@/components/Table'; import { BasicTable, useTable, TableAction, ActionItem } from '/@/components/Table';
@ -191,8 +192,10 @@ const logPath = ref('/bank/b')
btnEvent[code](); btnEvent[code]();
} }
function handleDatalog () { function handleDatalog (record: Recordable) {
dataObj.visible = true modalVisible.value = true
logId.value = record.id
console.log('日志', modalVisible.value, record)
} }
function handleAdd() { function handleAdd() {
if (schemaIdComputedRef.value) { if (schemaIdComputedRef.value) {

View File

@ -121,7 +121,7 @@
}, },
schemas: customSearchFormSchema, schemas: customSearchFormSchema,
fieldMapToTime: [], fieldMapToTime: [],
showResetButton: false, showResetButton: true,
}, },
beforeFetch: (params) => { beforeFetch: (params) => {
return { ...params, FormId: formIdComputedRef.value, PK: 'id' }; return { ...params, FormId: formIdComputedRef.value, PK: 'id' };
@ -305,14 +305,14 @@
}); });
} }
function handleRefresh() { function handleRefresh() {
reload(); // reload();
reload({ searchInfo: { pid: selectId.value=='0'?'': selectId.value } });
fetchTree() fetchTree()
} }
function handleSuccess() { function handleSuccess() {
reload(); reload();
fetchTree() fetchTree()
console.log(77777777777)
} }
function handleView(record: Recordable) { function handleView(record: Recordable) {
@ -322,13 +322,26 @@
} }
function handleSelect(selectIds, e) { function handleSelect(selectIds, e) {
selectId.value = selectIds[0]; selectId.value = selectIds[0];
reload({ searchInfo: { pid: selectIds[0] } }); reload({ searchInfo: { pid: selectIds[0]=='0'?'': selectIds[0] } });
curTreeId.value = selectIds[0] curTreeId.value = selectIds[0]=='0'?'': selectIds[0]
console.log(selectId.value, 777, selectIds, e,88, e.selectedNodes[0].parentId) console.log(selectId.value, 777, selectIds, e,88, e.selectedNodes[0].parentId)
} }
async function fetchTree() { async function fetchTree() {
treeData.value = (await getTreeData({})) as unknown as TreeItem[]; treeData.value = (await getTreeData({})) as unknown as TreeItem[];
let arr = [{
children: treeData.value,
code: "",
fullName: "国家和地区",
fullPath: "",
id: "0",
parentId: "",
pid: null,
regionTypeCode: "",
valid: "Y"
}]
treeData.value = arr
} }
onMounted(() => { onMounted(() => {
fetchTree(); fetchTree();

View File

@ -24,24 +24,24 @@ export const searchFormSchema: FormSchema[] = [
getPopupContainer: () => document.body, getPopupContainer: () => document.body,
}, },
}, },
{ // {
field: 'code', // field: 'code',
label: '编码', // label: '编码',
component: 'Input', // component: 'Input',
}, // },
{ // {
field: 'sort', // field: 'sort',
label: '显示顺序', // label: '显示顺序',
component: 'InputNumber', // component: 'InputNumber',
componentProps: { // componentProps: {
style: { width: '100%' }, // style: { width: '100%' },
}, // },
}, // },
{ // {
field: 'note', // field: 'note',
label: '备注', // label: '备注',
component: 'Input', // component: 'Input',
}, // },
]; ];
export const columns: BasicColumn[] = [ export const columns: BasicColumn[] = [
@ -165,7 +165,7 @@ export const formProps: FormProps = {
label: '编码', label: '编码',
type: 'input', type: 'input',
component: 'Input', component: 'Input',
colProps: { span: 24 }, colProps: { span: 8 },
defaultValue: '', defaultValue: '',
componentProps: { componentProps: {
width: '100%', width: '100%',
@ -199,7 +199,7 @@ export const formProps: FormProps = {
label: '名称', label: '名称',
type: 'input', type: 'input',
component: 'Input', component: 'Input',
colProps: { span: 24 }, colProps: { span: 8 },
defaultValue: '', defaultValue: '',
componentProps: { componentProps: {
width: '100%', width: '100%',
@ -233,7 +233,7 @@ export const formProps: FormProps = {
label: '显示顺序', label: '显示顺序',
type: 'number', type: 'number',
component: 'InputNumber', component: 'InputNumber',
colProps: { span: 24 }, colProps: { span: 8 },
defaultValue: null, defaultValue: null,
componentProps: { componentProps: {
labelWidthMode: 'fix', labelWidthMode: 'fix',
@ -263,7 +263,7 @@ export const formProps: FormProps = {
label: '有效标志', label: '有效标志',
type: 'select', type: 'select',
component: 'XjrSelect', component: 'XjrSelect',
colProps: { span: 24 }, colProps: { span: 8 },
componentProps: { componentProps: {
width: '100%', width: '100%',
span: '', span: '',

View File

@ -39,7 +39,7 @@
import { useFormConfig } from '/@/hooks/web/useFormConfig'; import { useFormConfig } from '/@/hooks/web/useFormConfig';
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { setIndexFlowStatus } from '/@/utils/flow/index' import { setIndexFlowStatus } from '/@/utils/flow/index'
import { getLngBFee } from '/@/api/mdm/ExpenseName'; import { getLngBFee, enableLngBFee, disableLngBFee } from '/@/api/mdm/ExpenseName';
import { useModal } from '/@/components/Modal'; import { useModal } from '/@/components/Modal';
import ExpenseNameModal from './components/ExpenseNameModal.vue'; import ExpenseNameModal from './components/ExpenseNameModal.vue';
import {formConfig, searchFormSchema, columns } from './components/config'; import {formConfig, searchFormSchema, columns } from './components/config';
@ -60,6 +60,7 @@
const customSearchFormSchema =ref(searchFormSchema); const customSearchFormSchema =ref(searchFormSchema);
const tableRef = ref(); const tableRef = ref();
const selectedKeys = ref<string[]>([]);
//所有按钮 //所有按钮
const buttons = ref([{"isUse":true,"name":"新增","code":"add","icon":"ant-design:plus-outlined","isDefault":true,"type":"primary"},{"isUse":true,"name":"编辑","code":"edit","icon":"ant-design:form-outlined","isDefault":true},{"isUse":true,"name":"启用","code":"enable","icon":"ant-design:form-outlined","isDefault":true,"type":"primary"},{"isUse":true,"name":"作废","code":"disable","icon":"ant-design:stop-outlined","isDefault":true,"type":"dashed"},{"isUse":true,"name":"刷新","code":"refresh","icon":"ant-design:reload-outlined","isDefault":true},{"isUse":true,"name":"查看","code":"view","icon":"ant-design:eye-outlined","isDefault":true},{"isUse":true,"name":"数据日志","code":"datalog","icon":"ant-design:profile-outlined","isDefault":true},{"isUse":true,"name":"删除","code":"delete","icon":"ant-design:delete-outlined","isDefault":true}]); const buttons = ref([{"isUse":true,"name":"新增","code":"add","icon":"ant-design:plus-outlined","isDefault":true,"type":"primary"},{"isUse":true,"name":"编辑","code":"edit","icon":"ant-design:form-outlined","isDefault":true},{"isUse":true,"name":"启用","code":"enable","icon":"ant-design:form-outlined","isDefault":true,"type":"primary"},{"isUse":true,"name":"作废","code":"disable","icon":"ant-design:stop-outlined","isDefault":true,"type":"dashed"},{"isUse":true,"name":"刷新","code":"refresh","icon":"ant-design:reload-outlined","isDefault":true},{"isUse":true,"name":"查看","code":"view","icon":"ant-design:eye-outlined","isDefault":true},{"isUse":true,"name":"数据日志","code":"datalog","icon":"ant-design:profile-outlined","isDefault":true},{"isUse":true,"name":"删除","code":"delete","icon":"ant-design:delete-outlined","isDefault":true}]);
//展示在列表内的按钮 //展示在列表内的按钮
@ -98,6 +99,7 @@
schemas: customSearchFormSchema, schemas: customSearchFormSchema,
fieldMapToTime: [], fieldMapToTime: [],
showResetButton: false, showResetButton: false,
showResetButton: true,
}, },
beforeFetch: (params) => { beforeFetch: (params) => {
return { ...params, FormId: formIdComputedRef.value, PK: 'id' }; return { ...params, FormId: formIdComputedRef.value, PK: 'id' };
@ -116,13 +118,22 @@
dataIndex: 'action', dataIndex: 'action',
slots: { customRender: 'action' }, slots: { customRender: 'action' },
}, },
rowSelection: {
type: 'checkbox',
onChange: onSelectChange
},
tableSetting: { tableSetting: {
size: false, size: false,
setting: false, setting: false,
}, },
}); });
function onSelectChange(rowKeys: string[]) {
selectedKeys.value = rowKeys;
}
function handleDatalog () {
}
function dbClickRow(record) { function dbClickRow(record) {
if (!actionButtonConfig?.value.some(element => element.code == 'view')) { if (!actionButtonConfig?.value.some(element => element.code == 'view')) {
return; return;

View File

@ -24,32 +24,32 @@ export const searchFormSchema: FormSchema[] = [
getPopupContainer: () => document.body, getPopupContainer: () => document.body,
}, },
}, },
{ // {
field: 'code', // field: 'code',
label: '编码', // label: '编码',
component: 'Input', // component: 'Input',
}, // },
{ // {
field: 'rate', // field: 'rate',
label: '税率%', // label: '税率%',
component: 'InputNumber', // component: 'InputNumber',
componentProps: { // componentProps: {
style: { width: '100%' }, // style: { width: '100%' },
}, // },
}, // },
{ // {
field: 'sort', // field: 'sort',
label: '显示顺序', // label: '显示顺序',
component: 'InputNumber', // component: 'InputNumber',
componentProps: { // componentProps: {
style: { width: '100%' }, // style: { width: '100%' },
}, // },
}, // },
{ // {
field: 'note', // field: 'note',
label: '备注', // label: '备注',
component: 'Input', // component: 'Input',
}, // },
]; ];
export const columns: BasicColumn[] = [ export const columns: BasicColumn[] = [
@ -182,7 +182,7 @@ export const formProps: FormProps = {
label: '编码', label: '编码',
type: 'input', type: 'input',
component: 'Input', component: 'Input',
colProps: { span: 24 }, colProps: { span: 8 },
defaultValue: '', defaultValue: '',
componentProps: { componentProps: {
width: '100%', width: '100%',
@ -216,7 +216,7 @@ export const formProps: FormProps = {
label: '名称', label: '名称',
type: 'input', type: 'input',
component: 'Input', component: 'Input',
colProps: { span: 24 }, colProps: { span: 8 },
defaultValue: '', defaultValue: '',
componentProps: { componentProps: {
width: '100%', width: '100%',
@ -250,7 +250,7 @@ export const formProps: FormProps = {
label: '税率%', label: '税率%',
type: 'number', type: 'number',
component: 'InputNumber', component: 'InputNumber',
colProps: { span: 24 }, colProps: { span: 8 },
defaultValue: null, defaultValue: null,
componentProps: { componentProps: {
labelWidthMode: 'fix', labelWidthMode: 'fix',
@ -280,7 +280,7 @@ export const formProps: FormProps = {
label: '显示顺序', label: '显示顺序',
type: 'number', type: 'number',
component: 'InputNumber', component: 'InputNumber',
colProps: { span: 24 }, colProps: { span: 8 },
defaultValue: null, defaultValue: null,
componentProps: { componentProps: {
labelWidthMode: 'fix', labelWidthMode: 'fix',
@ -310,7 +310,7 @@ export const formProps: FormProps = {
label: '有效标志', label: '有效标志',
type: 'select', type: 'select',
component: 'XjrSelect', component: 'XjrSelect',
colProps: { span: 24 }, colProps: { span: 8 },
componentProps: { componentProps: {
width: '100%', width: '100%',
span: '', span: '',

View File

@ -39,7 +39,7 @@
import { useFormConfig } from '/@/hooks/web/useFormConfig'; import { useFormConfig } from '/@/hooks/web/useFormConfig';
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { setIndexFlowStatus } from '/@/utils/flow/index' import { setIndexFlowStatus } from '/@/utils/flow/index'
import { getLngBTax } from '/@/api/mdm/TaxRate'; import { getLngBTax, disableLngBTax, enableLngBTax } from '/@/api/mdm/TaxRate';
import { useModal } from '/@/components/Modal'; import { useModal } from '/@/components/Modal';
import TaxRateModal from './components/TaxRateModal.vue'; import TaxRateModal from './components/TaxRateModal.vue';
import {formConfig, searchFormSchema, columns } from './components/config'; import {formConfig, searchFormSchema, columns } from './components/config';
@ -60,6 +60,7 @@
const customSearchFormSchema =ref(searchFormSchema); const customSearchFormSchema =ref(searchFormSchema);
const tableRef = ref(); const tableRef = ref();
const selectedKeys = ref<string[]>([]);
//所有按钮 //所有按钮
const buttons = ref([{"isUse":true,"name":"新增","code":"add","icon":"ant-design:plus-outlined","isDefault":true,"type":"primary"},{"isUse":true,"name":"编辑","code":"edit","icon":"ant-design:form-outlined","isDefault":true},{"isUse":true,"name":"启用","code":"enable","icon":"ant-design:form-outlined","isDefault":true,"type":"primary"},{"isUse":true,"name":"作废","code":"disable","icon":"ant-design:stop-outlined","isDefault":true,"type":"dashed"},{"isUse":true,"name":"刷新","code":"refresh","icon":"ant-design:reload-outlined","isDefault":true},{"isUse":true,"name":"查看","code":"view","icon":"ant-design:eye-outlined","isDefault":true},{"isUse":true,"name":"数据日志","code":"datalog","icon":"ant-design:profile-outlined","isDefault":true},{"isUse":true,"name":"删除","code":"delete","icon":"ant-design:delete-outlined","isDefault":true}]); const buttons = ref([{"isUse":true,"name":"新增","code":"add","icon":"ant-design:plus-outlined","isDefault":true,"type":"primary"},{"isUse":true,"name":"编辑","code":"edit","icon":"ant-design:form-outlined","isDefault":true},{"isUse":true,"name":"启用","code":"enable","icon":"ant-design:form-outlined","isDefault":true,"type":"primary"},{"isUse":true,"name":"作废","code":"disable","icon":"ant-design:stop-outlined","isDefault":true,"type":"dashed"},{"isUse":true,"name":"刷新","code":"refresh","icon":"ant-design:reload-outlined","isDefault":true},{"isUse":true,"name":"查看","code":"view","icon":"ant-design:eye-outlined","isDefault":true},{"isUse":true,"name":"数据日志","code":"datalog","icon":"ant-design:profile-outlined","isDefault":true},{"isUse":true,"name":"删除","code":"delete","icon":"ant-design:delete-outlined","isDefault":true}]);
//展示在列表内的按钮 //展示在列表内的按钮
@ -97,7 +98,7 @@
}, },
schemas: customSearchFormSchema, schemas: customSearchFormSchema,
fieldMapToTime: [], fieldMapToTime: [],
showResetButton: false, showResetButton: true,
}, },
beforeFetch: (params) => { beforeFetch: (params) => {
return { ...params, FormId: formIdComputedRef.value, PK: 'id' }; return { ...params, FormId: formIdComputedRef.value, PK: 'id' };
@ -116,13 +117,22 @@
dataIndex: 'action', dataIndex: 'action',
slots: { customRender: 'action' }, slots: { customRender: 'action' },
}, },
rowSelection: {
type: 'checkbox',
onChange: onSelectChange
},
tableSetting: { tableSetting: {
size: false, size: false,
setting: false, setting: false,
}, },
}); });
function onSelectChange(rowKeys: string[]) {
selectedKeys.value = rowKeys;
}
function handleDatalog () {
}
function dbClickRow(record) { function dbClickRow(record) {
if (!actionButtonConfig?.value.some(element => element.code == 'view')) { if (!actionButtonConfig?.value.some(element => element.code == 'view')) {
return; return;