Pārlūkot izejas kodu

reactor:知识库调整;

zhangchong 3 mēneši atpakaļ
vecāks
revīzija
0b9da1a90b

+ 95 - 0
src/views/knowledge/audit/components/Audit-history.vue

@@ -0,0 +1,95 @@
+<template>
+	<el-dialog v-model="state.dialogVisible" draggable title="审核历史" append-to-body destroy-on-close @opened="opened">
+		<vxe-toolbar
+			ref="toolbarRef"
+			:loading="loading"
+			custom
+			:refresh="{
+				queryMethod: getList,
+			}"
+		>
+		</vxe-toolbar>
+		<vxe-table
+			border
+			:loading="loading"
+			:data="state.tableData"
+			:column-config="{ resizable: true }"
+			:row-config="{ isCurrent: true, isHover: true, height: 30, useKey: true }"
+			ref="tableRef"
+			height="auto"
+			show-overflow
+			:scrollY="{ enabled: true, gt: 100 }"
+			showHeaderOverflow
+			max-height="400px"
+			id="systemRoleUserList"
+			:custom-config="{ storage: true }"
+		>
+			<vxe-column field="name" title="审核类型"></vxe-column>
+			<vxe-column field="userName" title="审核结果"></vxe-column>
+			<vxe-column field="organization.name" title="审核意见" min-width="200"></vxe-column>
+			<vxe-column field="phoneNo" title="审核人"></vxe-column>
+			<vxe-column field="staffNo" title="审核时间">
+				<template #default="{ row }">
+					{{ formatDate(row.creationTime, 'YYYY-mm-dd HH:MM:SS') }}
+				</template>
+			</vxe-column>
+			<vxe-column field="creationTime" title="提交审核时间" width="160">
+				<template #default="{ row }">
+					{{ formatDate(row.creationTime, 'YYYY-mm-dd HH:MM:SS') }}
+				</template>
+			</vxe-column>
+			<vxe-column field="state" title="状态" width="140"></vxe-column>
+		</vxe-table>
+	</el-dialog>
+</template>
+
+<script lang="tsx" setup name="roleUserList">
+import { reactive, ref } from 'vue';
+import { formatDate } from '@/utils/formatTime';
+import { knowledgeAuditHistory } from '@/api/knowledge/audit';
+
+// 定义接口来定义对象的类型
+interface StateRoles {
+	dialogVisible: boolean;
+	currentRow: any;
+	tableData: Array<any>;
+}
+
+// 定义子组件向父组件传值/事件
+const loading = ref<boolean>(false); // 是否显示加载
+// 定义变量内容
+const state = reactive<StateRoles>({
+	dialogVisible: false, // 弹窗显示隐藏
+	currentRow: {}, // 当前行数据
+	tableData: [], // 表格数据
+});
+// 打开弹窗
+const openDialog = (row: any) => {
+	state.dialogVisible = true;
+	getList(row.id);
+};
+// 关闭弹窗
+const closeDialog = () => {
+	state.dialogVisible = false;
+};
+const getList = (id: string) => {
+	loading.value = true;
+	knowledgeAuditHistory(id)
+		.then((res: any) => {
+			state.tableData = res?.result ?? [];
+			loading.value = false;
+		})
+		.catch(() => {
+			loading.value = false;
+		});
+};
+const tableRef = ref<RefType>();
+const toolbarRef = ref<RefType>();
+const opened = () => {
+	if (tableRef.value && toolbarRef.value) {
+		tableRef.value.connect(toolbarRef.value);
+	}
+};
+//暴漏变量和方法
+defineExpose({ closeDialog, openDialog });
+</script>

+ 11 - 10
src/views/knowledge/audit/components/Knowledge-audit.vue

