补充
This commit is contained in:
parent
a19d14ac75
commit
2c8e56c996
@ -2,16 +2,20 @@ package com.ruoyi.mongodb.conreoller;
|
||||
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.mongodb.domain.DynamicData;
|
||||
import com.ruoyi.mongodb.domain.DynamicForm;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.mongodb.core.MongoTemplate;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.data.mongodb.core.query.Query;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 智能表单模块
|
||||
*/
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/intelligentForm")
|
||||
public class DynamicDataController {
|
||||
@Autowired
|
||||
private MongoTemplate mongoTemplate;
|
||||
@ -20,16 +24,49 @@ public class DynamicDataController {
|
||||
@PostMapping("/saveDynamicData")
|
||||
public AjaxResult saveDynamicData(@RequestBody Map<String, Object> requestData) {
|
||||
DynamicData dynamicData = new DynamicData();
|
||||
// System.out.println(requestData.toString());
|
||||
String title = (String)requestData.get("title");
|
||||
dynamicData.setTitle(title);
|
||||
requestData.remove("title");
|
||||
ArrayList<String> inputarr = (ArrayList)requestData.get("inputarr");
|
||||
// System.out.println(inputarr.toString());
|
||||
for (String s : inputarr) {
|
||||
requestData.put(s,null);
|
||||
}
|
||||
requestData.remove("inputarr");
|
||||
// System.out.println(requestData.toString());
|
||||
dynamicData.setData(requestData);
|
||||
mongoTemplate.save(dynamicData);
|
||||
return AjaxResult.success("保存成功");
|
||||
}
|
||||
|
||||
//查询全部数据
|
||||
@GetMapping("/selectDynamicData")
|
||||
public AjaxResult selectDynamicData() {
|
||||
List<DynamicData> dynamicData = mongoTemplate.find(new Query(), DynamicData.class);
|
||||
for (DynamicData dynamicDatum : dynamicData) {
|
||||
Map<String, Object> data = dynamicDatum.getData();
|
||||
data.forEach((k,v) -> {
|
||||
data.put(k,k);
|
||||
});
|
||||
}
|
||||
return AjaxResult.success(dynamicData);
|
||||
}
|
||||
//根据id查询数据
|
||||
@GetMapping("/selectDynamicDataById")
|
||||
public AjaxResult selectDynamicDataById(String id){
|
||||
DynamicData dynamicData = mongoTemplate.findById(id, DynamicData.class);
|
||||
Map<String, Object> data = dynamicData.getData();
|
||||
data.forEach((k,v) -> {
|
||||
data.put(k,k);
|
||||
});
|
||||
return AjaxResult.success(dynamicData);
|
||||
}
|
||||
|
||||
//查询数据
|
||||
@GetMapping("/selectDynamicData")
|
||||
public AjaxResult selectDynamicData(String id) {
|
||||
DynamicData data = mongoTemplate.findById(id, DynamicData.class);
|
||||
return AjaxResult.success(data);
|
||||
//采集数据
|
||||
public AjaxResult collectData(DynamicForm dynamicForm){
|
||||
mongoTemplate.save(dynamicForm);
|
||||
return AjaxResult.success("保存成功");
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -9,16 +9,26 @@ import java.util.Map;
|
||||
public class DynamicData {
|
||||
@Id
|
||||
private String id;
|
||||
private String title;
|
||||
private Map<String, Object> data;
|
||||
|
||||
public DynamicData() {
|
||||
}
|
||||
|
||||
public DynamicData(String id, Map<String, Object> data) {
|
||||
public DynamicData(String id, String title, Map<String, Object> data) {
|
||||
this.id = id;
|
||||
this.title = title;
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
public void setTitle(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
@ -39,6 +49,7 @@ public class DynamicData {
|
||||
public String toString() {
|
||||
return "DynamicData{" +
|
||||
"id='" + id + '\'' +
|
||||
", title='" + title + '\'' +
|
||||
", data=" + data +
|
||||
'}';
|
||||
}
|
||||
|
@ -0,0 +1,56 @@
|
||||
package com.ruoyi.mongodb.domain;
|
||||
|
||||
import org.springframework.data.annotation.Id;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class DynamicForm {
|
||||
@Id
|
||||
private String id;
|
||||
//关联后台智能表单id
|
||||
private String dynamicDataId;
|
||||
//采集数据
|
||||
private Map<String,Object> map;
|
||||
|
||||
public DynamicForm() {
|
||||
}
|
||||
|
||||
public DynamicForm(String id, String dynamicDataId, Map<String, Object> map) {
|
||||
this.id = id;
|
||||
this.dynamicDataId = dynamicDataId;
|
||||
this.map = map;
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getDynamicDataId() {
|
||||
return dynamicDataId;
|
||||
}
|
||||
|
||||
public void setDynamicDataId(String dynamicDataId) {
|
||||
this.dynamicDataId = dynamicDataId;
|
||||
}
|
||||
|
||||
public Map<String, Object> getMap() {
|
||||
return map;
|
||||
}
|
||||
|
||||
public void setMap(Map<String, Object> map) {
|
||||
this.map = map;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "DynamicForm{" +
|
||||
"id='" + id + '\'' +
|
||||
", dynamicDataId='" + dynamicDataId + '\'' +
|
||||
", map=" + map +
|
||||
'}';
|
||||
}
|
||||
}
|
@ -41,7 +41,7 @@
|
||||
"core-js": "3.19.1",
|
||||
"date-fns": "^3.3.1",
|
||||
"echarts": "^4.9.0",
|
||||
"element-ui": "2.15.6",
|
||||
"element-ui": "^2.15.6",
|
||||
"file-saver": "2.0.5",
|
||||
"fuse.js": "6.4.3",
|
||||
"highlight.js": "9.18.5",
|
||||
@ -53,6 +53,7 @@
|
||||
"screenfull": "5.0.2",
|
||||
"sortablejs": "1.10.2",
|
||||
"vue": "2.6.12",
|
||||
"vue-clipboard2": "^0.3.3",
|
||||
"vue-count-to": "1.0.13",
|
||||
"vue-cropper": "0.5.5",
|
||||
"vue-meta": "2.4.0",
|
||||
|
20
ruoyi-ui/src/api/crm/intelligent.js
Normal file
20
ruoyi-ui/src/api/crm/intelligent.js
Normal file
@ -0,0 +1,20 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
|
||||
// 查询表单列表
|
||||
export function selectDynamicData(query) {
|
||||
return request({
|
||||
url: '/intelligentForm/selectDynamicData',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
//添加智能表单
|
||||
export function saveDynamicData(data) {
|
||||
return request({
|
||||
url: '/intelligentForm/saveDynamicData',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
@ -95,7 +95,7 @@
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="负责人" prop="personInCharge">
|
||||
<el-form-item label="跟进人" prop="personInCharge">
|
||||
<el-input
|
||||
v-model="queryParams.personInCharge"
|
||||
placeholder="请输入负责人"
|
||||
@ -260,7 +260,6 @@
|
||||
<!-- <dict-tag :options="dict.type.stage_type" :value="scope.row.stageType"/>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<!-- <el-table-column label="负责人" align="center" prop="personInCharge" />-->
|
||||
<!-- <el-table-column label="归属部门" align="center" prop="belongingDepartment" />-->
|
||||
<!-- <el-table-column label="商机明细" align="center" prop="businessDetail" />-->
|
||||
<el-table-column label="商机金额" align="center" prop="forecastBusinessPrice" />
|
||||
@ -269,6 +268,7 @@
|
||||
<span>{{ parseTime(scope.row.forecastSuccessTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="跟进人" align="center" prop="personInCharge" />
|
||||
<!-- <el-table-column label="协作人" align="center" prop="collaborator" />-->
|
||||
<el-table-column label="最后跟进时间" align="center" prop="lastFollowUpTime" width="180">
|
||||
<template slot-scope="scope">
|
||||
@ -383,9 +383,9 @@
|
||||
<!-- >{{dict.label}}</el-radio>-->
|
||||
<!-- </el-radio-group>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="负责人" prop="personInCharge">-->
|
||||
<!-- <el-input v-model="form.personInCharge" placeholder="请输入负责人" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item label="跟进人" prop="personInCharge">
|
||||
<el-input v-model="form.personInCharge" placeholder="请输入负责人" />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="归属部门" prop="belongingDepartment">-->
|
||||
<!-- <el-input v-model="form.belongingDepartment" placeholder="请输入归属部门" />-->
|
||||
<!-- </el-form-item>-->
|
||||
|
@ -13,6 +13,9 @@
|
||||
<el-form-item label="联系电话" prop="phone">
|
||||
<el-input v-model="queryParams.phone" placeholder="请输入联系电话" clearable size="small" @keyup.enter.native="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="负责人" prop="owner">
|
||||
<el-input v-model="queryParams.owner" placeholder="请输入联系电话" clearable size="small" @keyup.enter.native="handleQuery" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
@ -55,6 +58,7 @@
|
||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="负责人" align="center" prop="owner" :show-overflow-tooltip="true" />
|
||||
<el-table-column fixed="right" label="操作" align="left" class="small-padding" width="250px">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" type="text" icon="el-icon-s-promotion" @click="handleTransfer(scope.row)" v-hasPermi="['crm:clues:transfer']">转移</el-button>
|
||||
|
@ -206,6 +206,8 @@ export default {
|
||||
title: '',
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
//新增商机参数
|
||||
businessForm: {},
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
|
191
ruoyi-ui/src/views/crm/intelligent/index.vue
Normal file
191
ruoyi-ui/src/views/crm/intelligent/index.vue
Normal file
@ -0,0 +1,191 @@
|
||||
<template>
|
||||
<div class="app-container" style="display: flex;flex-wrap: wrap;justify-content: space-between">
|
||||
|
||||
<!-- <el-col :span="8" v-for="(o, index) in 1" :key="o" :offset="index > 0 ? 2 : 0">-->
|
||||
|
||||
<el-card class="box-card">
|
||||
<div class="container">
|
||||
<el-button type="primary" plain @click="handleAdd" style="border: none;">
|
||||
+ 新建表单
|
||||
</el-button>
|
||||
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card class="box-card" v-for="o in cardList" :key="o" >
|
||||
<div slot="header" class="clearfix">
|
||||
<span>{{o.title}}</span>
|
||||
<el-button style="float: right; padding: 3px 0" type="text" @click="handelExtend(o.id)">推广</el-button>
|
||||
</div>
|
||||
<div v-for="i in o.data">
|
||||
{{i}}
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<!-- </el-col>-->
|
||||
|
||||
<!-- 添加表单对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
|
||||
<div style="text-align: center">
|
||||
<!-- <el-form-item label="表单标题">-->
|
||||
<el-input v-model="addParams.title" placeholder="请输入表单标题" />
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="字段名称">-->
|
||||
<el-input v-for="(item,index) in inputarr" key="index" v-model="inputarr[index]" placeholder="请输入字段"></el-input>
|
||||
<el-button @click="adinput" style="text-align: center">添加字段</el-button>
|
||||
<!-- </el-form-item>-->
|
||||
</div>
|
||||
<br>
|
||||
<div class="el-input-foot">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 推广链接对话框-->
|
||||
<el-dialog :title="extendTitle" :visible.sync="extendOpen" width="500px" append-to-body>
|
||||
<el-input v-model="extendLink" placeholder="请输入内容" :disabled="true"></el-input>
|
||||
<el-button @click="copyAddress">复制</el-button>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { selectDynamicData, saveDynamicData } from "@/api/crm/intelligent";
|
||||
import VueClipboard from 'vue-clipboard2';
|
||||
|
||||
export default {
|
||||
name: "Business",
|
||||
dicts: ['stage_type', 'sales_stage'],
|
||||
data() {
|
||||
return {
|
||||
inputarr:[''],
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 商机表格数据
|
||||
businessList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
//推广弹出框标题
|
||||
extendTitle: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 是否显示推广弹出层
|
||||
extendOpen: false,
|
||||
//推广链接数据
|
||||
extendLink: 'sbdijasbdhjasgbd',
|
||||
//下拉框客户列表
|
||||
customerList: [],
|
||||
//卡片列表
|
||||
cardList: [],
|
||||
addParams: {
|
||||
title:'',
|
||||
inputarr: []
|
||||
}
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getIntelligentList();
|
||||
},
|
||||
methods: {
|
||||
//添加表单
|
||||
adinput(){
|
||||
this.inputarr.push('')
|
||||
console.log(this.inputarr)
|
||||
},
|
||||
getIntelligentList() {
|
||||
this.loading = true;
|
||||
selectDynamicData().then(response => {
|
||||
this.cardList = response.data;
|
||||
// this.total = response.total;
|
||||
console.log(this.cardList,'list')
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false;
|
||||
},
|
||||
//提交按钮
|
||||
submitForm(){
|
||||
this.addParams.inputarr = this.inputarr
|
||||
console.log(this.addParams,'add')
|
||||
saveDynamicData(this.addParams).then(response => {
|
||||
// this.cardList = response.data;
|
||||
// this.total = response.total;
|
||||
this.loading = false;
|
||||
this.open = false;
|
||||
this.getIntelligentList();
|
||||
});
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.inputarr = []
|
||||
this.addParams = {
|
||||
title:'',
|
||||
inputarr: []
|
||||
}
|
||||
this.open = true;
|
||||
this.title = "添加表单";
|
||||
},
|
||||
//推广按钮操作
|
||||
handelExtend(id) {
|
||||
this.extendLink = 'https://127.0.0.1:8080/extendLink/id'+id
|
||||
this.extendOpen = true;
|
||||
this.extendTitle = "推广链接";
|
||||
},
|
||||
//复制按钮操作
|
||||
copyAddress() {
|
||||
const input = document.createElement('input');
|
||||
input.value = this.extendLink;
|
||||
document.body.appendChild(input);
|
||||
input.select();
|
||||
document.execCommand('copy');
|
||||
document.body.removeChild(input);
|
||||
alert('已复制到剪贴板'); },
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style>
|
||||
|
||||
.clearfix:before,
|
||||
.clearfix:after {
|
||||
display: table;
|
||||
content: "";
|
||||
}
|
||||
.clearfix:after {
|
||||
clear: both
|
||||
}
|
||||
|
||||
.box-card {
|
||||
width: 450px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.container {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 100px; /* 可根据需要调整高度 */
|
||||
color: #ccc; /* 灰白色 */
|
||||
}
|
||||
|
||||
.el-input-foot{
|
||||
padding: 20px;
|
||||
padding-top: 10px;
|
||||
text-align: right;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
</style>
|
@ -49,14 +49,14 @@
|
||||
<!-- @keyup.enter.native="handleQuery"-->
|
||||
<!-- />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="职务" prop="job">-->
|
||||
<!-- <el-input-->
|
||||
<!-- v-model="queryParams.job"-->
|
||||
<!-- placeholder="请输入职务"-->
|
||||
<!-- clearable-->
|
||||
<!-- @keyup.enter.native="handleQuery"-->
|
||||
<!-- />-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item label="职务" prop="job">
|
||||
<el-input
|
||||
v-model="queryParams.job"
|
||||
placeholder="请输入职务"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="微信号" prop="wxNumber">-->
|
||||
<!-- <el-input-->
|
||||
<!-- v-model="queryParams.wxNumber"-->
|
||||
@ -192,7 +192,7 @@
|
||||
<!-- <el-table-column label="关联客户" align="center" prop="customerId" />-->
|
||||
<!-- <el-table-column label="客户编号" align="center" prop="customerNumber" />-->
|
||||
<!-- <el-table-column label="部门" align="center" prop="dep" />-->
|
||||
<!-- <el-table-column label="职务" align="center" prop="job" />-->
|
||||
<el-table-column label="职务" align="center" prop="job" />
|
||||
<el-table-column label="微信号" align="center" prop="wxNumber" />
|
||||
<el-table-column label="邮箱" align="center" prop="mailNumber" />
|
||||
<el-table-column label="是否关键决策人" align="center" prop="isKey">
|
||||
@ -268,9 +268,9 @@
|
||||
<!-- <el-form-item label="部门" prop="dep">-->
|
||||
<!-- <el-input v-model="form.dep" placeholder="请输入部门" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="职务" prop="job">-->
|
||||
<!-- <el-input v-model="form.job" placeholder="请输入职务" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item label="职务" prop="job">
|
||||
<el-input v-model="form.job" placeholder="请输入职务" />
|
||||
</el-form-item>
|
||||
<el-form-item label="微信号" prop="wxNumber">
|
||||
<el-input v-model="form.wxNumber" placeholder="请输入微信号" />
|
||||
</el-form-item>
|
||||
|
Loading…
Reference in New Issue
Block a user