Commit 25ba5fae authored by 罗超's avatar 罗超
parents f14d8b37 713e2985
......@@ -421,4 +421,23 @@ export function GetStudentAssistList(data) {
});
}
// 保存协助数据
export function SetStudentAssist(data) {
return request({
url: '/CustomerStudent/SetStudentAssist',
method: 'post',
data
});
}
// 删除协助数据
export function RemoveStudentAssist(data) {
return request({
url: '/CustomerStudent/RemoveStudentAssist',
method: 'post',
data
});
}
<style>
.delAssist{
.delAssist {
position: absolute;
right: 0;
top: 28px;
right: -16px;
top: -12px;
display: inline-block;
background: red;
border-radius: 50%;
......@@ -14,85 +14,68 @@
cursor: pointer;
}
.studentAssitTable {
width: 100%;
text-align: center;
}
.studentAssitTable td {
height: 40px;
line-height: 40px;
border: 1px solid #f2f2f2;
}
.studentAssitTable th {
height: 40px;
background-color: #f2f2f2;
}
</style>
<template>
<div>
<div class="row wrap" style="flex-direction:row-reverse">
<q-btn label="新增" color="accent q-mb-lg" @click="addAssist" size="sm" />
</div>
<template v-if="AssitMsg.AssistList.length>0">
<div class="row wrap" v-for="(item,index) in AssitMsg.AssistList" :key="index">
<q-select filled stack-label option-label="Name" v-model="item.AssistType" option-value="Id"
:options="AssistDropList" label="角色" dense class="col-6 q-pb-lg q-pr-lg" emit-value
map-options />
<q-select filled dense v-model="item.AssistId" @filter="filterEmployee" use-input
:options="myEmployeeList" option-label="EmployeeName" class="col-6 q-pb-lg" option-value="Id" emit-value map-options />
<i class="iconfont icon-close delAssist" @click="delAssist(index)"></i>
<q-btn label="新增" color="accent q-mb-lg" size="sm" @click="isShowAdd=true" />
<q-btn label="取消" style="margin-left:20px;" v-if="isShowAdd" flat color="grey-10 q-mb-lg" size="sm"
@click="isShowAdd=false" />
<template v-if="isShowAdd">
<div class="row wrap">
<q-select filled stack-label option-label="Name" v-model="AssitMsg.AssistType" option-value="Id"
:options="AssistDropList" label="角色" dense class="col-6 q-pb-lg q-pr-lg" emit-value map-options />
<q-select filled dense v-model="AssitMsg.AssistId" @filter="filterEmployee" use-input :options="myEmployeeList"
option-label="EmployeeName" class="col-6 q-pb-lg" option-value="Id" emit-value map-options />
<i class="iconfont icon-close delAssist"></i>
</div>
<div class="row wrap" style="margin-bottom:10px;float:right;">
<q-btn label="保存" color="accent q-mb-lg" size="md" @click="saveAssit()" />
</div>
</template>
<!-- <div style="display:flex;flex:1;flex-direction: column;overflow:hidden;">
<div class="TimeLineDiv">
<q-timeline color="primary">
<q-timeline-entry v-for="(tItem,tIndex) in dataList" :key="tIndex">
<template v-slot:title>
<div class="visit_Cont">
<div class="Log_Content">
<div>约访时间:{{tItem.AppointmentTime}}</div>
<div>约访地点:{{tItem.AppointmentPoint}}</div>
<div class="StuCom_Remark">
<div class="StuCom_Left">备注</div>:
<div class="StuCom_Inner">{{tItem.Remark}}</div>
</div>
<div class="StuCom_Remark">
<div class="StuCom_Left">反馈</div>:
<div class="StuCom_Inner">{{tItem.Feedback}} </div>
</div>
</div>
<div style="display:flex;margin-top:10px;">
<div @click="delVisit(tItem.Id)" class="visit_delete text-negative">删除</div>
<div @click="clickItem(tItem)" class="stu_ComFeed">
{{tItem.Feedback==null||tItem.Feedback==''?'添加反馈':'编辑反馈'}}
<q-popup-proxy>
<q-banner v-if="isShowEdit">
<div class="row wrap" style="margin-top:10px;width:300px;">
<q-input filled v-model="feedBackMsg.Feedback" :rows="3" type="textarea"
class="col-12 q-pb-lg" label="反馈">
</q-input>
</div>
<div class="row wrap" style="float:right;margin-bottom:10px;">
<q-btn label="保存" color="accent" size="sm" @click="SetFeedBack()" />
</div>
</q-banner>
</q-popup-proxy>
</div>
</div>
</div>
</template>
<template v-slot:subtitle>
<div class="Time_TopList">
<div>{{ tItem.CreateTime }}</div>
<div>{{ tItem.CreateByName }}</div>
</div>
</template>
</q-timeline-entry>
</q-timeline>
</div>
<div v-if="dataList.length>0">
<table class="studentAssitTable" style="border:1px solid #f2f2f2;border-collapse:collapse;" cellspacing="0"
cellpadding="0">
<tr>
<th style="width:180px;">角色</th>
<th style="width:180px;">人员</th>
<th>操作</th>
</tr>
<tr v-for="(item,index) in dataList" :key="index">
<td>{{item.AssistTypeName}}</td>
<td>{{item.AssistName}}</td>
<td>
<q-btn flat size="xs" icon="edit" color="accent" style="font-weight:400" label="修改"
@click="getEditInfo(item)"></q-btn>
<q-btn flat size="xs" icon="delete" color="negative" style="font-weight:400" label="删除"
@click="deleteAssits(item.Id)" />
</td>
</tr>
</table>
</div>
<div style="margin-bottom:20px">
<q-pagination class="full-width justify-end" v-model="msg.pageIndex" color="primary" :max="page_Count" input
@input="changePage" />
</div> -->
</div>
</template>
<script>
import {
GetAssistTypeList,
SetStudentAssist,
GetStudentAssistList
GetStudentAssistList,
RemoveStudentAssist
} from '../../../api/sale/sale'
import {
queryEmployee
......@@ -115,19 +98,20 @@
return {
isShowAdd: false,
AssitMsg: {
StuId:1,//学员编号
AssistList:[]
StuId: 1, //学员编号
Id: 0, //编号
AssistId: 1, //员工编号
AssistType: 1 //类型
},
msg: {
StuId:1
StuId: 1
},
isShowEdit: false,
dataList: [],
page_Count: 0,
AssistDropList:[], //下拉数据
AssistDropList: [], //下拉数据
employeeList: [],
myEmployeeList:[],
myEmployeeList: [],
}
},
created() {
......@@ -143,9 +127,9 @@
},
methods: {
//获取协助人员
GetAssistTypeList(){
GetAssistTypeList() {
GetAssistTypeList({}).then(res => {
if(res.Code==1){
if (res.Code == 1) {
this.AssistDropList = res.Data;
}
})
......@@ -167,45 +151,70 @@
);
});
},
//新增协助人员
addAssist(){
let obj = {
Id:0,//编号
AssistId:1,//员工编号
AssistType:1,//类型
StuId:1,//学员编号
}
this.AssitMsg.AssistList.push(obj);
},
//保存协同人员
saveAssit() {
SetStudentAssist(this.AssitMsg).then(res => {
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '数据保存成功!',
position: 'top'
})
this.getList();
this.isShowAdd = false;
this.clearMsg();
}
}).catch(() => {
})
},
clearMsg() {
this.AssitMsg.Id = 0;
this.AssitMsg.AssistId = 1;
this.AssitMsg.AssistType = 1;
},
//获取数据
getList() {
GetStudentAssistList(this.msg).then(res => {
console.log(res,'数据');
if (res.Code == 1) {
this.dataList = res.Data;
}
}).catch(() => {
})
},
//删除到访
delAssist(index) {
this.AssitMsg.AssistList.splice(index,1);
//删除协同
deleteAssits(Id) {
let that = this
this.$q.dialog({
title: '提示信息',
message: '是否确定删除?',
cancel: true,
persistent: true,
ok: "确定",
cancel: "取消",
}).onOk(() => {
RemoveStudentAssist({
Id: Id
}).then((res) => {
that.$q.notify({
icon: 'iconfont icon-chenggong',
timeout: 2000,
message: res.Message,
position: 'top'
})
that.getList()
})
}).onCancel(() => {});
},
changePage(val) {
this.msg.pageIndex = val;
this.getList();
//获取修改数据
getEditInfo(obj) {
this.AssitMsg.Id = obj.Id;
this.AssitMsg.AssistId = obj.AssistId;
this.AssitMsg.AssistType = obj.AssistType;
this.isShowAdd=true;
}
}
}
......
......@@ -91,6 +91,15 @@
methods: {
//保存跟进
saveFlow() {
if(this.flowMsg.Remark==''){
this.$q.notify({
type: 'negative',
position: "top",
timeout: 2000,
message: '请输入内容!',
})
return;
}
saveStudentFollow(this.flowMsg).then(res => {
if (res.Code == 1) {
this.$q.notify({
......
......@@ -66,9 +66,9 @@
<div class="info_content" style="margin-bottom:0;">
<div class="customer_info_component">
<div class="customer_info_Stage">
<div class="stage_label">客户名称</div>
<div class="stage_label" style="margin-top:-16px;">客户名称</div>
<div class="stage_value">
<q-input filled v-model="customObj.StuName" dense></q-input>
<q-input filled v-model="customObj.StuName" style="width:182px;" :rules="[val => !!val || '请输入客户名称']" ref="StuName" dense></q-input>
</div>
</div>
</div>
......@@ -83,32 +83,27 @@
</div>
<div class="customer_info_component">
<div class="customer_info_Stage">
<div class="stage_label">电话</div>
<div class="stage_label" style="margin-top:-16px;">电话</div>
<div class="stage_value">
<q-input filled v-model="customObj.StuTel" dense></q-input>
<q-input filled v-model="customObj.StuTel" style="width:182px;" :rules="[val => !!val || '请输入电话号码']" ref="StuTel" dense></q-input>
</div>
</div>
</div>
<div class="customer_info_component">
<div class="customer_info_Stage">
<div class="stage_label">出生日期</div>
<div class="stage_value">
<q-input filled v-model="customObj.StuBirth" dense style="width:182px;" mask="date" label="出生日期">
<template v-slot:append>
<q-icon name="event" class="cursor-pointer">
<q-popup-proxy ref="qDateProxy1" transition-show="scale" transition-hide="scale">
<q-date v-model="customObj.StuBirth" @input="() => $refs.qDateProxy1.hide()" />
</q-popup-proxy>
</q-icon>
<div class="custom_Line"></div>
<div class="info_title">基本资料</div>
<div class="info_content">
<div class="info_item studentDate">
<div class="item_label">出生日期</div>
<div class="item_value">
<q-field filled dense>
 <template v-slot:control>
<el-date-picker v-model="customObj.StuBirth" style="height:28px;width:150px" type="date" placeholder="选择日期">
</el-date-picker>
</template>
</q-input>
</q-field>
</div>
</div>
</div>
<div class="custom_Line"></div>
<div class="info_title">基本资料</div>
<div class="info_content">
<div class="info_item">
<div class="item_label">客户来源</div>
<div class="item_value">
......@@ -170,6 +165,12 @@
<q-input filled v-model="customObj.PlatformName" dense></q-input>
</div>
</div>
<div class="info_item" v-if="customObj.StuChannel==7">
<div class="item_label">其他平台名称</div>
<div class="item_value">
<q-input filled v-model="customObj.PlatformName" dense></q-input>
</div>
</div>
<div class="info_item">
<q-btn color="accent" class="q-mr-md" label="保存" @click="saveStu()" />
</div>
......@@ -224,14 +225,7 @@
StuId: 0,
},
//客户对象
customObj: {
AssistList:[{
Id:0,//编号
AssistId:1,//员工编号
AssistType:1,//类型
StuId:1,//学员编号
}]
},
customObj: {},
//日语基础列表
basicList: [],
//学历列表
......@@ -262,21 +256,34 @@
methods: {
//保存学员信息
saveStu() {
saveStudent(this.customObj).then(res => {
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '数据保存成功!',
position: 'top'
})
this.$emit('success');
if(this.AddType == 1){
this.$emit('close');
}
this.$refs.StuName.validate();
this.$refs.StuTel.validate();
if (!this.$refs.StuName.hasError&&!this.$refs.StuTel.hasError){
var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/;
if(!myreg.test(this.customObj.StuTel)){
this.$q.notify({
type: 'negative',
position: "top",
message: `请输入正确的电话号码`
})
return
}
})
saveStudent(this.customObj).then(res => {
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '数据保存成功!',
position: 'top'
})
this.$emit('success');
if(this.AddType == 1){
this.$emit('close');
}
}
})
}
},
//获取员工列表
getEmployeeList() {
......
......@@ -15,18 +15,15 @@
<q-btn label="选择试听课" style="margin-left:50px;" color="accent q-mb-lg" size="sm" @click="isShowTeacher=true" />
</div>
<template v-if="isShowAdd">
<div class="row wrap">
<q-input filled v-model="addMsg.ClassDate" dense ref="ClassDate" class="col-6 q-pb-lg q-pr-lg" mask="date"
label="预约日期">
<template v-slot:append>
<q-icon name="event" class="cursor-pointer">
<q-popup-proxy ref="qDateProxy1" transition-show="scale" transition-hide="scale">
<q-date v-model="addMsg.ClassDate" @input="() => $refs.qDateProxy1.hide()" />
</q-popup-proxy>
</q-icon>
<div class="row wrap studentDate">
<q-field filled class="q-pb-lg q-pr-lg" dense>
 <template v-slot:control>
<el-date-picker v-model="addMsg.ClassDate" ref="ClassDate" :rules="[val => !!val || '请选择预约日期']"
style="height:28px;width:228px" type="date" placeholder="预约日期">
</el-date-picker>
</template>
</q-input>
<div class="Student_Date col-6">
</q-field>
<div class="Student_Date col-6 q-pr-lg">
<q-field filled class="q-pb-lg" dense>
 <template v-slot:control>
<el-time-select v-model="addMsg.ClassTime" size="small" ref="ClassTime" style="width:50%" :picker-options="{
......@@ -53,7 +50,7 @@
:options="ContentList" :rules="[val => !!val || '请选择主讲内容']" label="主讲内容"
class="col-6 q-pb-lg q-pr-lg" emit-value map-options />
<q-select filled stack-label option-value="TId" option-label="TeacherName" v-model="addMsg.TeacherId"
ref="TeacherId" :options="TeacherList" label="选择教师" dense class="col-6 q-pb-lg" emit-value
ref="TeacherId" :options="TeacherList" label="选择教师" dense class="col-6 q-pb-lg q-pr-lg" emit-value
map-options />
</div>
<div class="row wrap">
......@@ -182,8 +179,15 @@
methods: {
//保存
saveAppointForm() {
this.$refs.ClassDate.validate();
this.$refs.ClassContent.validate();
if(this.addMsg.ClassDate==''){
this.$q.notify({
type: 'negative',
position: "top",
timeout: 2000,
message: '请选择预约日期!',
})
return;
}
if (this.addMsg.ClassTime == '') {
this.$q.notify({
type: 'negative',
......@@ -202,7 +206,7 @@
})
return;
}
if (!this.$refs.ClassDate.hasError && !this.$refs.ClassContent.hasError) {
if (!this.$refs.ClassContent.hasError) {
SetVisitorReserve(this.addMsg).then(res => {
if (res.Code == 1) {
this.$q.notify({
......
<style>
.studentDate .el-input__inner {
background-color: transparent;
border: 0;
height: 28px;
}
.studentDate .el-input__icon {
height: auto;
line-height: 28px;
}
</style>
<template>
......@@ -7,39 +17,33 @@
<q-btn label="取消" style="margin-left:20px;" v-if="isShowAdd" flat color="grey-10 q-mb-lg" size="sm"
@click="isShowAdd=false" />
<template v-if="isShowAdd">
<div class="row wrap">
<div class="row wrap studentDate">
<q-select filled option-value="SId" dense class="col-6 q-pb-lg q-pr-lg" option-label="SName"
v-model="VisitMsg.School_Id" :options="schoolList" emit-value map-options label="到访校区" />
<q-input filled v-model="VisitMsg.Date" dense class="col-6 q-pb-lg" mask="date" label="日期">
<template v-slot:append>
<q-icon name="event" class="cursor-pointer">
<q-popup-proxy ref="qDateProxy1" transition-show="scale" transition-hide="scale">
<q-date v-model="VisitMsg.Date" @input="() => $refs.qDateProxy1.hide()" />
</q-popup-proxy>
</q-icon>
<q-field filled class="q-pb-lg" dense>
 <template v-slot:control>
<el-date-picker v-model="VisitMsg.Date" style="height:28px;width:228px" type="date" placeholder="到访日期">
</el-date-picker>
</template>
</q-input>
</q-field>
</div>
<div class="row warp">
<q-input filled mask="time" dense v-model="VisitMsg.VisitTime" :rules="['time']" class="col-6 q-pb-lg q-pr-lg">
<template v-slot:append>
<q-icon name="access_time" class="cursor-pointer">
<q-popup-proxy transition-show="scale" transition-hide="scale">
<q-time v-model="VisitMsg.VisitTime">
<div class="row items-center justify-end">
<q-btn v-close-popup label="Close" color="primary" flat />
</div>
</q-time>
</q-popup-proxy>
</q-icon>
<div class="row warp studentDate">
<q-field filled class="q-pb-lg q-pr-lg" dense>
 <template v-slot:control>
<el-time-select v-model="VisitMsg.VisitTime" size="small" ref="ClassTime" style="width:230px" :picker-options="{
start: '09:00',
step: '00:15',
end: '21:00',
}" placeholder="到访时间">
</el-time-select>
</template>
</q-input>
<q-select filled v-model="VisitMsg.ReceptionPersion" dense @filter="filterEmployee" class="col-6 q-pb-lg"
</q-field>
<q-select filled v-model="VisitMsg.ReceptionPersion" style="width:250px;" dense @filter="filterEmployee" class="col-6 q-pb-lg"
:options="myEmployeeList" option-label="EmployeeName" use-input option-value="Id" emit-value map-options
label="接待人" />
</div>
<div class="row wrap">
<q-input filled v-model="VisitMsg.Remark" dense :rows="3" type="textarea" class="col-12 q-pb-lg" label="备注">
<q-input filled v-model="VisitMsg.Remark" dense :rows="3" type="textarea" class="col-12 q-pb-lg q-pr-lg" label="备注">
</q-input>
</div>
......@@ -70,7 +74,10 @@
</div>
<div class="StuCom_Remark">
<div class="StuCom_Left">是否到访</div>
<div class="StuCom_Inner">{{tItem.IsVisitStr}} </div>
<div class="StuCom_Inner">
<span v-if="tItem.IsVisit==0" class="text-negative">{{tItem.IsVisitStr}} </span>
<span v-if="tItem.IsVisit==1" class="text-primary">{{tItem.IsVisitStr}} </span>
</div>
</div>
</div>
<div style="display:flex;margin-top:10px;">
......@@ -180,12 +187,18 @@
this.getSchool();
this.getEmployeeList();
this.getList();
let userInfo = this.getLocalStorage();
if(userInfo){
this.VisitMsg.ReceptionPersion = parseInt(userInfo.AccountId);
}
},
methods: {
//点击到访
clickItem(item) {
this.feedBackMsg.Id = item.Id;
this.feedBackMsg.Feedback = item.Feedback;
this.feedBackMsg.IsVisit = item.IsVisit;
this.isShowEdit = true;
},
SetFeedBack() {
......@@ -249,6 +262,24 @@
//保存数据
saveVisit() {
this.VisitMsg.StuId = this.saveObj.StuId;
if(this.VisitMsg.Date==''){
this.$q.notify({
type: 'negative',
position: "top",
timeout: 2000,
message: '请选择到访日期!',
})
return;
}
if(this.VisitMsg.VisitTime==''){
this.$q.notify({
type: 'negative',
position: "top",
timeout: 2000,
message: '请选择到访时间!',
})
return;
}
saveStudentVisit(this.VisitMsg).then(res => {
if (res.Code == 1) {
this.$q.notify({
......@@ -307,4 +338,5 @@
}
},
}
</script>
\ No newline at end of file
</script>
......@@ -9,35 +9,21 @@
@click="isShowAdd=false" />
</div>
<template v-if="isShowAdd">
<div class="row wrap">
<div class="row wrap studentDate">
<q-input filled class="col-6 q-pb-lg q-pr-lg" dense v-model="yueMsg.AppointmentPoint" label="约访地点"></q-input>
<q-input filled v-model="yueMsg.AppointmentTime" dense>
<template v-slot:prepend>
<q-icon name="event" class="cursor-pointer">
<q-popup-proxy transition-show="scale" transition-hide="scale">
<q-date v-model="yueMsg.AppointmentTime" mask="YYYY-MM-DD HH:mm">
<div class="row items-center justify-end">
<q-btn v-close-popup label="Close" color="primary" flat />
</div>
</q-date>
</q-popup-proxy>
</q-icon>
</template>
<template v-slot:append>
<q-icon name="access_time" class="cursor-pointer">
<q-popup-proxy transition-show="scale" transition-hide="scale">
<q-time v-model="yueMsg.AppointmentTime" mask="YYYY-MM-DD HH:mm" format24h>
<div class="row items-center justify-end">
<q-btn v-close-popup label="Close" color="primary" flat />
</div>
</q-time>
</q-popup-proxy>
</q-icon>
<q-field filled class="q-pb-lg" dense>
 <template v-slot:control>
<el-date-picker
v-model="yueMsg.AppointmentTime"
type="datetime"
style="width:228px"
placeholder="选择约访日期时间!">
</el-date-picker>
</template>
</q-input>
</q-field>
</div>
<div class="row wrap">
<q-input filled v-model="yueMsg.Remark" dense :rows="3" type="textarea" class="col-12 q-pb-lg" label="备注">
<q-input filled v-model="yueMsg.Remark" dense :rows="3" type="textarea" class="col-12 q-pb-lg q-pr-lg" label="备注">
</q-input>
</div>
<div class="row wrap" style="margin-bottom:10px;">
......@@ -180,6 +166,24 @@
//保存约访
savePoint() {
this.yueMsg.StuId = this.saveObj.StuId;
if(this.yueMsg.AppointmentPoint==''){
this.$q.notify({
type: 'negative',
position: "top",
timeout: 2000,
message: '请输入约访地点!',
})
return;
}
if(this.yueMsg.AppointmentTime==''){
this.$q.notify({
type: 'negative',
position: "top",
timeout: 2000,
message: '请选择约访日期时间!',
})
return;
}
saveStudentAppointment(this.yueMsg).then(res => {
if (res.Code == 1) {
this.$q.notify({
......
......@@ -424,7 +424,7 @@
.operate_Content {
overflow: auto;
padding-right: 20px;
/* padding-right: 20px; */
}
.operate_Content::-webkit-scrollbar {
......@@ -484,6 +484,6 @@
text-align-last: justify;
}
.fullscreen{
z-index:9999;
z-index:3000;
}
</style>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment