合并CRM

This commit is contained in:
xuli3099
2025-08-25 16:41:33 +08:00
parent fd5c5739e4
commit 0a1d4de168
78 changed files with 19363 additions and 159 deletions

View File

@@ -0,0 +1,296 @@
<template>
<uni-forms ref="formRef" :model="formData" :rules="rules" label-width="100px" label-position="top">
<uni-forms-item label="客户人员" name="customerUserList" class="f-c-right">
<uni-easyinput v-model="formData.customerUserList" placeholder="请选择客户人员" name="input" :disabled="isDisabled"
@focus="chooseClientUser"></uni-easyinput>
</uni-forms-item>
<uni-forms-item label="我方参与人" name="myUserList" class="f-c-right">
<uni-easyinput v-model="formData.myUserList" placeholder="请选择我方参与人" name="input" :disabled="isDisabled"
@focus="chooseMyUser"></uni-easyinput>
</uni-forms-item>
<uni-forms-item label="活动内容" name="activityTypeList" class="f-c-right">
<uni-easyinput v-model="formData.activityTypeList" placeholder="请选择活动内容" name="input"
@focus="chooseActivityType"></uni-easyinput>
</uni-forms-item>
<uni-forms-item label="活动文字" name="activeTxt" class="uni-forms-item is-direction-top is-top">
<uni-easyinput type="textarea" autoHeight v-model="formData.activeTxt" placeholder="请输入" 活动文字
class="form-texarea" />
</uni-forms-item>
</uni-forms>
<view class="footer-con">
<button class="btn-default" type="default" @click="handleDeleteVisistDetailItem" size="mini"> </button>
<button class="btn-primary" type="primary" @click="submitForm" size="mini">保存/修改</button>
</view>
</template>
<script setup name="dailyVisitComponent">
import { ref, reactive } from 'vue'
import cache from '../../../../../utils/cache'
import { onShow, onUnload } from '@dcloudio/uni-app';
import { addVisistDetail, deleVisistDetailItem, getVisistDetailItem } from '../../../../../api/crm/activity/activity';
let customerUserList = ref([])
let myUserList = ref([])
let activityTypeList = ref([])
let activeTxt = ref([])
let isDisabled = ref(false)
const props = defineProps({
cusName: String, //客户单位名称
cusId: Number,//客户ID
visistId: Number,//活动ID
status: String //状态
})
// 表单数据
const formData = ref({
customerUserList,
myUserList,
activityTypeList,
activeTxt
});
// 验证规则
const rules = {
activityTypeList: {
rules: [
{ required: true, errorMessage: '请选择活动内容' }
]
}
};
// 表单ref
const formRef = ref(null);
//删除明细项的内容
let rcDeleteForm = reactive({})
function handleDeleteVisistDetailItem() {
rcDeleteForm.treeName = '日常走访'
rcDeleteForm.visistId = props.visistId
deleVisistDetailItem(rcDeleteForm).then(res => {
if (res.code == 200) {
uni.showToast({
title: '删除成功',
duration: 2000
});
//响应成功,删除缓存记录
handleDelete()
} else {
uni.showToast({
title: res.msg,
icon: 'none',
});
}
})
}
// 删除内容
let handleDelete = () => {
formData.value.customerUserList = null
formData.value.myUserList = null
formData.value.activityTypeList = null
formData.value.activeTxt = null
if (cache.get('checkedRCClientList') != null) {
cache.remove('checkedRCClientList');
}
if (cache.get('checkedRCMyUserList') != null) {
cache.remove('checkedRCMyUserList');
}
if (cache.get('checkedRCActivityTypeList') != null) {
cache.remove('checkedRCActivityTypeList');
}
}
//删除缓存
let handleDeleteLocal = () => {
cache.remove('checkedRCClientList');
cache.remove('checkedRCMyUserList');
cache.remove('checkedRCActivityTypeList');
}
let rcForm = reactive({})
// 保存/修改
const submitForm = async () => {
try {
// 验证表单
await formRef.value.validate();
// 验证通过后的操作
uni.showToast({
title: '验证通过',
icon: 'success'
});
rcForm.treeName = '日常走访'
rcForm.cusId = props.cusId
rcForm.visistId = props.visistId
if (Array.isArray(activityTypeList.value)) {
rcForm.activityTags = activityTypeList.value.join(',')
} else {
rcForm.activityTags = activityTypeList.value
}
if (Array.isArray(myUserList.value)) {
rcForm.ourPersonnel = myUserList.value.join(',')
} else {
rcForm.ourPersonnel = myUserList.value
}
if (Array.isArray(customerUserList.value)) {
rcForm.cusPersonnel = customerUserList.value.join(',')
} else {
rcForm.cusPersonnel = customerUserList.value
}
rcForm.bandResult = activeTxt.value
// 提交服务器进行新增
addVisistDetail(rcForm).then(res => {
if (res.code == 200) {
uni.showToast({
title: '提交成功',
duration: 2000
});
//响应成功,删除缓存记录
handleDeleteLocal()
} else {
uni.showToast({
title: res.msg,
icon: 'none',
});
}
})
} catch (err) {
console.log('表单验证失败:', err);
}
};
//页面渲染完成后查询catch的get
onShow(() => {
if (cache.get('checkedRCClientList') != null && cache.get('checkedRCClientList') != []) {
customerUserList.value = cache.get('checkedRCClientList')
}
if (cache.get('checkedRCMyUserList') != null && cache.get('checkedRCMyUserList') != []) {
myUserList.value = cache.get('checkedRCMyUserList')
}
if (cache.get('checkedRCActivityTypeList') != null && cache.get('checkedRCActivityTypeList') != []) {
activityTypeList.value = cache.get('checkedRCActivityTypeList')
}
if (props.status == '完成') {
isDisabled.value = true
} else {
isDisabled.value = false
}
})
//查询日常走访的内容
let queryRCForm = reactive({})
let getRCVisitReportDetailContent = () => {
queryRCForm.visistId = props.visistId
queryRCForm.cusId = props.cusId
queryRCForm.treeName = '日常走访'
getVisistDetailItem(queryRCForm).then(res => {
if (res.rows[0] != null) {
customerUserList.value = res.rows[0].customerPersonnel
myUserList.value = res.rows[0].ourPersonnel
activityTypeList.value = res.rows[0].activityTags
activeTxt.value = res.rows[0].bandResult
}
})
}
//页面卸载之后,删除缓存信息
onUnload(() => {
handleDeleteLocal()
})
//选择客户人员
function chooseClientUser() {
uni.navigateTo({
url: '/pages/business/CRM/marketActivity/customerUserList?cusName=' + props.cusName + '&chooseType=日常走访'
})
}
//选择我方参与人
function chooseMyUser() {
uni.navigateTo({
url: '/pages/business/CRM/marketActivity/myUserList?chooseType=日常走访'
})
}
//选择活动类型
function chooseActivityType() {
uni.navigateTo({
url: '/pages/business/CRM/marketActivity/activityTypeList?chooseType=日常走访'
})
}
// 明确暴露给父组件的方法
defineExpose({
handleDelete,
getRCVisitReportDetailContent
})
</script>
<style scoped lang="scss">
.all-body {
/* #ifdef APP-PLUS */
top: 150rpx;
height: calc(100vh - 75px);
/* #endif */
/* #ifndef APP-PLUS */
top: 120rpx;
height: calc(100vh);
/* #endif */
}
.search {
display: flex;
}
.search .btn-search {
border: none;
background: none;
line-height: normal;
color: #fff;
line-height: 56rpx !important;
padding: 10rpx 0 0;
text-align: left;
cursor: pointer;
}
.search .btn-search::after {
display: none;
}
.search .custom-search {
width: 80%;
}
.search .custom-search.uni-searchbar {
padding-right: 0 !important;
}
.scroll-h {
/* #ifdef APP-PLUS */
height: calc(100vh - 120px);
/* #endif */
/* #ifndef APP-PLUS */
height: calc(100vh - 110px);
/* #endif */
}
.white-bg {
padding-bottom: 10rpx;
}
</style>

