Commit e7a2a2b9 authored by 罗超's avatar 罗超

1

parent 0692a8d7
...@@ -239,3 +239,14 @@ export function setCustomerCareOf(data) { ...@@ -239,3 +239,14 @@ export function setCustomerCareOf(data) {
data data
}) })
} }
/**
* 我的客户批量转入
*
*/
export function setMyStudentToGuest(data) {
return request({
url: 'order/SetMyStudentToGuest',
method: 'post',
data
})
}
\ No newline at end of file
...@@ -2209,6 +2209,7 @@ export default { ...@@ -2209,6 +2209,7 @@ export default {
OrderId: item.OrderId, OrderId: item.OrderId,
ClassId: item.ClassId, ClassId: item.ClassId,
SourceId: item.SourceId, SourceId: item.SourceId,
CustomerId:item.CustomerId,
isShow: this.AuthorityObj.isShowGuestBtn isShow: this.AuthorityObj.isShowGuestBtn
} }
}); });
......
<template>
<div class="batchTransfer">
<q-dialog
v-model="persistent"
persistent
transition-show="scale"
transition-hide="scale"
@hide="$emit('close')"
>
<q-card style="width: 800px;max-width:800px;">
<q-card-section class="row items-center q-pb-none">
<div class="text-h6">批量录入</div>
<q-space />
<q-btn icon="close" flat round dense v-close-popup />
</q-card-section>
<q-card-section class="row items-center q-pb-none">
<div class="page-search row items-center">
<div class="col row wrap q-mr-lg q-col-gutter-md">
<div class="col-6">
<q-input
@input="resetSearch"
clearable
filled
v-model="msg.StuName"
label="昵称"
maxlength="20"
/>
</div>
<div class="col-6">
<q-input
@input="resetSearch"
clearable
filled
v-model="msg.StuTel"
label="电话"
maxlength="20"
/>
</div>
<div class="col-6">
<q-select
@input="resetSearch"
filled
v-model="msg.StuStage"
:options="customState"
option-label="Name"
option-value="Id"
emit-value
map-options
label="客户状态"
clearable
/>
</div>
<div class="col-6">
<q-field filled>
<template v-slot:control>
<el-date-picker
v-model="dateArray"
@change="resetSearch"
value-format="yyyy-MM-dd"
type="daterange"
style="border:none;"
range-separator="至"
start-placeholder="开始时间"
end-placeholder="结束时间"
popper-class="popper"
/>
</template>
</q-field>
</div>
</div>
</div>
</q-card-section>
<q-card-section class="q-pt-none scroll">
<q-table
:pagination="pageMsg"
:loading="loading"
no-data-label="暂无相关数据"
flat
selection="multiple"
:selected.sync="selection"
class="sticky-right-column-table sticky-tow-column-table"
separator="none"
:data="data"
:columns="columns"
row-key="StuId"
>
<template v-slot:top="props"> </template>
<template v-slot:body-cell-StuSex="props">
<q-td :props="props">
<q-badge
:color="props.value == 1 ? 'negative' : 'primary'"
:label="props.value == 1 ? '女' : '男'"
/>
</q-td>
</template>
<template v-slot:body-cell-AssistList="props">
<q-td auto-width :props="props">
<template v-if="props.row.AssistList">
<template v-if="props.row.AssistList.length == 1">
{{ props.row.AssistList[0].AssistName }}
</template>
<template v-if="props.row.AssistList.length > 1">
{{ props.row.AssistList[0].AssistName }}
<span class="stulistNum">
{{ props.row.AssistList.length }}
<q-popup-proxy>
<q-banner>
<div style="max-height:600px;overflow-y:auto;">
<table
class="stuListTable"
style="border-collapse:collapse;"
>
<tr>
<th>协同人</th>
</tr>
<tr
v-for="(sItem, sIndex) in props.row.AssistList"
style="border-bottom:1px dashed #d1d1d1;"
:key="sIndex"
>
<td>{{ sItem.AssistName }}</td>
</tr>
</table>
</div>
</q-banner>
</q-popup-proxy>
</span>
</template>
<template v-if="props.row.AssistList.length == 0">
</template>
</template>
</q-td>
</template>
<template v-slot:bottom>
<q-pagination
class="full-width justify-end"
v-model="msg.pageIndex"
color="primary"
:max="pageCount"
:input="true"
@input="changePage"
/>
</template>
</q-table>
</q-card-section>
<q-card-actions align="right" class="bg-white">
<q-btn
label="取消"
flat
color="grey-10"
style="font-weight:400 !important"
v-close-popup
/>
<q-btn
label="保存"
color="accent q-px-md"
style="font-weight:400 !important"
@click="save"
:disable="selection.length == 0"
/>
</q-card-actions>
</q-card>
</q-dialog>
</div>
</template>
<script>
import {
getStudentPage,
getSchoolDropdown,
deleteStudent,
createStudentAccount,
queryStuStageList
} from "../../../api/school/index";
import { setMyStudentToGuest } from "../../../api/sale/peemanagement";
export default {
props: {
OrderId:{
type:[Number,String],
default:0
}
},
components: {},
data() {
return {
persistent: true,
data: [],
loading: true,
msg: {
pageIndex: 1,
pageSize: 5,
rowsPerPage: 12,
StuName: "",
StuTel: "",
Status: "-1",
CreateBy: "",
IsQueryMyStu: 1,
StuStage: "", //客户阶段
StartTime: "", //开始时间
EndTime: "", //结束时间
CustomerId: 0,
BelongType: 2, //归属类型
QCustomerType :0,
},
dateArray: [], //日期数组
pageCount: 0,
//客户阶段状态列表
customState: [],
myCustomerList: [], //同行列表
allCustomerList: [], //所有同行列表
dateArray: [], //日期数组
pageCount: 0,
selection: [],
pageMsg: {
rowsPerPage: 12
},
columns: [
{
name: "StuName",
required: true,
label: "昵称",
align: "left",
field: row => row.StuName
},
{
name: "StuSex",
label: "性别",
field: "StuSex",
align: "left"
},
{
name: "StuTel",
label: "电话",
field: "StuTel",
align: "left"
},
{
name: "StuStageName",
label: "客户阶段",
field: "StuStageName",
align: "left"
},
{
name: "StuProfession",
label: "职业",
field: "StuProfession",
align: "left"
},
{
name: "StuEducationName",
label: "学历",
field: "StuEducationName",
align: "left"
},
{
name: "StuPurposeName",
label: "目的",
field: "StuPurposeName",
align: "left"
},
{
name: "CreateByName",
label: "负责人",
align: "left",
field: "CreateByName"
},
{
name: "AssistList",
label: "协同人",
align: "left",
field: "AssistList"
},
{
name: "CreateTypeStr",
label: "客户来源",
field: "CreateTypeStr",
align: "left"
},
{
name: "StuSourceIdName",
label: "来源关联人",
field: "StuSourceIdName",
align: "left"
},
{
name: "StuChannelName",
label: "收客渠道",
field: "StuChannelName",
align: "left"
},
{
name: "VisitCount",
label: "到访次数",
field: "VisitCount",
align: "left"
},
{
name: "TrialLessonCount",
label: "试听次数",
field: "TrialLessonCount",
align: "left"
},
{
name: "CreateTimeStr",
label: "创建时间",
field: "CreateTimeStr",
align: "left"
},
{
name: "CustomerName",
label: "所属同行",
field: "CustomerName",
align: "left"
}
],
};
},
created() {
if (this.$route.query && this.$route.query.CustomerId) {
this.msg.CustomerId = this.$route.query.CustomerId;
}else{
this.msg.QCustomerType=1
}
this.getSchool();
this.getStuStageList();
},
mounted() {
this.getStudent();
},
methods: {
//获取客户阶段列表
getStuStageList() {
queryStuStageList().then(res => {
this.customState = res.Data;
});
},
resetSearch() {
this.msg.pageIndex = 1;
this.getStudent();
},
changePage(val) {
this.msg.pageIndex = val;
this.getStudent();
},
getSchool() {
getSchoolDropdown({}).then(res => {
this.schoolList = res.Data;
});
},
getStudent() {
if (this.dateArray && this.dateArray.length > 0) {
this.msg.StartTime = this.dateArray[0];
this.msg.EndTime = this.dateArray[1];
} else {
this.msg.StartTime = "";
this.msg.EndTime = "";
}
this.loading = true;
getStudentPage(this.msg)
.then(res => {
this.loading = false;
this.data = res.Data.PageData;
this.pageCount = res.Data.PageCount;
})
.catch(() => {
this.loading = false;
});
},
save() {
const setMsg={
OrderId:this.OrderId,
StuIds:this.selection.map(e=>e.StuId).toString()
}
setMyStudentToGuest(setMsg).then(res => {
if(res.Code==1){
this.persistent=false
this.$emit("success")
}
});
}
}
};
</script>
<style scoped>
/deep/.el-input__inner,
/deep/.el-range-input {
background-color: transparent;
border: none;
}
</style>
<style>
.popper {
z-index: 9999 !important;
}
::-webkit-scrollbar {
width: 5px;
height: 5px;
}
::-webkit-scrollbar-track {
background: #fff;
border-radius: 2px;
}
::-webkit-scrollbar-thumb {
background: #444;
border-radius: 10px;
}
::-webkit-scrollbar-thumb:hover {
background: #999;
}
::-webkit-scrollbar-corner {
background: #204754;
}
</style>
<style>
.page-content p {
margin: 0 !important;
}
.quetion_Title {
background: transparent !important;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
width: 400px;
}
</style>
<template>
<div class="page-body">
<div class="page-search row items-center">
<div class="col row wrap q-mr-lg q-col-gutter-md">
<div class="col-3">
<q-input
@input="resetSearch"
filled
clearable
v-model="msg.CustomerName"
label="同业名称"
maxlength="20"
/>
</div>
<div class="col-3">
<q-input
@input="resetSearch"
filled
clearable
v-model="msg.CustomerId"
label="同业ID"
maxlength="20"
/>
</div>
<div class="col-3">
<q-input
@input="resetSearch"
filled
clearable
v-model="msg.ContactNumber"
label="电话"
maxlength="20"
/>
</div>
<div class="col-3">
<q-select
@input="resetSearch"
clearable
filled
v-model="msg.ApproveState"
:options="ApproveStateList"
emit-value
map-options
label="审核状态"
/>
</div>
</div>
</div>
<div class="page-content">
<div>
<q-tabs
style="margin-bottom:20px;"
v-model="tabCheck"
@input="resetSearch()"
narrow-indicator
dense
align="left"
class="text-primary"
>
<q-tab :ripple="false" :name="1" label="正式客户" />
<q-tab :ripple="false" :name="2" label="非正式客户" />
<q-tab :ripple="false" :name="3" label="未通过客户" />
<q-tab :ripple="false" :name="4" label="黑名单客户" />
</q-tabs>
</div>
<b2bcustomlist
:dataList="dataList"
:authObj="authObj"
:loading="loading"
@success="getList"
:visibleColumns="visibleColumns"
sticky="sticky-tow-column-table sticky-right-column-table"
></b2bcustomlist>
<q-pagination
class="full-width justify-end"
v-model="msg.pageIndex"
color="primary"
:max="pageCount"
:input="true"
@input="changePage"
/>
</div>
</div>
</template>
<script>
import { GetCustomerPage, RemoveCustomer } from "../../api/sale/peemanagement";
import b2bcustomlist from "../../components/sale/b2bcustomlist";
export default {
meta: {
title: "同行管理"
},
components: {
b2bcustomlist
},
data() {
return {
pageCount: 0,
msg: {
pageIndex: 1,
pageSize: 12,
rowsPerPage: 12,
CustomerName: "", //客户名称
ContactNumber: "", //联系电话
ApproveState: "", //审核状态
QCustomerState: "" //账号状态
},
loading: false,
visibleColumns: [
"CustomerName",
"CustomerType",
"EnterpriseName",
"ContactNumber",
"StuNum",
"OrderNum",
"OrderSales",
"ApproveStateStr",
"CreateByName",
"CreateTimeStr",
],
tabCheck: 1,
//审核状态列表
ApproveStateList: [
{
label: "通过",
value: "1"
},
{
label: "拒绝",
value: "2"
}
],
dataList: [],
//判断显示
authObj: {
isShowEdit: true, //显示新增、修改、删除
isShowBankBook: true, //显示幸福存折
isShowRebate: true //是否显示返佣
}
};
},
created() {
},
mounted() {
this.getList();
},
methods: {
//重新查询
resetSearch() {
this.msg.pageIndex = 1;
this.getList();
},
//翻页
changePage(val) {
this.msg.pageIndex = val;
this.getList();
},
//获取分页数据
getList() {
this.msg.QCustomerState = this.tabCheck;
GetCustomerPage(this.msg)
.then(res => {
this.dataList = res.Data.PageData;
this.loading = false;
this.pageCount = res.Data.PageCount;
})
.catch(() => {
this.loading = false;
});
}
}
};
</script>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
<style> <style>
._addUpload_stu { ._addUpload_stu {
display: block; display: block;
margin-top: 15px; margin-top: 15px;
} }
._addUpload_stu img { ._addUpload_stu img {
width: 100%; width: 100%;
} }
._addUpload_stu>div { ._addUpload_stu > div {
display: inline-block; display: inline-block;
width: 138px; width: 138px;
height: 92px; height: 92px;
...@@ -19,22 +19,22 @@ ...@@ -19,22 +19,22 @@
padding: 5px; padding: 5px;
margin-right: 10px; margin-right: 10px;
position: relative; position: relative;
} }
._addUpload_stu>div:hover { ._addUpload_stu > div:hover {
background-color: #f5f5f5; background-color: #f5f5f5;
} }
.stuCard .el-upload-dragger { .stuCard .el-upload-dragger {
font-size: 28px; font-size: 28px;
color: #8c939d; color: #8c939d;
width: 126px; width: 126px;
height: 80px; height: 80px;
line-height: 41px; line-height: 41px;
text-align: center; text-align: center;
} }
._addUpload_stu .icon-guanbi1 { ._addUpload_stu .icon-guanbi1 {
font-size: 12px; font-size: 12px;
color: white; color: white;
display: inline-block; display: inline-block;
...@@ -48,47 +48,80 @@ ...@@ -48,47 +48,80 @@
width: 20px; width: 20px;
text-align: center; text-align: center;
line-height: 20px; line-height: 20px;
} }
.el-image-viewer__wrapper { .el-image-viewer__wrapper {
z-index: 9999 !important; z-index: 9999 !important;
} }
.pri_Color { .pri_Color {
color: var(--q-color-primary); color: var(--q-color-primary);
} }
</style> </style>
<template> <template>
<div class="page-body"> <div class="page-body">
<div class="page-content student_List"> <div class="page-content student_List">
<q-table :pagination="msg" :loading="loading" no-data-label="暂无相关数据" flat <q-table
class="stickycreatInsertStr-column-table" separator="none" :data="data" :columns="columns" row-key="name" :pagination="msg"
:visible-columns="visibleColumns"> :loading="loading"
no-data-label="暂无相关数据"
flat
class="stickycreatInsertStr-column-table"
separator="none"
:data="data"
:columns="columns"
row-key="name"
:visible-columns="visibleColumns"
>
<template v-slot:top="props"> <template v-slot:top="props">
<div class="col-2 q-table__title" @click="goreturn" style="cursor:pointer">返回</div> <div
class="col-2 q-table__title"
@click="goreturn"
style="cursor:pointer"
>
返回
</div>
<q-space /> <q-space />
<div class="page-option"> <div class="page-option">
<q-btn color="accent" size="sm" v-if="isShowBtn" icon="add" label="新增名单" @click="addxue" /> <q-btn
color="accent"
size="sm"
v-if="isShowBtn"
icon="add"
label="批量录入"
@click="showBetchTransfer = true"
class="q-mr-md"
/>
<q-btn
color="accent"
size="sm"
v-if="isShowBtn"
icon="add"
label="新增名单"
@click="addxue"
/>
</div> </div>
</template> </template>
<template v-slot:body-cell-Sex="props"> <template v-slot:body-cell-Sex="props">
<q-td :props="props"> <q-td :props="props">
<span>{{props.row.Sex==1?'男':'女'}}</span> <span>{{ props.row.Sex == 1 ? "男" : "女" }}</span>
</q-td> </q-td>
</template> </template>
<template v-slot:body-cell-CourseName="props"> <template v-slot:body-cell-CourseName="props">
<q-td :props="props"> <q-td :props="props">
<span>{{props.row.CourseName}} <span
<div style="color:red;" v-if="props.row.IsChaBan==1"> >{{ props.row.CourseName }}
<div style="color:red;" v-if="props.row.IsChaBan == 1">
插班报入 插班报入
<q-tooltip :offset="[10, 10]"> <q-tooltip :offset="[10, 10]">
              开始课时:{{props.row.StartClassHours}}<br  /> 开始课时:{{ props.row.StartClassHours }}<br />
              课程: {{props.row.CourseName}}<br  /> 课程: {{ props.row.CourseName }}<br />
              生效日期: {{props.row.EffectTime}}<br  /> 生效日期: {{ props.row.EffectTime }}<br />
              生效状态: {{props.row.EffectStatusStr}}<br  /> 生效状态: {{ props.row.EffectStatusStr }}<br />
              <template v-if="props.row.UpOrderId&&props.row.UpOrderId>0"> <template
                前置订单: {{props.row.UpOrderId}}<br  /> v-if="props.row.UpOrderId && props.row.UpOrderId > 0"
             </template> >
