教练管理

caozong
zcxee 12 months ago
parent fd24f914f7
commit 2c0bc99c03
  1. 51
      src/api/sch/coach.js
  2. 51
      src/api/zs/feedback.js
  3. 135
      src/views/sch/coach/components/CoachForm.vue
  4. 159
      src/views/sch/coach/index.vue
  5. 253
      src/views/zs/feedback/index.vue

@ -0,0 +1,51 @@
/*
* @Author: riverQiu
* @Date: 2023-10-07 17:14:32
* @LastEditors: riverQiu
* @LastEditTime: 2023-10-07 18:02:01
* @Description:教练接口
*/
import request from '@/utils/request';
// 查询教练列表
export function listCoach(query) {
return request({
url: '/sch/coach/list',
method: 'get',
params: query
});
}
// 查询教练详细
export function getCoach(coachId) {
return request({
url: '/sch/coach/' + coachId,
method: 'get'
});
}
// 新增教练
export function addCoach(data) {
return request({
url: '/sch/coach',
method: 'post',
data: data
});
}
// 修改教练
export function updateCoach(data) {
return request({
url: '/sch/coach',
method: 'put',
data: data
});
}
// 删除教练
export function delCoach(coachId) {
return request({
url: '/sch/coach/' + coachId,
method: 'delete'
});
}

@ -0,0 +1,51 @@
/*
* @Author: riverQiu
* @Date: 2023-10-07 17:14:38
* @LastEditors: riverQiu
* @LastEditTime: 2023-10-07 17:14:44
* @Description: 线索反馈接口
*/
import request from '@/utils/request';
// 查询线索反馈列表
export function listFeedback(query) {
return request({
url: '/zs/feedback/list',
method: 'get',
params: query
});
}
// 查询线索反馈详细
export function getFeedback(feedbackId) {
return request({
url: '/zs/feedback/' + feedbackId,
method: 'get'
});
}
// 新增线索反馈
export function addFeedback(data) {
return request({
url: '/zs/feedback',
method: 'post',
data: data
});
}
// 修改线索反馈
export function updateFeedback(data) {
return request({
url: '/zs/feedback',
method: 'put',
data: data
});
}
// 删除线索反馈
export function delFeedback(feedbackId) {
return request({
url: '/zs/feedback/' + feedbackId,
method: 'delete'
});
}