View File

@@ -0,0 +1,258 @@
<template>
<uni-forms ref="formRef" :model="formData" label-width="100px" label-position="top">
<uni-forms-item label="客户人员" name="customerUserList" class="f-c-right">
<uni-easyinput v-model="formData.customerUserList" placeholder="请选择客户人员" name="input"
:disabled="isDisabled"
@focus="chooseClientUser"></uni-easyinput>
</uni-forms-item>
<uni-forms-item label="我方参与人" name="myUserList" class="f-c-right">
<uni-easyinput v-model="formData.myUserList" placeholder="请选择我方参与人" name="input"
:disabled="isDisabled"
@focus="chooseMyUser"></uni-easyinput>
</uni-forms-item>
<uni-forms-item label="活动文字" name="activeTxt" class="uni-forms-item is-direction-top is-top">
<uni-easyinput type="textarea" autoHeight v-model="formData.activeTxt" placeholder="请输入" 活动文字
class="form-texarea" />
</uni-forms-item>
</uni-forms>
<view class="footer-con">
<button class="btn-default" type="default" @click="handleDeleteVisistDetailItem" size="mini"> </button>
<button class="btn-primary" type="primary" @click="submitForm" size="mini">保存/修改</button>
</view>
</template>
<script setup name="djVisitComponent">
import { ref, reactive } from 'vue'
import cache from '../../../../../utils/cache'
import { onShow, onUnload } from '@dcloudio/uni-app';
import { addVisistDetail, deleVisistDetailItem, getVisistDetailItem } from '../../../../../api/crm/activity/activity';
let customerUserList = ref([])
let myUserList = ref([])
let activeTxt = ref('')
let isDisabled = ref(false)
const props = defineProps({
cusName: String, //客户单位名称
cusId: Number,//客户ID
visistId: Number,//活动ID
status: String //状态
})
// 表单数据
const formData = ref({
customerUserList,
myUserList,
activeTxt
});
// 表单ref
const formRef = ref(null);
//删除明细项的内容
let djDeleteForm = reactive({})
function handleDeleteVisistDetailItem() {
djDeleteForm.treeName = '党建活动'
djDeleteForm.visistId = props.visistId
deleVisistDetailItem(djDeleteForm).then(res => {
if (res.code == 200) {
uni.showToast({
title: '删除成功',
duration: 2000
});
//响应成功,删除缓存记录
handleDelete()
} else {
uni.showToast({
title: res.msg,
icon: 'none',
});
}
})
}
// 删除内容
let handleDelete = () => {
formData.value.customerUserList = null
formData.value.myUserList = null
formData.value.activeTxt = null
if (cache.get('checkedDJClientList') != null) {
cache.remove('checkedDJClientList');
}
if (cache.get('checkedDJMyUserList') != null) {
cache.remove('checkedDJMyUserList');
}
}
//删除缓存
let handleDeleteLocal = () => {
cache.remove('checkedDJClientList');
cache.remove('checkedDJMyUserList');
}
let djForm = reactive({})
// 保存/修改
const submitForm = async () => {
try {
// 验证表单
await formRef.value.validate();
// 验证通过后的操作
uni.showToast({
title: '验证通过',
icon: 'success'
});
djForm.treeName = '党建活动'
djForm.cusId = props.cusId
djForm.visistId = props.visistId
if (Array.isArray(myUserList.value)) {
djForm.ourPersonnel = myUserList.value.join(',')
} else {
djForm.ourPersonnel = myUserList.value
}
if (Array.isArray(customerUserList.value)) {
djForm.cusPersonnel = customerUserList.value.join(',')
} else {
djForm.cusPersonnel = customerUserList.value
}
djForm.bandResult = activeTxt.value
// 提交服务器进行新增
addVisistDetail(djForm).then(res => {
if (res.code == 200) {
uni.showToast({
title: '提交成功',
duration: 2000
});
//响应成功,删除缓存记录
handleDeleteLocal()
} else {
uni.showToast({
title: res.msg,
icon: 'none',
});
}
})
} catch (err) {
console.log('表单验证失败:', err);
}
};
//页面渲染完成后查询catch的get
onShow(() => {
if (cache.get('checkedDJClientList') != null && cache.get('checkedDJClientList') != []) {
customerUserList.value = cache.get('checkedDJClientList')
}
if (cache.get('checkedDJMyUserList') != null && cache.get('checkedDJMyUserList') != []) {
myUserList.value = cache.get('checkedDJMyUserList')
}
if(props.status=='完成'){
isDisabled.value = true
}else{
isDisabled.value = false
}
})
//查询日常走访的内容
let queryDJForm = reactive({})
let getDJVisitReportDetailContent = () => {
queryDJForm.visistId = props.visistId
queryDJForm.cusId = props.cusId
queryDJForm.treeName = '党建活动'
getVisistDetailItem(queryDJForm).then(res => {
if (res.rows[0] != null) {
customerUserList.value = res.rows[0].customerPersonnel
myUserList.value = res.rows[0].ourPersonnel
activeTxt.value = res.rows[0].bandResult
}
})
}
//页面卸载之后,删除缓存信息
onUnload(() => {
handleDeleteLocal()
})
//选择客户人员
function chooseClientUser() {
uni.navigateTo({
url: '/pages/business/CRM/marketActivity/customerUserList?cusName=' + props.cusName + '&chooseType=党建活动'
})
}
//选择我方参与人
function chooseMyUser() {
uni.navigateTo({
url: '/pages/business/CRM/marketActivity/myUserList?chooseType=党建活动'
})
}
// 明确暴露给父组件的方法
defineExpose({
handleDelete,
getDJVisitReportDetailContent
})
</script>
<style scoped lang="scss">
.all-body {
/* #ifdef APP-PLUS */
top: 150rpx;
height: calc(100vh - 75px);
/* #endif */
/* #ifndef APP-PLUS */
top: 120rpx;
height: calc(100vh);
/* #endif */
}
.search {
display: flex;
}
.search .btn-search {
border: none;
background: none;
line-height: normal;
color: #fff;
line-height: 56rpx !important;
padding: 10rpx 0 0;
text-align: left;
cursor: pointer;
}
.search .btn-search::after {
display: none;
}
.search .custom-search {
width: 80%;
}
.search .custom-search.uni-searchbar {
padding-right: 0 !important;
}
.scroll-h {
/* #ifdef APP-PLUS */
height: calc(100vh - 120px);
/* #endif */
/* #ifndef APP-PLUS */
height: calc(100vh - 110px);
/* #endif */
}
.white-bg {
padding-bottom: 10rpx;
}
</style>

