瀏覽代碼

reactor:知识库知识类型管理调整;

zhangchong 10 月之前
父節點
當前提交
4a040ac36c

+ 3 - 3
src/views/knowledge/config/type/component/Knowledge-type-add.vue

@@ -25,12 +25,12 @@
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
-						<el-form-item label="适用部门" prop="orgArray" :rules="[{ required: true, message: '请选择适用部门', trigger: 'change' }]">
+						<el-form-item label="关联组织" prop="orgArray" :rules="[{ required: true, message: '请选择关联组织', trigger: 'change' }]">
 							<el-cascader
 								:options="orgData"
 								filterable
-								:props="{ checkStrictly: true, value: 'id', label: 'name', emitPath: false, multiple: true }"
-								placeholder="请选择适用部门"
+								:props="{  value: 'id', label: 'name', emitPath: false, multiple: true }"
+								placeholder="请选择关联组织"
 								clearable
 								class="w100"
 								v-model="state.ruleForm.orgArray"

+ 3 - 3
src/views/knowledge/config/type/component/Knowledge-type-edit.vue

@@ -25,12 +25,12 @@
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
-						<el-form-item label="适用部门" prop="orgArray" :rules="[{ required: true, message: '请选择适用部门', trigger: 'change' }]">
+						<el-form-item label="关联组织" prop="orgArray" :rules="[{ required: true, message: '请选择关联组织', trigger: 'change' }]">
 							<el-cascader
 								:options="orgData"
 								filterable
-								:props="{ checkStrictly: true, value: 'id', label: 'name', emitPath: false, multiple: true }"
-								placeholder="请选择适用部门"
+								:props="{ value: 'id', label: 'name', emitPath: false, multiple: true }"
+								placeholder="请选择关联组织"
 								clearable
 								class="w100"
 								v-model="state.ruleForm.orgArray"

+ 121 - 0
src/views/knowledge/config/type/component/knowledge-type-connect.vue

@@ -0,0 +1,121 @@
+<template>
+	<div class="knowledge-type-edit-container">
+		<el-dialog title="关联组织" v-model="state.dialogVisible" draggable append-to-body destroy-on-close @close="close" width="500px">
+			<el-form :model="state.ruleForm" ref="ruleFormRef" label-width="80px" v-loading="state.loading">
+				<el-form-item label="关联组织" prop="orgArray" :rules="[{ required: true, message: '请选择关联组织', trigger: 'change' }]">
+					<el-cascader
+						:options="orgData"
+						filterable
+						:props="{ value: 'id', label: 'name', emitPath: false, multiple: true }"
+						placeholder="请选择关联组织"
+						class="w100"
+						v-model="state.ruleForm.orgArray"
+						ref="orgRef"
+						@change="changeOrgData"
+						collapse-tags
+						collapse-tags-tooltip
+						:max-collapse-tags="3"
+					>
+					</el-cascader>
+				</el-form-item>
+			</el-form>
+			<template #footer>
+				<span class="dialog-footer">
+					<el-button @click="closeDialog" class="default-button">取 消</el-button>
+					<el-button type="primary" @click="onSubmit(ruleFormRef)" :loading="state.loading">确 定 </el-button>
+				</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+
+<script setup lang="ts" name="knowledgeTypeEdit">
+import { reactive, ref } from 'vue';
+import { ElMessage, FormInstance } from 'element-plus';
+import { updateType, typeDetail } from '@/api/knowledge/type';
+import { getCanUseOrg } from '@/api/system/user';
+
+// 定义子组件向父组件传值/事件
+const emit = defineEmits(['updateList']);
+
+// 定义变量内容
+const state = reactive<any>({
+	dialogVisible: false, // 弹窗
+	ruleForm: {
+		name: '', // 类型名称
+		sort: 0, // 排序
+		parentId: '', // 上级类型
+		orgArray: [],
+	},
+	loading: false, // 加载
+});
+// 获取机构数据
+const orgData = ref<any[]>([]);
+const getOrgData = async () => {
+	state.loading = true;
+	getCanUseOrg()
+		.then((res: any) => {
+			orgData.value = res?.result ?? [];
+			state.loading = false;
+		})
+		.catch(() => {
+			state.loading = false;
+		});
+};
+// 打开弹窗
+const ruleFormRef = ref<any>(); // 表单ref
+const openDialog = async (row: any) => {
+	try {
+		await getOrgData();
+		const { result } = await typeDetail(row.id);
+		state.ruleForm = result;
+		state.ruleForm.orgArray = result.knowledgeTypeOrgs.map((item: any) => item.orgId);
+		state.dialogVisible = true;
+	} catch (error) {
+		// 打印错误信息
+		console.error(error);
+	}
+};
+const close = () => {
+	ruleFormRef.value?.clearValidate();
+	ruleFormRef.value?.resetFields();
+};
+// 关闭弹窗
+const closeDialog = () => {
+	state.dialogVisible = false;
+};
+// 选择适用部门
+const orgRef = ref<RefType>();
+const changeOrgData = () => {
+	let currentNode = orgRef.value.getCheckedNodes();
+	state.ruleForm.typeOrgDtos = currentNode.map((item: any) => {
+		return {
+			orgId: item.value,
+			orgName: item.label,
+		};
+	});
+};
+// 保存
+const onSubmit = async (formEl: FormInstance | undefined) => {
+	if (!formEl) return;
+	await formEl.validate((valid: boolean) => {
+		if (!valid) return;
+		state.loading = true;
+		updateType(state.ruleForm)
+			.then(() => {
+				closeDialog(); // 关闭弹窗
+				ElMessage.success('操作成功');
+				state.loading = false;
+				emit('updateList');
+			})
+			.catch(() => {
+				state.loading = false;
+			});
+	});
+};
+// 暴露变量
+defineExpose({
+	openDialog,
+	closeDialog,
+});
+</script>