@ -0,0 +1,135 @@
<template>
<el-dialog title="教练信息" :close-on-click-modal="false" append-to-body :visible.sync="visible" width="600px" @close="closeDialog">
<div>
<el-form ref="dialogForm" :model="dialogForm" :rules="dataRule" label-position="top" @keyup.enter.native="dialogFormSubmit()">
<el-form-item label="所属驾校" prop="schoolId">
<el-select v-model="dialogForm.schoolId" filterable placeholder="请选择" value-key="schoolId" clearable size="small" style="width:100%">
<el-option v-for="(dict, index) in schoolOptions" :key="index" :label="dict.schoolName" :value="dict.schoolId" />
</el-select>
</el-form-item>
<el-form-item label="所属场地" prop="placeId">
<el-select v-model="dialogForm.placeId" filterable placeholder="请选择" clearable value-key="placeId" size="small" style="width:100%">
<el-option v-for="(dict, index) in placeOptions.filter(item => item.schoolId === dialogForm.schoolId)" :key="index" :label="dict.name" :value="dict.placeId" />
</el-select>
</el-form-item>
<el-form-item label="教练名" prop="coachName">
<el-input v-model="dialogForm.coachName" placeholder="请输入教练名" />
</el-form-item>
<el-form-item label="联系方式" prop="phone">
<el-input v-model="dialogForm.phone" placeholder="请输入联系方式" />
</el-form-item>
<el-form-item label="微信openid" prop="openId">
<el-input v-model="dialogForm.openId" placeholder="请输入微信openid" />
</el-form-item>
</el-form>
</div>
<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 { addCoach, updateCoach } from '@/api/sch/coach';
export default {
props: {
schoolOptions: {
type: Array,
default: []
},
placeOptions: {
type: Array,
default: []
}
},
data () {
return {
visible: false,
canSubmit: true,
dialogForm: {
coachId: null,
deptId: null,
schoolId: null,
placeId: null,
coachName: null,
phone: null,
openId: null
},
dataRule: {
schoolId: [{ required: true, message: '所属驾校不能为空', trigger: 'blur' }],
coachName: [{ required: true, message: '教练名不能为空', trigger: 'blur' }],
phone: [{ required: true, message: '联系方式不能为空', trigger: 'blur' }]
}
};
},
methods: {
init (info = undefined) {
// debugger
this.visible = true;
this.$nextTick(() => {
this.resetDialogForm();
this.$refs['dialogForm'].resetFields();
if (info) {
this.dialogForm = this.deepClone(info);
}
});
},
resetDialogForm () {
this.dialogForm = {
coachId: null,
deptId: null,
schoolId: null,
placeId: null,
coachName: null,
phone: null,
openId: null
};
},
closeDialog () {
this.$emit('update:dialogVisible', false);
},
//
dialogFormSubmit () {
this.$refs.dialogForm.validate((valid) => {
if (valid) {
this.canSubmit = false;
if (this.dialogForm.coachId) {
//
updateCoach(this.dialogForm)
.then((resp) => {
this.canSubmit = true;
if (resp.code == 200) {
this.$message.success('保存成功');
this.$emit('refreshDataList');
this.visible = false;
}
})
.catch(() => {
this.canSubmit = true;
});
} else {
addCoach(this.dialogForm)
.then((resp) => {
this.canSubmit = true;
if (resp.code == 200) {
this.$message.success('保存成功');
this.$emit('refreshDataList');
this.visible = false;
}
})
.catch(() => {
this.canSubmit = true;
});
}
}
});
}
}
};
</script>