View File

@@ -0,0 +1,262 @@
<template>
<uni-forms ref="formRef" :model="formData" label-width="100px" label-position="top">
<uni-forms-item label="客户人员" name="customerUserList" class="f-c-right">
<uni-easyinput v-model="formData.customerUserList" placeholder="请选择客户人员" name="input"
:disabled="isDisabled"
@focus="chooseClientUser"></uni-easyinput>
</uni-forms-item>
<uni-forms-item label="我方参与人" name="myUserList" class="f-c-right">
<uni-easyinput v-model="formData.myUserList" placeholder="请选择我方参与人" name="input"
:disabled="isDisabled"
@focus="chooseMyUser"></uni-easyinput>
</uni-forms-item>
<uni-forms-item label="活动文字" name="activeTxt" class="uni-forms-item is-direction-top is-top">
<uni-easyinput type="textarea" autoHeight v-model="formData.activeTxt" placeholder="请输入" 活动文字
class="form-texarea" />
</uni-forms-item>
</uni-forms>
<view class="footer-con">
<button class="btn-default" type="default" @click="handleDeleteVisistDetailItem" size="mini"> </button>
<button class="btn-primary" type="primary" @click="submitForm" size="mini">保存/修改</button>
</view>
</template>
<script setup name="jsVisitComponent">
import { ref, reactive } from 'vue'
import cache from '../../../../../utils/cache'
import { onShow, onUnload } from '@dcloudio/uni-app';
import { addVisistDetail, deleVisistDetailItem, getVisistDetailItem } from '../../../../../api/crm/activity/activity';
let customerUserList = ref([])
let myUserList = ref([])
let activeTxt = ref('')
let isDisabled = ref(false)
const props = defineProps({
cusName: String, //客户单位名称
cusId: Number,//客户ID
visistId: Number,//活动ID
status: String //状态
})
// 表单数据
const formData = ref({
customerUserList,
myUserList,
activeTxt
});
// 表单ref
const formRef = ref(null);
//删除明细项的内容
let jsDeleteForm = reactive({})
function handleDeleteVisistDetailItem() {
jsDeleteForm.treeName = '业务招待'
jsDeleteForm.visistId = props.visistId
deleVisistDetailItem(jsDeleteForm).then(res => {
if (res.code == 200) {
uni.showToast({
title: '删除成功',
duration: 2000
});
//响应成功,删除缓存记录
handleDelete()
} else {
uni.showToast({
title: res.msg,
icon: 'none',
});
}
})
}
// 删除内容
let handleDelete = () => {
formData.value.customerUserList = null
formData.value.myUserList = null
formData.value.activeTxt = null
if (cache.get('checkedJSClientList') != null) {
cache.remove('checkedJSClientList');
}
if (cache.get('checkedJSMyUserList') != null) {
cache.remove('checkedJSMyUserList');
}
}
//删除缓存
let handleDeleteLocal = () => {
cache.remove('checkedJSClientList');
cache.remove('checkedJSMyUserList');
}
let jsForm = reactive({})
// 保存/修改
const submitForm = async () => {
try {
// 验证表单
await formRef.value.validate();
// 验证通过后的操作
uni.showToast({
title: '验证通过',
icon: 'success'
});
jsForm.treeName = '技术交流'
jsForm.cusId = props.cusId
jsForm.visistId = props.visistId
if (Array.isArray(myUserList.value)) {
jsForm.ourPersonnel = myUserList.value.join(',')
} else {
jsForm.ourPersonnel = myUserList.value
}
if (Array.isArray(customerUserList.value)) {
jsForm.cusPersonnel = customerUserList.value.join(',')
} else {
jsForm.cusPersonnel = customerUserList.value
}
jsForm.bandResult = activeTxt.value
// 提交服务器进行新增
addVisistDetail(jsForm).then(res => {
if (res.code == 200) {
uni.showToast({
title: '提交成功',
duration: 2000
});
//响应成功,删除缓存记录
handleDeleteLocal()
} else {
uni.showToast({
title: res.msg,
icon: 'none',
});
}
})
} catch (err) {
console.log('表单验证失败:', err);
}
};
//页面渲染完成后查询catch的get
onShow(() => {
if (cache.get('checkedJSClientList') != null && cache.get('checkedJSClientList') != []) {
customerUserList.value = cache.get('checkedJSClientList')
}
if (cache.get('checkedJSMyUserList') != null && cache.get('checkedJSMyUserList') != []) {
myUserList.value = cache.get('checkedJSMyUserList')
}
if(props.status=='完成'){
isDisabled.value = true
}else{
isDisabled.value = false
}
})
//查询日常走访的内容
let queryJSForm = reactive({})
let getJSVisitReportDetailContent = () => {
queryJSForm.visistId = props.visistId
queryJSForm.cusId = props.cusId
queryJSForm.treeName = '技术交流'
getVisistDetailItem(queryJSForm).then(res => {
if (res.rows[0] != null) {
customerUserList.value = res.rows[0].customerPersonnel
myUserList.value = res.rows[0].ourPersonnel
activeTxt.value = res.rows[0].bandResult
}
})
}
//页面卸载之后,删除缓存信息
onUnload(() => {
handleDeleteLocal()
})
//选择客户人员
function chooseClientUser() {
uni.navigateTo({
url: '/pages/business/CRM/marketActivity/customerUserList?cusName=' + props.cusName + '&chooseType=技术交流'
})
}
//选择我方参与人
function chooseMyUser() {
uni.navigateTo({
url: '/pages/business/CRM/marketActivity/myUserList?chooseType=技术交流'
})
}
// 明确暴露给父组件的方法
defineExpose({
handleDelete,
getJSVisitReportDetailContent
})
</script>
<style scoped lang="scss">
.all-body {
/* #ifdef APP-PLUS */
top: 150rpx;
height: calc(100vh - 75px);
/* #endif */
/* #ifndef APP-PLUS */
top: 120rpx;
height: calc(100vh);
/* #endif */
}
.search {
display: flex;
}
.search .btn-search {
border: none;
background: none;
line-height: normal;
color: #fff;
line-height: 56rpx !important;
padding: 10rpx 0 0;
text-align: left;
cursor: pointer;
}
.search .btn-search::after {
display: none;
}
.search .custom-search {
width: 80%;
}
.search .custom-search.uni-searchbar {
padding-right: 0 !important;
}
.scroll-h {
/* #ifdef APP-PLUS */
height: calc(100vh - 120px);
/* #endif */
/* #ifndef APP-PLUS */
height: calc(100vh - 110px);
/* #endif */
}
.white-bg {
padding-bottom: 10rpx;
}
</style>

