应用antd体系开发,这里是index.vue
<template> <div> <a-row :gutter="24"> <a-col :md="5" :sm="24"> <a-card :bordered="false" :loading="treeLoading"> <div v-if="this.categoryTree != ''"> <a-tree style="scroll:true" :treeData="categoryTree" v-if="categoryTree.length" @select="handleClick" :defaultExpandAll="true" :defaultExpandedKeys="defaultExpandedKeys" :replaceFields="replaceFields" /> </div> <div v-else> <a-empty :image="simpleImage" /> </div> </a-card> </a-col> <a-col :md="19" :sm="24"> <a-card :bordered="false" :bodyStyle="tstyle"> <div class="table-page-search-wrapper" v-if="hasPerm('category:page')"> <a-form layout="inline"> <a-row :gutter="48"> <a-col :md="6" :sm="24"> <a-form-item label="门类名"> <a-input v-model="queryParam.categoryName" allow-clear placeholder="请输出门类名" /> </a-form-item> </a-col> <a-col :md="6" :sm="24"> <a-form-item label="门类编码"> <a-input v-model="queryParam.code" allow-clear placeholder="请输出惟一编码" /> </a-form-item> </a-col> <a-col :md="6" :sm="24"> <a-form-item label="门类类型"> <a-select style="width: 100%" v-model="queryParam.categoryType" placeholder="请抉择门类类型"> <a-select-option v-for="(item, index) in categoryTypeData" :key="index" :value="item.code">{{ item.name }}</a-select-option> </a-select> </a-form-item> </a-col> <a-col :md="6" :sm="24"> <span class="table-page-search-submitButtons"> <a-button type="primary" @click="$refs.table.refresh(true)">查问</a-button> <a-button style="margin-left: 8px" @click="() => (queryParam = {})">重置</a-button> </span> </a-col> </a-row> </a-form> </div> </a-card> <a-card :bordered="false"> <s-table ref="table" :columns="columns" :data="loadData" :alert="options.alert" :rowKey="record => record.id" :rowSelection="options.rowSelection"> <template class="table-operator" slot="operator" v-if="hasPerm('category:add')"> <a-button type="primary" v-if="hasPerm('category:add')" icon="plus" @click="$refs.addForm.add()">新增门类 </a-button> <a-button type="danger" :disabled="selectedRowKeys.length < 1" v-if="hasPerm('category:delete')" @click="batchDelete"> <a-icon type="delete" />批量删除 </a-button> <x-down v-if="hasPerm('category:export')" ref="batchExport" @batchExport="batchExport" /> </template> <span slot="categoryTypeScopedSlots" slot-scope="text"> {{ 'category_type' | dictType(text) }} </span> <span slot="action" slot-scope="text, record"> <a v-if="hasPerm('category:edit')" @click="$refs.editForm.edit(record)">编辑</a> <a-divider type="vertical" v-if="hasPerm('category:edit') & hasPerm('category:delete')" /> <a-popconfirm v-if="hasPerm('category:delete')" placement="topRight" title="确认删除?" @confirm="() => singleDelete(record)"> <a>删除</a> </a-popconfirm> </span> </s-table> <add-form ref="addForm" :id="this.queryParam.pid" @ok="handleOk" /> <edit-form ref="editForm" @ok="handleOk" /> </a-card> </a-col> </a-row> </div></template><script>import { STable, XCard, XDown } from '@/components'import { Empty } from 'ant-design-vue'import { getCategoryTree, categoryPage, categoryDelete, categoryExport} from '@/api/modular/main/category/categoryManage'import addForm from './addForm.vue'import editForm from './editForm.vue'export default { components: { STable, addForm, editForm, XDown, XCard }, data() { return { // 查问参数 queryParam: {}, // 表头 columns: [ { title: '门类名', align: 'center', dataIndex: 'categoryName' }, { title: '惟一编码', align: 'center', dataIndex: 'code' }, { title: '门类类型', align: 'center', dataIndex: 'categoryType', scopedSlots: { customRender: 'categoryTypeScopedSlots' } }, { title: '排序号', align: 'center', dataIndex: 'sort' }, { title: '备注', align: 'center', dataIndex: 'remaks' } ], tstyle: { 'padding-bottom': '0px', 'margin-bottom': '10px' }, // 加载数据办法 必须为 Promise 对象 loadData: parameter => { return categoryPage(Object.assign(parameter, this.queryParam)).then(res => { return res.data }) }, List: [], categoryTree: [], defaultExpandedKeys: [], categoryTypeData: [], selectedRowKeys: [], selectedRows: [], treeLoading: true, simpleImage: Empty.PRESENTED_IMAGE_SIMPLE, replaceFields: { key: 'id' }, options: { alert: { show: true, clear: () => { this.selectedRowKeys = [] } }, rowSelection: { selectedRowKeys: this.selectedRowKeys, onChange: this.onSelectChange } } } }, created() { this.getCategoryTree() if (this.hasPerm('category:edit') || this.hasPerm('category:delete')) { this.columns.push({ title: '操作', width: '150px', dataIndex: 'action', scopedSlots: { customRender: 'action' } }) } const categoryTypeOption = this.$options this.categoryTypeData = categoryTypeOption.filters['dictData']('category_type') }, methods: { // 获取树 getCategoryTree() { getCategoryTree(Object.assign(this.queryParam)).then(res => { this.treeLoading = false if (!res.success) { return } this.categoryTree = res.data if (this.categoryTree.length > 0) { this.queryParam.parentId = this.categoryTree[0].id } else { this.queryParam.parentId = 0 } // 全副开展,下面api办法提供的不失效,先用此办法 for (var item of res.data) { // eslint-disable-next-line eqeqeq if (item.parentId == 0) { this.defaultExpandedKeys.push(item.id) } } this.$refs.table.refresh() }) }, /** * 单个删除 */ singleDelete(record) { const param = [{ id: record.id }] this.categoryDelete(param) }, /** * 批量删除 */ batchDelete() { const paramIds = this.selectedRowKeys.map(d => { return { id: d } }) this.categoryDelete(paramIds) }, categoryDelete(record) { categoryDelete(record).then(res => { if (res.success) { this.$message.success('删除胜利') this.$refs.table.clearRefreshSelected() this.getCategoryTree() } else { this.$message.error('删除失败') // + res.message } }) }, /** * 批量导出 */ batchExport() { const paramIds = this.selectedRowKeys.map(d => { return { id: d } }) categoryExport(paramIds).then(res => { this.$refs.batchExport.downloadfile(res) }) }, handleClick(e) { this.queryParam = { pid: e.toString() } this.$refs.table.refresh(true) }, handleOk() { this.getCategoryTree() this.$refs.table.refresh() }, onSelectChange(selectedRowKeys, selectedRows) { this.selectedRowKeys = selectedRowKeys this.selectedRows = selectedRows } }}
应用
tree组件,应用handleclick()响应树节点点击,传递参数pid(树节点的id)
父组件向子组件传值:在父组件定义一个参数,而后把他绑定到要回填的组件上,在这里应用的是:id="this.queryParam.pid"
在子组件应用props,在data中定义props:[绑定的key],这样就收到了,而后应用setFieldsValue回填到子组件表单中须要的地位。
setFieldsValue
在ant 中通过setFieldsValue 存储的相似是一种键值 对的模式,你能够通过对应的key 值来展现例如:
this.form.setFieldsValue( { pid: this.id } )
个别这种状况会报错,说这个this.form.setFieldsValue不是一个methods,所以能够应用一个定时器
setTimeout()=>{this.form.setFieldsValue({pid : this.id}),100}
除此之外,还利用了下拉树,在这里能够应用一个树的空间,叫做<tree-select>
这一简略模块的前端大略就是这个样子。
谢谢