实现话术功能

This commit is contained in:
WUSIJIAN
2025-11-27 15:37:13 +08:00
parent 4d6f49598e
commit 0ad816cc6d
11 changed files with 973 additions and 610 deletions

View File

@@ -1,17 +1,17 @@
<template>
<div class="system-edit-role-container">
<el-dialog title="" v-model="isShowDialog" width="769px">
<el-form ref="formRef" :model="formData" :rules="rules" size="default" label-width="90px">
<el-form ref="formRef" :model="state.formData" :rules="rules" size="default" label-width="90px">
<el-row :gutter="35">
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="标签" prop="name">
<el-input v-model="formData.name" placeholder="请输入标签名称" clearable />
<el-input v-model="formData.tag" :placeholder="formData.tag" clearable />
</el-form-item>
</el-col>
<!-- 富文本编辑器 -->
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item label="产品详情" prop="content">
<Editor v-model="formData.content" height="400px" placeholder="请输入产品详细描述..." />
<Editor v-model="formData.content" height="400px" :placeholder="formData.content" />
</el-form-item>
</el-col>
</el-row>
@@ -31,8 +31,10 @@
<script lang="ts" setup>
import { ref, reactive, toRefs, nextTick } from 'vue';
import { ElMessage, type FormInstance, type FormRules } from 'element-plus';
import { addRole, editRole, getRole } from '/@/api/customerService/script';
import Editor from '/@/components/editor/index.vue';
import { getscriptAdd, updatescript } from '/@/api/customerService/script';
import { Session } from '/@/utils/storage';
// console.log(Session.get('userInfo').userNickname, 'user');
// 定义类型接口
interface MenuDataTree {
@@ -44,17 +46,14 @@ interface MenuDataTree {
interface DialogRow {
id: number;
name: string;
status: number;
listOrder: number;
remark: string;
menuIds: number[];
content?: string;
tag: string;
creator: string;
content: string;
}
// 定义事件
const emit = defineEmits<{
(e: 'getRoleList'): void;
(e: 'success'): void;
}>();
// 响应式数据
@@ -63,13 +62,10 @@ const state = reactive({
isShowDialog: false,
formData: {
id: 0,
name: '',
status: 1,
listOrder: 0,
remark: '',
menuIds: [],
tag: '',
content: '',
} as DialogRow,
creator: '',
},
menuData: [] as MenuDataTree[],
menuExpand: false,
menuNodeAll: false,
@@ -78,7 +74,7 @@ const state = reactive({
// 表单验证规则
const rules: FormRules = {
name: [{ required: true, message: '标签名称不能为空', trigger: 'blur' }],
tag: [{ required: true, message: '标签名称不能为空', trigger: 'blur' }],
content: [{ required: true, message: '产品详情不能为空', trigger: 'blur' }],
};
@@ -101,23 +97,9 @@ const menuProps = {
*/
const openDialog = (row?: DialogRow) => {
resetForm();
console.log(row, 'row');
if (row) {
// 编辑模式:获取角色详情
getRole(row.id)
.then((res: any) => {
if (res.data?.role) {
state.formData = {
...res.data.role,
content: res.data.role.content || '',
menuIds: res.data.menuIds ?? [],
};
}
})
.catch((error) => {
console.error('获取角色详情失败:', error);
ElMessage.error('获取角色详情失败');
});
state.formData = row;
}
state.isShowDialog = true;
@@ -151,18 +133,22 @@ const onSubmit = async () => {
state.loading = true;
if (state.formData.id === 0) {
state.formData.creator = Session.get('userInfo').userNickname;
// 新增模式
await addRole(state.formData);
await getscriptAdd(state.formData);
console.log(state.formData);
ElMessage.success('添加成功');
} else {
state.formData.modifier = Session.get('userInfo').userNickname;
// 编辑模式
await editRole(state.formData);
await updatescript(state.formData);
ElMessage.success('修改成功');
}
// 关闭对话框并刷新列表
closeDialog();
emit('getRoleList');
emit('success');
} catch (error) {
console.error('提交失败:', error);
ElMessage.error('操作失败');
@@ -180,12 +166,9 @@ const resetForm = () => {
state.menuNodeAll = false;
state.formData = {
id: 0,
name: '',
status: 1,
listOrder: 0,
remark: '',
menuIds: [],
tag: '',
content: '',
creator: '',
};
// 重置表单验证状态