View File

@@ -0,0 +1,262 @@
<template>
<uni-forms ref="formRef" :model="formData" label-width="100px" label-position="top">
<uni-forms-item label="客户人员" name="customerUserList" class="f-c-right">
<uni-easyinput v-model="formData.customerUserList" placeholder="请选择客户人员" name="input"
:disabled="isDisabled"
@focus="chooseClientUser"></uni-easyinput>
</uni-forms-item>
<uni-forms-item label="我方参与人" name="myUserList" class="f-c-right">
<uni-easyinput v-model="formData.myUserList" placeholder="请选择我方参与人" name="input"
:disabled="isDisabled"
@focus="chooseMyUser"></uni-easyinput>
</uni-forms-item>
<uni-forms-item label="活动文字" name="activeTxt" class="uni-forms-item is-direction-top is-top">
<uni-easyinput type="textarea" autoHeight v-model="formData.activeTxt" placeholder="请输入" 活动文字
class="form-texarea" />
</uni-forms-item>
</uni-forms>
<view class="footer-con">
<button class="btn-default" type="default" @click="handleDeleteVisistDetailItem" size="mini"> </button>
<button class="btn-primary" type="primary" @click="submitForm" size="mini">保存/修改</button>
</view>
</template>
<script setup name="lcVisitComponent">
import { ref, reactive } from 'vue'
import cache from '../../../../../utils/cache'
import { onShow, onUnload } from '@dcloudio/uni-app';
import { addVisistDetail, deleVisistDetailItem, getVisistDetailItem } from '../../../../../api/crm/activity/activity';
let customerUserList = ref([])
let myUserList = ref([])
let activeTxt = ref('')
let isDisabled = ref(false)
const props = defineProps({
cusName: String, //客户单位名称
cusId: Number,//客户ID
visistId: Number,//活动ID
status: String //状态
})
// 表单数据
const formData = ref({
customerUserList,
myUserList,
activeTxt
});
// 表单ref
const formRef = ref(null);
//删除明细项的内容
let lcDeleteForm = reactive({})
function handleDeleteVisistDetailItem() {
lcDeleteForm.treeName = '业务招待'
lcDeleteForm.visistId = props.visistId
deleVisistDetailItem(lcDeleteForm).then(res => {
if (res.code == 200) {
uni.showToast({
title: '删除成功',
duration: 2000
});
//响应成功,删除缓存记录
handleDelete()
} else {
uni.showToast({
title: res.msg,
icon: 'none',
});
}
})
}
// 删除内容
let handleDelete = () => {
formData.value.customerUserList = null
formData.value.myUserList = null
formData.value.activeTxt = null
if (cache.get('checkedLCClientList') != null) {
cache.remove('checkedLCClientList');
}
if (cache.get('checkedLCMyUserList') != null) {
cache.remove('checkedLCMyUserList');
}
}
//删除缓存
let handleDeleteLocal = () => {
cache.remove('checkedLCClientList');
cache.remove('checkedLCMyUserList');
}
let lcForm = reactive({})
// 保存/修改
const submitForm = async () => {
try {
// 验证表单
await formRef.value.validate();
// 验证通过后的操作
uni.showToast({
title: '验证通过',
icon: 'success'
});
lcForm.treeName = '来厂参观'
lcForm.cusId = props.cusId
lcForm.visistId = props.visistId
if (Array.isArray(myUserList.value)) {
lcForm.ourPersonnel = myUserList.value.join(',')
} else {
lcForm.ourPersonnel = myUserList.value
}
if (Array.isArray(customerUserList.value)) {
lcForm.cusPersonnel = customerUserList.value.join(',')
} else {
lcForm.cusPersonnel = customerUserList.value
}
lcForm.bandResult = activeTxt.value
// 提交服务器进行新增
addVisistDetail(lcForm).then(res => {
if (res.code == 200) {
uni.showToast({
title: '提交成功',
duration: 2000
});
//响应成功,删除缓存记录
handleDeleteLocal()
} else {
uni.showToast({
title: res.msg,
icon: 'none',
});
}
})
} catch (err) {
console.log('表单验证失败:', err);
}
};
//页面渲染完成后查询catch的get
onShow(() => {
if (cache.get('checkedLCClientList') != null && cache.get('checkedLCClientList') != []) {
customerUserList.value = cache.get('checkedLCClientList')
}
if (cache.get('checkedLCMyUserList') != null && cache.get('checkedLCMyUserList') != []) {
myUserList.value = cache.get('checkedLCMyUserList')
}
if(props.status=='完成'){
isDisabled.value = true
}else{
isDisabled.value = false
}
})
//查询日常走访的内容
let queryLCForm = reactive({})
let getLCVisitReportDetailContent = () => {
queryLCForm.visistId = props.visistId
queryLCForm.cusId = props.cusId
queryLCForm.treeName = '来厂参观'
getVisistDetailItem(queryLCForm).then(res => {
if (res.rows[0] != null) {
customerUserList.value = res.rows[0].customerPersonnel
myUserList.value = res.rows[0].ourPersonnel
activeTxt.value = res.rows[0].bandResult
}
})
}
//页面卸载之后,删除缓存信息
onUnload(() => {
handleDeleteLocal()
})
//选择客户人员
function chooseClientUser() {
uni.navigateTo({
url: '/pages/business/CRM/marketActivity/customerUserList?cusName=' + props.cusName + '&chooseType=来厂参观'
})
}
//选择我方参与人
function chooseMyUser() {
uni.navigateTo({
url: '/pages/business/CRM/marketActivity/myUserList?chooseType=来厂参观'
})
}
// 明确暴露给父组件的方法
defineExpose({
handleDelete,
getLCVisitReportDetailContent
})
</script>
<style scoped lang="scss">
.all-body {
/* #ifdef APP-PLUS */
top: 150rpx;
height: calc(100vh - 75px);
/* #endif */
/* #ifndef APP-PLUS */
top: 120rpx;
height: calc(100vh);
/* #endif */
}
.search {
display: flex;
}
.search .btn-search {
border: none;
background: none;
line-height: normal;
color: #fff;
line-height: 56rpx !important;
padding: 10rpx 0 0;
text-align: left;
cursor: pointer;
}
.search .btn-search::after {
display: none;
}
.search .custom-search {
width: 80%;
}
.search .custom-search.uni-searchbar {
padding-right: 0 !important;
}
.scroll-h {
/* #ifdef APP-PLUS */
height: calc(100vh - 120px);
/* #endif */
/* #ifndef APP-PLUS */
height: calc(100vh - 110px);
/* #endif */
}
.white-bg {
padding-bottom: 10rpx;
}
</style>