@@ -2,14 +2,14 @@
 	<el-dialog :title="dialogTitle" v-model="state.dialogVisible" draggable append-to-body destroy-on-close @close="close">
 		<el-form :model="state.ruleForm" ref="ruleFormRef" label-width="80px" v-loading="state.loading">
 			<el-form-item :label="textTip" v-if="[1, 2].includes(planInfo.applyStatus)">{{ applyReason }}</el-form-item>
-			<el-form-item label="审批结果" prop="state" :rules="[{ required: true, message: '请选择审批结果', trigger: 'change' }]">
-				<el-radio-group v-model="state.ruleForm.state">
+			<el-form-item label="审批结果" prop="isSuccess" :rules="[{ required: true, message: '请选择审批结果', trigger: 'change' }]">
+				<el-radio-group v-model="state.ruleForm.isSuccess">
 					<el-radio :value="1">同意</el-radio>
 					<el-radio :value="0">不同意</el-radio>
 				</el-radio-group>
 			</el-form-item>
-			<el-form-item label="审批意见" prop="examinOpinion" :rules="[{ required: true, message: '请填写审批意见', trigger: 'blur' }]">
-				<el-input v-model="state.ruleForm.examinOpinion" type="textarea" :autosize="{ minRows: 6, maxRows: 10 }" placeholder="请填写审批意见">
+			<el-form-item label="审批意见" prop="opinion" :rules="[{ required: true, message: '请填写审批意见', trigger: 'blur' }]">
+				<el-input v-model="state.ruleForm.opinion" type="textarea" :autosize="{ minRows: 6, maxRows: 10 }" placeholder="请填写审批意见">
 				</el-input>
 			</el-form-item>
 		</el-form>
@@ -26,6 +26,7 @@
 import { computed, reactive, ref } from 'vue';
 import { ElMessage, FormInstance } from 'element-plus';
 import { planAudit, planReason } from '@/api/plan';
+import { knowledgeAuditBatch } from '@/api/knowledge/audit';
 
 // 定义子组件向父组件传值/事件
 const emit = defineEmits(['updateList']);
@@ -34,8 +35,8 @@ const emit = defineEmits(['updateList']);
 const state = reactive<any>({
 	dialogVisible: false, // 弹窗
 	ruleForm: {
-		state: 1, // 默认同意
-		examinOpinion: null, //审核意见
+		isSuccess: 1, // 默认同意
+		opinion: null, //审核意见
 	},
 	loading: false, // 加载
 });
