邀约
This commit is contained in:
@@ -6,12 +6,12 @@
|
||||
# @Description:
|
||||
###
|
||||
# 页面标题
|
||||
VUE_APP_TITLE = 莳松管理系统
|
||||
VUE_APP_TITLE = 开心学车管理系统
|
||||
|
||||
# 开发环境配置
|
||||
ENV = 'development'
|
||||
|
||||
# 莳松管理系统/开发环境
|
||||
# 开心学车管理系统/开发环境
|
||||
VUE_APP_BASE_API = '/dev-api'
|
||||
|
||||
JWL_API = ''
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# 页面标题
|
||||
VUE_APP_TITLE = 莳松管理系统
|
||||
VUE_APP_TITLE = 开心学车管理系统
|
||||
|
||||
# 生产环境配置
|
||||
ENV = 'production'
|
||||
|
||||
# 莳松管理系统/生产环境
|
||||
# 开心学车管理系统/生产环境
|
||||
VUE_APP_BASE_API = '/duima'
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# 页面标题
|
||||
VUE_APP_TITLE = 莳松管理系统
|
||||
VUE_APP_TITLE = 开心学车管理系统
|
||||
|
||||
NODE_ENV = production
|
||||
|
||||
# 测试环境配置
|
||||
ENV = 'staging'
|
||||
|
||||
# 莳松管理系统/测试环境
|
||||
# 开心学车管理系统/测试环境
|
||||
VUE_APP_BASE_API = '/stage-api'
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "river",
|
||||
"version": "1.0.0",
|
||||
"description": "莳松管理系统",
|
||||
"author": "莳松",
|
||||
"description": "开心学车管理系统",
|
||||
"author": "开心学车",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"dev": "vue-cli-service serve",
|
||||
|
||||
53
src/api/zs/invitation.js
Normal file
53
src/api/zs/invitation.js
Normal file
@@ -0,0 +1,53 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 查询邀约列表
|
||||
export function listInvitation(query) {
|
||||
return request({
|
||||
url: '/zs/invitation/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 查询邀约详细
|
||||
export function getInvitation(invitationId) {
|
||||
return request({
|
||||
url: '/zs/invitation/' + invitationId,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 查询邀约详细
|
||||
export function getInvitationByClue(query) {
|
||||
return request({
|
||||
url: '/zs/invitation/clue',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 新增邀约
|
||||
export function addInvitation(data) {
|
||||
return request({
|
||||
url: '/zs/invitation',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 修改邀约
|
||||
export function updateInvitation(data) {
|
||||
return request({
|
||||
url: '/zs/invitation',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 删除邀约
|
||||
export function delInvitation(invitationId) {
|
||||
return request({
|
||||
url: '/zs/invitation/' + invitationId,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
@@ -27,7 +27,7 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
title: '莳松管理系统',
|
||||
title: '开心学车管理系统',
|
||||
logo: logoImg
|
||||
};
|
||||
},
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="login">
|
||||
<div class="login-form">
|
||||
<h3 class="title">莳松管理系统</h3>
|
||||
<h3 class="title">开心学车管理系统</h3>
|
||||
<el-tabs v-model="activeName" type="card">
|
||||
<el-tab-pane label="微信扫码" name="wx" style="height:200px">
|
||||
<wxlogin v-if="!code && activeName === 'wx'" appid="wx203f734baa9c9845" :scope="'snsapi_login'" :theme="'black'" redirect_uri="https://xueche.ahduima.com/login" :href="href">
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="register">
|
||||
<el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form">
|
||||
<h3 class="title">莳松管理系统</h3>
|
||||
<h3 class="title">开心学车管理系统</h3>
|
||||
<el-form-item prop="username">
|
||||
<el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号">
|
||||
<svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
|
||||
|
||||
@@ -196,7 +196,7 @@ export default {
|
||||
createTime: { required: true, message: '创建时间不为空', trigger: 'blur,change' },
|
||||
consultTime: { required: true, message: '咨询时间不为空', trigger: 'blur,change' },
|
||||
source: { required: true, message: '线索来源不为空', trigger: 'blur,change' },
|
||||
address: { required: true, message: '位置不为空', trigger: 'blur' },
|
||||
// address: { required: true, message: '位置不为空', trigger: 'blur' },
|
||||
intentionState: { required: true, message: '意向状态不为空', trigger: 'blur,change' }
|
||||
},
|
||||
userOptions: [], // 跟进人员
|
||||
|
||||
143
src/views/zs/clue/components/InvitationFormDialog.vue
Normal file
143
src/views/zs/clue/components/InvitationFormDialog.vue
Normal file
@@ -0,0 +1,143 @@
|
||||
<template>
|
||||
<el-dialog title="邀约" :close-on-click-modal="false" append-to-body :visible.sync="visible" width="600px" @close="closeDialog">
|
||||
<el-form ref="dialogForm" :model="dialogForm" :rules="rules" label-width="110px" :disabled="dialogForm.invitationId != undefined">
|
||||
<el-form-item label="姓名" prop="name">
|
||||
<el-input v-model="dialogForm.name" placeholder="请输入姓名" />
|
||||
</el-form-item>
|
||||
<el-form-item label="联系方式" prop="phone">
|
||||
<el-input v-model="dialogForm.phone" placeholder="请输入联系方式" />
|
||||
</el-form-item>
|
||||
<el-form-item label="场地" prop="placeId">
|
||||
<el-select v-model="dialogForm.placeId" filterable placeholder="请选择" clearable style="width: 100%;" @change="getCoaChes">
|
||||
<el-option v-for="dict in placeOptions" :key="dict.placeId" :label="dict.name" :value="dict.placeId" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="约定时间" prop="invitationTime">
|
||||
<el-date-picker clearable
|
||||
v-model="dialogForm.invitationTime"
|
||||
type="datetime"
|
||||
value-format="yyyy-MM-dd HH:mm"
|
||||
format="yyyy-MM-dd HH:mm"
|
||||
placeholder="请选择约定时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="dialogForm.remark" type="textarea" placeholder="请输入" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button plain @click="(visible = false)">取消</el-button>
|
||||
<el-button v-jclick type="primary" :disabled="!canSubmit" @click="dialogFormSubmit()">确定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script>
|
||||
import { addInvitation, getInvitationByClue } from '@/api/zs/invitation';
|
||||
import { getAllPlaces } from '@/api/sch/place';
|
||||
|
||||
export default {
|
||||
name: 'InvitationFormDialog',
|
||||
|
||||
data() {
|
||||
return {
|
||||
visible: false,
|
||||
canSubmit: true,
|
||||
dialogForm: {
|
||||
invitationId: undefined,
|
||||
clueId: undefined,
|
||||
name: undefined,
|
||||
phone: undefined,
|
||||
address: undefined,
|
||||
placeId: undefined,
|
||||
invitationTime: undefined,
|
||||
remark: undefined
|
||||
},
|
||||
rules: {
|
||||
name: { required: true, message: '姓名不能为空', trigger: 'blur'},
|
||||
phone: { required: true, message: '姓名不能为空', trigger: 'blur'},
|
||||
placeId: { required: true, message: '场地不能为空', trigger: 'blur'},
|
||||
placeId: { required: true, message: '场地不能为空', trigger: 'blur'},
|
||||
invitationTime: { required: true, message: '约定时间不能为空', trigger: 'blur'}
|
||||
|
||||
},
|
||||
placeOptions:[]
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
init(info = undefined) {
|
||||
this.visible = true;
|
||||
this.getPlaces()
|
||||
this.$nextTick(() => {
|
||||
this.resetDialogForm();
|
||||
this.$refs['dialogForm'].resetFields();
|
||||
if (info) {
|
||||
this.dialogForm = {
|
||||
invitationId: undefined,
|
||||
clueId: info.clueId,
|
||||
name: info.name,
|
||||
phone: info.phone,
|
||||
address: info.address,
|
||||
placeId: undefined,
|
||||
invitationTime: undefined,
|
||||
remark: undefined
|
||||
};
|
||||
if(info.clueId){
|
||||
getInvitationByClue({clueId:info.clueId}).then(resp => {
|
||||
if(resp.data){
|
||||
this.dialogForm = resp.data;
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
resetDialogForm() {
|
||||
this.dialogForm = {
|
||||
invitationId:undefined,
|
||||
clueId: undefined,
|
||||
name: undefined,
|
||||
phone: undefined,
|
||||
address: undefined,
|
||||
placeId: undefined,
|
||||
invitationTime: undefined,
|
||||
remark: undefined
|
||||
};
|
||||
},
|
||||
closeDialog() {
|
||||
this.$emit('update:dialog.batchUpdateVisible', false);
|
||||
},
|
||||
async getInvitationInfo(clueId){
|
||||
l
|
||||
},
|
||||
// 表单提交
|
||||
dialogFormSubmit() {
|
||||
this.$refs.dialogForm.validate((valid) => {
|
||||
if (valid) {
|
||||
this.canSubmit = false;
|
||||
// 校验完成,调接口
|
||||
addInvitation(this.dialogForm)
|
||||
.then((resp) => {
|
||||
this.canSubmit = true;
|
||||
if (resp.code == 200) {
|
||||
this.$message.success('邀约成功');
|
||||
this.$emit('refreshDataList');
|
||||
this.visible = false;
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
this.canSubmit = true;
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
getPlaces () {
|
||||
getAllPlaces({ status: '0' }).then((resp) => {
|
||||
this.placeOptions = resp.data;
|
||||
});
|
||||
},
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
<!-- <el-button v-if="(admin == 'true' || scope.row.followUser2.indexOf(userId) != -1 ) && scope.row.source == '抖音直播'" v-hasPermi="['zs:clue:edit']" type="text" style="color: red;" @click.native.stop="handleDYAddandUpdate(scope.row)">编辑</el-button> -->
|
||||
<el-button v-if="(admin == 'true' || scope.row.followUser2.indexOf(userId) != -1 )" v-hasPermi="['zs:clue:edit']" type="text" style="color: red;" @click.native.stop="handleAddandUpdate(scope.row)">编辑</el-button>
|
||||
<el-button v-if="(admin == 'true' || scope.row.followUser2.indexOf(userId) != -1 )" v-hasPermi="['zs:clue:distribute']" type="text" @click.native.stop="handleDistribute(scope.row)">分发</el-button>
|
||||
<el-button v-if="(admin == 'true' || scope.row.followUser2.indexOf(userId) != -1 )" v-hasPermi="['zs:clue:invitation']" type="text" @click.native.stop="handleInvitation(scope.row)">邀约</el-button>
|
||||
<el-button v-if="(admin == 'true' || scope.row.followUser2.indexOf(userId) != -1 ) && scope.row.state" v-hasPermi="['zs:clue:sign']" type="text" style="color: #26a69a" @click.native.stop="handleSign(scope.row)">已登记</el-button>
|
||||
<el-button v-if="(admin == 'true' || scope.row.followUser2.indexOf(userId) != -1 ) && !scope.row.state" v-hasPermi="['zs:clue:sign']" type="text" @click.native.stop="handleSign(scope.row)">未登记</el-button>
|
||||
<el-button v-if="(admin == 'true' || scope.row.followUser2.indexOf(userId) != -1 )" v-hasPermi="['zs:clue:remove']" type="text" @click.native.stop="handleDelete(scope.row)">删除</el-button>
|
||||
@@ -67,7 +68,8 @@
|
||||
<DYClueFormDialog ref="DYClueFormDialog" @refreshDataList="_getTableList" />
|
||||
<!-- 关键话术 -->
|
||||
<SkillDialog ref="SkillDialog" />
|
||||
|
||||
<!-- 邀约弹窗 -->
|
||||
<InvitationFormDialog ref="InvitationDialog" @refreshDataList="_getTableList"/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -82,6 +84,7 @@ import ZhuangDanDialog from './components/ZhuangDanDialog.vue';
|
||||
import MemoFormDialog from './components/MemoFormDialog.vue';
|
||||
import DYClueFormDialog from './components/DYClueFormDialog.vue';
|
||||
import SkillDialog from './components/SkillDialog.vue';
|
||||
import InvitationFormDialog from './components/InvitationFormDialog.vue';
|
||||
|
||||
import { defaultColumns } from './columns.js';
|
||||
import { getClueList, deleteClue, getClueCountBadge, discardClue, getSign, getConsultRecord } from '@/api/zs/clue';
|
||||
@@ -90,7 +93,7 @@ export default {
|
||||
name: 'Clue',
|
||||
components: {
|
||||
SearchForm, BatchUpdateDialog, PublicDialog, UploadDialog, SignFormDialog, DistributeFormDialog, ZhuangDanDialog, MemoFormDialog,
|
||||
DYClueFormDialog, SkillDialog
|
||||
DYClueFormDialog, SkillDialog,InvitationFormDialog
|
||||
},
|
||||
beforeRouteEnter (to, from, next) {
|
||||
if (from.name == 'ClueForm') {
|
||||
@@ -131,11 +134,12 @@ export default {
|
||||
无效线索: '#afaeb0'
|
||||
},
|
||||
feedbackTagColorMap: {
|
||||
0: '待分发',
|
||||
1: '待跟进',
|
||||
2: '已跟进',
|
||||
3: '已到场',
|
||||
4: '退单'
|
||||
0: '待邀约',
|
||||
1: '待分发',
|
||||
2: '待跟进',
|
||||
3: '已跟进',
|
||||
4: '已到场',
|
||||
5: '退单'
|
||||
},
|
||||
options: undefined,
|
||||
clueInfo: undefined,
|
||||
@@ -320,6 +324,13 @@ export default {
|
||||
this.$refs.memoDialog.init(row);
|
||||
});
|
||||
}
|
||||
},
|
||||
//邀约
|
||||
handleInvitation(item){
|
||||
this.$nextTick(() => {
|
||||
this.$refs.InvitationDialog.init(item)
|
||||
})
|
||||
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -7,7 +7,7 @@ function resolve(dir) {
|
||||
|
||||
const CompressionPlugin = require('compression-webpack-plugin');
|
||||
|
||||
const name = process.env.VUE_APP_TITLE || '莳松管理系统'; // 网页标题
|
||||
const name = process.env.VUE_APP_TITLE || '开心学车管理系统'; // 网页标题
|
||||
|
||||
const port = process.env.port || process.env.npm_config_port || 80; // 端口
|
||||
|
||||
@@ -44,7 +44,7 @@ module.exports = {
|
||||
// detail: https://cli.vuejs.org/config/#devserver-proxy
|
||||
[process.env.VUE_APP_BASE_API]: {
|
||||
// target: `https://xueche.ahduima.com/duima/`,
|
||||
target: `http://localhost:8086`,
|
||||
target: `http://localhost:8088`,
|
||||
changeOrigin: true,
|
||||
pathRewrite: {
|
||||
['^' + process.env.VUE_APP_BASE_API]: ''
|
||||
|
||||
Reference in New Issue
Block a user