View File

@@ -0,0 +1,307 @@
<template>
<uni-forms ref="formRef" :model="formData" label-width="100px" label-position="top">
<uni-forms-item label="客户人员" name="customerUserList" class="f-c-right">
<uni-easyinput v-model="formData.customerUserList" placeholder="请选择客户人员" name="input"
:disabled="isDisabled"
@focus="chooseClientUser"></uni-easyinput>
</uni-forms-item>
<uni-forms-item label="我方参与人" name="myUserList" class="f-c-right">
<uni-easyinput v-model="formData.myUserList" placeholder="请选择我方参与人" name="input"
:disabled="isDisabled"
@focus="chooseMyUser"></uni-easyinput>
</uni-forms-item>
<uni-forms-item label="住宿天数" name="stayDays">
<picker
@change="handlePickerChange"
:value="stayDaysIndex"
:range="stayDaysOptions"
:disabled="isDisabled"
>
<view class="picker-container">
<view class="picker-display">
{{ stayDaysOptions[stayDaysIndex] }}
</view>
<uni-icons type="arrowdown" size="16" color="#666"></uni-icons>
</view>
</picker>
</uni-forms-item>
<uni-forms-item label="活动文字" name="activeTxt" class="uni-forms-item is-direction-top is-top">
<uni-easyinput type="textarea" autoHeight v-model="formData.activeTxt" placeholder="请输入" 活动文字
class="form-texarea"/>
</uni-forms-item>
</uni-forms>
<view class="footer-con">
<button class="btn-default" type="default" @click="handleDeleteVisistDetailItem" size="mini"> </button>
<button class="btn-primary" type="primary" @click="submitForm" size="mini">保存/修改</button>
</view>
</template>
<script setup name="lyVisitComponent">
import {ref, reactive} from 'vue'
import cache from '../../../../../utils/cache'
import {onShow, onUnload} from '@dcloudio/uni-app';
import {addVisistDetail, deleVisistDetailItem, getVisistDetailItem} from '../../../../../api/crm/activity/activity';
let customerUserList = ref([])
let myUserList = ref([])
let activeTxt = ref('')
let isDisabled = ref(false)
const props = defineProps({
cusName: String, //客户单位名称
cusId: Number,//客户ID
visistId: Number,//活动ID
status: String //状态
})
// 表单数据
const formData = ref({
customerUserList,
myUserList,
activeTxt
});
// 表单ref
const formRef = ref(null);
//删除明细项的内容
let lyDeleteForm = reactive({})
function handleDeleteVisistDetailItem() {
lyDeleteForm.treeName = '联谊活动'
lyDeleteForm.visistId = props.visistId
deleVisistDetailItem(lyDeleteForm).then(res => {
if (res.code == 200) {
uni.showToast({
title: '删除成功',
duration: 2000
});
//响应成功,删除缓存记录
handleDelete()
} else {
uni.showToast({
title: res.msg,
icon: 'none',
});
}
})
}
// 删除内容
let handleDelete = () => {
formData.value.customerUserList = null
formData.value.myUserList = null
formData.value.activeTxt = null
stayDaysIndex.value = 0
if (cache.get('checkedLYClientList') != null) {
cache.remove('checkedYWClientList');
}
if (cache.get('checkedLYMyUserList') != null) {
cache.remove('checkedLYMyUserList');
}
}
//删除缓存
let handleDeleteLocal = () => {
cache.remove('checkedLYClientList');
cache.remove('checkedLYMyUserList');
}
let lyForm = reactive({})
// 保存/修改
const submitForm = async () => {
try {
// 验证表单
await formRef.value.validate();
// 验证通过后的操作
uni.showToast({
title: '验证通过',
icon: 'success'
});
lyForm.treeName = '联谊活动'
lyForm.cusId = props.cusId
lyForm.visistId = props.visistId
if (Array.isArray(myUserList.value)) {
lyForm.ourPersonnel = myUserList.value.join(',')
} else {
lyForm.ourPersonnel = myUserList.value
}
if (Array.isArray(customerUserList.value)) {
lyForm.cusPersonnel = customerUserList.value.join(',')
} else {
lyForm.cusPersonnel = customerUserList.value
}
lyForm.bandResult = activeTxt.value
lyForm.multiple = stayDaysIndex.value + 1
// 提交服务器进行新增
addVisistDetail(lyForm).then(res => {
if (res.code == 200) {
uni.showToast({
title: '提交成功',
duration: 2000
});
//响应成功,删除缓存记录
handleDeleteLocal()
} else {
uni.showToast({
title: res.msg,
icon: 'none',
});
}
})
} catch (err) {
console.log('表单验证失败:', err);
}
};
//页面渲染完成后查询catch的get
onShow(() => {
if (cache.get('checkedLYClientList') != null && cache.get('checkedLYClientList') != []) {
customerUserList.value = cache.get('checkedLYClientList')
}
if (cache.get('checkedLYMyUserList') != null && cache.get('checkedLYMyUserList') != []) {
myUserList.value = cache.get('checkedLYMyUserList')
}
if (props.status == '完成') {
isDisabled.value = true
} else {
isDisabled.value = false
}
})
//查询日常走访的内容
let queryLYForm = reactive({})
let getLYVisitReportDetailContent = () => {
queryLYForm.visistId = props.visistId
queryLYForm.cusId = props.cusId
queryLYForm.treeName = '联谊活动'
getVisistDetailItem(queryLYForm).then(res => {
if (res.rows[0] != null) {
customerUserList.value = res.rows[0].customerPersonnel
myUserList.value = res.rows[0].ourPersonnel
stayDaysIndex.value = res.rows[0].multiple - 1
activeTxt.value = res.rows[0].bandResult
}
})
}
//页面卸载之后,删除缓存信息
onUnload(() => {
handleDeleteLocal()
})
//选择客户人员
function chooseClientUser() {
uni.navigateTo({
url: '/pages/business/CRM/marketActivity/customerUserList?cusName=' + props.cusName + '&chooseType=联谊活动'
})
}
//选择我方参与人
function chooseMyUser() {
uni.navigateTo({
url: '/pages/business/CRM/marketActivity/myUserList?chooseType=联谊活动'
})
}
// 住宿天数
const stayDaysOptions = ref(['1天', '2天', '3天', '4天', '5天', '6天', '7天'])
const stayDaysIndex = ref(0) // 默认未选择
const handlePickerChange = (e) => {
stayDaysIndex.value = e.detail.value
console.log("天数数字:", stayDaysIndex.value + 1)
}
// 明确暴露给父组件的方法
defineExpose({
handleDelete,
getLYVisitReportDetailContent
})
</script>
<style scoped lang="scss">
.all-body {
/* #ifdef APP-PLUS */
top: 150rpx;
height: calc(100vh - 75px);
/* #endif */
/* #ifndef APP-PLUS */
top: 120rpx;
height: calc(100vh);
/* #endif */
}
.search {
display: flex;
}
.search .btn-search {
border: none;
background: none;
line-height: normal;
color: #fff;
line-height: 56rpx !important;
padding: 10rpx 0 0;
text-align: left;
cursor: pointer;
}
.search .btn-search::after {
display: none;
}
.search .custom-search {
width: 80%;
}
.search .custom-search.uni-searchbar {
padding-right: 0 !important;
}
.scroll-h {
/* #ifdef APP-PLUS */
height: calc(100vh - 120px);
/* #endif */
/* #ifndef APP-PLUS */
height: calc(100vh - 110px);
/* #endif */
}
.white-bg {
padding-bottom: 10rpx;
}
.picker-container {
display: flex;
align-items: center;
justify-content: space-between;
padding: 10px 12px;
border: 1px solid #dcdfe6;
border-radius: 4px;
background-color: #fff;
}
.picker-display {
color: #333;
font-size: 14px;
}
.picker-display:empty::before {
content: '请选择住宿天数';
color: #999;
}
</style>