@@ -111,10 +112,10 @@ const onSubmit = async (formEl: FormInstance | undefined) => {
 	await formEl.validate((valid: boolean) => {
 		if (!valid) return;
 		state.loading = true;
-		planAudit({
-			id: planInfo.value.id,
-			state: state.ruleForm.state,
-			examinOpinion: state.ruleForm.examinOpinion,
+		knowledgeAuditBatch({
+			approveIds: planInfo.value.id,
+			isSuccess: state.ruleForm.isSuccess,
+			opinion: state.ruleForm.opinion,
 		})
 			.then(() => {
 				emit('updateList');

+ 282 - 6
src/views/knowledge/audit/index.vue

@@ -1,11 +1,287 @@
-<script setup lang="ts">
+<template>
+	<div class="knowledge-audit-container layout-padding">
+		<div class="layout-padding-auto layout-padding-view pd20">
+			<el-tabs v-model="state.queryParams.HasApproved" @tab-change="handleQuery">
+				<el-tab-pane name="false" label="待审批" :disabled="state.loading"></el-tab-pane>
+				<el-tab-pane name="true" label="已审批" :disabled="state.loading"></el-tab-pane>
+			</el-tabs>
+			<div style="overflow: hidden; width: 100%; height: 100%; flex: 1">
+				<vxe-grid v-bind="gridOptions" ref="gridRef"  v-on="gridEvents" @checkbox-all="selectAllChangeEvent" @checkbox-change="selectChangeEvent">
+					<template #form>
+						<el-form :model="state.queryParams" ref="ruleFormRef" inline @submit.native.prevent :disabled="gridOptions.loading">
+							<el-form-item label="姓名" prop="Name">
+								<el-input v-model="state.queryParams.Name" placeholder="请填写姓名" clearable @keyup.enter="handleQuery" class="keyword-input" />
+							</el-form-item>
+							<el-form-item label="联系方式" prop="PhoneNumber">
+								<el-input
+									v-model="state.queryParams.PhoneNumber"
+									placeholder="请填写联系方式"
+									clearable
+									@keyup.enter="handleQuery"
+									class="keyword-input"
+								/>
+							</el-form-item>
+							<el-form-item label="所属区县" prop="SystemAreaName">
+								<el-input
+									v-model="state.queryParams.SystemAreaName"
+									placeholder="请填写所属区县"
+									clearable
+									@keyup.enter="handleQuery"
+									class="keyword-input"
+								/>
+							</el-form-item>
+							<el-form-item>
+								<el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
+								<el-button @click="resetQuery(ruleFormRef)" class="default-button"> <SvgIcon name="ele-Refresh" class="mr5" />重置 </el-button>
+							</el-form-item>
+						</el-form>
+					</template>
+					<template #toolbar_buttons>
+						<el-button type="primary" @click="onAuditBatch" v-auth="'knowledge:audit:batch'" :disabled="isChecked" :loading="state.loading"
+							><SvgIcon name="ele-Edit" class="mr5" />批量审核<span v-if="checkTable.length">({{ checkTable.length }})</span>
+						</el-button>
+					</template>
+					<template #title="{ row }">
+						<el-button link type="primary" @click="onPreview(row)">{{ row.title }}</el-button>
+					</template>
+					<template #action="{ row }">
+						<el-button link type="primary" @click="onAudit(row)" v-auth="'knowledge:audit:audit'"> 审核 </el-button>
+						<el-button link type="primary" @click="onHistory(row)"> 审核历史 </el-button>
+					</template>
+					<template #pager>
+						<pagination
+							@pagination="queryList"
+							:total="state.total"
+							v-model:current-page="state.queryParams.PageIndex"
+							v-model:page-size="state.queryParams.PageSize"
+							:disabled="state.loading"
+						/>
+					</template>
+				</vxe-grid>
+			</div>
+		</div>
+		<!--  审批  -->
+		<knowledge-audit ref="knowledgeAuditRef" @updateList="queryList" />
+		<!--  审批历史  -->
+		<audit-history ref="auditHistoryRef" />
+	</div>
+</template>
 
-</script>
+<script lang="tsx" setup name="knowledgeAudit">
+import { computed, defineAsyncComponent, onMounted, reactive, ref } from 'vue';
+import { ElMessage, ElMessageBox, FormInstance } from 'element-plus';
+import { useRouter } from 'vue-router';
+import { knowledgeAuditList } from '@/api/knowledge/audit';
 
-<template>
+// 引入组件
+const pagination = defineAsyncComponent(() => import('@/components/ProTable/components/Pagination.vue')); // 分页
+const KnowledgeAudit = defineAsyncComponent(() => import('@/views/knowledge/audit/components/Knowledge-audit.vue')); // 审批
+const AuditHistory = defineAsyncComponent(() => import('@/views/knowledge/audit/components/Audit-history.vue')); // 审核历史
 
-</template>
+// 定义变量内容
+const state = reactive<any>({
+	loading: false,
+	queryParams: {
+		// 查询参数
+		PageIndex: 1,
+		PageSize: 20,
+		Name: null, // 姓名
+		PhoneNumber: null, // 联系方式
+		SystemAreaName: null, // 所属区县
+		HasApproved: 'false', // 是否已审批
+	},
+	total: 0, // 总条数
+});
 
-<style scoped lang="scss">
+const gridOptions = reactive<any>({
+	loading: false,
+	border: true,
+	showOverflow: true,
+	columnConfig: {
+		resizable: true,
+	},
+	scrollY: {
+		enabled: true,
+		gt: 100,
+	},
+	toolbarConfig: {
+		zoom: true,
+		custom: true,
+		refresh: {
+			queryMethod: () => {
+				handleQuery();
+			},
+		},
+		slots: {
+			buttons: 'toolbar_buttons',
+		},
+	},
+	customConfig: {
+		storage: true,
+	},
+	id: 'snapshotConfigAreaUser',
+	rowConfig: { isHover: true, height: 30, isCurrent: true, useKey: true },
+	height: 'auto',
+	columns: [
+		{ type: 'checkbox', width: 50, align: 'center' },
+		{
+			field: 'name',
+			title: '审核类型',
+			width: 120,
+		},
+		{
+			field: 'title',
+			title: '标题',
+			slots: { default: 'title' },
+			minWidth: 200,
+		},
+		{
+			field: 'knowledgeTypeText',
+			title: '知识分类',
+			width: 150,
+		},
+		{
+			field: 'attribution',
+			title: '知识归属',
+			width: 140,
+		},
+		{
+			field: 'isPublic',
+			title: '是否公开',
+			width: 100,
+			slots: {
+				default: ({ row }) => {
+					return row.isPublic ? '是' : '否';
+				},
+			},
+		},
+		{
+			field: 'versionDescription',
+			title: '版本说明',
+			minWidth: 200,
+		},
+		{
+			field: 'pageView',
+			title: '阅读次数',
+			width: 100,
+			sortable: true,
+		},
+		{
+			field: 'creatorName',
+			title: '创建人',
+			width: 140,
+		},
+		{
+			field: 'creatorOrgName',
+			title: '创建部门',
+			width: 140,
+		},
+		{
+			field: 'creationTime',
+			title: '创建时间',
+			width: 160,
+			sortable: true,
+			formatter: 'formatDate',
+		},
+		{
+			field: 'lastModificationTime',
+			title: '更新时间',
+			width: 160,
+			sortable: true,
+			formatter: 'formatDate',
+		},
+		{ title: '操作', width: 140, fixed: 'right', align: 'center', slots: { default: 'action' } },
+	],
+	data: [],
+});
+const gridEvents = {
+	sortChange(val: any) {
+		state.queryParams.SortField = val.order ? val.field : null;
+		// 0 升序 1 降序
+		state.queryParams.SortRule = val.order ? (val.order == 'desc' ? 1 : 0) : null;
+		handleQuery();
+	},
+};
+const ruleFormRef = ref<any>(null); // 表单ref
+/** 搜索按钮操作 节流操作 */
+const handleQuery = () => {
+	state.queryParams.PageIndex = 1;
+	queryList();
+};
+// 获取参数列表
+const queryList = () => {
+	state.loading = true;
+	gridOptions.loading = true;
+	knowledgeAuditList(state.queryParams)
+		.then((res) => {
+			state.loading = false;
+			gridOptions.data = res.result.items ?? [];
+			state.total = res.result.total ?? 0;
+			gridOptions.loading = false;
+			gridRef.value.clearCheckboxRow();
+			checkTable.value = [];
+		})
+		.finally(() => {
+			state.loading = false;
+			gridOptions.loading = false;
+			gridRef.value.clearCheckboxRow();
+			checkTable.value = [];
+		});
+};
+// 重置表单
+const resetQuery = (formEl: FormInstance | undefined) => {
+	if (!formEl) return;
+	formEl.resetFields();
+	queryList();
+};
+// 预览
+const router = useRouter();
+const onPreview = (row: any) => {
+	router.push({
+		name: 'knowledgePreview',
+		params: {
+			id: row.id,
+			tagsViewName: row.title,
+		},
+	});
+};
+// 审批
+const knowledgeAuditRef = ref<RefType>();
+const onAudit = (row: any) => {
+	knowledgeAuditRef.value.openDialog(row.id);
+};
+// 批量审核
+const onAuditBatch = () => {
+	const ids = checkTable.value.map((item: any) => item.id);
+	knowledgeAuditRef.value.openDialog(ids, true);
+};
+// 查看历史记录
+const auditHistoryRef = ref<RefType>();
+const onHistory = (row: any) => {
+	auditHistoryRef.value.openDialog(row);
+};
+const checkTable = ref<EmptyArrayType>([]);
+const gridRef = ref<RefType>();
+const selectAllChangeEvent = ({ checked }) => {
+	if (gridRef.value) {
+		const records = gridRef.value.getCheckboxRecords();
+		checkTable.value = records;
+		console.log(checked ? '所有勾选事件' : '所有取消事件', records);
+	}
+};
 
-</style>
+const selectChangeEvent = ({ checked }) => {
+	if (gridRef.value) {
+		const records = gridRef.value.getCheckboxRecords();
+		checkTable.value = records;
+		console.log(checked ? '勾选事件' : '取消事件', records);
+	}
+};
+const isChecked = computed(() => {
+	return !Boolean(checkTable.value.length);
+});
+// 页面加载时
+onMounted(() => {
+	queryList();
+});
+</script>

+ 5 - 5
src/views/knowledge/index/components/Edit-submit-audit.vue

@@ -1,8 +1,8 @@
 <template>
 	<el-dialog :title="dialogTitle" v-model="state.dialogVisible" width="30%" draggable append-to-body destroy-on-close @close="close">
 		<el-form :model="state.ruleForm" ref="ruleFormRef" label-width="80px" v-loading="state.loading">
-			<el-form-item :label="textTip" prop="content" :rules="[{ required: true, message: '请填写' + textTip, trigger: 'blur' }]">
-				<el-input v-model="state.ruleForm.content" type="textarea" :autosize="{ minRows: 6, maxRows: 10 }" :placeholder="'请填写' + textTip">
+			<el-form-item :label="textTip" prop="opinion" :rules="[{ required: true, message: '请填写' + textTip, trigger: 'blur' }]">
+				<el-input v-model="state.ruleForm.opinion" type="textarea" :autosize="{ minRows: 6, maxRows: 10 }" :placeholder="'请填写' + textTip">
 				</el-input>
 			</el-form-item>
 		</el-form>
@@ -27,7 +27,7 @@ const emit = defineEmits(['updateList']);
 const state = reactive<any>({
 	dialogVisible: false, // 弹窗
 	ruleForm: {
-		content: '', // 内容
+		opinion: '', // 内容
 	},
 	loading: false, // 加载
 	planInfo: {}, // 预案详情内容
@@ -72,7 +72,7 @@ const onSubmit = async (formEl: FormInstance | undefined) => {
 			// 更新提交审核
 			knowledgeDraftEditAudit({
 				...state.planInfo,
-				applyReason: state.ruleForm.content,
+				opinion: state.ruleForm.opinion,
 			})
 				.then(() => {
 					emit('updateList');
@@ -87,7 +87,7 @@ const onSubmit = async (formEl: FormInstance | undefined) => {
 			// 删除提交审核
 			knowledgeDraftDeleteAudit({
 				id: state.planInfo.id,
-				applyReason: state.ruleForm.content,
+				opinion: state.ruleForm.opinion,
 			})
 				.then(() => {
 					emit('updateList');

+ 0 - 1
src/views/knowledge/index/components/knowledge-import.vue

@@ -1,6 +1,5 @@
 <template>
 	<el-dialog v-model="state.dialogVisible" width="50%" draggable title="知识导入" destroy-on-close append-to-body @close="close">
-
 		<p class="flex-center-align">步骤一:点击  <el-link type="primary" @click="onDownload">下载模板</el-link>,并按格式填写</p>
 		<p class="flex-center-align mt20">步骤二:上传编辑好的文件</p>
 		<el-upload

+ 27 - 32
src/views/knowledge/index/preview.vue

@@ -45,6 +45,28 @@
 					</el-popover>
 				</div>
 			</div>
+			<el-row>
+				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" v-if="state.info.documentNo">
+					<el-form-item label="文档号">
+						{{ state.info.documentNo }}
+					</el-form-item>
+				</el-col>
+				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" v-if="state.info.versionDescription">
+					<el-form-item label="版本说明">
+						{{ state.info.versionDescription }}
+					</el-form-item>
+				</el-col>
+				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" v-if="state.info.indexNo">
+					<el-form-item label="索引号">
+						{{ state.info.indexNo }}
+					</el-form-item>
+				</el-col>
+				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" v-if="state.info.fileNo">
+					<el-form-item label="文号">
+						{{ state.info.fileNo }}
+					</el-form-item>
+				</el-col>
+			</el-row>
 			<el-divider />
 			<div class="mt5 editor-content-view">
 				<div v-html="state.info.content" class="lineHeight24"></div>
@@ -66,23 +88,7 @@
 					</el-form-item>
 				</div>
 			</template>
-			<el-button
-				type="primary"
-				@click="onAudit"
-				title="审批"
-				v-if="[1, 2].includes(state.info.status) && state.info.isCanHandle"
-				v-auth="'knowledge:index:audit'"
-			>
-				审批
-			</el-button>
 		</el-card>
-		<!-- 知识纠错 -->
-		<error-add ref="errorAddRef" />
-		<!-- 知识提问 -->
-		<question-add ref="questionRef" />
-		<!-- 流程审批 -->
-		<process-audit ref="processAuditRef" @orderProcessSuccess="closePage" />
-
 		<!-- 收藏 -->
 		<el-dialog v-model="state.collectDialogVisible" draggable title="收藏知识" width="30%" @close="collectFormClose" append-to-body destroy-on-close>
 			<el-form :model="state.collectForm" label-width="80px" ref="collectFormRef" @submit.native.prevent>
@@ -115,7 +121,12 @@
 				</span>
 			</template>
 		</el-dialog>
+		<!-- 新增知识收藏分组 -->
 		<collect-group-add ref="collectGroupAddRef" @update="getCollectGroupOptions" />
+		<!-- 知识纠错 -->
+		<error-add ref="errorAddRef" />
+		<!-- 知识提问 -->
+		<question-add ref="questionRef" />
 	</div>
 </template>
 
@@ -134,7 +145,6 @@ import { getCollectList } from '@/api/knowledge/collect';
 const ErrorAdd = defineAsyncComponent(() => import('@/views/knowledge/error/components/Error-add.vue')); // 知识纠错
 const QuestionAdd = defineAsyncComponent(() => import('@/views/knowledge/question/components/Question-add.vue')); // 知识提问
 const AnnexList = defineAsyncComponent(() => import('@/components/AnnexList/index.vue')); // 附件列表
-const ProcessAudit = defineAsyncComponent(() => import('@/components/ProcessAudit/index.vue')); // 流程审批
 const CollectGroupAdd = defineAsyncComponent(() => import('@/views/knowledge/collect/components/Collect-group-add.vue')); // 收藏分组新增
 
 // 定义变量内容
@@ -257,21 +267,6 @@ const getInfo = async () => {
 		loading.value = false;
 	}
 };
-// 审批
-const processAuditRef = ref<RefType>(); //审核记录ref
-const onAudit = () => {
-	const params = {
-		id: state.info.workflowId,
-		processType: '知识审批',
-		orderDetail: state.info,
-		extra: {
-			dialogTitle: '知识审批',
-			inputPlaceholder: '办理意见',
-			annexName: '知识附件',
-		},
-	};
-	processAuditRef.value.openDialog(params);
-};
 // 关闭当前页
 const closePage = () => {
 	// 关闭当前 tagsView

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 3 - 0
src/views/knowledge/index/template.ts


Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels