caozong
zcx 1 year ago
parent 13f3fd4377
commit 9631dba573
  1. 4
      .env.development
  2. 4
      .env.production
  3. 4
      .env.staging
  4. 4
      package.json
  5. 53
      src/api/zs/invitation.js
  6. 2
      src/layout/components/Sidebar/Logo.vue
  7. 2
      src/views/login.vue
  8. 2
      src/views/register.vue
  9. 2
      src/views/zs/clue/ClueForm/index.vue
  10. 143
      src/views/zs/clue/components/InvitationFormDialog.vue
  11. 25
      src/views/zs/clue/index.vue
  12. 4
      vue.config.js

@ -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",

@ -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: [], //

@ -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]: ''

Loading…
Cancel
Save