View File

@@ -0,0 +1,259 @@
<template>
<uni-forms ref="formRef" :model="formData" label-width="100px" label-position="top">
<uni-forms-item label="客户人员" name="customerUserList" class="f-c-right">
<uni-easyinput v-model="formData.customerUserList" placeholder="请选择客户人员" name="input"
:disabled="isDisabled"
@focus="chooseClientUser"></uni-easyinput>
</uni-forms-item>
<uni-forms-item label="我方参与人" name="myUserList" class="f-c-right">
<uni-easyinput v-model="formData.myUserList" placeholder="请选择我方参与人" name="input"
:disabled="isDisabled"
@focus="chooseMyUser"></uni-easyinput>
</uni-forms-item>
<uni-forms-item label="活动文字" name="activeTxt" class="uni-forms-item is-direction-top is-top">
<uni-easyinput type="textarea" autoHeight v-model="formData.activeTxt" placeholder="请输入" 活动文字
class="form-texarea" />
</uni-forms-item>
</uni-forms>
<view class="footer-con">
<button class="btn-default" type="default" @click="handleDeleteVisistDetailItem" size="mini"> </button>
<button class="btn-primary" type="primary" @click="submitForm" size="mini">保存/修改</button>
</view>
</template>
<script setup name="wtVisitComponent">
import { ref, reactive } from 'vue'
import cache from '../../../../../utils/cache'
import { onShow, onUnload } from '@dcloudio/uni-app';
import { addVisistDetail, deleVisistDetailItem, getVisistDetailItem } from '../../../../../api/crm/activity/activity';
let customerUserList = ref([])
let myUserList = ref([])
let activeTxt = ref('')
let isDisabled = ref(false)
const props = defineProps({
cusName: String, //客户单位名称
cusId: Number,//客户ID
visistId: Number,//活动ID
status: String //状态
})
// 表单数据
const formData = ref({
customerUserList,
myUserList,
activeTxt
});
// 表单ref
const formRef = ref(null);
//删除明细项的内容
let wtDeleteForm = reactive({})
function handleDeleteVisistDetailItem() {
wtDeleteForm.treeName = '文体活动'
wtDeleteForm.visistId = props.visistId
deleVisistDetailItem(wtDeleteForm).then(res => {
if (res.code == 200) {
uni.showToast({
title: '删除成功',
duration: 2000
});
//响应成功,删除缓存记录
handleDelete()
} else {
uni.showToast({
title: res.msg,
icon: 'none',
});
}
})
}
// 删除内容
let handleDelete = () => {
formData.value.customerUserList = null
formData.value.myUserList = null
formData.value.activeTxt = null
if (cache.get('checkedWTClientList') != null) {
cache.remove('checkedWTClientList');
}
if (cache.get('checkedWTMyUserList') != null) {
cache.remove('checkedWTMyUserList');
}
}
//删除缓存
let handleDeleteLocal = () => {
cache.remove('checkedWTClientList');
cache.remove('checkedWTMyUserList');
}
let wtForm = reactive({})
// 保存/修改
const submitForm = async () => {
try {
// 验证表单
await formRef.value.validate();
// 验证通过后的操作
uni.showToast({
title: '验证通过',
icon: 'success'
});
wtForm.treeName = '文体活动'
wtForm.cusId = props.cusId
wtForm.visistId = props.visistId
if (Array.isArray(myUserList.value)) {
wtForm.ourPersonnel = myUserList.value.join(',')
} else {
wtForm.ourPersonnel = myUserList.value
}
if (Array.isArray(customerUserList.value)) {
wtForm.cusPersonnel = customerUserList.value.join(',')
} else {
wtForm.cusPersonnel = customerUserList.value
}
wtForm.bandResult = activeTxt.value
// 提交服务器进行新增
addVisistDetail(wtForm).then(res => {
if (res.code == 200) {
uni.showToast({
title: '提交成功',
duration: 2000
});
//响应成功,删除缓存记录
handleDeleteLocal()
} else {
uni.showToast({
title: res.msg,
icon: 'none',
});
}
})
} catch (err) {
console.log('表单验证失败:', err);
}
};
//页面渲染完成后查询catch的get
onShow(() => {
if (cache.get('checkedWTClientList') != null && cache.get('checkedWTClientList') != []) {
customerUserList.value = cache.get('checkedWTClientList')
}
if (cache.get('checkedWTMyUserList') != null && cache.get('checkedWTMyUserList') != []) {
myUserList.value = cache.get('checkedWTMyUserList')
}
if(props.status=='完成'){
isDisabled.value = true
}else{
isDisabled.value = false
}
})
//查询日常走访的内容
let queryWTForm = reactive({})
let getWTVisitReportDetailContent = () => {
queryWTForm.visistId = props.visistId
queryWTForm.cusId = props.cusId
queryWTForm.treeName = '文体活动'
getVisistDetailItem(queryWTForm).then(res => {
if (res.rows[0] != null) {
customerUserList.value = res.rows[0].customerPersonnel
myUserList.value = res.rows[0].ourPersonnel
activeTxt.value = res.rows[0].bandResult
}
})
}
//页面卸载之后,删除缓存信息
onUnload(() => {
handleDeleteLocal()
})
//选择客户人员
function chooseClientUser() {
uni.navigateTo({
url: '/pages/business/CRM/marketActivity/customerUserList?cusName=' + props.cusName + '&chooseType=文体活动'
})
}
//选择我方参与人
function chooseMyUser() {
uni.navigateTo({
url: '/pages/business/CRM/marketActivity/myUserList?chooseType=文体活动'
})
}
// 明确暴露给父组件的方法
defineExpose({
handleDelete,
getWTVisitReportDetailContent
})
</script>
<style scoped lang="scss">
.all-body {
/* #ifdef APP-PLUS */
top: 150rpx;
height: calc(100vh - 75px);
/* #endif */
/* #ifndef APP-PLUS */
top: 120rpx;
height: calc(100vh);
/* #endif */
}
.search {
display: flex;
}
.search .btn-search {
border: none;
background: none;
line-height: normal;
color: #fff;
line-height: 56rpx !important;
padding: 10rpx 0 0;
text-align: left;
cursor: pointer;
}
.search .btn-search::after {
display: none;
}
.search .custom-search {
width: 80%;
}
.search .custom-search.uni-searchbar {
padding-right: 0 !important;
}
.scroll-h {
/* #ifdef APP-PLUS */
height: calc(100vh - 120px);
/* #endif */
/* #ifndef APP-PLUS */
height: calc(100vh - 110px);
/* #endif */
}
.white-bg {
padding-bottom: 10rpx;
}
</style>

