This commit is contained in:
qsh
2024-05-16 16:33:20 +08:00
parent 2468a0c8a5
commit 1ec084debe
17 changed files with 542 additions and 88 deletions

View File

@@ -1,5 +1,5 @@
<template>
<el-dialog :title="dialogTitle" v-model="dialogVisible" width="800px" style="height: 90vh">
<el-dialog :title="dialogTitle" v-model="dialogVisible" width="800px">
<el-tabs v-model="tabName">
<el-tab-pane label="线索信息" name="info">
<Form

View File

@@ -1,5 +1,5 @@
<template>
<el-dialog title="成交登记" v-model="show" width="800px" style="height: 90vh">
<el-dialog title="成交登记" v-model="show" width="800px">
<Descriptions :data="info" :schema="schema" :columns="2" />
<el-form :model="form" ref="formRef" :rules="rules" label-width="80px" class="mt-20px">
<el-row :gutter="20">

View File

@@ -32,7 +32,8 @@ const crudSchemas = reactive([
label: '线索位置',
field: 'address',
isSearch: true,
isTable: true
isTable: true,
isForm: false
},
{
label: '线索来源',
@@ -147,17 +148,6 @@ const crudSchemas = reactive([
isTable: true,
isForm: false
},
{
label: '备注',
field: 'remark',
isTable: true,
form: {
component: 'Editor',
colProps: {
span: 24
}
}
},
{
label: '创建时间',
field: 'createTime',
@@ -194,6 +184,17 @@ const crudSchemas = reactive([
label: '跟进记录',
field: 'followRecord',
isTable: true
},
{
label: '备注',
field: 'remark',
isTable: true,
form: {
component: 'Editor',
colProps: {
span: 24
}
}
}
])
export const { allSchemas } = useCrudSchemas(crudSchemas)

View File

@@ -0,0 +1,105 @@
<template>
<div>
<el-form ref="queryForm" :model="searchForm" label-width="0" inline>
<el-form-item>
<el-input
v-model="searchForm.name"
placeholder="请输入名称"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery">搜索</el-button>
<el-button @click="resetQuery">重置</el-button>
<el-button type="primary" @click="openForm('create', null)">新增</el-button>
</el-form-item>
</el-form>
<el-table
v-loading="loading"
:data="tableList"
row-key="sourceId"
:tree-props="{ children: 'children' }"
>
<el-table-column prop="sourceName" label="来源名称" />
<el-table-column prop="orderNum" label="排序" width="100px" />
<el-table-column prop="remark" label="备注" />
<el-table-column label="创建时间" prop="createTime" width="180px" />
<el-table-column label="创建人" prop="createUser" width="150px" />
<el-table-column label="操作">
<template #default="scope">
<el-button type="primary" text @click="openForm('update', scope.row)">修改</el-button>
<el-button type="primary" text @click="openForm('createChildren', scope.row)"
>新增</el-button
>
<el-button type="danger" text @click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<Pagination
v-model:limit="searchForm.pageSize"
v-model:page="searchForm.pageNum"
:total="total"
@pagination="handleQuery"
/>
<DialogSource ref="sourceDialog" @success="handleQuery" />
</div>
</template>
<script setup name="ClueSource">
import DialogSource from './DialogSource.vue'
const searchForm = ref({
pageNum: 1,
pageSize: 20
})
const total = ref(0)
const sourceDialog = ref()
const tableList = ref([])
const loading = ref(false)
function handleQuery() {
searchForm.value.pageNum = 1
getList()
}
function resetQuery() {
searchForm.value = {
question: '',
pageSize: 20,
pageNum: 1
}
getList()
}
function getList() {
tableList.value = [
{
sourceId: 1,
sourceName: '测试',
level: 1,
children: [{ sourceId: 1001, sourceName: '二级来源', level: 2, parentSource: '测试' }]
}
]
}
function openForm(type, info) {
sourceDialog.value.open(type, info)
}
async function handleDelete(row) {
try {
console.log(row)
// 删除的二次确认
await message.delConfirm()
// 发起删除
// await UserApi.deleteUser(row.id)
message.success(t('common.delSuccess'))
// 刷新列表
await getList()
} catch {}
}
</script>
<style lang="scss" scoped></style>

View File

@@ -0,0 +1,111 @@
<template>
<el-dialog :title="dialogTitle" v-model="dialogVisible" width="800px">
<el-form
ref="formRef"
v-loading="formLoading"
:model="formData"
:rules="formRules"
label-width="80px"
>
<el-form-item v-if="formData.level > 1" label="上级来源">
<el-input v-model="formData.parentSource" disabled />
</el-form-item>
<el-form-item label="来源名称" prop="sourceName">
<el-input v-model="formData.sourceName" placeholder="请输入来源名称" />
</el-form-item>
<el-form-item label="排序" prop="orderNum">
<el-input v-model="formData.orderNum" placeholder="请输入排序" type="number" :min="0" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input
type="textarea"
v-model="formData.remark"
placeholder="请输入备注"
:autosize="{ minRows: 4, maxRows: 8 }"
/>
</el-form-item>
</el-form>
<template #footer>
<el-button :disabled="formLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</el-dialog>
</template>
<script name="DialogSource" setup>
const { t } = useI18n() // 国际化
const message = useMessage() // 消息弹窗
const dialogVisible = ref(false) // 弹窗的是否展示
const dialogTitle = ref('') // 弹窗的标题
const formLoading = ref(false) // 表单的加载中1修改时的数据加载2提交的按钮禁用
const formType = ref('') // 表单的类型create - 新增update - 修改
const formData = ref({
sourceName: '',
orderNum: 1,
remark: ''
})
const formRules = reactive({
sourceName: [{ required: true, message: '名称不能为空', trigger: 'blur' }]
})
const formRef = ref() // 表单 Ref
/** 打开弹窗 */
const open = async (type, info) => {
dialogVisible.value = true
dialogTitle.value = type == 'update' ? '修改来源' : '新增来源'
formType.value = type
resetForm()
// 修改时,设置数据
if (info.sourceId) {
formLoading.value = true
try {
if (type == 'update') {
formData.value = { ...info }
} else {
formData.value.level = info.level + 1
formData.value.parentSource = info.sourceName
}
// formData.value = await UserApi.getUser(id)
} finally {
formLoading.value = false
}
}
}
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
/** 提交表单 */
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
const submitForm = async () => {
// 校验表单
if (!formRef.value) return
const valid = await formRef.value.validate()
if (!valid) return
// 提交请求
formLoading.value = true
try {
// const data = formData.value as unknown as UserApi.UserVO
if (formType.value === 'create') {
// await UserApi.createUser(data)
message.success(t('common.createSuccess'))
} else {
// await UserApi.updateUser(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
// 发送操作成功的事件
emit('success')
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
sourceName: '',
orderNum: 1,
remark: ''
}
formRef.value?.resetFields()
}
</script>

View File

@@ -4,16 +4,19 @@
<el-tab-pane label="线索属性" :name="0">
<FieldClue />
</el-tab-pane>
<el-tab-pane label="成交属性" :name="1">
<el-tab-pane label="成交属性" :name="10">
<FieldOrder />
</el-tab-pane>
<el-tab-pane label="线索获取规则" :name="2">
<el-tab-pane label="线索来源" :name="15">
<ClueSource />
</el-tab-pane>
<el-tab-pane label="线索获取规则" :name="20">
<ClueGet />
</el-tab-pane>
<el-tab-pane label="线索分配规则" :name="3">
<el-tab-pane label="线索分配规则" :name="30">
<ClueSend />
</el-tab-pane>
<el-tab-pane label="消息通知" :name="4">
<el-tab-pane label="消息通知" :name="40">
<MsgSend />
</el-tab-pane>
</el-tabs>
@@ -23,6 +26,7 @@
<script setup name="ClueSetting">
import FieldClue from './Comp/FieldClue.vue'
import FieldOrder from './Comp/FieldOrder.vue'
import ClueSource from './Comp/ClueSource.vue'
import ClueGet from './Comp/ClueGet.vue'
import ClueSend from './Comp/ClueSend.vue'
import MsgSend from './Comp/MsgSend.vue'

View File

@@ -1,5 +1,5 @@
<template>
<el-dialog :title="dialogTitle" v-model="dialogVisible" width="800px" style="height: 90vh">
<el-dialog :title="dialogTitle" v-model="dialogVisible" width="800px">
<el-form
ref="formRef"
v-loading="formLoading"