+ 15 - 1
src/views/knowledge/config/type/index.vue

@@ -51,6 +51,7 @@
 		</div>
 		<knowledge-type-add ref="knowledgeTypeAddRef" @updateList="queryList" />
 		<knowledge-type-edit ref="knowledgeTypeEditRef" @updateList="queryList" />
+    <knowledge-type-connect ref="knowledgeTypeConnectRef" @updateList="queryList" />
 	</div>
 </template>
 <script lang="tsx" setup name="knowledgeType">
@@ -66,6 +67,7 @@ import { getCanUseOrg } from "@/api/system/user";
 // 引入组件
 const KnowledgeTypeAdd = defineAsyncComponent(() => import('@/views/knowledge/config/type/component/Knowledge-type-add.vue')); // 新增组件
 const KnowledgeTypeEdit = defineAsyncComponent(() => import('@/views/knowledge/config/type/component/Knowledge-type-edit.vue')); // 修改组件
+const KnowledgeTypeConnect = defineAsyncComponent(() => import('@/views/knowledge/config/type/component/knowledge-type-connect.vue')); // 连接组件
 const TextTooltip = defineAsyncComponent(() => import('@/components/TextTooltip/index.vue'));
 
 // 定义变量内容
@@ -126,12 +128,19 @@ const state = reactive<any>({
 		{
 			key: 'handle',
 			title: '操作',
-			width: 120,
+			width: 170,
 			fixed: 'right',
 			align: 'center',
 			cellRenderer: (data: any) => {
 				return (
 					<span>
+            {auth('knowledge:type:connect') ? (
+              <ElButton onClick={() => onConnect(data.rowData)} type="primary" title="关联组织" link>
+                关联组织
+              </ElButton>
+            ) : (
+              ''
+            )}
 						{auth('knowledge:type:edit') ? (
 							<ElButton onClick={() => onOpenEdit(data.rowData)} type="primary" title="修改菜单" link>
 								修改
@@ -251,6 +260,11 @@ const onDelete = (row: any) => {
 		})
 		.catch(() => {});
 };
+// 关联组织
+const knowledgeTypeConnectRef = ref<RefType>();
+const onConnect = (row: any) => {
+	knowledgeTypeConnectRef.value.openDialog(row);
+};
 // 获取知识库类型
 const queryList = () => {
 	state.loading = true;

+ 1 - 1
src/views/knowledge/index/edit.vue

@@ -40,7 +40,7 @@
 									<el-cascader
 										:options="state.typeData"
 										filterable
-										:props="{ checkStrictly: true, value: 'id', label: 'name', emitPath: false, children: 'children', multiple: true }"
+										:props="{ value: 'id', label: 'name', emitPath: false, children: 'children', multiple: true }"
 										placeholder="请选择知识分类"
 										clearable
 										class="w100"