View File

@@ -0,0 +1,259 @@
<template>
<uni-forms ref="formRef" :model="formData" label-width="100px" label-position="top">
<uni-forms-item label="客户人员" name="customerUserList" class="f-c-right">
<uni-easyinput v-model="formData.customerUserList" placeholder="请选择客户人员" name="input"
:disabled="isDisabled"
@focus="chooseClientUser"></uni-easyinput>
</uni-forms-item>
<uni-forms-item label="我方参与人" name="myUserList" class="f-c-right">
<uni-easyinput v-model="formData.myUserList" placeholder="请选择我方参与人" name="input"
:disabled="isDisabled"
@focus="chooseMyUser"></uni-easyinput>
</uni-forms-item>
<uni-forms-item label="活动文字" name="activeTxt" class="uni-forms-item is-direction-top is-top">
<uni-easyinput type="textarea" autoHeight v-model="formData.activeTxt" placeholder="请输入" 活动文字
class="form-texarea" />
</uni-forms-item>
</uni-forms>
<view class="footer-con">
<button class="btn-default" type="default" @click="handleDeleteVisistDetailItem" size="mini"> </button>
<button class="btn-primary" type="primary" @click="submitForm" size="mini">保存/修改</button>
</view>
</template>
<script setup name="ywVisitComponent">
import { ref, reactive } from 'vue'
import cache from '../../../../../utils/cache'
import { onShow, onUnload } from '@dcloudio/uni-app';
import { addVisistDetail, deleVisistDetailItem, getVisistDetailItem } from '../../../../../api/crm/activity/activity';
let customerUserList = ref([])
let myUserList = ref([])
let activeTxt = ref('')
let isDisabled = ref(false)
const props = defineProps({
cusName: String, //客户单位名称
cusId: Number,//客户ID
visistId: Number,//活动ID
status: String //状态
})
// 表单数据
const formData = ref({
customerUserList,
myUserList,
activeTxt
});
// 表单ref
const formRef = ref(null);
//删除明细项的内容
let ywDeleteForm = reactive({})
function handleDeleteVisistDetailItem() {
ywDeleteForm.treeName = '业务招待'
ywDeleteForm.visistId = props.visistId
deleVisistDetailItem(ywDeleteForm).then(res => {
if (res.code == 200) {
uni.showToast({
title: '删除成功',
duration: 2000
});
//响应成功,删除缓存记录
handleDelete()
} else {
uni.showToast({
title: res.msg,
icon: 'none',
});
}
})
}
// 删除内容
let handleDelete = () => {
formData.value.customerUserList = null
formData.value.myUserList = null
formData.value.activeTxt = null
if (cache.get('checkedYWClientList') != null) {
cache.remove('checkedYWClientList');
}
if (cache.get('checkedYWMyUserList') != null) {
cache.remove('checkedYWMyUserList');
}
}
//删除缓存
let handleDeleteLocal = () => {
cache.remove('checkedYWClientList');
cache.remove('checkedYWMyUserList');
}
let ywForm = reactive({})
// 保存/修改
const submitForm = async () => {
try {
// 验证表单
await formRef.value.validate();
// 验证通过后的操作
uni.showToast({
title: '验证通过',
icon: 'success'
});
ywForm.treeName = '业务招待'
ywForm.cusId = props.cusId
ywForm.visistId = props.visistId
if (Array.isArray(myUserList.value)) {
ywForm.ourPersonnel = myUserList.value.join(',')
} else {
ywForm.ourPersonnel = myUserList.value
}
if (Array.isArray(customerUserList.value)) {
ywForm.cusPersonnel = customerUserList.value.join(',')
} else {
ywForm.cusPersonnel = customerUserList.value
}
ywForm.bandResult = activeTxt.value
// 提交服务器进行新增
addVisistDetail(ywForm).then(res => {
if (res.code == 200) {
uni.showToast({
title: '提交成功',
duration: 2000
});
//响应成功,删除缓存记录
handleDeleteLocal()
} else {
uni.showToast({
title: res.msg,
icon: 'none',
});
}
})
} catch (err) {
console.log('表单验证失败:', err);
}
};
//页面渲染完成后查询catch的get
onShow(() => {
if (cache.get('checkedYWClientList') != null && cache.get('checkedYWClientList') != []) {
customerUserList.value = cache.get('checkedYWClientList')
}
if (cache.get('checkedYWMyUserList') != null && cache.get('checkedYWMyUserList') != []) {
myUserList.value = cache.get('checkedYWMyUserList')
}
if(props.status=='完成'){
isDisabled.value = true
}else{
isDisabled.value = false
}
})
//查询日常走访的内容
let queryYWForm = reactive({})
let getYWVisitReportDetailContent = () => {
queryYWForm.visistId = props.visistId
queryYWForm.cusId = props.cusId
queryYWForm.treeName = '业务招待'
getVisistDetailItem(queryYWForm).then(res => {
if (res.rows[0] != null) {
customerUserList.value = res.rows[0].customerPersonnel
myUserList.value = res.rows[0].ourPersonnel
activeTxt.value = res.rows[0].bandResult
}
})
}
//页面卸载之后,删除缓存信息
onUnload(() => {
handleDeleteLocal()
})
//选择客户人员
function chooseClientUser() {
uni.navigateTo({
url: '/pages/business/CRM/marketActivity/customerUserList?cusName=' + props.cusName + '&chooseType=业务招待'
})
}
//选择我方参与人
function chooseMyUser() {
uni.navigateTo({
url: '/pages/business/CRM/marketActivity/myUserList?chooseType=业务招待'
})
}
// 明确暴露给父组件的方法
defineExpose({
handleDelete,
getYWVisitReportDetailContent
})
</script>
<style scoped lang="scss">
.all-body {
/* #ifdef APP-PLUS */
top: 150rpx;
height: calc(100vh - 75px);
/* #endif */
/* #ifndef APP-PLUS */
top: 120rpx;
height: calc(100vh);
/* #endif */
}
.search {
display: flex;
}
.search .btn-search {
border: none;
background: none;
line-height: normal;
color: #fff;
line-height: 56rpx !important;
padding: 10rpx 0 0;
text-align: left;
cursor: pointer;
}
.search .btn-search::after {
display: none;
}
.search .custom-search {
width: 80%;
}
.search .custom-search.uni-searchbar {
padding-right: 0 !important;
}
.scroll-h {
/* #ifdef APP-PLUS */
height: calc(100vh - 120px);
/* #endif */
/* #ifndef APP-PLUS */
height: calc(100vh - 110px);
/* #endif */
}
.white-bg {
padding-bottom: 10rpx;
}
</style>