Commit 24e6b65a authored by 吴春's avatar 吴春

解决冲突

parents c622d02e f1d6fff5
......@@ -115,8 +115,8 @@ export function UploadViittoBlobFile(path, file, callback) {
uploadLoadding.show({
message: '正在上传文件,请稍后...'
})
let viewFileUrl = 'http://192.168.10.214:8130';
let vtUploadUrl = "http://192.168.10.214:8120/upload/UploadBlob";
let viewFileUrl = 'http://192.168.5.214:8130';
let vtUploadUrl = "http://192.168.5.214:8120/upload/UploadBlob";
let locationName = window.location.hostname;
if (locationName.indexOf('testerp.oytour') !== -1) {
vtUploadUrl = "http://upload.oytour.com/upload/UploadBlob";
......
......@@ -446,7 +446,7 @@
StuType: "", //客户类型
StuNeeds: 0, //客户需求
StuTel: "", //显示使用
FileVoucher: ""//http://192.168.10.214:8130/EduSystem/Test/Upload/SetStudentVoucher/202303221126306360000000004.png
FileVoucher: ""
},
//日语基础列表
basicList: [],
......
......@@ -68,18 +68,18 @@
cellpadding="0" v-loading="loading">
<tr>
<th width="100" style="z-index: 999;">学生</th>
<th width="100" >报名日期</th>
<th width="70" >职业</th>
<th width="80" >目的</th>
<th width="100" >班主任</th>
<th width="200" >课程名称</th>
<th width="80" >金额</th>
<th>基本情况</th>
<th width="200" >续费课程</th>
<th width="80" >续费级别</th>
<th width="80" >续费金额</th>
<th width="100">报名日期</th>
<th width="70">职业</th>
<th width="80">目的</th>
<th width="100">班主任</th>
<th width="200">课程名称</th>
<th width="80">金额</th>
<th style="min-width:250px;">基本情况</th>
<th width="200">续费课程</th>
<th width="80">续费级别</th>
<th width="80">续费金额</th>
<th width="80">最新进度</th>
<th width="90">负责人</th>
<th width="90">操作</th>
</tr>
<template v-if='dataObj&&dataObj.RList && dataObj.RList.length>0'>
<tr v-for=" ( item , index ) in dataObj.RList " :key="index">
......@@ -92,14 +92,30 @@
{{ item.CreateTime }}
</td>
<td>
<div class="text-blue cursor-pointer" @click="getStuBaseInfo(item)">
<template v-if="item.StuProfession&&item.StuProfession!=''">
<span class="text-blue cursor-pointer" style="cursor:pointer" @click="getStuBaseInfo(item,1)">
{{item.StuProfession}}
</div>
<q-tooltip :offset="[10, 10]">
点击修改
</q-tooltip>
</span>
</template>
<template v-else>
<a class="text-blue cursor-pointer" style="cursor:pointer" @click="getStuBaseInfo(item,1)">添加</a>
</template>
</td>
<td>
<div class="text-blue cursor-pointer" @click="getStuBaseInfo(item)">
{{ item.StuPurposeName }}
</div>
<template v-if="item.StuPurposeName&&item.StuPurposeName!=''">
<span class="text-blue cursor-pointer" style="cursor:pointer" @click="getStuBaseInfo(item,2)">
{{item.StuPurposeName}}
<q-tooltip :offset="[10, 10]">
点击修改
</q-tooltip>
</span>
</template>
<template v-else>
<a class="text-blue cursor-pointer" style="cursor:pointer" @click="getStuBaseInfo(item,2)">添加</a>
</template>
</td>
<td>
<span v-html="getTeacherManager(item)"></span>
......@@ -128,6 +144,7 @@
<a style="color:blue;cursor:pointer;" v-if="item.FollowList.length>2"
@click="item.IsShowFollowAll=!item.IsShowFollowAll">{{!item.IsShowFollowAll?"展开":"收起"}}</a>
</template>
<a class="text-blue cursor-pointer" style="cursor:pointer" @click="getStuBaseInfo(item,3)">&nbsp;添加</a>
</td>
<td>
<div v-for="(sItem,sIndex) in item.RenewOrderList" style="border-bottom:1px dashed #d1d1d1;"
......@@ -148,13 +165,10 @@
</div>
</td>
<td>
{{ item.CreateByName?item.CreateByName:'-' }}
{{item.NewLesson}}
</td>
<td>
<div class="text-blue cursor-pointer" @click="getStudentStudy(item)">
学习情况
</div>
{{ item.CreateByName?item.CreateByName:'-' }}
</td>
</tr>
</template>
......@@ -174,7 +188,7 @@
</studentFUForm>
<q-dialog v-model="isShowStuBaseInfo">
<q-card style="width: 450px;">
<q-card style="width:450px;">
<q-card-section class="row items-center q-pb-none">
<div class="text-h6">【{{customObj.StuName}}】</div>
<q-space />
......@@ -182,29 +196,30 @@
</q-card-section>
<q-separator />
<q-card-section>
<div style="width:100%;margin-bottom:15px;">
<div style="width:12%;display:inline-block;">职业:</div><div style="width:87%;display:inline-block;"><q-input filled v-model="customObj.StuProfession" dense ></q-input></div>
<div style="width:100%;margin-bottom:15px;" v-if="customObj.EditType==1">
<div style="width:13%;display:inline-block;">职业:</div>
<div style="width:86%;display:inline-block;">
<q-input filled v-model="customObj.StuProfession" dense></q-input>
</div>
<div style="width:100%;margin-bottom:15px;">
<div style="width:12%;display:inline-block;">目的: </div><div style="width:87%;display:inline-block;"><q-select filled v-model="customObj.StuPurpose" dense :options="goalsList" option-label="Name"
option-value="Id" emit-value map-options /></div>
</div>
<div style="width:100%;margin-bottom:15px;">
<div style="width:12%;display:inline-block;vertical-align:top;">跟进:</div>
<div style="width:87%;display:inline-block;"> <UeEditor
v-model="customObj.Remark"
class="q-pb-sm"
:config="config"
></UeEditor></div>
<div style="width:100%;margin-bottom:15px;" v-if="customObj.EditType==2">
<div style="width:13%;display:inline-block;">目的: </div>
<div style="width:86%;display:inline-block;">
<q-select filled v-model="customObj.StuPurpose" dense :options="goalsList" option-label="Name"
option-value="Id" emit-value map-options />
</div>
</div>
<div style="width:100%;margin-bottom:15px;" v-if="customObj.EditType==3">
<div style="width:13%;display:inline-block;vertical-align:top;">基本<br/>情况:</div>
<div style="width:86%;display:inline-block;">
<UeEditor v-model="customObj.Remark" class="q-pb-sm" :config="config"></UeEditor>
</div>
</div>
</q-card-section>
<q-separator />
<q-card-actions align="right" class="bg-white">
<q-btn class="q-mr-md" label="取消" @click="clearMsg()" />
<q-btn color="accent" class="q-mr-md" label="确定" @click="saveStu()"
:loading="stuloading" />
<q-btn color="accent" class="q-mr-md" label="确定" @click="saveStu()" :loading="stuloading" />
</q-card-actions>
</q-card>
</q-dialog>
......@@ -255,8 +270,8 @@
return {
isShowStuFU: false,
isShowStuRight: false,
isShowStuBaseInfo:false,
stuloading:false,
isShowStuBaseInfo: false,
stuloading: false,
//学习目的列表
goalsList: [],
config: {
......@@ -274,8 +289,9 @@
StuId: 0,
StuProfession: "", //职业
StuPurpose: "", //学习目的
Remark:"",
StuName:"",
Remark: "",
StuName: "",
EditType: 0, //1-修改职业,2-修改目的,3-添加跟进
},
};
},
......@@ -315,16 +331,6 @@
}
this.isShowStuRight = true;
},
getStudentStudy(obj) {
console.log("obj",obj);
// var qObj = {
// HeadTeacherId: item.AccountId,
// StartTime: this.msg.YearStr + "-" + this.msg.MonthStr + "-01",
// EndTime: this.msg.YearStr + "-" + this.msg.MonthStr + "-" + lastDay,
// };
// this.OpenNewUrl('/teacher/studentStudy', obj)
},
//清除
clearMsg() {
this.customObj.Remark = "";
......@@ -333,11 +339,35 @@
this.customObj.Remark = "";
this.customObj.StuProfession = "";
this.customObj.StuPurpose = "";
this.customObj.EditType = 0;
this.stuloading = false;
this.isShowStuBaseInfo = false;
},
//保存学员信息
saveStu() {
if (this.customObj.EditType == 1) {
if (this.customObj.StuProfession == '') {
this.$q.notify({
type: "negative",
position: "top",
timeout: 2000,
message: "请填写职业"
});
return;
}
}
if (this.customObj.EditType == 2) {
if (this.customObj.StuPurpose == '') {
this.$q.notify({
type: "negative",
position: "top",
timeout: 2000,
message: "请选择学习目的"
});
return;
}
}
if (this.customObj.EditType == 3) {
if (this.customObj.Remark == "") {
this.$q.notify({
type: "negative",
......@@ -347,7 +377,8 @@
});
return;
}
this.stuloading=true;
}
this.stuloading = true;
saveStudentBaseInfo(this.customObj).then(res => {
if (res.Code == 1) {
this.$q.notify({
......@@ -360,21 +391,22 @@
this.$emit("update");
this.$emit("success");
this.$emit("getrecord");
this.stuloading=false;
this.isShowStuBaseInfo=false;
this.stuloading = false;
this.isShowStuBaseInfo = false;
this.clearMsg();
}
});
},
//点击学生姓名弹出
getStuBaseInfo(obj) {
getStuBaseInfo(obj, showType) {
if (obj) {
this.customObj.StuId = obj.StuId;
this.customObj.StuName = obj.StuName;
this.customObj.StuProfession = obj.StuProfession;
this.customObj.StuPurpose = obj.StuPurpose;
this.customObj.EditType = showType;
}
this.stuloading=false;
this.stuloading = false;
this.isShowStuBaseInfo = true;
},
//关闭弹窗
......
......@@ -2014,11 +2014,7 @@
data() {
return {
saveMsg: [
// {
// Type: 3,
// Content:'http://192.168.10.214:8130/EduSystem/Test/Upload/Temporary/202311131052426600000000001.png',
// Url:'http://192.168.10.214:8130/EduSystem/Test/Upload/Temporary/202311131052426600000000001.png'
// }
],
TeamShouZhi: false,
F_Disbursement_Schedule: false,
......
......@@ -170,6 +170,7 @@
font-weight: 600;
margin-right: 10px;
}
</style>
<template>
<div :class="[
......@@ -290,6 +291,19 @@
:options="MyTransListData" option-label="StuName" @input="resetSearch" clearable option-value="StuId"
emit-value map-options />
</div>
<div class="col-3">
<q-select filled v-model="msg.Teacher_Id" dense use-input label="班主任" :options="MyTeacherListData"
option-label="EmployeeName" @input="resetSearch" @filter="filterTeacher" clearable option-value="Id"
emit-value map-options>
<template v-slot:no-option>
<q-item>
<q-item-section class="text-grey">
未找到相关数据
</q-item-section>
</q-item>
</template>
</q-select>
</div>
</div>
</div>
<div class="col row wrap q-gutter-x-md" v-if="staticObj && !isComponent">
......@@ -426,11 +440,7 @@
<q-item-label overline>添加事件</q-item-label>
</q-item-section>
</q-item>
<!-- <q-item dense clickable v-close-popup @click="showChangeCourse(props.row)">
<q-item-section>
<q-item-label overline >跳课</q-item-label>
</q-item-section>
</q-item> -->
</q-list>
</q-btn-dropdown>
</div>
......@@ -559,7 +569,8 @@
GuestState: "", //学员状态
CreateType: "", //客户来源
StuChannelId: "", //收客渠道
StuSourceId: ""
StuSourceId: "",
Teacher_Id: "", //班主任
},
pageCount: 0,
columns: [{
......@@ -569,7 +580,6 @@
align: "left",
required: true
},
{
name: "GuestName",
label: "姓名",
......@@ -812,7 +822,9 @@
courseName: "",
isShowChangeCourse: false,
ChangeCourseObj: {},
staticObj: {} //学生统计信息
staticObj: {}, //学生统计信息
MyTeacherListData: [], //查询老师列表
AllTeacherList: [], //所有教师列表
};
},
created() {
......@@ -864,6 +876,7 @@
this.GetStuChannelList();
this.GetCustomerList();
this.getEmployeeList();
this.findData();
} else {
this.msg.rowsPerPage = this.pageSize;
this.loading = this.outLoading;
......@@ -871,6 +884,18 @@
}
},
methods: {
//获取班主任
findData() {
queryEmployee({
AccountTypeStr: "2",
IsLeave: 1
}).then(res => {
if (res.Code == 1) {
this.MyTeacherListData = res.Data;
this.AllTeacherList = res.Data;
}
})
},
//获取收客渠道
GetStuChannelList() {
GetStuChannelList({}).then(res => {
......@@ -1010,6 +1035,18 @@
}
});
},
filterTeacher(val, update) {
update(() => {
if (val === "") {
this.MyTeacherListData = JSON.parse(JSON.stringify(this.AllTeacherList));
} else {
const needle = val.toLowerCase();
this.MyTeacherListData = this.AllTeacherList.filter(
v => v.EmployeeName.toLowerCase().indexOf(needle) > -1
);
}
});
},
//筛选课程
filterCourse(val, update) {
update(() => {
......@@ -1268,7 +1305,9 @@
}
}
};
</script>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
......@@ -57,152 +57,27 @@
<q-input @keyup.enter.native="resetSearch" dense clearable filled v-model="msg.StuName" label="昵称"
maxlength="20" />
</div>
<div class="col-3">
<q-input @keyup.enter.native="resetSearch" dense clearable filled v-model="msg.StuRealMobile" label="电话"
maxlength="20" />
</div>
<div class="col-3">
<q-input @keyup.enter.native="resetSearch" dense clearable filled v-model="msg.QQ" label="QQ"
maxlength="20" />
</div>
<div class="col-3">
<q-input @keyup.enter.native="resetSearch" dense clearable filled v-model="msg.WeChatNo" label="微信号"
maxlength="20" />
</div>
<div class="col-3">
<q-select @input="resetSearch" filled v-model="msg.StuType" dense clearable :options="customTypeList"
option-label="Name" option-value="Id" emit-value map-options label="客户类型" />
</div>
<div class="col-3">
<q-select @input="resetSearch" dense filled v-model="msg.AdvisorStatus" :options="AdvConfigList"
option-label="Name" option-value="Id" emit-value map-options label="当前状态" clearable />
</div>
<div class="col-3">
<q-select filled v-model="msg.StuPurpose" dense @input="resetSearch" clearable :options="goalsList"
option-label="Name" option-value="Id" emit-value map-options label="学习目的" />
</div>
<div class="col-3">
<q-field filled dense>
<template v-slot:control>
<el-date-picker v-model="dateArray" size="mini" @change="resetSearch" value-format="yyyy-MM-dd"
type="daterange" style="border:none;" range-separator="至" start-placeholder="跟进开始时间"
end-placeholder="跟进结束时间" />
</template>
</q-field>
</div>
<template v-if="morequery">
<div class="col-3">
<q-select @input="resetSearch" dense filled option-value="SId" option-label="SName" v-model="msg.School_Id"
:options="CompanyList" emit-value map-options label="校区" />
</div>
<div class="col-3">
<q-select @input="resetSearch" filled option-value="CourseId" option-label="CourseName"
v-model="msg.CourseId" clearable emit-value use-input :options="myCourseList" label="课程" dense map-options
@filter="filterFnkec" />
</div>
<div class="col-3">
<q-select @input="resetSearch" dense filled option-value="Id" option-label="EmployeeName"
v-model="msg.ConsultantId" clearable :options="RoleListData" emit-value map-options label="课程顾问" />
</div>
<!-- <div class="col-3">
<q-select @input="resetSearch" dense filled option-value="Id" option-label="Name"
v-model="msg.StuGuestState" clearable :options="hetongList" emit-value map-options label="合同状态" />
</div> -->
<div class="col-3">
<q-select @input="msg.StuSourceId='',msg.StuChannel='',resetSearch()" dense clearable filled
option-value="Id" option-label="Name" v-model="msg.CreateType" :options="customFromList" emit-value
map-options label="客户来源" />
</div>
<div class="col-3" v-if="msg.CreateType==1">
<q-select filled v-model="msg.StuChannel" @input="resetSearch" label="收客渠道" dense :options="StuChannelList"
option-label="Name" option-value="Id" emit-value map-options use-input clearable
@filter="filterStuChannel">
<template v-slot:no-option>
<q-item>
<q-item-section class="text-grey">
未找到相关数据
</q-item-section>
</q-item>
</template>
</q-select>
</div>
<div class="col-3" v-if="msg.CreateType==2">
<q-select filled v-model="msg.StuSourceId" dense :options="customList" use-input label="关联同行"
@filter="filterFn" option-label="CustomerName" @input="resetSearch" clearable option-value="CustomerId"
emit-value map-options>
<template v-slot:no-option>
<q-item>
<q-item-section class="text-grey">
未找到相关数据
</q-item-section>
</q-item>
</template>
</q-select>
</div>
<div class="col-3" v-if="msg.CreateType==3">
<q-select filled v-model="msg.StuSourceId" dense @filter="filterEmployee" label="介绍人" use-input
:options="myEmployeeList" option-label="EmployeeName" @input="resetSearch" clearable option-value="Id"
emit-value map-options />
</div>
<div class="col-3" v-if="msg.CreateType==4">
<q-select filled v-model="msg.StuSourceId" dense use-input @filter="filterStudent" label="转介人"
:options="MyTransListData" option-label="StuName" @input="resetSearch" clearable option-value="StuId"
emit-value map-options />
<q-select filled v-model="msg.QGuestState" dense use-input label="状态" :options="isMyStuList"
option-label="Name" @input="resetSearch" clearable option-value="Id" emit-value map-options />
</div>
<div class="col-3">
<q-select filled v-model="msg.HeadTeacherId" dense use-input label="班主任" :options="MyTeacherListData"
option-label="EmployeeName" @input="resetSearch" clearable option-value="Id" emit-value map-options />
</div>
<div class="col-3">
(
<q-radio size="xs" v-model="msg.Q_FType" val="1" label="范围内有跟进记录" @input='resetSearch' />
<q-radio size="xs" v-model="msg.Q_FType" val="2" label="范围内没有跟进记录" @input='resetSearch' />
option-label="EmployeeName" @input="resetSearch" clearable option-value="Id" @filter="filterTeacher"
emit-value map-options />
</div>
</template>
</div>
</div>
<div style="width: 100%;text-align: right;padding: 0 20px;margin-bottom: 10px;">
<span @click="morequery=!morequery" style="display:inline-flex;align-items:center;cursor: pointer;">
<q-btn color="accent" class="q-mr-md" size="sm" icon="download" label="下载" v-if="isHaveDownLoad"
@click="downloadStudentFollow" />
<span style="margin-right:5px;color: #089bab;">高级查询</span>
<img v-show="!morequery" style="width:12px;height:12px" src="../../assets/images/more.png" alt="">
<img v-show="morequery" class="roatImg" style="width:12px;height:12px" src="../../assets/images/more.png"
alt="">
</span>
</div>
<!-- <div class="col row wrap q-gutter-x-md" v-if="dataList&&dataList.Stat" >
<div class="col stics">
<span class="stics-name">学生总数</span>
<span>{{dataList.Stat.StuTNum?dataList.Stat.StuTNum:0}}人</span>
</div>
<div class="col stics">
<span class="stics-name">续费数量</span>
<span style="color: #F72E52">{{dataList.Stat.RenewNum?dataList.Stat.RenewNum:0}}人</span>
</div>
<div class="col stics">
<span class="stics-name">新生数量</span>
<span style="color:#2961FE;">{{dataList.Stat.NewNum?dataList.Stat.NewNum:0}}人</span>
</div>
<div class="col stics">
<span class="stics-name">学习中数量</span>
<span>{{dataList.Stat.StudyNum?dataList.Stat.StudyNum:0}}人</span>
</div>
<div class="col stics">
<span class="stics-name">毕业数量</span>
<span>{{dataList.Stat.GraduateNum?dataList.Stat.GraduateNum:0}}人</span>
</div>
<div class="col stics">
<span class="stics-name">停课数量</span>
<span>{{dataList.Stat.SuspendNum?dataList.Stat.SuspendNum:0}}人</span>
</div>
<div class="col stics">
<span class="stics-name">退学数量</span>
<span>{{dataList.Stat.DropOutNum?dataList.Stat.DropOutNum:0}}人</span>
</div>
</div> -->
<div style="width: 100%;margin-top: 20px">
<stufollowlist :dataObj="dataList" :RListlength="RListlength" @success="refreshPage" :titlelist="titlelist"
:loading="loading" ref="stuFollowList" :AuthObj="AuthObj"></stufollowlist>
......@@ -222,7 +97,6 @@
queryEmployee,
} from "../../api/users/user";
import {
queryGuestStateList,
CreateTypeList,
GetStuChannelList,
GetCustomerList,
......@@ -263,26 +137,10 @@
pageSize: 10,
rowsPerPage: 10,
StuName: "",
StuRealMobile: '',
QQ: '',
WeChatNo: '',
StuType: '', //学生类型
StuGuestState: '0', //合同状态
SFTime: '',
EFTime: '',
StuStage: '', //客户状态
Q_FType: '1', //跟进类型 1范围内有跟进记录 2范围内没有跟进记录
CreateIds: [],
School_Id: '-1', //校区
CourseId: '', //课程
ConsultantId: '', //课程顾问
CreateType: '', //客户来源
StuChannel: "", //收客渠道
StuSourceId: '',
StuPurpose: '', //学习目的
HeadTeacherId: '', //老师
QueryTpye: 2, //老师查询
AdvisorStatus: "", //当前状态
QGuestState: 0, //学员状态
},
loading: false,
dataList: null, //列表数据
......@@ -294,24 +152,12 @@
Name: '不限'
}, {
Id: '1',
Name: '是'
}, {
Id: '0',
Name: '否'
}, ],
hetongList: [{
Id: '1',
Name: '正常'
Name: '未毕业'
}, {
Id: '2',
Name: '退学'
}, {
Id: '5',
Name: '停课'
}, {
Id: '7',
Name: '毕业'
}, ],
Name: '已毕业'
}],
dateArray: [], //日期数组
RListlength: 0,
titlelist: [],
......@@ -334,6 +180,7 @@
MyTransListData: [],
goalsList: [], //学习目的列表
MyTeacherListData: [], //查询老师列表
AllTeacherList: [], //所有教师
AdvConfigList: [], //客户状态列表
AuthObj: {
isShowSaleInfo: false,
......@@ -386,6 +233,18 @@
this.getList(); //获取列表
},
methods: {
filterTeacher(val, update) {
update(() => {
if (val === "") {
this.MyTeacherListData = JSON.parse(JSON.stringify(this.AllTeacherList));
} else {
const needle = val.toLowerCase();
this.MyTeacherListData = this.AllTeacherList.filter(
v => v.EmployeeName.toLowerCase().indexOf(needle) > -1
);
}
});
},
//获取状态列表
getAdvConfigList() {
let msg = {
......@@ -409,6 +268,7 @@
}).then(res => {
if (res.Code == 1) {
this.MyTeacherListData = res.Data;
this.AllTeacherList = res.Data;
}
})
},
......
......@@ -95,7 +95,6 @@
<input v-model="uploadParm.params.ExamName" class="examList-popup-name" placeholder="请输入考试名称"/>
<div class="diy-upload-class">
<!-- https://jjswapi.oytour.com -->
<!-- http://192.168.10.36:8082 -->
<el-upload class="avatar-uploader"
:data="uploadParm"
name="myfile"
......
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