This commit is contained in:
慕下 2024-03-20 14:16:10 +08:00
parent a19d14ac75
commit 2c8e56c996
10 changed files with 351 additions and 29 deletions

View File

@ -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("保存成功");
}
}

View File

@ -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 +
'}';
}

View File

@ -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 +
'}';
}
}

View File

@ -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",

View 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
})
}

View File

@ -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>-->

View File

@ -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>

View File

@ -206,6 +206,8 @@ export default {
title: '',
//
open: false,
//
businessForm: {},
//
queryParams: {
pageNum: 1,

View 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>

View File

@ -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>