123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- import {mapGetters} from "vuex";
- export default (app, option = {}) => {
- const mixins = {
- data() {
- return {
- selectionList: [],
- data: [],
- form: {},
- params: {},
- loading: false,
- api: require(`@/api/${option.name}`),
- option: require(`@/option/${option.name}`).default,
- page: {
- pageSizes: [10, 30, 50, 100, 200],
- pageSize: 10
- },
- }
- },
- computed: {
- ...mapGetters(['userInfo', 'permission', 'roles']),
- ids() {
- const ids = [];
- this.selectionList.forEach(ele => {
- ids.push(ele[this.rowKey]);
- });
- return ids.join(",");
- },
- bindVal() {
- return {
- ref: 'crud',
- option: this.option,
- data: this.data,
- tableLoading: this.loading
- }
- },
- onEvent() {
- return {
- 'on-load': this.getList,
- 'row-save': this.rowSave,
- 'row-update': this.rowUpdate,
- 'row-del': this.rowDel,
- 'selection-change': this.selectionChange,
- 'refresh-change': this.refreshChange,
- 'date-change': this.dateChange,
- 'search-change': this.searchChange,
- 'search-reset': this.searchChange
- }
- },
- rowKey() {
- return this.option.rowKey || option.rowKey || 'id'
- }
- },
- methods: {
- getList() {
- const callback = () => {
- this.loading = true;
- this.api[option.list || 'getList'](this.page.currentPage, this.page.pageSize, this.params).then(res => {
- let data;
- if (option.res) {
- data = option.res(res.data);
- } else {
- data = res.data.data;
- }
- this.page.total = data[option.total || 'total'] || 0;
- this.data = data[option.records || 'records'];
- if (this.listAfter) {
- this.listAfter(data);
- }
- this.loading = false;
- })
- }
- if (this.listBefore) {
- this.listBefore();
- }
- callback();
- },
- rowSave(row, done, loading) {
- const callback = () => {
- delete this.form.params;
- this.api[option.add || 'add'](this.form).then((data) => {
- this.getList();
- if (this.addAfter) {
- this.addAfter(data);
- } else {
- this.$message.success('新增成功');
- }
- done();
- }).catch(() => {
- loading();
- })
- }
- if (this.addBefore) {
- this.addBefore();
- }
- callback();
- },
- rowUpdate(row, index, done, loading) {
- const callback = () => {
- delete this.form.params;
- this.api[option.update || 'update'](this.form).then((data) => {
- this.getList();
- if (this.updateAfter) {
- this.updateAfter(data);
- } else {
- this.$message.success('更新成功');
- }
- done();
- }).catch(() => {
- loading();
- })
- }
- if (this.updateBefore) {
- this.updateBefore();
- }
- callback();
- },
- rowDel(row, index) {
- const callback = () => {
- this.api[option.del || 'remove'](row[this.rowKey], row).then((data) => {
- this.getList();
- if (this.delAfter) {
- this.delAfter(data, row, index)
- } else {
- this.$message.success('删除成功');
- }
- })
- }
- if (this.delBefore) {
- this.delBefore();
- callback();
- } else {
- this.$confirm('确定将选择数据删除?', '提示', {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: 'warning'
- }).then(() => {
- callback();
- })
- }
- },
- handleDelete() {
- if (this.selectionList.length === 0) {
- this.$message.warning("请选择至少一条数据");
- return;
- }
- this.$confirm("确定将选择数据删除?", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning"
- })
- .then(() => {
- this.api[option.del || 'remove'](this.ids).then((data) => {
- this.getList();
- if (this.delMultiAfter) {
- this.delMultiAfter(data, this.ids);
- } else {
- this.$message.success('删除成功');
- }
- });
- });
- },
- searchChange(params, done) {
- if (done) done();
- if (this.validatenull(params)) {
- Object.keys(this.params).forEach(ele => {
- if (!['createTime_dategt', 'createTime_datelt'].includes(ele)) {
- delete this.params[ele];
- }
- })
- } else {
- Object.keys(params).forEach(ele => {
- if (this.validatenull(params[ele])) {
- delete this.params[ele];
- delete params[ele];
- }
- })
- }
- this.params = Object.assign(this.params, params);
- this.page.currentPage = 1;
- this.getList();
- },
- dateChange(date) {
- if (date) {
- this.params.createTime_dategt = date[0];
- this.params.createTime_datelt = date[1];
- } else {
- delete this.params.createTime_dategt;
- delete this.params.createTime_datelt;
- }
- this.page.currentPage = 1;
- this.getList();
- },
- selectionChange(list) {
- this.selectionList = list;
- },
- selectionClear() {
- this.selectionList = [];
- this.$refs.crud.toggleSelection();
- },
- refreshChange() {
- this.getList();
- }
- }
- }
- app.mixins = app.mixins || [];
- app.mixins.push(mixins);
- return app;
- }
|