@ -0,0 +1,159 @@
<template>
<div class="app-container">
<el-form v-show="showSearch" ref="queryForm" :model="queryParams" size="small" :inline="true" label-width="68px">
<el-form-item label="所属驾校" prop="schoolId">
<el-select v-model="queryParams.schoolId" filterable placeholder="请选择" value-key="schoolId" clearable size="small">
<el-option v-for="(dict, index) in schoolOptions" :key="index" :label="dict.schoolName" :value="dict.schoolId" />
</el-select>
</el-form-item>
<el-form-item label="所属场地" prop="placeId">
<el-select v-model="queryParams.placeId" filterable placeholder="请选择" clearable value-key="placeId" size="small">
<el-option v-for="(dict, index) in placeOptions.filter(item => item.schoolId === queryParams.schoolId)" :key="index" :label="dict.name" :value="dict.placeId" />
</el-select>
</el-form-item>
<el-form-item label="教练名" prop="coachName">
<el-input v-model="queryParams.coachName" placeholder="请输入教练名" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="联系方式" prop="phone">
<el-input v-model="queryParams.phone" placeholder="请输入联系方式" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button v-hasPermi="['sch:coach:add']" type="primary" plain icon="el-icon-plus" size="mini" @click="handleAddAndUpdate(undefined)">新增</el-button>
</el-col>
<right-toolbar :show-search.sync="showSearch" @queryTable="getList" />
</el-row>
<el-table v-loading="loading" :data="coachList">
<el-table-column type="index" width="55" align="center" />
<el-table-column label="所属驾校" align="center" prop="schoolName" />
<el-table-column label="所属场地" align="center" prop="placeName" />
<el-table-column label="教练名" align="center" prop="coachName" />
<el-table-column label="联系方式" align="center" prop="phone" />
<el-table-column label="微信openid" align="center" prop="openId" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button v-hasPermi="['sch:coach:edit']" size="mini" type="text" icon="el-icon-edit" @click="handleAddAndUpdate(scope.row)">修改</el-button>
<el-button v-hasPermi="['sch:coach:remove']" size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
<!-- 添加或修改教练对话框 -->
<coach-form v-if="dialogVisible" ref="dialogForm" :dialog-visible="dialogVisible" :school-options="schoolOptions" :place-options="placeOptions" @refreshDataList="getList" />
</div>
</template>
<script>
import { listCoach, getCoach, delCoach } from '@/api/sch/coach';
import CoachForm from './components/CoachForm.vue';
import schoolAPi from '@/api/sch/school';
import { getAllPlaces } from '@/api/sch/place';
export default {
name: 'Coach',
components: { CoachForm },
data () {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
coachList: [],
//
queryParams: {
pageNum: 1,
pageSize: 10,
schoolId: null,
placeId: null,
coachName: null,
phone: null
},
dialogVisible: false,
schoolOptions: [],
placeOptions: []
};
},
created () {
this.getSchools();
this.getPlaces();
this.getList();
},
methods: {
/** 查询教练列表 */
getList () {
this.loading = true;
listCoach(this.queryParams).then(response => {
this.coachList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel () {
this.open = false;
this.reset();
},
/** 搜索按钮操作 */
handleQuery () {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery () {
this.resetForm('queryForm');
this.handleQuery();
},
/** 新增或修改按钮操作 */
handleAddAndUpdate (item) {
this.dialogVisible = true;
this.$nextTick(() => {
this.$refs.dialogForm.init(item);
});
},
/** 删除按钮操作 */
handleDelete (row) {
const coachIds = row.coachId || this.ids;
this.$modal.confirm('是否确认删除教练编号为"' + coachIds + '"的数据项?').then(function () {
return delCoach(coachIds);
}).then(() => {
this.getList();
this.$modal.msgSuccess('删除成功');
}).catch(() => { });
},
/** 导出按钮操作 */
handleExport () {
this.download('system/coach/export', {
...this.queryParams
}, `coach_${new Date().getTime()}.xlsx`);
},
getSchools () {
schoolAPi.allList().then((resp) => {
this.schoolOptions = resp.data;
});
},
getPlaces () {
getAllPlaces({ status: '0', showInMap: true }).then((resp) => {
this.placeOptions = resp.data;
});
}
}
};
</script>

@ -0,0 +1,253 @@
<template>
<div class="app-container">
<el-form v-show="showSearch" ref="queryForm" :model="queryParams" size="small" :inline="true" label-width="68px">
<el-form-item label="线索id" prop="clueId">
<el-input v-model="queryParams.clueId" placeholder="请输入线索id" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="教练id" prop="coachId">
<el-input v-model="queryParams.coachId" placeholder="请输入教练id" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="反馈时间" prop="feedbackTime">
<el-date-picker v-model="queryParams.feedbackTime" clearable type="date" value-format="yyyy-MM-dd" placeholder="请选择反馈时间" />
</el-form-item>
<el-form-item label="是否联系" prop="isContact">
<el-input v-model="queryParams.isContact" placeholder="请输入是否联系" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="到场时间" prop="arrivalTime">
<el-date-picker v-model="queryParams.arrivalTime" clearable type="date" value-format="yyyy-MM-dd" placeholder="请选择到场时间" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button v-hasPermi="['system:feedback:add']" type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button v-hasPermi="['system:feedback:edit']" type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate">修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button v-hasPermi="['system:feedback:remove']" type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete">删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button v-hasPermi="['system:feedback:export']" type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">导出</el-button>
</el-col>
<right-toolbar :show-search.sync="showSearch" @queryTable="getList" />
</el-row>
<el-table v-loading="loading" :data="feedbackList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="${comment}" align="center" prop="feedbackId" />
<el-table-column label="线索id" align="center" prop="clueId" />
<el-table-column label="反馈类型 1 跟进反馈 2 到场负反馈" align="center" prop="feedbackType" />
<el-table-column label="教练id" align="center" prop="coachId" />
<el-table-column label="反馈内容" align="center" prop="content" />
<el-table-column label="反馈时间" align="center" prop="feedbackTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.feedbackTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="是否联系" align="center" prop="isContact" />
<el-table-column label="到场时间" align="center" prop="arrivalTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.arrivalTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="到场状态" align="center" prop="arrivalStatus" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button v-hasPermi="['system:feedback:edit']" size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)">修改</el-button>
<el-button v-hasPermi="['system:feedback:remove']" size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
<!-- 添加或修改线索反馈对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="线索id" prop="clueId">
<el-input v-model="form.clueId" placeholder="请输入线索id" />
</el-form-item>
<el-form-item label="教练id" prop="coachId">
<el-input v-model="form.coachId" placeholder="请输入教练id" />
</el-form-item>
<el-form-item label="反馈内容">
<editor v-model="form.content" :min-height="192" />
</el-form-item>
<el-form-item label="反馈时间" prop="feedbackTime">
<el-date-picker v-model="form.feedbackTime" clearable type="date" value-format="yyyy-MM-dd" placeholder="请选择反馈时间" />
</el-form-item>
<el-form-item label="是否联系" prop="isContact">
<el-input v-model="form.isContact" placeholder="请输入是否联系" />
</el-form-item>
<el-form-item label="到场时间" prop="arrivalTime">
<el-date-picker v-model="form.arrivalTime" clearable type="date" value-format="yyyy-MM-dd" placeholder="请选择到场时间" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listFeedback, getFeedback, delFeedback, addFeedback, updateFeedback } from '@/api/zs/feedback';
export default {
name: 'Feedback',
data () {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
// 线
feedbackList: [],
//
title: '',
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
clueId: null,
feedbackType: null,
coachId: null,
content: null,
feedbackTime: null,
isContact: null,
arrivalTime: null,
arrivalStatus: null
},
//
form: {},
//
rules: {
}
};
},
created () {
this.getList();
},
methods: {
/** 查询线索反馈列表 */
getList () {
this.loading = true;
listFeedback(this.queryParams).then(response => {
this.feedbackList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel () {
this.open = false;
this.reset();
},
//
reset () {
this.form = {
feedbackId: null,
clueId: null,
feedbackType: null,
coachId: null,
content: null,
feedbackTime: null,
isContact: null,
arrivalTime: null,
arrivalStatus: 0,
remark: null
};
this.resetForm('form');
},
/** 搜索按钮操作 */
handleQuery () {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery () {
this.resetForm('queryForm');
this.handleQuery();
},
//
handleSelectionChange (selection) {
this.ids = selection.map(item => item.feedbackId);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
/** 新增按钮操作 */
handleAdd () {
this.reset();
this.open = true;
this.title = '添加线索反馈';
},
/** 修改按钮操作 */
handleUpdate (row) {
this.reset();
const feedbackId = row.feedbackId || this.ids;
getFeedback(feedbackId).then(response => {
this.form = response.data;
this.open = true;
this.title = '修改线索反馈';
});
},
/** 提交按钮 */
submitForm () {
this.$refs['form'].validate(valid => {
if (valid) {
if (this.form.feedbackId != null) {
updateFeedback(this.form).then(response => {
this.$modal.msgSuccess('修改成功');
this.open = false;
this.getList();
});
} else {
addFeedback(this.form).then(response => {
this.$modal.msgSuccess('新增成功');
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete (row) {
const feedbackIds = row.feedbackId || this.ids;
this.$modal.confirm('是否确认删除线索反馈编号为"' + feedbackIds + '"的数据项?').then(function () {
return delFeedback(feedbackIds);
}).then(() => {
this.getList();
this.$modal.msgSuccess('删除成功');
}).catch(() => { });
},
/** 导出按钮操作 */
handleExport () {
this.download('system/feedback/export', {
...this.queryParams
}, `feedback_${new Date().getTime()}.xlsx`);
}
}
};
</script>
Loading…
Cancel
Save