什么是Vdata?
vdata是青锋自定义功能模块的核心实现代码,前面讲解的拖拽表单和自定义菜单模块,最终生成的规则信息,会创建一个动态的功能模块,这个动态的、公用的动态模块的核心方法及实现类命名为:Vdata
Vdata前端代码实现
Edit.vue:前端表单页面,新增表单和编辑表单。
Index.vue:前端主页。
Info.vue:前端详情页。
PEdit.vue:工作流编辑页面(工作流会讲解)
PInfo.vue:工作流详情页面(工作流会讲解)
首页核心代码
查询字段解析
1、如果字段开启查询,并且字段类型为:select、CheckBox、radio。统一采用下的方式进行查询。
2、如果查询字段开启查询,并且类型为:input,textarea,number,rate,slider,editor,switch,date,time,则使用输入框进行查看。
3、如果开启了状态查询
4、如果开启了时间段查询
操作按钮权限及控制


页面注入刷新
inject: [“reload”],
案例:
provider/inject:简单的来说就是在父组件中通过provider来提供变量,然后在子组件中通过inject来注入变量。
这种方式可以避免在使用props传值时,必须将每一个属性都传递给子组件的写法,当使用的公共组件不确定会被传递什么值的时候,使用这种写法非常方便。
在父组件中APP.Vue中<template><div id="app" style="height:100%;"><router-view v-if="isRouterAlive"></router-view></div></template><script>import axios from 'axios';export default {name: 'App',provide(){return{reload:this.reload}},data(){return{isRouterAlive:true}},methods:{reload(){this.isRouterAlive = false;this.$nextTick(function(){this.isRouterAlive = true;})}}}</script>在子组件中注入父组件中的变量在data()之前注入inject:['reload'],在哪里引用就调用this.reload()
核心方法findVMenuData
//查询菜单功能信息,根据菜单功能信息初始化页面信息(查询字段、展示字段等)findVMenuData(menu_id) {const columns = [];findVMenuInfo({ menu_id: menu_id }).then((response) => {this.menu_data = response.data;if (this.menu_data.open_process == "0") {this.process_key = this.menu_data.process_id;}this.menu_data.fieldPdList.forEach((item) => {if (item.field_query == "true" || item.field_list == "true") {if (item.dynamic == "false") {let options = JSON.parse(item.options);item.options = options;} else if (item.dynamic == "true") {findDictionaryList({ parent_code: item.dynamicKey }).then((response) => {item.options = response.data.data;item.options.forEach((op) => {op.label = op.name;op.value = op.id;});this.dynamicData[item.dynamicKey] = item.options;});}}if (item.field_list == "true") {if ("input,textarea,number,rate,slider,editor,switch,date,time".indexOf(item.field_type) != -1) {let data = {title: item.field_comment,dataIndex: item.field_name,ellipsis: true,};if (item.field_width != "" &&item.field_width != undefined &&isNumber(item.field_width)) {data.width = item.field_width + "px";}if (item.field_link == "true") {data.scopedSlots = { customRender: "name" };}columns.push(data);} else if ("select,checkbox,radio".indexOf(item.field_type) != -1) {let data = {title: item.field_comment,dataIndex: item.field_name,ellipsis: true,customRender: (text, row, index) => {let label = "";if (Array.isArray(item.options)) {item.options.forEach((op) => {if (op.value == text) {label = op.label;}});}return label;},};if (item.field_width != "" &&item.field_width != undefined &&isNumber(item.field_width)) {data.width = item.field_width + "px";}if (item.field_link == "true") {data.scopedSlots = { customRender: "name" };}columns.push(data);}}});let dealStatus = {title: "当前办理状态",dataIndex: "dealStatus",ellipsis: true,};let assignee = {title: "当前办理人",dataIndex: "assignee",ellipsis: true,};let dealTime = {title: "起办时间",dataIndex: "dealTime",ellipsis: true,};if (this.menu_data.status_type == "1" ||this.menu_data.status_type == "2") {let status = {title: "状态",dataIndex: "status",customRender: (text, row, index) => {if (text == "0") {return "启用";} else {return "停用";}},};columns.push(status);}let time = {title: "创建时间",dataIndex: "create_time",};let width = 200;if (this.menu_data.status_type == "1" ||this.menu_data.status_type == "2") {width = 250;}let operate = {title: "操作",dataIndex: "operation",scopedSlots: { customRender: "operation" },width: width + "px",};if (this.menu_data.open_process == "0") {columns.push(dealStatus);columns.push(assignee);columns.push(dealTime);} else {columns.push(time);}columns.push(operate);//查询初始化关联表信息this.initLinkFormList(this.menu_data.table_id);this.columns = columns;this.fetch({ pageSize: 10 });});},
关联表查询:
initLinkFormList(table_id) {//查询关联表-处理关联表的动态数据信息findLinkFormList({ table_id: table_id }).then((response) => {let linkFormData = response.data;linkFormData.forEach((form_data) => {form_data.vfields.forEach((item) => {if ("select,checkbox,radio".indexOf(item.field_type) != -1) {if (item.dynamic == "true") {findDictionaryList({ parent_code: item.dynamicKey }).then((response) => {item.options = response.data.data;item.options.forEach((op) => {op.label = op.name;op.value = op.id;});this.dynamicData[item.dynamicKey] = item.options;this.$forceUpdate();});}}});});});},handleTableChange(paginat
新增/编辑页面核心代码
k-form-design表单初始化
动态展示拖拽的表单信息。
<k-form-buildref="kfb":value="jsonData":dynamicData="dynamicData"/>mounted() {this.form = this.record;//查询菜单配置信息// this.initData(this.record.menu_id);this.jsonData = JSON.parse(this.record.table_content);},
数据获取及保存方法

详情页面初始化及展现
<k-form-buildref="kfb":value="jsonData":dynamicData="dynamicData":disabled="true"v-show="initStatus"/>this.form = this.record;//查询菜单配置信息this.jsonData = JSON.parse(this.record.table_content);this.initStatus = true;

