Browse Source

接口

master
李双庆 10 months ago
parent
commit
2572d9b740
  1. 22
      api/apiRoute.js
  2. 56
      components/AQ/AQUplodeImage.vue
  3. 2
      pages/coach/class/info.vue
  4. 2
      pages/coach/class/list.vue
  5. 2
      pages/coach/job/list.vue
  6. 2
      pages/coach/my/arrival_statistics.vue
  7. 2
      pages/coach/my/my_attendance.vue
  8. 2
      pages/coach/student/info.vue
  9. 2
      pages/common/contract_list.vue
  10. 235
      pages/common/im_chat_info.vue
  11. 2
      pages/common/my_attendance.vue
  12. 109
      pages/common/my_message.vue
  13. 2
      pages/common/sys_msg_list.vue
  14. 80
      pages/market/clue/add_clues.vue
  15. 137
      pages/market/clue/edit_clues.vue
  16. 2
      pages/market/clue/edit_clues_log.vue
  17. 7
      pages/market/clue/index.vue
  18. 52
      pages/market/my/index.vue
  19. 2
      pages/market/my/signed_client_list.vue
  20. 2
      pages/student/index/job_list.vue
  21. 2
      pages/student/index/physical_examination.vue
  22. 232
      pages/student/login/forgot.vue
  23. 2
      pages/student/my/lesson_consumption.vue
  24. 2
      pages/student/timetable/index.vue
  25. BIN
      static/images/common/jia_hao.png

22
api/apiRoute.js

@ -88,6 +88,13 @@ export default {
return res;
})
},
//公共端-忘记密码-通过短信验证码进行密码重置(学生/员工通用)
common_forgetPassword(data = {}) {
let url = '/common/forgetPassword'
return http.post(url, data).then(res => {
return res;
})
},
@ -241,6 +248,13 @@ export default {
return res;
})
},
//销售端-查询客户资源全部列表
xs_getAllCustomerResources(data = {}) {
let url = '/customerResources/getAll'
return http.get(url, data).then(res => {
return res;
})
},
//销售端-客户资源-获取修改日志列表
xs_customerResourcesGetEditLogList(data = {}) {
let url = '/customerResources/getEditLogList'
@ -299,6 +313,14 @@ export default {
return res;
})
},
//销售端-好友关系列表
xs_chatGetChatFriendsList(data = {}) {
let url = '/chat/getChatFriendsList'
return http.get(url, data).then(res => {
return res;
})
},

56
components/AQ/AQUplodeImage.vue

@ -0,0 +1,56 @@
<template>
<view @click="chooseImage">
<slot></slot>
</view>
</template>
<script>
export default {
props: {
multiple: { type: Boolean, default: false },
limit: { type: Number, default: 1 },
uploadUrl: { type: String, default: '' },
extraData: { type: Object, default: () => ({}) }
},
methods: {
chooseImage() {
uni.chooseImage({
count: this.multiple ? this.limit : 1,
sizeType: ['compressed'],
sourceType: ['album', 'camera'],
success: (res) => {
const tempFilePath = res.tempFilePaths[0];
this.uploadFile(tempFilePath);
}
});
},
uploadFile(filePath) {
let token = uni.getStorageSync('token');
uni.uploadFile({
url: this.uploadUrl,
filePath: filePath,
name: 'file',
header: {
'token': token
},
formData: this.extraData.formData || {},
success: (e) => {
try {
let res = JSON.parse(e.data.replace(/\ufeff/g, "") || "{}");
if (res.code === 1) {
this.$emit('uplodeImageRes', res.data, this.extraData);
} else {
uni.showToast({ title: res.msg, icon: 'none' });
}
} catch (error) {
uni.showToast({ title: '解析失败', icon: 'none' });
}
},
fail: () => {
uni.showToast({ title: '上传失败', icon: 'none' });
}
});
}
}
}
</script>

2
pages/coach/class/info.vue

@ -276,7 +276,7 @@ export default {
}
//
if (this.filteredData.page * this.filteredData.limit > this.filteredData.total || this.filteredData.limit > this.filteredData.total) {
if ((this.filteredData.page - 1) * this.filteredData.limit >= this.filteredData.total) {
this.loading = false
uni.showToast({
title: '暂无更多',

2
pages/coach/class/list.vue

@ -116,7 +116,7 @@ export default {
console.log(111,(this.filteredData.page * this.filteredData.limit) ,(this.filteredData.total))
//
if(this.filteredData.page * this.filteredData.limit > this.filteredData.total){
if ((this.filteredData.page - 1) * this.filteredData.limit >= this.filteredData.total) {
this.loading = false
uni.showToast({
title: '暂无更多',

2
pages/coach/job/list.vue

@ -96,7 +96,7 @@ export default {
let data = {...this.filteredData}
//
if(this.filteredData.page * this.filteredData.limit > this.filteredData.total){
if ((this.filteredData.page - 1) * this.filteredData.limit >= this.filteredData.total) {
this.loading = false
uni.showToast({
title: '暂无更多',

2
pages/coach/my/arrival_statistics.vue

@ -114,7 +114,7 @@ export default {
}
//
if (this.filteredData.page * this.filteredData.limit > this.filteredData.total || this.filteredData.limit > this.filteredData.total) {
if ((this.filteredData.page - 1) * this.filteredData.limit >= this.filteredData.total) {
this.loading = false
uni.showToast({
title: '暂无更多',

2
pages/coach/my/my_attendance.vue

@ -355,7 +355,7 @@ export default {
let data = {...this.filteredData}
//
if(this.filteredData.page * this.filteredData.limit > this.filteredData.total){
if ((this.filteredData.page - 1) * this.filteredData.limit >= this.filteredData.total) {
this.loading = false
uni.showToast({
title: '暂无更多',

2
pages/coach/student/info.vue

@ -239,7 +239,7 @@ export default {
let data = {...this.filteredData}
//
if(this.filteredData.page * this.filteredData.limit > this.filteredData.total){
if ((this.filteredData.page - 1) * this.filteredData.limit >= this.filteredData.total) {
this.loading = false
uni.showToast({
title: '暂无更多',

2
pages/common/contract_list.vue

@ -101,7 +101,7 @@ export default {
let data = {...this.filteredData}
//
if(this.filteredData.page * this.filteredData.limit > this.filteredData.total){
if ((this.filteredData.page - 1) * this.filteredData.limit >= this.filteredData.total) {
this.loading = false
uni.showToast({
title: '暂无更多',

235
pages/common/im_chat_info.vue

@ -6,56 +6,106 @@
<scroll-view
class="section_1"
scroll-y="true"
:scroll-top="scrollTop"
:lower-threshold="lowerThreshold"
style="height: 80vh;"
style="height: 78vh;"
>
<view class="ul">
<view class="item_box" v-for="(v,k) in tableList" :key="k" :id="'item_' + v.id">
<view class="time_section" v-if="v.created_at">{{v.created_at}}</view>
<view class="li" v-if="v.direction == `left`">
<view class="item left_item">
<view class="text_box">{{v.content}}</view>
<view class="item left_item" :style="{ backgroundColor: v.message_type === 'text' ? '#f4f6f9' : '' }">
<!--文本内容-->
<view class="text_box" v-if="v.message_type == 'text'">{{v.content}}</view>
<!-- 图片内容 -->
<view class="img_box" v-if="v.message_type == 'img'" @click="previewImage(v.content)">
<image class="chat_img" :src="v.content" mode="aspectFill"></image>
</view>
</view>
<view class="item"></view>
</view>
<view class="li" v-if="v.direction == `right`">
<view class="item"></view>
<view class="item right_item">
<view class="text_box">{{v.content}}</view>
<view class="item right_item" :style="{ backgroundColor: v.message_type === 'text' ? '#1684fc' : '' }">
<view class="text_box" v-if="v.message_type == 'text'">{{v.content}}</view>
<!-- 图片内容 -->
<view class="img_box" v-if="v.message_type == 'img'" @click="previewImage(v.content)">
<image class="chat_img" :src="v.content" mode="aspectFill"></image>
</view>
</view>
</view>
</view>
</view>
</scroll-view>
</view>
<view class="input_section">
<view class="left_box">
<input class="input" v-model="formData.content" type="text" placeholder="请输入">
</view>
<view class="right_box">
<image @click="submitForm()" class="send_img" src="@/static/images/common/fa_song.png"></image>
<!--发送-->
<view class="img_box">
<image @click="submitTextForm()" class="send_img" src="@/static/images/common/fa_song.png"></image>
</view>
<!--更多选择-->
<view class="img_box">
<image @click="openMore()" class="send_img" src="@/static/images/common/jia_hao.png"></image>
</view>
</view>
</view>
<!--更多选择-->
<fui-bottom-popup :show="moreShow" @close="closeMore">
<view class="more_section">
<view class="fui-scroll__wrap">
<scroll-view scroll-y class="fui-scroll__view">
<view class="ul">
<view class="li" @click="">
<AQUplodeImage
:uploadUrl=uploadUrl
:extraData="{ input_name: 'img_uplode', formData:{} }"
@uplodeImageRes="uplodeImageRes"
>
<view class="icon_box">
<fui-icon name="picture-fill" :size="80"></fui-icon>
</view>
<view class="title">相册</view>
</AQUplodeImage>
</view>
</view>
</scroll-view>
</view>
</view>
</fui-bottom-popup>
</view>
</template>
<script>
import apiRoute from '@/api/apiRoute.js';
import memberApi from '@/api/member.js';
import commonApi from '@/api/common.js';
import AQUplodeImgMulti from '@/components/AQ/AQUplodeImgMulti';
import {
Api_url
} from "@/common/config.js";
import AQUplodeImage from '@/components/AQ/AQUplodeImage';//
import AQTabber from "@/components/AQ/AQTabber"
export default {
components: {
AQTabber,
AQUplodeImgMulti,
AQUplodeImage,
},
data() {
return {
uploadUrl: `${Api_url}/uploadImage`,
scrollTop:'',//,
loading:false,//
lowerThreshold: 100,//
isReachedBottom: false,//|true=|false=
@ -90,7 +140,8 @@ export default {
content: '',//JSON ,=,=
},
lastItemId: null,
//
moreShow:false,
}
},
onLoad(options) {
@ -137,16 +188,10 @@ export default {
//
await this.getList();
// item ID
this.lastItemId = 'item_' + (this.tableList.length - 1);
//
this.$nextTick(() => {
this.$refs.scrollView.scrollTo({ top: this.scrollViewHeight });
});
// 使 scroll-into-view
this.scrollIntoView = this.lastItemId;
//
if (this.filteredData.page == 2) {
this.scrollToBottom()
}
},
//
@ -265,6 +310,12 @@ export default {
// console.log('AQxxx2',this.formData.member_store_certification_arr)
},
//
submitTextForm(){
this.formData.message_type = 'text'
this.submitForm()
},
//
async submitForm() {
let data = {...this.formData}
@ -285,24 +336,60 @@ export default {
} else {
let content = this.formData.content
this.formData.content = ''//
let msgData = {
"id": '',
"hair_staff_id": this.filteredData.hair_staff_id,
"closed_staff_id": '',
"content": content,
"status": 1,
"type": 2,
"create_time": "",
"redirect": null,
"title": null,
"direction": "right",
"show_time": ""
id:'',
from_type:data.from_type,//|personnel=,customer=()
from_id:data.from_id,//ID
to_id:data.to_id,//ID
friend_id:data.friend_id,//chat_friendsid
message_type: data.message_type,//|text=,img=
content: data.content,//JSON ,=,=
direction:'right'
}
//
this.tableList = this.tableList.concat(msgData);
}
},
//
scrollToBottom() {
this.$nextTick(() => {
this.scrollTop = 999999 //
})
},
//
openMore(){
this.moreShow = true
},
//
closeMore(){
this.moreShow = false
},
//
uplodeImageRes(resData,extraData){
console.log('上传成功回调',resData,extraData)
//
if(extraData.input_name == 'img_uplode'){
this.closeMore()//
this.formData.content = resData.url
this.formData.message_type = 'img'
this.submitForm()
}
},
//
previewImage(url){
uni.previewImage({
current: url, //
urls: [url] //
});
},
}
}
</script>
@ -330,8 +417,8 @@ export default {
min-height: 100vh;
background: #292929 100%;
padding: 0 0rpx;
padding-top: 32rpx;
padding-bottom: 150rpx;
padding-top: 120rpx;
padding-bottom: 120rpx;
font-size: 28rpx;
display: flex;
flex-direction: column;
@ -366,13 +453,20 @@ export default {
word-wrap: break-word; /* 允许长单词或 URL 换行 */
word-break: break-all; /* 强制所有字符换行 */
.text_box{}
.img_box {
.chat_img {
width: 200rpx;
height: 200rpx;
border-radius: 16rpx;
}
}
}
.left_item{
background-color: #f4f6f9;
//background-color: #f4f6f9;
color: #343434;
}
.right_item{
background-color: #1684fc;
//background-color: #1684fc;
color: #fff;
}
}
@ -387,12 +481,13 @@ export default {
position: fixed;
bottom: 0;
padding: 50rpx 50rpx;
padding: 30rpx;
padding-bottom: 50rpx;
display: flex;
justify-content:space-between;
align-items: center;
gap: 20rpx;
.left_box{
width: 70%;
.input{
background-color: #f4f6f9;
height: 88rpx;
@ -400,22 +495,28 @@ export default {
font-size: 28rpx;
border-radius: 32rpx;
width: 532rpx;
width: 480rpx;
color: #292929;
font-size: 28rpx;
}
}
.right_box{
border-radius: 50%;
background-color: #a2cefe;
width: 88rpx;
height: 88rpx;
width: 100%;
display: flex;
justify-content: center;
justify-content: space-between;
align-items: center;
.send_img{
width: 36rpx;
height: 36rpx;
.img_box{
width: 88rpx;
height: 88rpx;
border-radius: 50%;
background-color: #a2cefe;
display: flex;
justify-content: center;
align-items: center;
.send_img{
width: 36rpx;
height: 36rpx;
}
}
}
@ -425,4 +526,44 @@ export default {
color: #999999;
padding-left: 30rpx;
}
/* 更多选项相关 自定义内容区样式需自行控制 */
.more_section{
.fui-scroll__wrap {
padding-top: 30rpx;
position: relative;
}
.fui-title {
font-size: 30rpx;
font-weight: bold;
text-align: center;
padding-bottom: 24rpx;
}
.fui-icon__close {
position: absolute;
top: 24rpx;
left: 24rpx;
}
.fui-scroll__view {
width: 100%;
height: 350rpx;
}
.ul{
padding: 10rpx 40rpx;
display: flex;
.li{
display: flex;
flex-direction: column;
align-items: center;
.icon_box{
}
.title{
font-size: 28rpx;
text-align: center;
}
}
}
}
</style>

2
pages/common/my_attendance.vue

@ -469,7 +469,7 @@ export default {
let data = {...this.filteredData}
//
if(this.filteredData.page * this.filteredData.limit > this.filteredData.total){
if ((this.filteredData.page - 1) * this.filteredData.limit >= this.filteredData.total) {
this.loading = false
uni.showToast({
title: '暂无更多',

109
pages/common/my_message.vue

@ -24,9 +24,9 @@
>
<view class="left">
<image
v-if="v.type==2"
v-if="(['1','2','3'].includes(String(userType)))"
class="pic"
:src="(v.header ? $util.img(v.header) : `@/static/images/common/yong_hu.png`)"
src="@/static/images/common/yong_hu.png"
model="aspectFit"
></image>
@ -46,19 +46,27 @@
</template>
<script>
import apiRoute from '@/api/apiRoute.js';
import memberApi from '@/api/member.js';
import commonApi from '@/api/common.js';
import AQUplodeImgMulti from '@/components/AQ/AQUplodeImgMulti';
import AQTabber from "@/components/AQ/AQTabber"
export default {
components: {
AQTabber,
AQUplodeImgMulti,
},
data() {
return {
//
filteredData:{
page:1,//
limit:10,//
total:10,//
personnel_id:'',//id(21)
customer_resources_id:'',//id(21)
},
formData: {
images_arr: [],
images: '',
@ -68,6 +76,8 @@ export default {
//
contactList:[],
userType:'',//|1=,2=,3=
from_type: '',//|personnel=,customer=()
}
},
onLoad() {
@ -75,16 +85,72 @@ export default {
onShow() {
this.init();
},
//
async onPullDownRefresh() {
//
await this.resetFilteredData()
await this.getList()
},
methods: {
//
async init(){
//
this.userType = uni.getStorageSync('userType')
//1=,2=,3=
if (['1', '2'].includes(String(this.userType))) {
this.from_type = 'personnel'//
await this.getPersonnelUserInfo()
}else{
//
this.from_type = 'customer'//
}
this.getContactList()
},
//
async getPersonnelUserInfo(){
let data = {}
let res = await apiRoute.getPersonnelInfo(data);
if (res.code != 1){
uni.showToast({
title: res.msg,
icon: 'none'
})
return
}
res.data.cameus_dept_arr.forEach((v,k)=>{
let d_arr = []
v.dept_arr.forEach((dv,dk)=>{
d_arr.push(dv.dept_name)
})
//
v.dept_name_str = d_arr.join(',')
})
this.filteredData.personnel_id = res.data.id
},
//
async getContactList(){
let res = await commonApi.getContactList()
console.log('获取联系人列表', res)
let params = {...this.filteredData}
//
if ((this.filteredData.page - 1) * this.filteredData.limit >= this.filteredData.total) {
this.loading = false
uni.showToast({
title: '暂无更多',
icon: 'none'
})
return
}
if(params.page == 1){
this.contactList = []
}
let res = await apiRoute.xs_chatGetChatFriendsList(params)
this.loading = false
this.isReachedBottom = false;
if (res.code != 1) {
uni.showToast({
title: res.msg,
@ -92,7 +158,23 @@ export default {
})
return
}
this.contactList = res.data
res.data.data.forEach((v,k)=>{
v.name = ''
v.count = '0'
if(this.from_type == 'personnel'){
v.name = v.personnel_id_name
v.count = v.unread_count_personnel
}else{
v.name = v.customer_resources_id_name
v.count = v.unread_count_customer_resources
}
})
console.log('列表',res.data.data)
this.contactList = this.contactList.concat(res.data.data); // 使 concat
this.filteredData.total = res.data.total
this.filteredData.page++
},
//######AQ######
@ -153,10 +235,19 @@ export default {
//
this.openViewSysMsgList(e)
}else{
let from_id = ''//id
let to_id = ''//ID
//
let hair_staff_id = e.hair_staff_id//id
if (this.from_type == 'personnel') {
from_id = e.personnel_id
to_id = e.customer_resources_id
} else {
from_id = e.customer_resources_id
to_id = e.personnel_id
}
uni.navigateTo({
url: `/pages/common/im_chat_info?hair_staff_id=${hair_staff_id}`
url: `/pages/common/im_chat_info?from_id=${from_id}&to_id=${to_id}`
})
}

2
pages/common/sys_msg_list.vue

@ -98,7 +98,7 @@ export default {
let data = {...this.filteredData}
//
if(this.filteredData.page * this.filteredData.limit > this.filteredData.total){
if ((this.filteredData.page - 1) * this.filteredData.limit >= this.filteredData.total) {
this.loading = false
uni.showToast({
title: '暂无更多',

80
pages/market/clue/add_clues.vue

@ -14,12 +14,12 @@
<!-- 添加客户-->
<view style="margin-top: 20rpx;" v-if="optionTableId == 0">
<!-- <view class="search_box">-->
<!-- <view class="input_box">-->
<!-- <input type="text" v-model="student_name" placeholder="请输入客户名称">-->
<!-- </view>-->
<!-- <view class="btn" @click="clientList()">查重</view>-->
<!-- </view>-->
<view class="search_box">
<view class="input_box">
<input type="text" v-model="student_name" placeholder="请输入客户名称">
</view>
<view class="btn" @click="clientList()">查重</view>
</view>
<view class="form-style">
<fui-form ref="form" top="0" :model="formData" :show="false">
@ -416,7 +416,7 @@
<!-- 年月日-选择时间 -->
<fui-date-picker :show="date_picker_show" type="5" @change="change_date" @cancel="cancel_date"></fui-date-picker>
<fui-date-picker :show="date_picker_show" type="3" @change="change_date" @cancel="cancel_date"></fui-date-picker>
<!-- 选择器 -->
<fui-picker
@ -454,28 +454,34 @@
<image
class="img"
src="@/static/images/index/myk.png"></image>
<view class="name">{{v.student_name}}</view>
<view class="tag">{{ v.is_status == 1 ? '试听' : '成交' }}</view>
<view class="name">{{v.name}}</view>
<!-- <view class="tag">{{ v.is_status == 1 ? '试听' : '成交' }}</view>-->
</view>
<view class="box_2">
<view class="left">
<view class="name">首选联系人{{v.contact_name}}</view>
<view class="name">首选联系人{{v.decision_maker}}</view>
<!-- <view class="call">妈妈</view>-->
</view>
</view>
<view class="box_2">
<view class="left">
<view class="name">联系电话{{v.phone_number || ''}}</view>
</view>
</view>
<view class="box_3">
<view class="left">
{{ $util.formatToDateTime((v.follow && v.follow.follow_up_time || ''), 'm-d H:i') }} 跟进
{{ $util.formatToDateTime((v.updated_at || ''), 'm-d H:i') }} 跟进
</view>
<view class="right">
<image
v-if="['A+','A','A-'].includes(v.follow && v.follow.initial_customer_intent || '')"
v-if="v.initial_intent = 'high'"
src="@/static/images/index/intention3.png"
class="img"
></image>
<image
v-else-if="['B+','B','B-'].includes(v.follow && v.follow.initial_customer_intent || '')"
v-else-if="v.initial_intent == 'medium'"
src="@/static/images/index/intention2.png"
class="img"
></image>
@ -485,13 +491,13 @@
class="img"
></image>
<view>意向{{ v.follow && v.follow.initial_customer_intent || '' }}</view>
<view>意向{{ v.initial_intent_name || '' }}</view>
</view>
</view>
</view>
<view class="right_box">
<image class="img" src="@/static/images/index/message.png" @click="openViewMyMessage(v)"></image>
<image class="img" src="@/static/images/index/phone.png" @click="dialTel(v)"></image>
<image v-if="v.member_id" class="img" src="@/static/images/index/message.png" @click="openViewMyMessage(v)"></image>
<image v-if="v.phone_number" class="img" src="@/static/images/index/phone.png" @click="dialTel(v)"></image>
</view>
</view>
</view>
@ -907,9 +913,9 @@ export default {
this.clientUserList = []
let param = {
student_name:this.student_name
name:this.student_name
}
let res = await marketApi.clientList(param)
let res = await apiRoute.xs_getAllCustomerResources(param)
if(res.code != 1){
uni.showToast({
title: res.msg,
@ -933,23 +939,37 @@ export default {
//-
openViewClueInfo(item) {
let id = item.id
let resource_sharing_id = '';
if (item.resourceSharingHasMany && item.resourceSharingHasMany.length > 0) {
resource_sharing_id = item.resourceSharingHasMany[0].id; // id
}
if (!resource_sharing_id) {
uni.showToast({
title: '暂时无法查看',
icon: 'none'
});
return;
}
uni.navigateTo({
url: `/pages/market/clue/clue_info?id=${id}`
url: `/pages/market/clue/clue_info?resource_sharing_id=${resource_sharing_id}`
})
},
//-
openViewMyMessage(item) {
let hair_staff_id = item.hair_staff_id
let from_id = this.userInfo.id//id
let to_id = item.customerResource.id//ID
uni.navigateTo({
url: `/pages/common/im_chat_info?hair_staff_id=${hair_staff_id}`
url: `/pages/common/im_chat_info?from_id=${from_id}&to_id=${to_id}`
})
},
//
async dialTel(item) {
let tel = item.student_phone
let tel = item.phone_number
if (!tel) {
uni.showToast({
@ -959,10 +979,18 @@ export default {
return;
}
let param = {
sales_id: item.id//线id
staff_id: this.userInfo.id,//id
resource_id: item.id,//ID
resource_type: '',//
communication_type: 'phone',//: phone-, email-, meeting-, other-
communication_result: 'success',//: success-, failure-, pending-
remarks: null,//
tag: null,//
}
let res = await marketApi.setCallUp(param)//
let res = await apiRoute.xs_communicationRecordsAdd(param)//
if (res.code != 1) {
uni.showToast({
title: res.msg,
@ -1103,7 +1131,7 @@ export default {
//
let val = (e.result ?? '')
if(val){
val = val + ':00'
val = val
}
let input_name = this.data_picker_input_name

137
pages/market/clue/edit_clues.vue

@ -233,44 +233,7 @@
></fui-input>
</view>
</fui-form-item>
<!--客户初步意向度-->
<fui-form-item
label="客户初步意向度"
asterisk asteriskPosition="right"
labelSize='26'
prop=""
background='#434544'
labelColor='#fff'
:bottomBorder='false'
>
<view class="input-title" style="margin-right:14rpx;">
<view
class="input-title"
style="margin-right:14rpx;"
@click="openCicker(`initial_intent`)">
{{ (formData.initial_intent) ? picker_config.initial_intent.text : '点击选择' }}
</view>
</view>
</fui-form-item>
<!--客户状态-->
<fui-form-item
label="客户状态"
asterisk asteriskPosition="right"
labelSize='26'
prop=""
background='#434544'
labelColor='#fff'
:bottomBorder='false'
>
<view class="input-title" style="margin-right:14rpx;">
<view
class="input-title"
style="margin-right:14rpx;"
@click="openCicker(`status`)">
{{ (formData.status) ? picker_config.status.text : '点击选择' }}
</view>
</view>
</fui-form-item>
</view>
</fui-form>
</view>
@ -287,6 +250,44 @@
<view class="title" style="margin-top: 20rpx;">六要素信息</view>
<view class="input-style">
<!--客户初步意向度-->
<fui-form-item
label="客户初步意向度"
asterisk asteriskPosition="right"
labelSize='26'
prop=""
background='#434544'
labelColor='#fff'
:bottomBorder='false'
>
<view class="input-title" style="margin-right:14rpx;">
<view
class="input-title"
style="margin-right:14rpx;"
@click="openCicker(`initial_intent`)">
{{ (formData.initial_intent) ? picker_config.initial_intent.text : '点击选择' }}
</view>
</view>
</fui-form-item>
<!--客户状态-->
<fui-form-item
label="客户状态"
asterisk asteriskPosition="right"
labelSize='26'
prop=""
background='#434544'
labelColor='#fff'
:bottomBorder='false'
>
<view class="input-title" style="margin-right:14rpx;">
<view
class="input-title"
style="margin-right:14rpx;"
@click="openCicker(`status`)">
{{ (formData.status) ? picker_config.status.text : '点击选择' }}
</view>
</view>
</fui-form-item>
<!--购买力-->
<fui-form-item
label="购买力"
@ -405,6 +406,51 @@
></fui-input>
</view>
</fui-form-item>
<!--一访情况-->
<fui-form-item
label="一访情况"
asteriskPosition="right"
labelSize='26'
prop="title"
background='#434544'
labelColor='#fff'
:bottomBorder='false'>
<view class="input-title" style="margin-right:14rpx;">
<fui-textarea placeholder="点击填写" style="text-align: left;" v-model="formData.first_visit_status" ></fui-textarea>
<!-- <fui-input-->
<!-- :borderBottom="false"-->
<!-- :padding="[0]"-->
<!-- placeholder="点击填写"-->
<!-- v-model="formData.first_visit_status"-->
<!-- backgroundColor="#434544"-->
<!-- size="26"-->
<!-- color="#fff"-->
<!-- ></fui-input>-->
</view>
</fui-form-item>
<!--二访情况-->
<fui-form-item
label="二访情况"
asteriskPosition="right"
labelSize='26'
prop="title"
background='#434544'
labelColor='#fff'
:bottomBorder='false'>
<view class="input-title" style="margin-right:14rpx;">
<fui-textarea placeholder="点击填写" borderColor="#292929" style="text-align: left;" v-model="formData.second_visit_status"></fui-textarea>
<!-- <fui-input-->
<!-- :borderBottom="false"-->
<!-- :padding="[0]"-->
<!-- placeholder="点击填写"-->
<!-- v-model="formData.second_visit_status"-->
<!-- backgroundColor="#434544"-->
<!-- size="26"-->
<!-- color="#fff"-->
<!-- ></fui-input>-->
</view>
</fui-form-item>
</view>
</fui-form>
</view>
@ -416,7 +462,7 @@
<!-- 年月日-选择时间 -->
<fui-date-picker :show="date_picker_show" type="5" @change="change_date" @cancel="cancel_date"></fui-date-picker>
<fui-date-picker :show="date_picker_show" type="3" @change="change_date" @cancel="cancel_date"></fui-date-picker>
<!-- 选择器 -->
<fui-picker
@ -610,6 +656,8 @@ export default {
staff_id:'',//ID
distance:'',//
optional_class_time:'',//
first_visit_status:'',//访
second_visit_status:'',//访
},
//
@ -740,6 +788,7 @@ export default {
let customerResource = res.data.customerResource || {}//
let sixSpeed = res.data.customerResource.sixSpeed || {}//
console.log('12313',sixSpeed)
console.log('详情',res.data)
@ -765,11 +814,13 @@ export default {
staff_id: sixSpeed.staff_id || '',//ID
distance: sixSpeed.distance || '',//
promised_visit_time: sixSpeed.promised_visit_time || '',//访
optional_class_time: sixSpeed.preferred_class_time || ''//
optional_class_time: sixSpeed.preferred_class_time || '',//
first_visit_status:sixSpeed.first_visit_status || '',//访
second_visit_status:sixSpeed.second_visit_status || '',//访
}
this.formData.promised_visit_time = this.$util.formatToDateTime(sixSpeed.promised_visit_time, 'Y-m-d H:i');//(Y-m-d H:i)
this.formData.optional_class_time = this.$util.formatToDateTime(sixSpeed.promised_visit_time, 'Y-m-d H:i');//(Y-m-d H:i)
this.formData.promised_visit_time = this.$util.formatToDateTime(sixSpeed.promised_visit_time, 'Y-m-d');//(Y-m-d H:i)
this.formData.optional_class_time = this.$util.formatToDateTime(sixSpeed.promised_visit_time, 'Y-m-d');//(Y-m-d H:i)
//
this.picker_config.source_channel.text = customerResource.source_channel_name || '点击选择'//
@ -1150,7 +1201,7 @@ export default {
//
let val = (e.result ?? '')
if(val){
val = val + ':00'
val = val
}
let input_name = this.data_picker_input_name

2
pages/market/clue/edit_clues_log.vue

@ -227,7 +227,7 @@ export default {
let data = {...this.filteredData}
//
if(this.filteredData.page * this.filteredData.limit > this.filteredData.total){
if ((this.filteredData.page - 1) * this.filteredData.limit >= this.filteredData.total) {
this.loading = false
uni.showToast({
title: '暂无更多',

7
pages/market/clue/index.vue

@ -59,8 +59,9 @@
</view>
</view>
</view>
<!--只有注册了member表的账号才可操作IM对话-->
<view style="width: 15%;">
<image src="@/static/images/index/message.png" class="image" @click="openViewMyMessage(v)"></image>
<image v-if="v.customerResource.member_id" src="@/static/images/index/message.png" class="image" @click="openViewMyMessage(v)"></image>
</view>
<view style="width: 15%;">
<image v-if="v.customerResource.phone_number" src="@/static/images/index/phone.png" class="image" @click="dialTel(v)"></image>
@ -266,8 +267,8 @@ export default {
this.filteredData_1.shared_by = this.userInfo.id//ID
//,""
if(this.userInfo.role_key_arr.includes('manager')){
//,""
if(this.userInfo.role_key_arr.includes('market_manager')){
this.values = [
{
id: 1,

52
pages/market/my/index.vue

@ -34,32 +34,32 @@
</view>
<!--统计信息-->
<view class="count_section">
<view class="main">
<view class="course_box">
<view class="top">
<view class="item">
<view class="num">{{userInfo.yjds}}</view>
<view class="intro">业绩单数/</view>
</view>
<view class="item">
<view class="num">{{userInfo.yqds}}</view>
<view class="intro">已签单数/</view>
</view>
<view class="item">
<view class="num">1234</view>
<view class="intro">新课签到数/</view>
</view>
</view>
<view class="bottom">
较上月
<text class="reduce">-5</text>
</view>
</view>
</view>
<view class="bg_box bg_top"></view>
<view class="bg_box bg_bottom"></view>
</view>
<!-- <view class="count_section">-->
<!-- <view class="main">-->
<!-- <view class="course_box">-->
<!-- <view class="top">-->
<!-- <view class="item">-->
<!-- <view class="num">{{userInfo.yjds}}</view>-->
<!-- <view class="intro">业绩单数/</view>-->
<!-- </view>-->
<!-- <view class="item">-->
<!-- <view class="num">{{userInfo.yqds}}</view>-->
<!-- <view class="intro">已签单数/</view>-->
<!-- </view>-->
<!-- <view class="item">-->
<!-- <view class="num">1234</view>-->
<!-- <view class="intro">新课签到数/</view>-->
<!-- </view>-->
<!-- </view>-->
<!-- <view class="bottom">-->
<!-- 较上月-->
<!-- <text class="reduce">-5</text>-->
<!-- </view>-->
<!-- </view>-->
<!-- </view>-->
<!-- <view class="bg_box bg_top"></view>-->
<!-- <view class="bg_box bg_bottom"></view>-->
<!-- </view>-->
</view>

2
pages/market/my/signed_client_list.vue

@ -113,7 +113,7 @@ export default {
let data = {...this.filteredData}
//
if(this.filteredData.page * this.filteredData.limit > this.filteredData.total){
if ((this.filteredData.page - 1) * this.filteredData.limit >= this.filteredData.total) {
this.loading = false
uni.showToast({
title: '暂无更多',

2
pages/student/index/job_list.vue

@ -104,7 +104,7 @@ import memberApi from '@/api/member.js';
let data = {...this.filteredData}
//
if(this.filteredData.page * this.filteredData.limit > this.filteredData.total){
if ((this.filteredData.page - 1) * this.filteredData.limit >= this.filteredData.total) {
this.loading = false
uni.showToast({
title: '暂无更多',

2
pages/student/index/physical_examination.vue

@ -102,7 +102,7 @@ import memberApi from '@/api/member.js';
let data = {...this.filteredData}
//
if(this.filteredData.page * this.filteredData.limit > this.filteredData.total){
if ((this.filteredData.page - 1) * this.filteredData.limit >= this.filteredData.total) {
this.loading = false
uni.showToast({
title: '暂无更多',

232
pages/student/login/forgot.vue

@ -1,55 +1,99 @@
<template>
<view>
<view class="title">
<view :class="{'green-text': tset_style === 1}">1.验证手机号码</view>
<view :class="{'green-text': tset_style === 2}">2.设置新密码</view>
<view :class="{'green-text': titleIndex === 1}" @click="changeTitle(1)">1.验证手机号码</view>
<view :class="{'green-text': titleIndex === 2}" @click="changeTitle(2)">2.设置新密码</view>
</view>
<view :style="{'background-color':'#fff','width':'100%','height':'100vh' }">
<view style="width: 95%;height: 30rpx;"></view>
<view v-if="tset_style == 1">
<view style="width: 95%;margin:30rpx auto;">
<fui-input borderTop placeholder="请输入手机号" v-model="user" @input="input"
backgroundColor="#f2f2f2"></fui-input>
</view>
<view style="width: 95%;margin: auto;">
<fui-input borderTop :padding="['20rpx','32rpx']" v-model="code" placeholder="请输入短信验证码" @input="input"
backgroundColor="#f2f2f2">
<fui-countdown-verify ref="fui_cdv" @send="sendCode"></fui-countdown-verify>
</fui-input>
</view>
</view>
<view v-if="tset_style == 2">
<view style="width: 95%;margin:30rpx auto;">
<fui-input borderTop placeholder="请设置6-20位新的登录密码" v-model="user" @input="input"
backgroundColor="#f2f2f2"></fui-input>
</view>
<view style="width: 95%;margin: auto;">
<fui-input borderTop :padding="['20rpx','32rpx']" v-model="code" placeholder="请再次输入新的登录密码" @input="input"
backgroundColor="#f2f2f2">
</fui-input>
</view>
</view>
<view style="width: 95%;margin:60rpx auto;">
<fui-button background="#00be8c" radius="5rpx" @click="nextStep" v-if="tset_style == 1">下一步</fui-button>
<fui-button background="#00be8c" radius="5rpx" @click="submit" v-if="tset_style == 2">提交</fui-button>
</view>
<view style="width: 95%;height: 30rpx;"></view>
<view v-if="titleIndex == 1">
<view style="width: 95%;margin:30rpx auto;">
<fui-input borderTop placeholder="请输入手机号" v-model="formData.phone" @input="input"
backgroundColor="#f2f2f2"></fui-input>
</view>
<view style="width: 95%;margin: auto;">
<fui-input borderTop :padding="['20rpx','32rpx']" v-model="formData.code" placeholder="请输入短信验证码" @input="input"
backgroundColor="#f2f2f2">
<fui-countdown-verify ref="fui_cdv" @send="sendCode"></fui-countdown-verify>
</fui-input>
</view>
<view style="width: 95%;margin: auto; margin-top: 30rpx;" @click="openPicker()">
<fui-form-item label="" arrow highlight background="#f2f2f2">
<input class="fui-page__input" v-model="formData.user_type_name" placeholder="请选择用户类型" placeholder-style="color:#ccc;" disabled/>
</fui-form-item>
</view>
</view>
<view v-if="titleIndex == 2">
<view style="width: 95%;margin:30rpx auto;">
<fui-input borderTop placeholder="请设置6-20位新的登录密码" v-model="formData.password" @input="input"
backgroundColor="#f2f2f2"></fui-input>
</view>
<view style="width: 95%;margin: auto;">
<fui-input borderTop :padding="['20rpx','32rpx']" v-model="formData.password_2" placeholder="请再次输入新的登录密码" @input="input"
backgroundColor="#f2f2f2">
</fui-input>
</view>
</view>
<view style="width: 95%;margin:60rpx auto;">
<fui-button background="#00be8c" radius="5rpx" @click="nextStep" v-if="titleIndex == 1">下一步</fui-button>
<fui-button background="#00be8c" radius="5rpx" @click="submit" v-if="titleIndex == 2">提交</fui-button>
</view>
</view>
<!-- 选择器 -->
<fui-picker
:linkage="true"
:options="picker_options"
:layer="1"
:show="picker_show"
@change="changeCicker"
@cancel="cancelCicker">
</fui-picker>
</view>
</template>
<script>
import apiRoute from '@/api/apiRoute.js';
export default {
data() {
return {
code: '',
user: '',
tset_style: 1,
}
},
onLoad() {
//
picker_show:false,//
picker_options:[
{
text:'学员',
value:'customer',
},
{
text:'员工',
value:'personnel',
}
],//
//-
formData: {
phone: '',//
code: '',//
code_type: 'editPassword',//(/ )|=editPassword
password: '',//
password_2: '',//
user_type: '',//|customer=|personnel=(/)
user_type_name: '',//|customer=|personnel=(/)
},
titleIndex:1,//|1=|2=
}
},
onLoad() {},
methods: {
//
sendCode() {
//
setTimeout(() => {
@ -59,9 +103,119 @@
this.$refs.fui_cdv && this.$refs.fui_cdv.success()
}, 800)
},
nextStep(){
this.tset_style = 2
}
//--
changeCicker(e){
this.formData.user_type = e.value
this.formData.user_type_name = e.text
this.cancelCicker()
},
//
openPicker(){
this.picker_show = true
},
//
cancelCicker(){
this.picker_show = false
},
//
async nextStep(){
//
if(!this.formData.code){
uni.showToast({
title: '请输入短信验证码',
icon: 'none'
})
return
}
if(!this.formData.phone){
uni.showToast({
title: '请输入手机号',
icon: 'none'
})
return
}
if(!this.formData.user_type){
uni.showToast({
title: '请选择用户类型',
icon: 'none'
})
return
}
this.titleIndex = 2
},
//
async validateForm(formData) {
//
if(!formData.phone){
uni.showToast({
title: `请填写手机号`,
icon: 'none'
});
this.changeTitle(1)
return false
}
if(!formData.user_type){
uni.showToast({
title: `请选择用户类型`,
icon: 'none'
});
this.changeTitle(1)
return false
}
if(!formData.code){
uni.showToast({
title: `请填写短信验证码`,
icon: 'none'
});
this.changeTitle(1)
return false
}
if(!formData.password || formData.password != formData.password_2){
uni.showToast({
title: `两次密码不一致`,
icon: 'none'
});
this.changeTitle(2)
return false
}
return true;
},
//
async submit(){
let params = {...this.formData}
let res_validateForm = await this.validateForm(params);//
if(!res_validateForm){
return
}
let res = await apiRoute.common_forgetPassword(params);//
if(res.code != 1){
uni.showToast({
title: res.msg,
icon: 'none'
})
return
}
uni.showToast({
title: res.msg,
icon: 'success'
})
//1s
setTimeout(() => {
//-
uni.navigateTo({
url: `/pages/student/login/login`
})
}, 1000)
},
//
changeTitle(index){
this.titleIndex = index
},
}
}
</script>

2
pages/student/my/lesson_consumption.vue

@ -92,7 +92,7 @@ import memberApi from '@/api/member.js';
let data = {...this.filteredData}
//
if(this.filteredData.page * this.filteredData.limit > this.filteredData.total){
if ((this.filteredData.page - 1) * this.filteredData.limit >= this.filteredData.total) {
this.loading = false
uni.showToast({
title: '暂无更多',

2
pages/student/timetable/index.vue

@ -232,7 +232,7 @@ export default {
let data = {...this.filteredData}
//
if (this.filteredData.page * this.filteredData.limit > this.filteredData.total || this.filteredData.limit > this.filteredData.total) {
if ((this.filteredData.page - 1) * this.filteredData.limit >= this.filteredData.total) {
this.loading = false
uni.showToast({
title: '暂无更多',

BIN
static/images/common/jia_hao.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 817 B

Loading…
Cancel
Save