前置订单: {{ props.row.UpOrderId }}<br />
</template>
</q-tooltip> </q-tooltip>
</div> </div>
</span> </span>
...@@ -98,190 +131,539 @@ ...@@ -98,190 +131,539 @@
<q-td> <q-td>
<el-popover placement="bottom" title="" width="350" trigger="hover"> <el-popover placement="bottom" title="" width="350" trigger="hover">
<div style="width:300px;height:200px;"> <div style="width:300px;height:200px;">
<template v-if="props.row.BackClassList&&props.row.BackClassList.length>0"> <template
<div>退课单据</div><br /> v-if="
<span v-for="(item,index) in props.row.BackClassList" :key="index" props.row.BackClassList &&
props.row.BackClassList.length > 0
"
>
<div>退课单据</div>
<br />
<span
v-for="(item, index) in props.row.BackClassList"
:key="index"
style="cursor:pointer;color:blue;text-decoration:underline;" style="cursor:pointer;color:blue;text-decoration:underline;"
@click="goEduReceiptInfo(item.Id)">{{item.Id}}</span> @click="goEduReceiptInfo(item.Id)"
>{{ item.Id }}</span
>
</template> </template>
<template v-if="props.row.StopClassList&&props.row.StopClassList.length>0"> <template
<div>停课单据</div><br /> v-if="
<span v-for="(item,index) in props.row.StopClassList" :key="index" props.row.StopClassList &&
props.row.StopClassList.length > 0
"
>
<div>停课单据</div>
<br />
<span
v-for="(item, index) in props.row.StopClassList"
:key="index"
style="cursor:pointer;color:blue;text-decoration:underline;" style="cursor:pointer;color:blue;text-decoration:underline;"
@click="goEduReceiptInfo(item.Id)">{{item.Id}}</span> @click="goEduReceiptInfo(item.Id)"
>{{ item.Id }}</span
>
</template> </template>
<template v-if="props.row.InvitationClassList&&props.row.InvitationClassList.length>0"> <template
<div>临时上课邀请单据</div><br /> v-if="
<span v-for="(item,index) in props.row.InvitationClassList" :key="index" props.row.InvitationClassList &&
props.row.InvitationClassList.length > 0
"
>
<div>临时上课邀请单据</div>
<br />
<span
v-for="(item, index) in props.row.InvitationClassList"
:key="index"
style="cursor:pointer;color:blue;text-decoration:underline;" style="cursor:pointer;color:blue;text-decoration:underline;"
@click="goEduReceiptInfo(item.Id)">{{item.Id}}</span> @click="goEduReceiptInfo(item.Id)"
>{{ item.Id }}</span
>
</template> </template>
<template v-if="props.row.OrderTransClassList&&props.row.OrderTransClassList.length>0"> <template
<div>订单转班单据</div><br /> v-if="
<span v-for="(item,index) in props.row.OrderTransClassList" :key="index" props.row.OrderTransClassList &&
props.row.OrderTransClassList.length > 0
"
>
<div>订单转班单据</div>
<br />
<span
v-for="(item, index) in props.row.OrderTransClassList"
:key="index"
style="cursor:pointer;color:blue;text-decoration:underline;" style="cursor:pointer;color:blue;text-decoration:underline;"
@click="goEduReceiptInfo(item.Id)">{{item.Id}}</span> @click="goEduReceiptInfo(item.Id)"
>{{ item.Id }}</span
>
</template> </template>
<template v-if="props.row.OrderSplitClassList&&props.row.OrderSplitClassList.length>0"> <template
<div>订单分拆单据</div><br /> v-if="
<span v-for="(item,index) in props.row.OrderSplitClassList" :key="index" props.row.OrderSplitClassList &&
props.row.OrderSplitClassList.length > 0
"
>
<div>订单分拆单据</div>
<br />
<span
v-for="(item, index) in props.row.OrderSplitClassList"
:key="index"
style="cursor:pointer;color:blue;text-decoration:underline;" style="cursor:pointer;color:blue;text-decoration:underline;"
@click="goEduReceiptInfo(item.Id)">{{item.Id}}</span> @click="goEduReceiptInfo(item.Id)"
>{{ item.Id }}</span
>
</template> </template>
</div> </div>
<span slot="reference" class="pri_Color" v-if="(props.row.BackClassList&&props.row.BackClassList.length>0)||(props.row.StopClassList&&props.row.StopClassList.length>0) <span
||(props.row.InvitationClassList&&props.row.InvitationClassList.length>0)||(props.row.OrderTransClassList&&props.row.OrderTransClassList.length>0) slot="reference"
||(props.row.OrderSplitClassList&&props.row.OrderSplitClassList.length>0)">查看单据</span> class="pri_Color"
v-if="
(props.row.BackClassList &&
props.row.BackClassList.length > 0) ||
(props.row.StopClassList &&
props.row.StopClassList.length > 0) ||
(props.row.InvitationClassList &&
props.row.InvitationClassList.length > 0) ||
(props.row.OrderTransClassList &&
props.row.OrderTransClassList.length > 0) ||
(props.row.OrderSplitClassList &&
props.row.OrderSplitClassList.length > 0)
"
>查看单据</span
>
</el-popover> </el-popover>
</q-td> </q-td>
</template> </template>
<template v-slot:bottom> <template v-slot:bottom>
<q-pagination class="full-width justify-end" v-model="msg.pageIndex" color="primary" :max="pageCount" <q-pagination
:input="true" @input="changePage" /> class="full-width justify-end"
v-model="msg.pageIndex"
color="primary"
:max="pageCount"
:input="true"
@input="changePage"
/>
</template> </template>
<template v-slot:body-cell-optioned="props" v-if="isShowBtn"> <template v-slot:body-cell-optioned="props" v-if="isShowBtn">
<q-td :props="props"> <q-td :props="props">
<q-btn flat size="xs" icon="edit" color="accent" style="font-weight:400" label="编辑" <q-btn
@click="EditRole(props.row)" /> flat
<q-btn flat size="xs" icon="iconfont icon-shanchu" color="negative" style="font-weight:400" class="q-mr-xs" size="xs"
label="删除" @click="deleteUser(props.row)" /> icon="edit"
color="accent"
style="font-weight:400"
label="编辑"
@click="EditRole(props.row)"
/>
<q-btn
flat
size="xs"
icon="iconfont icon-shanchu"
color="negative"
style="font-weight:400"
class="q-mr-xs"
label="删除"
@click="deleteUser(props.row)"
/>
</q-td> </q-td>
</template> </template>
</q-table> </q-table>
</div> </div>
<q-dialog v-model="persistent" content-class="bg-grey-1" persistent transition-show="scale" transition-hide="scale"> <q-dialog
v-model="persistent"
content-class="bg-grey-1"
persistent
transition-show="scale"
transition-hide="scale"
>
<q-card style="width: 800px;max-width:900px;" class="stuCard"> <q-card style="width: 800px;max-width:900px;" class="stuCard">
<q-card-section> <q-card-section>
<div class="text-h6">{{addMsg.Id==0?'新增学员':'修改学员'}}</div> <div class="text-h6">
{{ addMsg.Id == 0 ? "新增学员" : "修改学员" }}
</div>
</q-card-section> </q-card-section>
<div class="text-caption q-mb-lg q-px-md text-grey-6">基础信息</div> <div class="text-caption q-mb-lg q-px-md text-grey-6">基础信息</div>
<q-card-section class="q-pt-none" v-if="msg.ClassId>0"> <q-card-section class="q-pt-none" v-if="msg.ClassId > 0">
<div class="row wrap"> <div class="row wrap">
<q-input clearable filled class="col-6 q-pb-lg q-pr-lg" v-model="addMsg.GuestName" ref="GuestName" <q-input
label="姓名" :rules="[val => !!val || '姓名']" /> clearable
filled
class="col-6 q-pb-lg q-pr-lg"
v-model="addMsg.GuestName"
ref="GuestName"
label="姓名"
:rules="[val => !!val || '姓名']"
/>
<div class="col-6 q-pb-lg q-pr-lg"> <div class="col-6 q-pb-lg q-pr-lg">
<q-radio v-model="addMsg.Sex" val="1" label="男" /> <q-radio v-model="addMsg.Sex" val="1" label="男" />
<q-radio v-model="addMsg.Sex" val="2" label="女" /> <q-radio v-model="addMsg.Sex" val="2" label="女" />
</div> </div>
<q-input clearable filled class="col-6 q-pb-lg q-pr-lg" v-model="addMsg.Profession" label="职业" <q-input
:rules="[val => !!val || '职业']" /> clearable
<q-input filled v-model="addMsg.BirthDate" :rules="[val => !!val || '请选择出生日期']" class="col-6 q-pb-lg" filled
ref="BirthDate" mask="date" label="出生日期"> class="col-6 q-pb-lg q-pr-lg"
v-model="addMsg.Profession"
label="职业"
:rules="[val => !!val || '职业']"
/>
<q-input
filled
v-model="addMsg.BirthDate"
:rules="[val => !!val || '请选择出生日期']"
class="col-6 q-pb-lg"
ref="BirthDate"
mask="date"
label="出生日期"
>
<template v-slot:append> <template v-slot:append>
<q-icon name="event" class="cursor-pointer"> <q-icon name="event" class="cursor-pointer">
<q-popup-proxy ref="qDateProxy3" transition-show="scale" transition-hide="scale"> <q-popup-proxy
<q-date v-model="addMsg.BirthDate" @input="() => $refs.qDateProxy3.hide()" /> ref="qDateProxy3"
transition-show="scale"
transition-hide="scale"
>
<q-date
v-model="addMsg.BirthDate"
@input="() => $refs.qDateProxy3.hide()"
/>
</q-popup-proxy> </q-popup-proxy>
</q-icon> </q-icon>
</template> </template>
</q-input> </q-input>
<q-input clearable filled class="col-6 q-pb-lg q-pr-lg" maxlength="5" disable v-model="addMsg.TotalHours" <q-input
label="总课时" :rules="[val => !!val || '请填写总课时']" @keyup.native="checkInteger(addMsg,'TotalHours')" /> clearable
<q-input clearable filled class="col-6 q-pb-lg" ref="Mobile" maxlength="20" v-model="addMsg.Mobile" filled
label="电话" :rules="[val => !!val || '电话']" /> class="col-6 q-pb-lg q-pr-lg"
<q-select class="col-6 q-pb-lg q-pr-lg" option-value="Name" ref="Basics" standout="bg-primary text-white" maxlength="5"
option-label="Name" v-model="addMsg.Basics" :options="GBList" emit-value map-options label="语言基础" disable
use-input new-value-mode="add-unique" hint="自己输入语言基础的话,输入之后按回车!" /> v-model="addMsg.TotalHours"
<q-select class="col-6 q-pb-lg" option-value="Id" standout="bg-primary text-white" option-label="Name" label="总课时"
v-model="addMsg.Education" :options="GEList" emit-value map-options label="最高学历" /> :rules="[val => !!val || '请填写总课时']"
<q-select class="col-6 q-pb-lg q-pr-lg" option-value="Id" standout="bg-primary text-white" @keyup.native="checkInteger(addMsg, 'TotalHours')"
option-label="Name" v-model="addMsg.LearningGoals" :options="GLList" emit-value map-options />
label="学习目的" /> <q-input
<q-select class="col-6 q-pb-lg" standout="bg-primary text-white" option-value="Id" option-label="Name" clearable
v-model="addMsg.GuestSource" :options="OFList" emit-value map-options label="客人来源" /> filled
<q-input clearable filled class="col-6 q-pb-lg q-pr-lg" v-model="addMsg.ContactAddress" label="现居住地址" /> class="col-6 q-pb-lg"
ref="Mobile"
maxlength="20"
v-model="addMsg.Mobile"
label="电话"
:rules="[val => !!val || '电话']"
/>
<q-select
class="col-6 q-pb-lg q-pr-lg"
option-value="Name"
ref="Basics"
standout="bg-primary text-white"
option-label="Name"
v-model="addMsg.Basics"
:options="GBList"
emit-value
map-options
label="语言基础"
use-input
new-value-mode="add-unique"
hint="自己输入语言基础的话,输入之后按回车!"
/>
<q-select
class="col-6 q-pb-lg"
option-value="Id"
standout="bg-primary text-white"
option-label="Name"
v-model="addMsg.Education"
:options="GEList"
emit-value
map-options
label="最高学历"
/>
<q-select
class="col-6 q-pb-lg q-pr-lg"
option-value="Id"
standout="bg-primary text-white"
option-label="Name"
v-model="addMsg.LearningGoals"
:options="GLList"
emit-value
map-options
label="学习目的"
/>
<q-select
class="col-6 q-pb-lg"
standout="bg-primary text-white"
option-value="Id"
option-label="Name"
v-model="addMsg.GuestSource"
:options="OFList"
emit-value
map-options
label="客人来源"
/>
<q-input
clearable
filled
class="col-6 q-pb-lg q-pr-lg"
v-model="addMsg.ContactAddress"
label="现居住地址"
/>
<div class="col-6 q-pr-lg q-pb-lg"> <div class="col-6 q-pr-lg q-pb-lg">
<q-uploader <q-uploader
style="min-height:268px;max-width: 300px; background-repeat:no-repeat;background-position: 50% 50%;background-size: cover;" style="min-height:268px;max-width: 300px; background-repeat:no-repeat;background-position: 50% 50%;background-size: cover;"
:style="{'background-image':'url(' + addMsg.StuIcon + ')'}" max-files="1" hide-upload-btn :style="{ 'background-image': 'url(' + addMsg.StuIcon + ')' }"
@rejected="onRejected" label="学生头像" :max-file-size="5*1024*1024" accept=".jpg, image/*" auto-upload max-files="1"
:factory="uploadFile" no-thumbnails> hide-upload-btn
@rejected="onRejected"
label="学生头像"
:max-file-size="5 * 1024 * 1024"
accept=".jpg, image/*"
auto-upload
:factory="uploadFile"
no-thumbnails
>
</q-uploader> </q-uploader>
</div> </div>
</div> </div>
</q-card-section> </q-card-section>
<q-card-section class="q-pt-none" v-if="msg.SourceId>0"> <q-card-section class="q-pt-none" v-if="msg.SourceId > 0">
<div class="row wrap"> <div class="row wrap">
<q-input clearable filled class="col-6 q-pb-lg q-pr-lg" v-model="addMsg.GuestName" ref="GuestName" <q-input
label="姓名" :rules="[val => !!val || '姓名']" /> clearable
filled
class="col-6 q-pb-lg q-pr-lg"
v-model="addMsg.GuestName"
ref="GuestName"
label="姓名"
:rules="[val => !!val || '姓名']"
/>
<div class="col-6 q-pb-lg"> <div class="col-6 q-pb-lg">
<q-radio v-model="addMsg.Sex" val="1" label="男" /> <q-radio v-model="addMsg.Sex" val="1" label="男" />
<q-radio v-model="addMsg.Sex" val="2" label="女" /> <q-radio v-model="addMsg.Sex" val="2" label="女" />
</div> </div>
<q-input filled v-model="addMsg.BirthDate" :rules="[val => !!val || '请选择出生日期']" <q-input
class="col-6 q-pb-lg q-pr-lg" ref="BirthDate" mask="date" label="出生日期"> filled
v-model="addMsg.BirthDate"
:rules="[val => !!val || '请选择出生日期']"
class="col-6 q-pb-lg q-pr-lg"
ref="BirthDate"
mask="date"
label="出生日期"
>
<template v-slot:append> <template v-slot:append>
<q-icon name="event" class="cursor-pointer"> <q-icon name="event" class="cursor-pointer">
<q-popup-proxy ref="qDateProxy3" transition-show="scale" transition-hide="scale"> <q-popup-proxy
<q-date v-model="addMsg.BirthDate" @input="() => $refs.qDateProxy3.hide()" /> ref="qDateProxy3"
transition-show="scale"
transition-hide="scale"
>
<q-date
v-model="addMsg.BirthDate"
@input="() => $refs.qDateProxy3.hide()"
/>
</q-popup-proxy> </q-popup-proxy>
</q-icon> </q-icon>
</template> </template>
</q-input> </q-input>
<q-input clearable filled class="col-6 q-pb-lg" maxlength="20" v-model="addMsg.Mobile" ref="Mobile" <q-input
label="电话" :rules="[val => !!val || '电话']" /> clearable
<q-select class="col-6 q-pb-lg q-pr-lg" option-value="Name" filled :rules="[val => !!val || '请选择日语水平']" filled
ref="Basics" standout="bg-primary text-white" option-label="Name" v-model="addMsg.Basics" class="col-6 q-pb-lg"
:options="GBList" emit-value map-options label="日语水平" use-input new-value-mode="add-unique" maxlength="20"
hint="自己输入日语水平的话,输入之后按回车!" /> v-model="addMsg.Mobile"
<q-input clearable filled class="col-6 q-pb-lg" v-model="addMsg.GraduatedSchool" label="毕业院校" /> ref="Mobile"
<q-input clearable filled class="col-6 q-pb-lg q-pr-lg" v-model="addMsg.GraduatedMajor" label="毕业专业" /> label="电话"
<q-input clearable filled class="col-6 q-pb-lg" v-model="addMsg.VolunteerMajor" label="志愿专业" /> :rules="[val => !!val || '电话']"
<q-input clearable filled class="col-6 q-pb-lg q-pr-lg" v-model="addMsg.Price" label="价格" />
@keyup.native="checkPrice(addMsg,'Price')" /> <q-select
class="col-6 q-pb-lg q-pr-lg"
option-value="Name"
filled
:rules="[val => !!val || '请选择日语水平']"
ref="Basics"
standout="bg-primary text-white"
option-label="Name"
v-model="addMsg.Basics"
:options="GBList"
emit-value
map-options
label="日语水平"
use-input
new-value-mode="add-unique"
hint="自己输入日语水平的话,输入之后按回车!"
/>
<q-input
clearable
filled
class="col-6 q-pb-lg"
v-model="addMsg.GraduatedSchool"
label="毕业院校"
/>
<q-input
clearable
filled
class="col-6 q-pb-lg q-pr-lg"
v-model="addMsg.GraduatedMajor"
label="毕业专业"
/>
<q-input
clearable
filled
class="col-6 q-pb-lg"
v-model="addMsg.VolunteerMajor"
label="志愿专业"
/>
<q-input
clearable
filled
class="col-6 q-pb-lg q-pr-lg"
v-model="addMsg.Price"
label="价格"
@keyup.native="checkPrice(addMsg, 'Price')"
/>
<div class="col-6 q-pr-lg q-pb-lg"> <div class="col-6 q-pr-lg q-pb-lg">
<q-uploader style="display: inline-block;height: 150px;max-width: 100%; background-repeat:no-repeat" <q-uploader
:style="{'background-image':'url(' + addMsg.StuIcon + ')'}" max-files="1" hide-upload-btn style="display: inline-block;height: 150px;max-width: 100%; background-repeat:no-repeat"
@rejected="onRejected" label="学生头像" :max-file-size="5*1024*1024" accept=".jpg, image/*" auto-upload :style="{ 'background-image': 'url(' + addMsg.StuIcon + ')' }"
:factory="uploadFile" no-thumbnails> max-files="1"
hide-upload-btn
@rejected="onRejected"
label="学生头像"
:max-file-size="5 * 1024 * 1024"
accept=".jpg, image/*"
auto-upload
:factory="uploadFile"
no-thumbnails
>
</q-uploader> </q-uploader>
</div> </div>
</div> </div>
</q-card-section> </q-card-section>
<div class="text-caption q-mb-lg q-px-md text-grey-6" v-if="msg.ClassId>0">附加信息</div> <div
<div class="row wrap" style="margin:0 20px;" v-if="msg.ClassId>0"> class="text-caption q-mb-lg q-px-md text-grey-6"
<q-input clearable filled class="col-6 q-pb-lg q-pr-lg" v-model="addMsg.IDCard" label="身份证" /> v-if="msg.ClassId > 0"
<q-input clearable filled class="col-6 q-pb-lg" v-model="addMsg.Domicile" label="身份证居住地" /> >
附加信息
</div>
<div class="row wrap" style="margin:0 20px;" v-if="msg.ClassId > 0">
<q-input
clearable
filled
class="col-6 q-pb-lg q-pr-lg"
v-model="addMsg.IDCard"
label="身份证"
/>
<q-input
clearable
filled
class="col-6 q-pb-lg"
v-model="addMsg.Domicile"
label="身份证居住地"
/>
</div>
<div class="row wrap" style="margin:0 20px;" v-if="msg.ClassId > 0">
<q-input
clearable
filled
class="col-6 q-pb-lg q-pr-lg"
v-model="addMsg.Contact"
label="重要联系人"
/>
<q-input
clearable
filled
class="col-6 q-pb-lg"
v-model="addMsg.ContactMobile"
label="重要联系电话"
/>
</div> </div>
<div class="row wrap" style="margin:0 20px;" v-if="msg.ClassId>0"> <div
<q-input clearable filled class="col-6 q-pb-lg q-pr-lg" v-model="addMsg.Contact" label="重要联系人" /> class="text-caption q-mb-lg q-px-md text-grey-6"
<q-input clearable filled class="col-6 q-pb-lg" v-model="addMsg.ContactMobile" label="重要联系电话" /> v-if="msg.SourceId > 0"
>
备注信息
</div> </div>
<div class="text-caption q-mb-lg q-px-md text-grey-6" v-if="msg.SourceId>0">备注信息</div> <div class="row wrap" style="margin:0 20px;" v-if="msg.SourceId > 0">
<div class="row wrap" style="margin:0 20px;" v-if="msg.SourceId>0"> <q-input
<q-input filled stack-label :dense="false" v-model="addMsg.StudyRemark" type="textarea" class="col-12" filled
label="备注" maxlength="300" /> stack-label
:dense="false"
v-model="addMsg.StudyRemark"
type="textarea"
class="col-12"
label="备注"
maxlength="300"
/>
</div> </div>
<div class="row wrap" style="margin:0 20px;"> <div class="row wrap" style="margin:0 20px;">
<q-input clearable filled class="col-6 q-pb-lg q-pr-lg" v-model="addMsg.GuestContractNo" label="合同编号" /> <q-input
<q-select class="col-6 q-pb-lg" ref="ContractType" @input="resetContractArr" standout="bg-primary text-white" clearable
option-value="Id" option-label="Name" v-model="addMsg.ContractType" :options="ContractTypeList" emit-value filled
map-options label="上传类型" use-input new-value-mode="add-unique" /> class="col-6 q-pb-lg q-pr-lg"
v-model="addMsg.GuestContractNo"
label="合同编号"
/>
<q-select
class="col-6 q-pb-lg"
ref="ContractType"
@input="resetContractArr"
standout="bg-primary text-white"
option-value="Id"
option-label="Name"
v-model="addMsg.ContractType"
:options="ContractTypeList"
emit-value
map-options
label="上传类型"
use-input
new-value-mode="add-unique"
/>
</div> </div>
<div class="row wrap" style="margin:0 20px;"> <div class="row wrap" style="margin:0 20px;">
<div class="col-12 text-grey-6"> <div class="col-12 text-grey-6">
上传附件:<span class="fj-tip" style="font-size: 10px; color: #f00"></span> 上传附件:<span
class="fj-tip"
style="font-size: 10px; color: #f00"
></span>
</div> </div>
</div> </div>
<div> <div>
<div class="_addUpload_stu" style="margin:15px 0 0 20px;min-height:100px;"> <div
class="_addUpload_stu"
style="margin:15px 0 0 20px;min-height:100px;"
>
<template v-for="(file, fIndex) in addMsg.ContractUrl"> <template v-for="(file, fIndex) in addMsg.ContractUrl">
<div v-if="addMsg.ContractType == 2"> <div v-if="addMsg.ContractType == 2">
<div style="width: 100%; height: 100%; overflow: hidden"> <div style="width: 100%; height: 100%; overflow: hidden">
<el-image style="width: 100%; height: 100%" :src="file" :preview-src-list="addMsg.ContractUrl"> <el-image
style="width: 100%; height: 100%"
:src="file"
:preview-src-list="addMsg.ContractUrl"
>
</el-image> </el-image>
</div> </div>
<span class="iconfont icon-guanbi1" @click="deleteUploadFile(fIndex)"></span> <span
class="iconfont icon-guanbi1"
@click="deleteUploadFile(fIndex)"
></span>
</div> </div>
<div v-if="addMsg.ContractType == 1" style="float:left;"> <div v-if="addMsg.ContractType == 1" style="float:left;">
<div class="iconfont icon-pdf" style="font-size:38px;color:green;text-align:center;line-height:75px;" <div
@click="showUpLoadFile(file)"></div> class="iconfont icon-pdf"
<span class="iconfont icon-guanbi1" @click="deleteUploadFile(fIndex)"></span> style="font-size:38px;color:green;text-align:center;line-height:75px;"
@click="showUpLoadFile(file)"
></div>
<span
class="iconfont icon-guanbi1"
@click="deleteUploadFile(fIndex)"
></span>
</div> </div>
</template> </template>
<div class="_pic_upload"> <div class="_pic_upload">
<el-upload drag :http-request="uploadFileBtn" :multiple="true" :show-file-list="false" action=""> <el-upload
drag
:http-request="uploadFileBtn"
:multiple="true"
:show-file-list="false"
action=""
>
<i class="el-icon-plus avatar-uploader-icon"></i> <i class="el-icon-plus avatar-uploader-icon"></i>
<div class="el-upload__text"> <div class="el-upload__text">
{{ $t("active.ld_djscwj") }} {{ $t("active.ld_djscwj") }}
...@@ -292,17 +674,34 @@ ...@@ -292,17 +674,34 @@
</div> </div>
<q-separator /> <q-separator />
<q-card-actions align="right" class="bg-white"> <q-card-actions align="right" class="bg-white">
<q-btn label="取消" flat color="grey-10" style="font-weight:400 !important" @click="closeSaveForm" /> <q-btn
<q-btn label="保存" color="accent q-px-md" style="font-weight:400 !important" :loading="saveLoading" label="取消"
@click="save_t()" /> flat
color="grey-10"
style="font-weight:400 !important"
@click="closeSaveForm"
/>
<q-btn
label="保存"
color="accent q-px-md"
style="font-weight:400 !important"
:loading="saveLoading"
@click="save_t()"
/>
</q-card-actions> </q-card-actions>
</q-card> </q-card>
</q-dialog> </q-dialog>
<betchTransfer
v-if="showBetchTransfer"
@close="closeBetchTransfer"
:OrderId="msg.OrderId"
@success="resetSearch"
></betchTransfer>
</div> </div>
</template> </template>
<script> <script>
import { import {
getOrderGuestPageList, getOrderGuestPageList,
getGuestBasicsEnumList, //日语基础枚举 getGuestBasicsEnumList, //日语基础枚举
getGuestEducationEnumList, //学历枚举 getGuestEducationEnumList, //学历枚举
...@@ -310,151 +709,154 @@ ...@@ -310,151 +709,154 @@
getOrderSourceEnumList, //来源枚举 getOrderSourceEnumList, //来源枚举
setOrderGuestInfo, //保存 setOrderGuestInfo, //保存
delOrderGuestInfo, //删除 delOrderGuestInfo, //删除
GetSelectClassOrderList, GetSelectClassOrderList
} from '../../api/sale/sale' } from "../../api/sale/sale";
import {
UploadSelfFile,
} from '../../api/common/common'
export default { import { UploadSelfFile } from "../../api/common/common";
import betchTransfer from "../../components/school/student/batchTransfer-order";
export default {
components: {
betchTransfer
},
data() { data() {
return { return {
currentUrl: "", currentUrl: "",
columns: [{ columns: [
name: 'GuestName', {
label: '姓名', name: "GuestName",
label: "姓名",
required: true, required: true,
field: 'GuestName', field: "GuestName",
align: 'left' align: "left"
}, },
{ {
name: 'Profession', name: "Profession",
field: 'Profession', field: "Profession",
label: '职业', label: "职业",
align: 'left', align: "left"
}, },
{ {
name: 'Sex', name: "Sex",
label: '性别', label: "性别",
align: 'left' align: "left"
}, },
{ {
name: 'BirthDate', name: "BirthDate",
label: '出生日期', label: "出生日期",
field: 'BirthDate', field: "BirthDate",
align: 'left' align: "left"
}, },
{ {
name: 'CourseName', name: "CourseName",
label: '课程名称', label: "课程名称",
field: 'CourseName', field: "CourseName",
align: 'left' align: "left"
}, },
{ {
name: 'GuestStateStr', name: "GuestStateStr",
label: '学员状态', label: "学员状态",
field: 'GuestStateStr', field: "GuestStateStr",
align: 'left' align: "left"
}, },
{ {
name: 'TotalHours', name: "TotalHours",
label: '总课时', label: "总课时",
field: 'TotalHours', field: "TotalHours",
align: 'left' align: "left"
}, },
{ {
name: 'ValidClassHours', name: "ValidClassHours",
label: '有效课时', label: "有效课时",
field: 'ValidClassHours', field: "ValidClassHours",
align: 'left' align: "left"
}, },
{ {
name: 'CompleteHours', name: "CompleteHours",
label: '已上课时', label: "已上课时",
field: 'CompleteHours', field: "CompleteHours",
align: 'left' align: "left"
}, },
{ {
name: 'SurplusHours', name: "SurplusHours",
label: '剩余课时', label: "剩余课时",
field: 'SurplusHours', field: "SurplusHours",
align: 'left' align: "left"
}, },
{ {
name: 'MakeUpHours', name: "MakeUpHours",
label: '可补课时', label: "可补课时",
field: 'MakeUpHours', field: "MakeUpHours",
align: 'left' align: "left"
}, },
{ {
name: 'BackClassList', name: "BackClassList",
label: '业务单据', label: "业务单据",
field: 'BackClassList', field: "BackClassList",
align: 'left' align: "left"
}, },
{ {
name: 'Mobile', name: "Mobile",
label: '电话', label: "电话",
field: 'Mobile', field: "Mobile",
align: 'left' align: "left"
}, },
{ {
name: 'Basics', name: "Basics",
label: '日语基础', label: "日语基础",
field: 'Basics', field: "Basics",
align: 'left' align: "left"
}, },
{ {
name: 'GuestSourceName', name: "GuestSourceName",
label: '客户来源', label: "客户来源",
field: 'GuestSourceName', field: "GuestSourceName",
align: 'left' align: "left"
}, },
{ {
name: 'LearningGoalsName', name: "LearningGoalsName",
label: '学日语目的', label: "学日语目的",
field: 'LearningGoalsName', field: "LearningGoalsName",
align: 'left' align: "left"
}, },
{ {
name: 'Contact', name: "Contact",
label: '重要联系人', label: "重要联系人",
field: 'Contact', field: "Contact",
align: 'left' align: "left"
}, },
{ {
name: 'ContactMobile', name: "ContactMobile",
label: '重要联系电话', label: "重要联系电话",
field: 'ContactMobile', field: "ContactMobile",
align: 'left' align: "left"
}, },
{ {
name: 'GraduatedSchool', name: "GraduatedSchool",
label: '毕业院校', label: "毕业院校",
field: 'GraduatedSchool', field: "GraduatedSchool",
align: 'left' align: "left"
}, },
{ {
name: 'GraduatedMajor', name: "GraduatedMajor",
label: '毕业专业', label: "毕业专业",
field: 'GraduatedMajor', field: "GraduatedMajor",
align: 'left' align: "left"
}, },
{ {
name: 'VolunteerMajor', name: "VolunteerMajor",
label: '志愿专业', label: "志愿专业",
field: 'VolunteerMajor', field: "VolunteerMajor",
align: 'left' align: "left"
}, },
{ {
name: 'Price', name: "Price",
label: '价格', label: "价格",
field: 'Price', field: "Price",
align: 'left' align: "left"
}, },
{ {
name: 'optioned', name: "optioned",
label: '操作', label: "操作"
} }
], ],
data: [], data: [],
...@@ -466,8 +868,8 @@ ...@@ -466,8 +868,8 @@
OrderId: 0, //订单编号 OrderId: 0, //订单编号
ClassId: 0, //班级编号 ClassId: 0, //班级编号
SourceId: 0, //留学就业编号 SourceId: 0, //留学就业编号
GuestName: '', GuestName: "",
GuestState: 0, GuestState: 0
}, },
pageCount: 0, pageCount: 0,
persistent: false, persistent: false,
...@@ -475,20 +877,20 @@ ...@@ -475,20 +877,20 @@
addMsg: { addMsg: {
Id: 0, Id: 0,
OrderId: 0, OrderId: 0,
GuestName: '', GuestName: "",
Profession: '', Profession: "",
Sex: '1', Sex: "1",
Age: 0, Age: 0,
Mobile: '', Mobile: "",
Basics: '', Basics: "",
Education: '', //学历 Education: "", //学历
GuestSource: '', //来源 GuestSource: "", //来源
LearningGoals: "", // 学习目的 LearningGoals: "", // 学习目的
Contact: '', //紧急联系人 Contact: "", //紧急联系人
ContactMobile: '', //紧急联系电话 ContactMobile: "", //紧急联系电话
IDCard: '', //身份证 IDCard: "", //身份证
Domicile: '', //身份证居住地 Domicile: "", //身份证居住地
ContactAddress: '', //联系地址 ContactAddress: "", //联系地址
SourceId: 0, //留学就业编号 SourceId: 0, //留学就业编号
GraduatedSchool: "", //毕业院校 GraduatedSchool: "", //毕业院校
GraduatedMajor: "", //毕业专业 GraduatedMajor: "", //毕业专业
...@@ -497,8 +899,8 @@ ...@@ -497,8 +899,8 @@
StudyRemark: "", //留学就业备注 StudyRemark: "", //留学就业备注
BirthDate: "", //出生日期 BirthDate: "", //出生日期
TotalHours: 0, //总课时 TotalHours: 0, //总课时
StuIcon: '', //头像 StuIcon: "", //头像
GuestContractNo: '', //合同编号 GuestContractNo: "", //合同编号
ContractType: 1, //上传类型 1-PDF 2图片 ContractType: 1, //上传类型 1-PDF 2图片
ContractUrl: [] //合同链接 ContractUrl: [] //合同链接
}, },
...@@ -509,18 +911,20 @@ ...@@ -509,18 +911,20 @@
isShowBtn: true, //默认显示新增名单 isShowBtn: true, //默认显示新增名单
CourseClassHourse: 0, //课时 CourseClassHourse: 0, //课时
//表格可见列 //表格可见列
visibleColumns: [ visibleColumns: [], //可见列
], //可见列
initialIndex: 0, initialIndex: 0,
ContractTypeList: [{ ContractTypeList: [
Name: 'PDF', {
Name: "PDF",
Id: 1 Id: 1
}, { },
Name: '图片', {
Name: "图片",
Id: 2 Id: 2
}]
} }
],
showBetchTransfer: false
};
}, },
created() { created() {
if (this.$route.query && this.$route.query.OrderId) { if (this.$route.query && this.$route.query.OrderId) {
...@@ -540,22 +944,47 @@ ...@@ -540,22 +944,47 @@
this.isShowBtn = false; this.isShowBtn = false;
} }
if (this.msg.ClassId > 0) { if (this.msg.ClassId > 0) {
this.visibleColumns = ['GuestName', 'Profession', 'Sex', 'BirthDate', 'Mobile', 'Basics', 'GuestSourceName', this.visibleColumns = [
'LearningGoalsName', 'Contact', 'ContactMobile', 'TotalHours', 'ValidClassHours', 'CompleteHours', "GuestName",
'MakeUpHours', "Profession",
'SurplusHours', 'StartClassHours', 'CourseName', 'IsChaBan', 'BackClassList', 'GuestStateStr' "Sex",
"BirthDate",
"Mobile",
"Basics",
"GuestSourceName",
"LearningGoalsName",
"Contact",
"ContactMobile",
"TotalHours",
"ValidClassHours",
"CompleteHours",
"MakeUpHours",
"SurplusHours",
"StartClassHours",
"CourseName",
"IsChaBan",
"BackClassList",
"GuestStateStr"
]; ];
} }
if (this.msg.SourceId > 0) { if (this.msg.SourceId > 0) {
this.visibleColumns = ['GuestName', 'Sex', 'BirthDate', 'Mobile', 'Basics', 'GraduatedSchool', 'GraduatedMajor', this.visibleColumns = [
'VolunteerMajor', 'Price' "GuestName",
"Sex",
"BirthDate",
"Mobile",
"Basics",
"GraduatedSchool",
"GraduatedMajor",
"VolunteerMajor",
"Price"
]; ];
} }
this.visibleColumns.push('optioned'); this.visibleColumns.push("optioned");
this.getOrderInfo(); this.getOrderInfo();
this.getGuestBasics() this.getGuestBasics();
this.getGuestEducation() this.getGuestEducation();
this.getGuestLearning() this.getGuestLearning();
this.getGuestSource(); this.getGuestSource();
}, },
mounted() { mounted() {
...@@ -566,7 +995,7 @@ ...@@ -566,7 +995,7 @@
goEduReceiptInfo(Id) { goEduReceiptInfo(Id) {
this.OpenNewUrl("/user/billquery", { this.OpenNewUrl("/user/billquery", {
Id: Id Id: Id
}) });
}, },
resetContractArr() { resetContractArr() {
this.addMsg.ContractUrl = []; this.addMsg.ContractUrl = [];
...@@ -586,20 +1015,21 @@ ...@@ -586,20 +1015,21 @@
}, },
uploadFileBtn(file) { uploadFileBtn(file) {
// 1 文档 2 数据 3 图片,4压缩包,5视频 // 1 文档 2 数据 3 图片,4压缩包,5视频
let typeArr = [{ let typeArr = [
{
stringArr: "GIF|JPG|JPEG|PNG|BMP|WEBP", stringArr: "GIF|JPG|JPEG|PNG|BMP|WEBP",
type: 2, type: 2
}, },
{ {
stringArr: "PDF|pdf", stringArr: "PDF|pdf",
type: 1, type: 1
}, }
]; ];
let ft = file.file.name let ft = file.file.name
.substring(file.file.name.lastIndexOf(".") + 1, file.file.name.length) .substring(file.file.name.lastIndexOf(".") + 1, file.file.name.length)
.toUpperCase(); .toUpperCase();
let fileTypeNumber = 2; let fileTypeNumber = 2;
typeArr.forEach((x) => { typeArr.forEach(x => {
if (x.stringArr.indexOf(ft) != "-1") { if (x.stringArr.indexOf(ft) != "-1") {
fileTypeNumber = x.type; fileTypeNumber = x.type;
} }
...@@ -607,38 +1037,38 @@ ...@@ -607,38 +1037,38 @@
if (this.addMsg.ContractType == 1) { if (this.addMsg.ContractType == 1) {
if (fileTypeNumber != 1) { if (fileTypeNumber != 1) {
this.$q.notify({ this.$q.notify({
type: 'negative', type: "negative",
position: "top", position: "top",
message: `请上传pdf文件` message: `请上传pdf文件`
}) });
return return;
} }
} }
if (this.addMsg.ContractType == 2) { if (this.addMsg.ContractType == 2) {
if (fileTypeNumber != 2) { if (fileTypeNumber != 2) {
this.$q.notify({ this.$q.notify({
type: 'negative', type: "negative",
position: "top", position: "top",
message: `请上传图片` message: `请上传图片`
}) });
return return;
} }
} }
this.$message.info(this.$t("tips.shangchuanzhong")); this.$message.info(this.$t("tips.shangchuanzhong"));
UploadSelfFile( UploadSelfFile(
"Temporary", "Temporary",
file.file, file.file,
(x) => { x => {
if (x.Code == 1) { if (x.Code == 1) {
if (this.addMsg.ContractType == 1) { if (this.addMsg.ContractType == 1) {
if (this.addMsg.ContractUrl.length < 1) { if (this.addMsg.ContractUrl.length < 1) {
this.addMsg.ContractUrl.push(x.FileUrl); this.addMsg.ContractUrl.push(x.FileUrl);
} else { } else {
this.$q.notify({ this.$q.notify({
type: 'negative', type: "negative",
position: "top", position: "top",
message: `只能上传一个PDF文件` message: `只能上传一个PDF文件`
}) });
} }
} else { } else {
this.addMsg.ContractUrl.push(x.FileUrl); this.addMsg.ContractUrl.push(x.FileUrl);
...@@ -653,21 +1083,22 @@ ...@@ -653,21 +1083,22 @@
var qMsg = { var qMsg = {
ClassId: this.msg.ClassId, ClassId: this.msg.ClassId,
OrderId: this.msg.OrderId OrderId: this.msg.OrderId
} };
GetSelectClassOrderList(qMsg).then(res => { GetSelectClassOrderList(qMsg).then(res => {
if (res.Code == 1) { if (res.Code == 1) {
var tempData = res.Data; var tempData = res.Data;
if (tempData && tempData.length == 1) { if (tempData && tempData.length == 1) {
this.CourseClassHourse = tempData[0].ClassHours - tempData[0].StartClassHours this.CourseClassHourse =
tempData[0].ClassHours - tempData[0].StartClassHours;
} }
} }
}) });
}, },
//日语基础枚举 //日语基础枚举
getGuestBasics() { getGuestBasics() {
getGuestBasicsEnumList({}).then(res => { getGuestBasicsEnumList({}).then(res => {
if (res.Code == 1) { if (res.Code == 1) {
this.GBList = res.Data this.GBList = res.Data;
} }
}); });
}, },
...@@ -684,18 +1115,20 @@ ...@@ -684,18 +1115,20 @@
getGuestLearningGoalsEnumList({}).then(res => { getGuestLearningGoalsEnumList({}).then(res => {
if (res.Code == 1) { if (res.Code == 1) {
this.GLList = res.Data; this.GLList = res.Data;
this.addMsg.LearningGoals = this.GLList[0].Id this.addMsg.LearningGoals = this.GLList[0].Id;
} }
}); });
}, },
//获取客人来源枚举 //获取客人来源枚举
getGuestSource() { getGuestSource() {
getOrderSourceEnumList({}).then(res => { getOrderSourceEnumList({})
.then(res => {
if (res.Code == 1) { if (res.Code == 1) {
this.OFList = res.Data this.OFList = res.Data;
this.addMsg.GuestSource = this.OFList[0].Id this.addMsg.GuestSource = this.OFList[0].Id;
} }
}).catch(() => {}) })
.catch(() => {});
}, },
//重新查询 //重新查询
resetSearch() { resetSearch() {
...@@ -705,26 +1138,28 @@ ...@@ -705,26 +1138,28 @@
//翻页 //翻页
changePage(val) { changePage(val) {
this.msg.pageIndex = val; this.msg.pageIndex = val;
this.getGuestPage() this.getGuestPage();
}, },
//获取学员名单 //获取学员名单
getGuestPage() { getGuestPage() {
this.loading = true; this.loading = true;
getOrderGuestPageList(this.msg).then(res => { getOrderGuestPageList(this.msg)
this.loading = false .then(res => {
this.data = res.Data.PageData this.loading = false;
this.pageCount = res.Data.PageCount this.data = res.Data.PageData;
}).catch(() => { this.pageCount = res.Data.PageCount;
this.loading = false
}) })
.catch(() => {
this.loading = false;
});
}, },
//返回 //返回
goreturn() { goreturn() {
this.$router.go(-1) this.$router.go(-1);
}, },
//关闭弹窗 //关闭弹窗
closeSaveForm() { closeSaveForm() {
this.persistent = false this.persistent = false;
}, },
//新增修改学员信息 //新增修改学员信息
save_t() { save_t() {
...@@ -732,37 +1167,42 @@ ...@@ -732,37 +1167,42 @@
this.$refs.Basics.validate(); this.$refs.Basics.validate();
this.$refs.BirthDate.validate(); this.$refs.BirthDate.validate();
this.$refs.Mobile.validate(); this.$refs.Mobile.validate();
if (!this.$refs.GuestName.hasError && !this.$refs.Basics.hasError && !this.$refs.BirthDate.hasError && !this if (
.$refs.Mobile.hasError !this.$refs.GuestName.hasError &&
!this.$refs.Basics.hasError &&
!this.$refs.BirthDate.hasError &&
!this.$refs.Mobile.hasError
) { ) {
if (this.msg.ClassId > 0) { if (this.msg.ClassId > 0) {
if (this.addMsg.Education == '') { if (this.addMsg.Education == "") {
this.$q.notify({ this.$q.notify({
type: 'negative', type: "negative",
position: "top", position: "top",
message: `请选择学历` message: `请选择学历`
}) });
return; return;
} }
} }
this.saveLoading = true this.saveLoading = true;
setOrderGuestInfo(this.addMsg).then(res => { setOrderGuestInfo(this.addMsg)
.then(res => {
if (res.Code == 1) { if (res.Code == 1) {
this.$q.notify({ this.$q.notify({
icon: 'iconfont icon-chenggong', icon: "iconfont icon-chenggong",
color: 'accent', color: "accent",
timeout: 2000, timeout: 2000,
message: '保存成功!', message: "保存成功!",
position: 'top' position: "top"
}) });
this.saveLoading = false; this.saveLoading = false;
this.persistent = false; this.persistent = false;
this.resetSearch() this.resetSearch();
this.initialize() this.initialize();
} }
}).catch(() => {
this.saveLoading = false
}) })
.catch(() => {
this.saveLoading = false;
});
} }
}, },
//初始化数据 //初始化数据
...@@ -770,28 +1210,28 @@ ...@@ -770,28 +1210,28 @@
this.addMsg = { this.addMsg = {
Id: 0, Id: 0,
OrderId: this.$route.query.OrderId, OrderId: this.$route.query.OrderId,
GuestName: '', GuestName: "",
Profession: '', Profession: "",
Sex: '1', Sex: "1",
Age: 0, Age: 0,
Mobile: '', Mobile: "",
Basics: '', Basics: "",
Education: '', //学历 Education: "", //学历
GuestSource: this.OFList[0].Id, //来源 GuestSource: this.OFList[0].Id, //来源
LearningGoals: this.GLList[0].Id, // 学习目的 LearningGoals: this.GLList[0].Id, // 学习目的
Contact: '', //紧急联系人 Contact: "", //紧急联系人
ContactMobile: '', //紧急联系电话 ContactMobile: "", //紧急联系电话
IDCard: '', //身份证 IDCard: "", //身份证
Domicile: '', //身份证居住地 Domicile: "", //身份证居住地
ContactAddress: '', //联系地址 ContactAddress: "", //联系地址
SourceId: this.$route.query.SourceId, SourceId: this.$route.query.SourceId,
GraduatedSchool: "", //毕业院校 GraduatedSchool: "", //毕业院校
GraduatedMajor: "", //毕业专业 GraduatedMajor: "", //毕业专业
VolunteerMajor: "", //志愿专业 VolunteerMajor: "", //志愿专业
Price: 0, //价格 Price: 0, //价格
StudyRemark: "", //留学就业备注 StudyRemark: "", //留学就业备注
TotalHours: this.CourseClassHourse, TotalHours: this.CourseClassHourse
} };
}, },
//新增学员弹窗 //新增学员弹窗
addxue() { addxue() {
...@@ -800,17 +1240,17 @@ ...@@ -800,17 +1240,17 @@
}, },
//修改学员信息 //修改学员信息
EditRole(item) { EditRole(item) {
this.addMsg.Id = item.Id this.addMsg.Id = item.Id;
this.addMsg.GuestName = item.GuestName this.addMsg.GuestName = item.GuestName;
this.addMsg.Profession = item.Profession this.addMsg.Profession = item.Profession;
this.addMsg.Sex = item.Sex.toString() this.addMsg.Sex = item.Sex.toString();
this.addMsg.Age = item.Age this.addMsg.Age = item.Age;
this.addMsg.Mobile = item.Mobile this.addMsg.Mobile = item.Mobile;
this.addMsg.Basics = item.Basics this.addMsg.Basics = item.Basics;
this.addMsg.Education = item.Education this.addMsg.Education = item.Education;
this.addMsg.GuestSource = item.GuestSource this.addMsg.GuestSource = item.GuestSource;
this.addMsg.LearningGoals = item.LearningGoals this.addMsg.LearningGoals = item.LearningGoals;
this.addMsg.Contact = item.Contact this.addMsg.Contact = item.Contact;
this.addMsg.ContactMobile = item.ContactMobile; this.addMsg.ContactMobile = item.ContactMobile;
this.addMsg.IDCard = item.IDCard; this.addMsg.IDCard = item.IDCard;
this.addMsg.Domicile = item.Domicile; this.addMsg.Domicile = item.Domicile;
...@@ -833,50 +1273,54 @@ ...@@ -833,50 +1273,54 @@
}, },
//删除学员 //删除学员
deleteUser(item) { deleteUser(item) {
let that = this let that = this;
this.$q.dialog({ this.$q
title: '提示信息', .dialog({
message: '是否删除此学员!', title: "提示信息",
message: "是否删除此学员!",
cancel: true, cancel: true,
persistent: true, persistent: true,
ok: "确定", ok: "确定",
cancel: "取消", cancel: "取消"
}).onOk(() => { })
.onOk(() => {
delOrderGuestInfo({ delOrderGuestInfo({
GuestId: item.Id GuestId: item.Id
}).then(res => { }).then(res => {
if (res.Code == 1) { if (res.Code == 1) {
that.$q.notify({ that.$q.notify({
icon: 'iconfont icon-chenggong', icon: "iconfont icon-chenggong",
color: 'accent', color: "accent",
timeout: 2000, timeout: 2000,
message: '操作成功', message: "操作成功",
position: 'top' position: "top"
}) });
that.getGuestPage(); that.getGuestPage();
} }
});
}) })
}).onCancel(() => {}); .onCancel(() => {});
}, },
onRejected(rejectedEntries) { onRejected(rejectedEntries) {
this.$q.notify({ this.$q.notify({
type: 'negative', type: "negative",
position: "top", position: "top",
message: `文件验证失败,请重新上传` message: `文件验证失败,请重新上传`
}) });
}, },
uploadFile(files) { uploadFile(files) {
UploadSelfFile('studentIcon', files[0], res => { UploadSelfFile("studentIcon", files[0], res => {
if (res.Code == 1) { if (res.Code == 1) {
this.addMsg.StuIcon = res.FileUrl; this.addMsg.StuIcon = res.FileUrl;
} }
}) });
}, },
closeBetchTransfer() {
this.showBetchTransfer = false;
} }
} }
};
</script> </script>
<style lang="sass"> <style lang="sass">
@import url('~assets/css/table.sass') @import url('~assets/css/table.sass')
</style> </style>
...@@ -875,7 +875,12 @@ const routes = [{ ...@@ -875,7 +875,12 @@ const routes = [{
import("pages/sale/visitorRegistrat.vue") import("pages/sale/visitorRegistrat.vue")
}, },
{ {
path: "/sale/b2bcustomer", //销售 同行管理 path: "/sale/b2bcustomer", //销售 我的同行
component: () =>
import("pages/sale/b2bcustomer.vue")
},
{
path: "/sale/b2bAllCustomer", //销售 同行管理
component: () => component: () =>
import("pages/sale/b2bcustomer.vue") import("pages/sale/b2bcustomer.vue")
}, },
......
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