From 20ba229f91a729995d753063566632b2c60be8f3 Mon Sep 17 00:00:00 2001 From: long <515897141@qq.com> Date: 星期四, 01 七月 2021 15:30:31 +0800 Subject: [PATCH] 添加子列表弹框demo --- src/pages/demo/classList.vue | 366 ++++++++++++++++++++++++++++++ src/pages/demo/index.vue | 2 src/pages/demo/components/classTeacherDialog.vue | 338 ++++++++++++++++++++++++++++ src/router/demo_router.js | 6 4 files changed, 711 insertions(+), 1 deletions(-) diff --git a/src/pages/demo/classList.vue b/src/pages/demo/classList.vue new file mode 100644 index 0000000..341f537 --- /dev/null +++ b/src/pages/demo/classList.vue @@ -0,0 +1,366 @@ +<template> + <div class="app-container"> + <!-- 杩斿洖鎸夐挳鍜屾爣棰� --> + <!-- <el-page-header class="mb20" content="xx" @back="$router.go(-1)" /> --> + + <!-- 鎼滅储鍖� 鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌 --> + <el-form v-show="showSearch" ref="searchForm" :inline="true"> + <el-form-item label="鐝骇鍚嶇О"> + <el-input + v-model="keyWord" + placeholder="璇疯緭鍏ョ彮绾у悕绉�" + clearable + size="small" + style="width: 240px" + maxlength="50" + @keyup.enter.native="reGetList" + /> + </el-form-item> + <el-form-item> + <el-button type="cyan" icon="el-icon-search" size="mini" @click="reGetList">鎼滅储</el-button> + <el-button icon="el-icon-refresh" size="mini" @click="resetHandle">閲嶇疆</el-button> + </el-form-item> + </el-form> + <!-- 鎼滅储鍖� 鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈 --> + + <!-- 鎿嶄綔鍖� 鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌 --> + <el-row :gutter="10" class="mb8"> + <el-col :span="1.5"> + <!-- 鏉冮檺鍒ゆ柇 v-if="getAuthValueFN('xxx_add')" --> + <el-button + type="primary" + icon="el-icon-plus" + size="mini" + @click="showAddDialog" + >鏂板</el-button> + </el-col> + <right-toolbar :show-search.sync="showSearch" @queryTable="getList" /> + </el-row> + <!-- 鎿嶄綔鍖� 鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈 --> + + <el-table :data="list" stripe> + <el-table-column type="index" label="搴忓彿" align="center" width="60" /> + <el-table-column label="鐝骇鍚嶇О" prop="name" align="center" min-width="120" /> + <el-table-column label="鎺掑簭鍙�" prop="ranking" align="center" min-width="120" /> + <el-table-column label="鏄惁鍚敤" prop="isUp" align="center" min-width="100"> + <template slot-scope="scope"> + <!-- 鏉冮檺鍒ゆ柇 v-if="getAuthValueFN('school_class_edit')" --> + <el-switch + v-model="scope.row.isUp" + :active-value="1" + :inactive-value="0" + :disabled="!getAuthValueFN('school_class_edit')" + @change="handleUpChange(scope.row)" + /> + </template> + </el-table-column> + <el-table-column label="鍒涘缓鏃堕棿" prop="createTime" align="center" min-width="160" /> + <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width" width="120"> + <template slot-scope="scope"> + <el-button + v-if="getAuthValueFN('school_class_edit')" + size="mini" + type="text" + icon="el-icon-edit" + @click="showEditDialog(scope.row)" + >缂栬緫</el-button> + <el-button + v-if="getAuthValueFN('school_class_bind_teacher')" + size="mini" + type="text" + icon="el-icon-document" + @click="openClassTeacherDialog(scope.row)" + >缁戝畾鑰佸笀</el-button> + <el-button + v-if="getAuthValueFN('school_class_del')" + size="mini" + type="text warn" + icon="el-icon-delete" + @click="handleDelete(scope.row)" + >鍒犻櫎</el-button> + </template> + </el-table-column> + </el-table> + + <!-- 鏂板&缂栬緫 --> + <el-dialog v-el-drag-dialog :title="(dialogData.type=='add'?'鏂板':'缂栬緫') + objectName" width="500px" :visible.sync="dialogVisible" append-to-body :before-close="hideDialog" :close-on-click-modal="false"> + <el-form ref="refDialog" :model="dialogData" label-width="110px" :rules="rules" size="small"> + <el-form-item label="鍚嶇О" prop="name"> + <el-input v-model="dialogData.name" placeholder="璇疯緭鍏ュ悕绉�" maxlength="50" /> + </el-form-item> + <el-form-item label="鎺掑簭鍙�" prop="ranking"> + <el-input v-model="dialogData.ranking" placeholder="璇疯緭鍏ユ帓搴忓彿" maxlength="10" /> + </el-form-item> + <el-form-item label="鏄惁鍚敤" prop="isUp"> + <el-switch + v-model="dialogData.isUp" + :active-value="1" + :inactive-value="0" + /> + </el-form-item> + </el-form> + <div slot="footer" class="dialog-footer"> + <el-button @click="hideDialog">鍙栨秷</el-button> + <el-button type="primary" @click="submitHandle">纭畾</el-button> + </div> + </el-dialog> + + <pagination + v-show="total>0" + :total="total" + :page.sync="pageNum" + :limit.sync="pageSize" + @pagination="getList" + /> + + <!-- 缁戝畾鑰佸笀寮圭獥 --> + <classTeacherDialog ref="refClassTeacherDialog" /> + + <back-to-top :visibility-height="300" :back-position="50" transition-name="fade" /> + </div> +</template> + +<script> +import BackToTop from '@/components/BackToTop' +import classTeacherDialog from './components/classTeacherDialog.vue' +export default { + name: 'ClassList', + components: { BackToTop, classTeacherDialog }, + data() { + return { + showSearch: true, // 鏄惁鏄剧ず鎼滅储鍖� + keyWord: '', // 鎼滅储鍖哄瓧娈碉紝鍙嚜琛屾墿灞曞叾浣欏瓧娈� + + objectName: '鐝骇', // 瀵硅薄鍚嶇О锛岀敤浜庡垹闄ゆ彁绀恒�佸惎鐢ㄦ彁绀恒�佸脊绐楁爣棰樼瓑 + + // 鏁版嵁鍒楄〃 + list: [], + + // 寮圭獥鏁版嵁 + dialogVisible: false, + dialogData: {}, + + // 瀵屾枃鏈紪杈戝櫒 + // rangenum: null, + + // 鍒嗛〉 鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌 + total: 0, + pageNum: 1, + pageSize: 20, + // 鍒嗛〉 鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈 + + // 琛ㄥ崟鏍¢獙 + rules: { + name: [ + { required: true, message: '鍚嶇О涓嶈兘涓虹┖', trigger: 'change' } + ], + ranking: [ + { required: true, message: '鎺掑簭鍙蜂笉鑳戒负绌�', trigger: 'change' } + ], + isUp: [ + { required: true, message: '鏄惁鍚敤涓嶈兘涓虹┖', trigger: 'change' } + ] + } + } + }, + mounted() { + this.init() + }, + methods: { + // 鍒濆鍖� + init() { + this.getList() + }, + + // ========== 瀵屾枃鏈浉鍏� + // 瀵屾枃鏈紪杈戝櫒鐨勫唴瀹硅祴鍊� + // catchData(content) { + // if (content === '<p><br></p>') content = '' + // try { + // const currentRange = window.getSelection().getRangeAt(0) + // this.rangenum = currentRange + // } catch (e) { + // + // } + // this.$set(this.dialogData, 'content', content) + // this.$refs[this.formName].validateField('content') + // }, + // ========== 瀵屾枃鏈浉鍏� + + // 鑾峰彇鍒楄〃 + getList() { + var { pageNum, pageSize, keyWord } = this + this.postFN({ + url: 'admin/schoolClass/list', + params: { + pageNum: pageNum, + pageSize: pageSize, + name: keyWord + }, + mockData: { + code: 100, + msg: '', + data: { + list: [{ + id: 'xxx', + ranking: 1, + isUp: 1, + name: '5骞翠竴鐝�', + createTime: '2020-08-09 10:10:10' + }], + total: 100 + } + } + }, (inf) => { + this.list = inf.list || [] + this.total = inf.total + }) + }, + // 閲嶆柊鑾峰彇鍒楄〃 + reGetList() { + this.pageNum = 1 + this.getList() + }, + // 閲嶇疆 + resetHandle() { + this.keyWord = '' + this.reGetList() + }, + // 鍒犻櫎 + handleDelete(item) { + // 鎵撳紑浜屾纭寮圭獥 + this.$confirm('鏄惁纭鍒犻櫎璇�' + this.objectName + '?', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(() => { + // 纭畾鍥炶皟 + this.postFN({ + url: 'admin/schoolClass/delete/one', + params: { + id: item.id + }, + mockData: { + code: 100, + msg: '', + data: {} + } + }, () => { + this.getList() + this.$messageSuc('鍒犻櫎鎴愬姛') + }) + }).catch(() => {}) + }, + // 淇敼鏄惁鍚敤 + handleUpChange(item) { + const text = item.isUp === 1 ? '鍚敤' : '鍐荤粨' + this.$confirm('纭瑕�' + text + '璇�' + this.objectName + '鍚�?', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(() => { + this.postFN({ + url: 'admin/schoolClass/editIsUp', + params: { + id: item.id, + isUp: item.isUp + }, + mockData: { + code: 100, + msg: '', + data: {} + } + }, () => { + this.$messageSuc(text + '鎴愬姛') + }, (res) => { + item.isUp = item.isUp === 1 ? 0 : 1 + this.$messageError(res.msg) + }) + }).catch(() => { + item.isUp = item.isUp === 1 ? 0 : 1 + }) + }, + + // 鎵撳紑棰嗗彇璁板綍寮圭獥 + openClassTeacherDialog(item) { + this.$refs.refClassTeacherDialog.openHandle(item) + }, + + // 鎵撳紑鏂板寮圭獥 + showAddDialog() { + var dialogData = { + type: 'add', + isUp: 1, + ranking: 1 + // 閮ㄥ垎缁勪欢闇�瑕侀璁惧瓧娈碉紝鎻愪緵缁檝-model锛屼緥濡� el-select el-timepicker el-datepicker 涓婁紶缁勪欢 瀵屾枃鏈瓑 + } + this.dialogVisible = true + this.$nextTick(() => { + this.dialogData = dialogData + this.$refs['refDialog'].resetFields() + }) + }, + // 鎵撳紑缂栬緫寮规 + showEditDialog(item) { + var dialogData = { + type: 'edit', + ...item + } + console.log('dialogData', dialogData) + this.dialogVisible = true + this.$nextTick(() => { + this.dialogData = dialogData + this.$refs['refDialog'].resetFields() + }) + }, + // 鍏抽棴缂栬緫寮圭獥 + hideDialog() { + this.dialogData = {} + this.dialogVisible = false + // 娓呯┖瀵屾枃鏈� + // this.rangenum = null + }, + // 鎻愪氦鏂板&缂栬緫 + submitHandle() { + this.$refs['refDialog'].validate(valid => { + if (valid) { + this.submitReq() + } + }) + }, + // 鎻愪氦鎺ュ彛 + submitReq() { + var { dialogData } = this + var params = { + name: dialogData.name, + isUp: dialogData.isUp, + ranking: dialogData.ranking + } + + var isAdd = dialogData.type === 'add' + // TODO url + var url = isAdd ? 'admin/schoolClass/add' : 'admin/schoolClass/edit' + + !isAdd && (params.id = dialogData.id) + + this.postFN({ + url: url, + params: params, + mockData: { + code: 100, + msg: '', + data: {} + } + }, () => { + this.$messageSuc('淇濆瓨鎴愬姛') + this.hideDialog() + isAdd ? this.reGetList() : this.getList() + }) + } + } +} +</script> + +<style lang="scss" scoped> + +</style> diff --git a/src/pages/demo/components/classTeacherDialog.vue b/src/pages/demo/components/classTeacherDialog.vue new file mode 100644 index 0000000..e884ee1 --- /dev/null +++ b/src/pages/demo/components/classTeacherDialog.vue @@ -0,0 +1,338 @@ +<template> + <el-dialog v-el-drag-dialog :title="'('+name+')'+objectName+'鍒楄〃'" width="60%" :visible.sync="isShow" :before-close="closeHandle" :close-on-click-modal="false"> + <!-- 鎼滅储鍖� 鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌 --> + <el-form v-show="showSearch" ref="searchForm" :inline="true"> + <el-form-item label="鑰佸笀鍚嶇О"> + <el-input + v-model="keyWord" + placeholder="璇疯緭鍏ヨ�佸笀鍚嶇О" + clearable + size="small" + style="width: 240px" + maxlength="50" + @keyup.enter.native="reGetList" + /> + </el-form-item> + <el-form-item> + <el-button type="cyan" icon="el-icon-search" size="mini" @click="reGetList">鎼滅储</el-button> + <el-button icon="el-icon-refresh" size="mini" @click="resetHandle">閲嶇疆</el-button> + </el-form-item> + </el-form> + <!-- 鎼滅储鍖� 鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈 --> + + <!-- 鎿嶄綔鍖� 鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌 --> + <el-row :gutter="10" class="mb8"> + <el-col :span="1.5"> + <el-button + type="primary" + icon="el-icon-plus" + size="mini" + @click="showAddDialog" + >鏂板</el-button> + </el-col> + <right-toolbar :show-search.sync="showSearch" @queryTable="getList" /> + </el-row> + <!-- 鎿嶄綔鍖� 鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈 --> + + <el-table :data="list" max-height="420px"> + <el-table-column type="index" label="搴忓彿" align="center" width="60" /> + <el-table-column label="鑰佸笀鍚嶇О" prop="teacherName" align="center" min-width="120" /> + <el-table-column label="鐝骇鍚嶇О" prop="className" align="center" min-width="120" /> + <el-table-column label="鍒涘缓鏃堕棿" prop="createTime" align="center" width="160" /> + <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width" width="120"> + <template slot-scope="scope"> + <!-- <el-button + size="mini" + type="text" + icon="el-icon-edit" + @click="showEditDialog(scope.row)" + >缂栬緫</el-button> --> + <el-button + size="mini" + type="text warn" + icon="el-icon-delete" + @click="handleDelete(scope.row)" + >鍒犻櫎</el-button> + </template> + </el-table-column> + </el-table> + + <!-- 鏂板&缂栬緫 --> + <el-dialog v-el-drag-dialog :title="(dialogData.type=='add'?'鏂板':'缂栬緫') + objectName" width="500px" :visible.sync="dialogVisible" append-to-body :before-close="hideDialog" :close-on-click-modal="false"> + <el-form ref="refDialog" :model="dialogData" label-width="110px" :rules="rules" size="small"> + <el-form-item label="缁戝畾鑰佸笀" prop="teacherIds"> + <el-select v-model="dialogData.teacherIds" clearable multiple placeholder="閫夋嫨鑰佸笀" style="width: 100%"> + <el-option + v-for="item in teacherOptions" + :key="item.id" + :label="item.name" + :value="item.id" + /> + </el-select> + </el-form-item> + </el-form> + <div slot="footer" class="dialog-footer"> + <el-button @click="hideDialog">鍙栨秷</el-button> + <el-button type="primary" @click="submitHandle">纭畾</el-button> + </div> + </el-dialog> + + <pagination + v-show="total>0" + :total="total" + :page.sync="pageNum" + :limit.sync="pageSize" + @pagination="getList" + /> + </el-dialog> +</template> + +<script> + +export default { + data() { + return { + isShow: false, + showSearch: true, // 鏄惁鏄剧ず鎼滅储鍖� + keyWord: '', + + name: '', + id: '', + list: [], + + objectName: '缁戝畾鑰佸笀', // 瀵硅薄鍚嶇О锛岀敤浜庡垹闄ゆ彁绀恒�佸惎鐢ㄦ彁绀恒�佸脊绐楁爣棰樼瓑 + + // 鑰佸笀閰嶇疆涓嬫媺 + teacherOptions: [], + + // 寮圭獥鏁版嵁 + dialogVisible: false, + dialogData: {}, + + // 鍒嗛〉 鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌 + total: 0, + pageNum: 1, + pageSize: 20, + // 鍒嗛〉 鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈 + + // 琛ㄥ崟鏍¢獙 + rules: { + teacherIds: [ + { required: true, message: '缁戝畾鑰佸笀涓嶈兘涓虹┖', trigger: 'change' } + ] + } + + } + }, + methods: { + // 鍒濆鍖� this.$refs.xxx.openHandle(id) + openHandle(item) { + this.id = item.id + this.name = item.name + this.getList() + this.isShow = true + }, + + // 鍏抽棴鍒楄〃 + closeHandle() { + this.id = '' + this.list = [] + this.isShow = false + }, + + // 鑾峰彇鍒楄〃 + getList() { + var { pageNum, pageSize, keyWord } = this + this.postFN({ + url: 'admin/schoolClassTeacher/list', + params: { + pageNum: pageNum, + pageSize: pageSize, + schoolClassId: this.id, + name: keyWord + }, + mockData: { + code: 100, + msg: '', + data: { + list: [{ + createTime: '2021-04-02 10:21:52', + teacherName: '宕旀煇', + className: '浜斿勾涓�鐝�', + id: '1' + }], + total: 100 + } + } + }, (inf) => { + this.list = inf.list || [] + this.total = inf.total + }) + }, + // 閲嶆柊鑾峰彇鍒楄〃 + reGetList() { + this.pageNum = 1 + this.getList() + }, + // 閲嶇疆 + resetHandle() { + this.keyWord = '' + this.reGetList() + }, + // 鍒犻櫎 + handleDelete(item) { + // 鎵撳紑浜屾纭寮圭獥 + this.$confirm('鏄惁纭鍒犻櫎璇�' + this.objectName + '?', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(() => { + // 纭畾鍥炶皟 + // TODO url + this.postFN({ + url: 'admin/schoolClassTeacher/delete/one', + params: { + id: item.id + }, + mockData: { + code: 100, + msg: '', + data: {} + } + }, () => { + this.getList() + this.$messageSuc('鍒犻櫎鎴愬姛') + }) + }).catch(() => {}) + }, + // 淇敼鏄惁涓婃灦 + handleUpChange(item) { + const text = item.isUp === 1 ? '涓婃灦' : '涓嬫灦' + this.$confirm('纭瑕�' + text + '璇�' + this.objectName + '鍚�?', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(() => { + // TODO url + this.postFN({ + url: 'xxx', + params: { + id: item.id, + isUp: item.isUp + }, + mockData: { + code: 100, + msg: '', + data: {} + } + }, () => { + this.$messageSuc(text + '鎴愬姛') + }, (res) => { + item.isUp = item.isUp === 1 ? 0 : 1 + this.$messageError(res.msg) + }) + }).catch(() => { + item.isUp = item.isUp === 1 ? 0 : 1 + }) + }, + + // 鑾峰彇鑰佸笀鍒楄〃 + getTeacherOptions(callback) { + this.postFN({ + url: 'admin/common/select/teacher/list', + params: {}, + mockData: { + code: 100, + msg: '', + data: { + list: [{ + name: '榛勫唸', + id: 1 + }, { + name: '琛ㄨ幉鍗�', + id: 2 + }, { + name: '鍚磋捣鏄�', + id: 3 + }] + } + } + }, (inf) => { + this.teacherOptions = inf.list || [] + callback && callback() + }) + }, + // 鎵撳紑鏂板寮圭獥 + showAddDialog() { + this.getTeacherOptions() + var dialogData = { + type: 'add', + teacherIds: '' + } + this.dialogVisible = true + this.$nextTick(() => { + this.dialogData = dialogData + this.$refs['refDialog'].resetFields() + }) + }, + // 鎵撳紑缂栬緫寮规 + showEditDialog(item) { + var dialogData = { + ...item, + type: 'edit' + } + console.log('dialogData', dialogData) + this.dialogVisible = true + this.$nextTick(() => { + this.dialogData = dialogData + this.$refs['refDialog'].resetFields() + }) + }, + // 鍏抽棴缂栬緫寮圭獥 + hideDialog() { + this.dialogData = {} + this.dialogVisible = false + }, + // 鎻愪氦鏂板&缂栬緫 + submitHandle() { + this.$refs['refDialog'].validate(valid => { + if (valid) { + this.submitReq() + } + }) + }, + // 鎻愪氦鎺ュ彛 + submitReq() { + var { dialogData } = this + var params = { + teacherIds: dialogData.teacherIds.join(','), + schoolClassId: this.id + } + + var isAdd = dialogData.type === 'add' + var url = isAdd ? 'admin/schoolClassTeacher/add' : 'xxx' + + !isAdd && (params.id = dialogData.id) + + this.postFN({ + url: url, + params: params, + mockData: { + code: 100, + msg: '', + data: {} + } + }, () => { + this.$messageSuc('淇濆瓨鎴愬姛') + this.hideDialog() + isAdd ? this.reGetList() : this.getList() + }) + } + + } +} +</script> + +<style lang="scss" scoped> + +</style> diff --git a/src/pages/demo/index.vue b/src/pages/demo/index.vue index b9e4cae..e8545fe 100644 --- a/src/pages/demo/index.vue +++ b/src/pages/demo/index.vue @@ -43,7 +43,7 @@ <el-table-column label="瑙掕壊鍚嶇О" prop="name" align="center" min-width="120" /> <el-table-column label="鏄惁涓婃灦" prop="isUp" align="center" min-width="100"> <template slot-scope="scope"> - <!-- 鏉冮檺鍒ゆ柇 v-if="getAuthValueFN('xxx_edit')" --> + <!-- 鏉冮檺鍒ゆ柇 :disable="!getAuthValueFN('xxx_edit')" --> <el-switch v-model="scope.row.isUp" :active-value="1" diff --git a/src/router/demo_router.js b/src/router/demo_router.js index ba31966..a5e1acb 100644 --- a/src/router/demo_router.js +++ b/src/router/demo_router.js @@ -34,6 +34,12 @@ component: () => import('@/pages/demo/detail'), // Parent router-view name: 'demoDetail', meta: { title: '妯℃澘璇︽儏' } + }, + { + path: 'listDialog', + component: () => import('@/pages/demo/classList'), // Parent router-view + name: 'listDialog', + meta: { title: '瀛愬垪琛ㄥ脊妗嗕緥瀛�' } } ] } -- Gitblit v1.8.0