diff --git a/src/permission.js b/src/permission.js index 1841aea..6bfb0f6 100644 --- a/src/permission.js +++ b/src/permission.js @@ -16,7 +16,7 @@ NProgress.configure({ showSpinner: false }); -const whiteList = ['/login', '/auth-redirect', '/bind', '/register', '/question']; +const whiteList = ['/login', '/auth-redirect', '/bind', '/register', '/question', '/clue/feedback']; router.beforeEach((to, from, next) => { NProgress.start(); diff --git a/src/router/index.js b/src/router/index.js index df2777f..beb6e9f 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -53,6 +53,11 @@ export const constantRoutes = [{ component: () => import('@/views/question'), hidden: true }, +{ + path: '/clue/feedback', + component: () => import('@/views/zs/feedback/first'), + hidden: true +}, { path: '/404', component: () => import('@/views/error/404'), diff --git a/src/views/question/index.vue b/src/views/question/index.vue index 1f423fb..2b141e9 100644 --- a/src/views/question/index.vue +++ b/src/views/question/index.vue @@ -81,7 +81,7 @@ export default { components: { QuestionForm, QuestionAddForm }, - data() { + data () { return { // 遮罩层 loading: false, @@ -98,12 +98,12 @@ export default { dialogAddVisible: false }; }, - created() { + created () { // this.getList(); }, methods: { /** 查询文件列表 */ - getList() { + getList () { this.loading = true; searchQuestion(this.queryParams).then(response => { this.tableList = response.data; @@ -113,7 +113,7 @@ export default { }, /** 搜索按钮操作 */ - handleQuery() { + handleQuery () { if (this.queryParams.question) { this.getList(); } else { @@ -121,17 +121,17 @@ export default { } }, /** 重置按钮操作 */ - resetQuery() { + resetQuery () { this.queryParams.question = ''; this.handleQuery(); }, - handleEdit(item) { + handleEdit (item) { this.dialogVisible = true; this.$nextTick(() => { this.$refs.dialogForm.init(item); }); }, - handleAdd(item) { + handleAdd (item) { this.dialogAddVisible = true; this.$nextTick(() => { this.$refs.dialogAddForm.init(item); diff --git a/src/views/zs/clue/components/DistributeFormDialog copy.vue b/src/views/zs/clue/components/DistributeFormDialog copy.vue new file mode 100644 index 0000000..095c588 --- /dev/null +++ b/src/views/zs/clue/components/DistributeFormDialog copy.vue @@ -0,0 +1,116 @@ +<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"> + <el-row> + <el-col :span="24"> + <el-form-item label="场地" prop="newPlaceList"> + <span v-if="oldForm.placeNames">{{oldForm.placeNames}}</span> + + <el-select v-model="dialogForm.newPlaceList" filterable multiple placeholder="请选择" clearable style="width: 100%;"> + <el-option v-for="dict in placeOptions" :key="dict.placeId" :label="dict.name" :value="dict.placeId" /> + </el-select> + </el-form-item> + </el-col> + </el-row> + </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 { getCluePlaceList, saveCluePlace } from '@/api/zs/clue'; +import { getAllPlaces } from '@/api/sch/place'; + +export default { + name: 'DistributeFormDialog', + + data() { + return { + visible: false, + canSubmit: true, + dialogForm: {}, + oldForm: {}, + rules: { + newPlaceList: { + required: true, + message: '场地不能为空不能为空', + trigger: 'blur' + } + }, + placeOptions: [] + }; + }, + methods: { + init(info = undefined) { + this.getPlaces() + this.visible = true; + this.$nextTick(() => { + this.resetDialogForm(); + this.$refs['dialogForm'].resetFields(); + if (info) { + + this.dialogForm.clueId = info; + //查询该线索的分发情况 + this.getDistributePlaces(info); + } + }); + }, + resetDialogForm() { + this.dialogForm = { + oldPlaceList: [], + newPlaceList: [], + placeIdList: [], + clueId: undefined + }; + this.oldForm = {} + }, + closeDialog() { + this.$emit('update:dialog.batchUpdateVisible', false); + }, + getDistributePlaces(clueId) { + getCluePlaceList({ clueId: clueId }).then(resp => { + if (resp.code == 200) { + this.oldForm = resp.data + this.dialogForm.oldPlaceList = this.oldForm.placeIdList; + if (this.oldForm.placeIdList && this.oldForm.placeIdList) { + this.placeOptions = this.placeOptions.filter(item => this.oldForm.placeIdList.indexOf(item.placeId) == -1) + } + } + + }) + }, + // 表单提交 + dialogFormSubmit() { + this.$refs.dialogForm.validate((valid) => { + if (valid) { + this.canSubmit = false; + this.dialogForm.placeIdList = this.dialogForm.oldPlaceList.concat(this.dialogForm.newPlaceList) + // 校验完成,调接口 + saveCluePlace(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> + + \ No newline at end of file diff --git a/src/views/zs/clue/components/DistributeFormDialog.vue b/src/views/zs/clue/components/DistributeFormDialog.vue index 095c588..61781b4 100644 --- a/src/views/zs/clue/components/DistributeFormDialog.vue +++ b/src/views/zs/clue/components/DistributeFormDialog.vue @@ -3,14 +3,19 @@ <el-form ref="dialogForm" :model="dialogForm" :rules="rules" label-width="110px"> <el-row> <el-col :span="24"> - <el-form-item label="场地" prop="newPlaceList"> - <span v-if="oldForm.placeNames">{{oldForm.placeNames}}</span> - - <el-select v-model="dialogForm.newPlaceList" filterable multiple placeholder="请选择" clearable style="width: 100%;"> + <el-form-item label="场地" prop="placeId"> + <el-select v-model="dialogForm.placeId" filterable placeholder="请选择" clearable style="width: 100%;"> <el-option v-for="dict in placeOptions" :key="dict.placeId" :label="dict.name" :value="dict.placeId" /> </el-select> </el-form-item> </el-col> + <el-col :span="24"> + <el-form-item label="教练" prop="coachId"> + <el-select v-model="dialogForm.coachId" filterable placeholder="请选择" clearable style="width: 100%;"> + <el-option v-for="dict in coachOptions" :key="dict.coachId" :label="dict.coachName" :value="dict.coachId" /> + </el-select> + </el-form-item> + </el-col> </el-row> </el-form> <span slot="footer" class="dialog-footer"> @@ -19,74 +24,68 @@ </span> </el-dialog> </template> - <script> +<script> import { getCluePlaceList, saveCluePlace } from '@/api/zs/clue'; import { getAllPlaces } from '@/api/sch/place'; export default { name: 'DistributeFormDialog', - data() { + data () { return { visible: false, canSubmit: true, dialogForm: {}, oldForm: {}, rules: { - newPlaceList: { - required: true, - message: '场地不能为空不能为空', - trigger: 'blur' - } + placeId: { required: true, message: '场地不能为空', trigger: 'blur, change' }, + coachId: { required: true, message: '教练不能为空', trigger: 'blur, change' } }, placeOptions: [] }; }, methods: { - init(info = undefined) { - this.getPlaces() + init (info = undefined) { + this.getPlaces(); this.visible = true; this.$nextTick(() => { this.resetDialogForm(); this.$refs['dialogForm'].resetFields(); if (info) { - this.dialogForm.clueId = info; - //查询该线索的分发情况 + // 查询该线索的分发情况 this.getDistributePlaces(info); } }); }, - resetDialogForm() { + resetDialogForm () { this.dialogForm = { - oldPlaceList: [], - newPlaceList: [], - placeIdList: [], - clueId: undefined + placeId: undefined, + clueId: undefined, + coachId: undefined }; - this.oldForm = {} + this.oldForm = {}; }, - closeDialog() { + closeDialog () { this.$emit('update:dialog.batchUpdateVisible', false); }, - getDistributePlaces(clueId) { + getDistributePlaces (clueId) { getCluePlaceList({ clueId: clueId }).then(resp => { if (resp.code == 200) { - this.oldForm = resp.data + this.oldForm = resp.data; this.dialogForm.oldPlaceList = this.oldForm.placeIdList; if (this.oldForm.placeIdList && this.oldForm.placeIdList) { - this.placeOptions = this.placeOptions.filter(item => this.oldForm.placeIdList.indexOf(item.placeId) == -1) + this.placeOptions = this.placeOptions.filter(item => this.oldForm.placeIdList.indexOf(item.placeId) == -1); } } - - }) + }); }, // 表单提交 - dialogFormSubmit() { + dialogFormSubmit () { this.$refs.dialogForm.validate((valid) => { if (valid) { this.canSubmit = false; - this.dialogForm.placeIdList = this.dialogForm.oldPlaceList.concat(this.dialogForm.newPlaceList) + this.dialogForm.placeIdList = this.dialogForm.oldPlaceList.concat(this.dialogForm.newPlaceList); // 校验完成,调接口 saveCluePlace(this.dialogForm) .then((resp) => { @@ -103,14 +102,12 @@ export default { } }); }, - getPlaces() { + getPlaces () { getAllPlaces({ status: '0' }).then((resp) => { this.placeOptions = resp.data; - }); - }, + } } }; - </script> - - \ No newline at end of file +</script> + diff --git a/src/views/zs/feedback/first.vue b/src/views/zs/feedback/first.vue new file mode 100644 index 0000000..439d47b --- /dev/null +++ b/src/views/zs/feedback/first.vue @@ -0,0 +1,180 @@ +<template> + <div class="app-container" style="width:90%;margin:auto;"> + <!-- 添加或修改线索反馈对话框 --> + <el-form ref="form" :model="form" :rules="rules" label-width="80px"> + <el-form-item label="学员姓名" prop="clueId"> + <el-input v-model="form.clueId" placeholder="请输入线索id" /> + </el-form-item> + <el-form-item label="联系方式" 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="是否联系" 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> + </div> +</template> + +<script> +import { addFeedback, updateFeedback } from '@/api/zs/feedback'; + +export default { + name: 'First', + 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> diff --git a/src/views/zs/feedback/index.vue b/src/views/zs/feedback/index.vue index 4a9c813..4086e65 100644 --- a/src/views/zs/feedback/index.vue +++ b/src/views/zs/feedback/index.vue @@ -48,7 +48,7 @@ <el-table-column label="反馈时间" align="center" prop="feedbackTime" width="180"> <template slot-scope="scope"> <span>{{ parseTime(scope.row.feedbackTime, '{y}-{m}-{d}') }}</span> - </template> + </template>00000000000000000000000 </el-table-column> <el-table-column label="是否联系" align="center" prop="isContact" /> <el-table-column label="到场时间" align="center" prop="arrivalTime" width="180">