框架 - -> 配置

表格配置属性说明文档

页面添加引用:

import BaseTable from ‘@/components/BaseTable/index.vue

1、grid-edit-width 表格操作栏宽度

例如:grid-edit-width:250

2、gridOtherConfig

属性说明示例
showCheckbox表格属性列表前的CheckboxgridOtherConfig:{showCheckbox:true} 所选项值得获取 this.$refs.tableName.getMulitValue() 类型 (List)

3、gridConfig表格配置说明:

该配置主要控制页面表格显示列。(页面需要显示哪些字段名)

属性说明示例
label列显示名称(显示的列名)项目名称
prop对象Bean属性名(列名对应的属性名)name
align字段显示的位置(如字段要显示要居中显示还是居左居右)。字典表居中,数值居右,时间居中,图片居中字段比较多的话就居左align:‘center’
isShow表示表格字段是否展示(默认为true),false表示不展示isShow:‘false’
width表示当前字段表格的所占的宽度width:10px
render具体看下面的例子
type如要显示图片type:‘image’,type:‘linkView’ 表示的是可点击预览单元格,无需自行扩展点击事件,type:'linkEdit’表示的是可点击编辑单元格,无需自行扩展点击事件,type:‘tag’,表示TAG标签单元格,tagType表示TAG颜色 eq 表视判断属性,属性有:success,info,warning,danger等,具体参考ELEMENTUI 的tag属性,普通点击事件:type:‘link’,事件为,cellClickInfo(prop,data),prop表示点击的属性,data表示行数据(在fw-table中 @cellClickInfo=”需要触发的事件名”)type:‘image’,type:‘linkView’
tagTypetagType表示TAG颜色,配合type:’tag’,使用 属性有:success,info,warning,danger等,具体参考ELEMENTUI 的tag属性tagType:‘success’
link
fixed固定列表栏不滑动fixed: ‘right’,fixed: ‘right’
wrapwrap:‘hander’,手动控制换行,接受html中
格式;wrap:‘auto’,自动换行 ; 默认为不换行,省略号
wrap:‘hander’,wrap:‘auto’
eqtag表示TAG颜色,配合type:‘tag’,使用 eqType属性表示判断符 tagType属性有:success,info,warning,danger等,具体参考ELEMENTUI 的tag属性 type:null,//number表示数值,null或者string表示字符串;与tagType不同的是eq增加了根据字段去判断显示不同的颜色type:’tag’, eq:[{ eqType:’=’, tagType:null, value:‘1’, type:null,}, { eqType:‘=’, prop:‘state’, tagType:‘info’, value:‘2’, type:null },]

注:eq中eqType表示为判断符号

render详解 表格中对字段 的样式及点击事件进行自定义操作
gridConfig: [{
		label: '当事人',
		prop: 'conpanyDisplay',
		minWidth: '20%',
		render: (h, params) => {
		  return h('el-button', {
			props: {
			  type: 'text'
			},
			class: {
			  'custom-table-button': true
			},
	   style: {        `对表格字段样式进行操作`
			  color: params.row.urgentType == '1' ? '#FFBB00' : '#EA3737'
			},
		on: {        `对字段触发点击事件`
			  click: (item) => {
				that.viewnew(params.row)
			  }
			}
		  }, params.row.conpanyDisplay)
		}
	  },
}]

4、queryConfig配置说明:

该配置主要控制表格查询条件显示(配置查询按钮)

属性说明示例
span默认24(想要一列显示两行就改成12,改成8就是一列显示三行)
label查询控件显示说明(按钮显示名字,如按姓名查询则按钮的名字可以是:姓名)项目名称
prop对象Bean属性名(按钮显示名字对应的字段名,如果按姓名查询就要对应姓名这个字段)name
type控件显示类型,text:文本框,select下拉框,mul_select多选下拉框,tree下拉树, mul_tree多选下拉树,date 日期,datetime 日期时间,month:月度,dateRange:,radio单选框,checkbox:复选框,textarea大文本,editor富文本,headerImage头像图片,files多文件上type:‘select’,查询条件不要使用textarea,editor等无意义控件
dataScource下拉框,下拉树等对应字典表配置ID,来源于代码生成处的字典表管理(当查询时需要字典表或者联表查询时需要这个属性,填写的内容为字典表关联的Id)dataScource:‘1d5e3da8d5466678470dd91 03aa0436b’
data下拉框,下拉树等默认数据,一般不用关注(当下拉框数据不是从数据库查询的,是死的时候才会填写内容)
url下拉框,下拉树等来源URL,属于自定义属性,如果dataScource不为空,则不用url(用于复杂的联表查询,当字典表无法实现时我要手写查询代码,并且把controller地址填写上)
placeholder查询控制显示说明如果这个为空就会选择label属性来显示控制说明 Placeholder:‘请输入名称’
clearable是否显示下拉框以及时间选择框里的小x图标,点击x可以清空输入框(如果为false就不显示)Clearable:false

5、formConfig配置说明:

该属性配置主要用于表单显示(比如增加,修改跳出来的表单需要显示的字段)。

属性说明示例
span
lg
sm
该属性主要用于每个控件所占列表,一行分为24个单元格,一行显示1个控件配置为24, 一行显示2个控件配置为12,以此类推 lg 表示1200=<分辨率<1920采用的列数 sm:表示小于1200分辨率采用的列数 span表示>=1920采用的列数, 如果没有配置lg、sm属性,则 span是全部分辨率采用的唯一属性标准span:8,lg:12,sm:24
label表单每个控件显示的名字 name:‘项目名称’
prop对应的数据实体Bean属性名称prop:‘projectName’
type控件显示类型:text:文本框,select下拉框,mul_select多选下拉框,tree下拉树, mul_tree多选下拉树,password密码框, date 日期,datetime 日期时间,time 时间( HH:mm )==> {(‘start’: ‘00:00’,’step’: ‘00:01’,’end’: ‘23:45’) 配置time属性开始、间隔和结束时间 realtime 时间( HH: mm :ss )} ,realtimerange 时间范围(HH: mm :ss - HH: mm :ss) 在formModl里面给相应的属性赋为null 后端接收为List,daterange 日期范围(yyyy-MM-dd : yyyy-MM-dd), month:月度,radio单选框,checkbox:复选框,textarea大文本,editor富文本,headerImage单图片,images多图片,files多文件上,openSelect根据查询选择获取数据,colorPicker选取颜色框,rate设置类似评论星数,switch开关按钮,slider进度条拉取,integer整数数字输入框,decimal带有小数的输入框,
data下拉框,下拉树等默认数据,一般不用关注{“id”: “1”,label: “已通过”}
url下拉框,下拉树等来源URL,属于自定义属性
disabled是否可以填写内容(默认为false,若改成true则表示这个输入框禁止填写)disabled:true
placeholder查询控制显示说明如果这个为空就会选择label属性来显示控制说明Placeholder:‘请输入名称’
ready
treetree标签配置属性disableBranch:true禁用非叶子节点 customLabeltrue 表示自定义label,选中后默认显示从子向上所有节点名称
labelPositionform表单字段显示方向默认left如:labelPosition:‘top’
disabledDate当type为date、daterange时禁止选择当天之前的日期如:disabledDate:1
showTypeview一般使用在预览 功能为去除输入框 要把prop属性改为textshowType:‘view’
cauBeginValue当type为daterange时控制默认开始时间cauEndValue:-7
cauEndValue当type为daterange时控制默认结束时间cauEndValue:-1
colClass表单中加下划线和背景色colClass: true
itemClass表单中标题背景色itemClass: true
fileSize表单中当type为headerImage单图片,images多图片,files多文件上文件上传时使用 作用为限制文件上传大小 单位为MfileSize: 2
accept表单中当type为headerImage单图片,images多图片,files多文件上文件上传时使用 作用:控制上传文件内省,格式为.doc,.docx等accept:‘.doc,.docx’
limit表单中当type为images多图片,files多文件上文件上传时使用 作用:控制上传的数量limit:2
tips作用:对应字段后展示提示文本tips:‘图片推荐尺寸为232x227PX,大小在200KB以内’
mapType作用:选择地图类型mapType:‘gdMag’ 调用高德地图 一般与type:‘openLocation’ 配合使用
formConfig中Type详解
属性说明示例
select下拉框
mul_select多选下拉框
password密码框
editor(editor2)富文本
text文本框
tree下拉树
mul_tree多选下拉树
date日期HH: mm :ss
datetime日期时间yyyy-MM-dd HH: mm :ss
time时间( HH:mm )==> {(‘start’: ‘00:00’,’step’: ‘00:01’,’end’: ‘23:45’) 配置time属性开始间隔和结束时间 realtime 时间( HH: mm :ss )}
realtimerange时间范围(HH: mm :ss - HH: mm :ss) 在formModl里面给相应的属性赋为null 后端接收为List<String>
daterange日期范围(yyyy-MM-dd : yyyy-MM-dd)
month月度MM
radio单选框
checkbox复选框
textarea大文本
headerImage单图片
images多图片
file单文件注意: formModel中要添加对应字段且为String否则出现上传之后无法出现上传按钮的问题
files多文件
openSelect根据查询选择获取数据
colorPicker选取颜色框
rate设置类似评论星数
switch开关按钮
slider进度条拉取例如:控制音量
integer整数数字输入框
decimal带有小数的输入框
openLocationinput后加点击调用地图页面并选择地址图视化默认调用百度地图 优先使用高德地图type同级加mapType: ‘gdMap’, 属性
form更具字段显示隐藏 内根据( pId:’sourceUserType’,)字段判断 值( showByPValue:[‘1’],)是否显示
pId:'partyType',
isShow:false,
showByPValue:['1'],`
例如:
{
                span: 24,
                label: '单位/公民',
                prop: 'sourceUserType',
                type: 'radio',
                rules: [{
                    required: true,
                    message: '请输入单位/公民',
                    trigger: 'change'
                }, ],
                data: [{
                        label: "单位",
                        id: 1,
                    },
                    {
                        label: "公民",
                        id: 2,
                    },
                ],
            },
            // citizen_name,citizen_sex,citizen_id,citizen_tel,citizen_site
            {
                span: 24,
                label: '单位名称',
                pId:'sourceUserType',
                isShow:false,
                showByPValue:['1'],
                prop: 'companyId',
                type: 'text',
                max: 40,
                rules: [{
                    required: true,
                    message: '请输入当事人单位名称',
                    trigger: 'blur'
                }, ],
                data: []
            },
            {
                span: 24,
                label: '联系电话',
                prop: 'citizenTel',
                type: 'text',
                max: 18,
                rules: [{
                    required: true,
                    message: '请输入联系电话',
                    trigger: 'blur'
                }, ],
                data: []
            },

#### createQueryEntity方法的使用例子 和详解

protected QueryEntity createQueryEntity(){
	   QueryEntity queryEntity=new QueryEntity();
		List<String> ids=CollUtil.newArrayList();
		List<String> propertys=CollUtil.newArrayList();
		List<String> mulFields=CollUtil.newArrayList();
		List<String> mulPropertys=CollUtil.newArrayList();
		//字典表id对应字段  单选字段
		ids.add("839e57d051fb308f2a969afa6f2552af");
		propertys.add("hotelName");
		ids.add("22fac8cd28f3cb580f4803ae0b2172b1");
		propertys.add("scenicName");
		//字典表id
		queryEntity.setIds(ids);
		queryEntity.setPropertys(propertys);
		  // 多选字段属性
		ids.add("1a6760484add3f2c1fd8c7530fa98cda");
		propertys.add("diningName");
		mulPropertys.add("diningName");
		mulFields.add("diningName");
		queryEntity.setMulPropertys(mulPropertys);
		queryEntity.setMulFields(mulFields);
		//    多文件
		queryEntity.setMulPropertysComing(true);
//一般用于查询文件 查询文件信息  和单文件图片查询 private FileEntity imageFileEntity;
queryEntity.setSingleFilePropertys(CollUtil.newArrayList("image","travelTask"));
//多图片和多文件接收 接收使用 private List<FileEntity> imageList;
queryEntity.setFilePropertys(CollUtil.newArrayList("image"));
//前端使用tree时有字典表  使用下面代码查询字典表名称
queryEntity.setTreePropertys(CollUtil.newArrayList(new QueryTreeEntity("fountain", "45a3421d4263a23dc2eb3956bbe50a48")));
}

当是多选字端的话 修改和新增时处理逻辑为

  @ApiOperation(value = "新增")
	@PostMapping("")
	public ResponseData<StandardScheme> addDto(@RequestBody StandardSchemeDto entityDto) {
		List<String> mulProperty = CollUtil.newArrayList();
		mulProperty.add("schemeTag");
		StandardSchemeDto entity =  beanVoUtil.changeList2Str(mulProperty,entityDto);
		this.service.save(entity);
		return ResponseData.success(entity);
	}

封装字典表 和查询字典表详解:
@ApiOperation(value = "获取评分标准下拉框列表")
	@GetMapping("scoringCriteria")
	public ResponseData<Map<String, Object>> dicts(Integer index) {
		QueryWrapper<ScoringCriteria> queryWrapper = new QueryWrapper<>();
		if(StrUtil.isNotBlank(id)) {
			queryWrapper.eq("check_type", id);
		}
		queryWrapper.orderByAsc("create_time");
		List<ScoringCriteria> list = this.scoringCriteriaService.list(queryWrapper);
		List<SelectNode> dictList = CollUtil.newArrayList();
		if (CollUtil.isNotEmpty(list)) {
			for (ScoringCriteria scoringCriteria : list) {
				SelectNode selectNode = new SelectNode();
				selectNode.setId(scoringCriteria.getId());
				selectNode.setLabel(scoringCriteria.getScoringCriteria());
				dictList.add(selectNode);
			}
		}
		Map<String, Object> map = MapUtil.newHashMap();
		map.put("index", index);
		map.put("data", dictList);
		return ResponseData.success(map);
	}
	@ApiOperation(value = "获取绿地名称")
	@GetMapping("landInfo")
	public ResponseData<List<BaseDict>>  dictLandName(Integer index) {
		List<BaseDict> dictList = baseDictService.selectByTableName("t_green_dict_deduction_money");
		return ResponseData.success(dictList);
	}

枚举类封装字典表

@GetMapping("companys")
	public ResponseData<Map<String, Object>> companyList(Integer index) {
		Map<String, Object> map = MapUtil.newHashMap();
		map.put("index", index);
		List<SelectNode> nodes = CollUtil.newArrayList();
		for (VideoTypeEnums type : VideoTypeEnums.values()) {
			nodes.add(new SelectNode(type.getCode(), type.getName()));
		}
		map.put("data", nodes);
		return ResponseData.success(map);
	}

openLocation属性的用法及后端对经纬度的处理

前端

formConfig中的配置
{
			span: 12,
			label: '地址',
			prop: 'address',
			type: 'openLocation',
			mapConfig: {
				provnice: 'provnice',
				city: "city",
				xian: "",
				lnglat: "lnglat",
				address: "address"
			},
			max: 40,
			rules: [],
			data: []
		},
`formViewConfig中的配置-->预览大图`
		{
			span: 24,
			label: '地址',
			labelWidth: '1px',
			prop: 'address',
			type: 'openLocation',
			colClass: true,
			showType: 'view',
			mapConfig: {
				lnglat: 'lnglat',
				address: 'address'
			},
		},

后端

/*entity*/
	@ApiModelProperty(value = "地址")
	private String address;
	@ApiModelProperty(value = "经纬度")
	private String lnglat;
	@ApiModelProperty(value = "经度")
	private String lng;
	@ApiModelProperty(value = "纬度")
	private String lat;
	//小程序中的经纬度
	@ApiModelProperty(value = "经度")
	private String gcjLng;
	@ApiModelProperty(value = "纬度")
	private String gcjLat;

/*service*/
public void changeEntity(BeauResourceDto entityDto, boolean isBaiduLnglat) {
		if (StrUtil.isNotBlank(entityDto.getLnglat())) {
			List<String> lngLat = StrUtil.split(entityDto.getLnglat(), ',');
			if (isBaiduLnglat) {
				entityDto.setLng(lngLat.get(0));
				entityDto.setLat(lngLat.get(1));
				Point point = LocationTransfromUtil.bd09togcj02(Convert.toDouble(entityDto.getLng()),
						Convert.toDouble(entityDto.getLat()));
				entityDto.setGcjLng(Convert.toStr(point.getLng()));
				entityDto.setGcjLat(Convert.toStr(point.getLat()));
			} else {
				entityDto.setGcjLng(lngLat.get(0));
				entityDto.setGcjLat(lngLat.get(1));
				Point point = LocationTransfromUtil.gcj02tobd09(Convert.toDouble(entityDto.getGcjLng()),
						Convert.toDouble(entityDto.getGcjLat()));
				entityDto.setLng(Convert.toStr(point.getLng()));
				entityDto.setLat(Convert.toStr(point.getLat()));
			}
			entityDto.setLnglat(entityDto.getLng() + "," + entityDto.getLat());
		}
	}

6、gridTopBtnConfig配置说明:

该配置表示按钮紧随查询条件显示的所有按钮集中配置处,代码默认生成reset,export,自定义按钮的classify属性请不要占用该2个类型

属性说明示例
name按钮名称重置
classify按钮类型,自定义按钮可@对应的classify属性名部署对应按钮事件(create:新建。reset:重置。export:导出)例如classify:‘custom’,父窗口通过@custom='方法名字’即可捕捉
index待扩展使用
location待扩展使用(按钮存放的位置)
roles按钮权限,待扩展使用
actionUrl按钮调用后端地址,reset和export无需关注,自定义根据自己需求使用
type按钮样式,自定义按钮样式为:primary,可配置项目有:success,info,warning,danger,text
icon按钮图标:默认为el-icon-plus
modelId

7、gridOperaBtnConfig配置说明:

该配置表示按钮另起查询条件一行显示的所有按钮集中配置处,代码默认生成create(新建),自定义按钮 的classify属性请不要占用该类型

属性说明示例
name按钮名称重置
classify按钮类型,自定义按钮可@对应的classify属性名部署对应按钮事件(create:新建。reset:重置。export:导出)例如classify:‘custom’,父窗口通过@custom='方法名字’即可捕捉
index待扩展使用
location待扩展使用
roles按钮权限,待扩展使用
actionUrl按钮调用后端地址,reset和export无需关注,自定义根据自己需求使用
type按钮样式,自定义按钮样式为:primary,可配置项目有:success,info,warning,danger,text
icon按钮图标:默认为el-icon-plus
modelId

8、gridBtnConfig配置说明:

该配置表示每一行表格的操作按钮,代码默认生成update(修改),delete(删除),view(预览),自定义按钮 的classify属性请不要占用该类型

属性说明示例
name按钮名称重置
classify按钮类型,自定义按钮可@对应的classify属性名部署对应按钮事件(update:修改,delete:删除,view:预览)例如classify:‘custom’,父窗口通过@custom='方法名字’即可捕捉,父窗口方法参 function 方法名称(id,row),id表示行主键,row表示操作行数据
index待扩展使用
location待扩展使用
roles按钮权限,待扩展使用
actionUrl按钮调用后端地址,reset和export无需关注,自定义根据自己需求使用
type按钮样式,自定义按钮样式为:text,可配置项目有:success,info,warning
icon按钮图标:默认为el-icon-plus
modelId
permission
circle待扩展使用

### `notShow属性详解`
gridBtnConfig: [
	{
	  'name': '拒绝',
	  'type': null,
	  'classify': 'refusenew',
	  'index': 2,
	  'location': 'grid',
	  'roles': [],
	  'actionUrl': '',
	  //动态控制按钮隐藏或显示
	  'extend': {
		'notShow': [{
		  'prop': 'status=2,status=1,status=4,status=5,status=6'
		}]
	  }
	},
  ],
`单条数据导出自定义接口`
	  exportOne(item) {
	  let url = 'appointOrder/exportOne/' + item.id //要调用的接口
	  url += '?Authorization=' + this.$commonApi.getTokenInfo()
	  url += '&menuId=' + this.GetQueryString('menuId')
	  url += '&role=' + this.$commonApi.getRole()
	  url = window.getLocationUrl() + '/' + url
	  window.open(url)
	},
	GetQueryString(name) {
	  var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)')
	  var r = window.location.search.substr(1).match(reg)
	  if (r != null) return unescape(r[2])
	  return null
	},

9、formModel配置说明:

formModel表示表单的数据属性,格式如下

 formModel: {
	 'id' : '',
	 'name': '',
	 'introduction': '',
	 'remarks': '',
	 'projectClassify': '',
 }
 /*表示有哪些控件,这个地方需要保持一致*/

10、queryModel配置说明:

queryModel表示查询的数据属性,格式如下=>一般用于默认搜索值

 queryModel: {
	 'name' : null,
	 'projectClassify' : null,
 }

11、dialogConfig 配置说明:

dialogConfig主要用于控制页面整体属性

属性说明示例
width表示弹窗宽度,默认为50%,可自行调整width:80
labelWidth表示弹窗的表示文本宽度,默认为80px,可自行调整labelWidth:‘200’
submitName表示弹窗的提交按钮名称,默认为’提交’,可自行调整submitName:‘确认’
submitMessage表示弹窗的提交提示信息,默认为:‘确认提交吗?’',可自行调整
showRadio表示表格是否显示单选圆形按钮(为true表示显示出按钮)表示弹窗是否showRadio:true
showIconSetting是否显示图标showIconSetting:false
isGroup分组如果isGroup为true表示弹窗需要分组isGroup:true
buttons表示弹窗的扩展按钮(可以在弹窗里自定义添加按钮),父窗口可根@submitExtend='自定义方法’捕获按钮事件function 自定义方法(url,data){}url:为后端请求地址type:按钮类型name:按钮名称message:点击按钮的提示信息 buttons: [{ ‘className’: ‘cutom-submit-button’, name: ‘短信提醒’,classify: ‘noteIn’,’extend’: {‘notShow’:[{‘prop’:’doResultState=1,doResultState=2,doResultState=5,doResultState=4,doResultState=7’ }]} },
isShowSumbit可以在弹窗里不展示提交按钮isShowSumbit:true
notFit开启表格中列的自定义宽度notFit:true
tableStripe表格中是否有条纹tableStripe: false
tableBorder表格中是否有边框tableStripe: false
queryLabelWidth自定义搜索字段的宽度queryLabelWidth: ‘60’
editType弹窗成为页面editType: ‘page’
showBack当editType: ‘page’时 页面有返回按钮showBack: true

dialogConfig一般生成后默认添加此配置

  dialogConfig: {
	  labelWidth: '135px',
	  tableStripe: false,
	  tableBorder: false
	},

分组的使用
configData: [
		{
		groupName:"分组标题",
		/*自定义分组栏图标  不用可以不加*/
		icon:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
		data:[
		]
		}
]
dialogConfig: {
		isGroup: true,
	},

弹窗实现自定义底部butten添加
  /*vue*/
	<FwBaseDialog
	  ref="doViewFormDialog"
	  :form-data="configData.formEventViewModel"
	  :dialog-config="dialogConfig"
	  title="查看事件管理"
	  @noteIn="noteIn"
	  @sellIn="sellIn">
	  <div slot="customBody">
	  <!-- 内容 -->
	  <!--  <div style="display: flex;">
		  <div style="width: 64%;">
			<fw-header title="事件信息" style="margin-top: 11px;" />
			<div style="width: 95%;margin-left: 10px;">
			  <fw-form
				:dialog-config="viewFormDialogConfig"
				:form-config="configData.formEventViewConfig"
				:form-data="configData.formEventViewModel">
			  </fw-form>
			</div>
		  </div>
		</div> -->
	  </div>
	</FwBaseDialog>
	/*js*/
	 dialogConfig: {
		labelWidth: '120px',
		tableStripe: false,
		width: '60%',
		tableBorder: false,
		buttons: [{
		  'className': 'cutom-submit-button',
		  name: '短信提醒',
		  classify: 'noteIn',
		  'extend': {
			'notShow': [{
			  'prop': 'doResultState=1,doResultState=2,doResultState=5,doResultState=4,doResultState=7'
			}]
		  }
		},

二级页

<fw-card v-if="showMain=='2'">
		<div class="el-page-header" style=" padding: 20px 15px;border-bottom:1px solid rgb(227, 227, 227);">
			<div class="el-page-header__left" @click="back"><i class="el-icon-back" />
		</div>
			<div class="el-page-header__content" style="flex: 1;">档案库详情</div>
		</div>
		<div style="margin-top: 10px;">
		<!--加入自己要写的内容 -->
		</div>
</fw-card>
---------js-------
通过showMain属性控制
back() {
	this.showMain = '1'
}

FwFrom里面有个插槽formConfig属性内配置的type改为custom,然后插槽的名字就是prop的名字,这个插槽你们可以自己随意扩展自己的属性

<FwForm ref="preDeclareInfo" @changeFormModel="changeRepeatFormModel" :dialog-config="configData.dialogConfig" :form-config="configData.formConfig"
		:form-data="configData.formNewModel" title="重新提交" >
	  <div slot="customs">
		<div style="display: flex;">
		 <!--加入自己要写的内容 -->
		</div>
	  </div>
</FwForm>

配置文件

configData: [
	{
		span: 24,
		label: '',
		labelWidth:"1",
		prop: 'customs',
		type: 'custom',
	}
]

弹窗 框架

<!-- 弹窗1.0 -->
 <fw-base-dialog
		ref="baseDialog"
		:append-to-body="true"
		:close-on-click-modal="false"
		:visible.sync="discretionAdd"
		title="权力事项库信息"
		width="75%"
		@submit="save">
		<div slot="customBody">
		  <FwForm
			ref="authority"
			:dialog-config="configData.dialogConfig"
			:form-config="configData.formConfig"
			:form-data="formModel"
			title="权力事项库" />
		  <div>
			<fw-table
			  ref="causeDiscretion"
			  :form-data="causeConfigData.formModel"
			  :form-config="causeConfigData.formConfig"
			  :dialog-config="causeConfigData.dialogConfig"
			  :grid-config="causeConfigData.gridConfig"
			  :grid-data="causeDiscretionGridData"
			  :query-config="causeConfigData.queryConfig"
			  :grid-top-btn-config="causeConfigData.gridTopBtnConfig"
			  @submit="causeDiscretionSubmit"
			  :query-model="causeConfigData.queryModel"
			  :grid-opera-btn-config="causeConfigData.gridOperaBtnConfig"/>
		  </div>
		</div>
fw-base-dialog>
<!-- 弹窗2.0  -->
<FwDialogForm
  ref="baseDialog"
  :config="formConfig"
  :form-data="formModel"
  :dialog-config="dialogConfig"
  :title="菜单配置"
  @submit="submitStyle" />
<!-- 打开该弹窗 -->
 this.$refs.baseDialog.showDialog()  
<!-- 关该弹窗 -->   
that.$refs.baseDialog.hideDialog()
<!-- 刷新当前表格 -->   
that.$refs.baseDialog.getData()
<!-- 弹窗提交按钮不显示 -->   
`dialogConfig` 属性加 isShowSumbit:false
<!-- 重置config.js内的实体换原 --> 
this.formsyncModel = Object.assign({}, DATA_CONFIG.formsyncModel),

弹窗二

 <el-dialog :visible.sync="dialog" width="560px" :append-to-body="true" :close-on-click-modal="false"
			:close-on-press-escape="false" class="custom-dialog-class">
			<el-form ref="form" :model="updatePassModal" :rules="rules" size="small" label-width="88px">
				<el-form-item label="原密码" prop="password">
					<el-input v-model="updatePassModal.password" placeholder="请输入原密码" type="password" auto-complete="on"
						style="width: 370px;" />
				</el-form-item>
				<el-form-item label="新密码" prop="relPassword">
					<el-input v-model="updatePassModal.relPassword" placeholder="密码长度不能小于8,并且至少包含'大/小写字符,数字,特殊字符4种组合'"
						type="password" auto-complete="on" style="width: 370px;" />
				</el-form-item>
			</el-form>
			<div slot="footer" class="dialog-footer">
				<el-button type="text" class="custom-button cutom-cancel-button" @click="dialog=false">取消</el-button>
				<el-button type="primary" @click="updatePassSubmit" class="custom-button cutom-submit-button">确认
				</el-button>
			</div>
		</el-dialog>
		data() {
			return {
				dialog: false,
				updatePassModal: {
					id: '',
					password: '',
					relPassword: ''
				},
				rules: {
					password: [{
							required: true,
							message: '请输入密码',
							trigger: 'blur'
						},
						{
							min: 8,
							max: 16,
							message: '长度在8-16个字符之间',
							trigger: 'blur'
						}
					],
					relPassword: [{
						required: true,
						message: '请输入密码',
						trigger: 'blur'
					}]
				}
			}
		},
		methods: {
			deptConfig(item) {
				this.dialog = true;
				this.updatePassModal.id = item.id
				this.updatePassModal.password = ''
				this.updatePassModal.relPassword = ''
			},
		},

//当菜单没有图标时UPDATE t_framework_sys_menu SET ICON=‘index’ where icon is null or icon=‘’

copy实体类: BeanUtil.copyProperties(beauVillage, vo);
获取当前操作的用户id: UserIdContext.get()
默认用户名密码 : 1dfmSCW980@

单表单保存

<template>
  <div>
	<div style="display:flex;justify-content: center;">
	  <div style="width: 80%;">
		<fw-card>
		  <fw-form
			ref="opinion"
			:dialog-config="configData.dialogConfig"
			:form-config="configData.formConfig"
			:form-data="configData.formModel"
			:inline="true" />
		  <div style="text-align:center ;margin-top: 40px;">
			<slot name="button">
			  <el-button :loading="loading" type="primary" style="margin-left:60px;width:80px;background-color: #00ada6; border: #00ada6;" @click="save">
				{ { loading?'保存中':'保 存' } }
			  </el-button>
			</slot>
		  </div>
		</fw-card>
	  </div>
	</div>
  </div>
</template>
<script>
import {
  DATA_CONFIG
} from './config/config.js'
import {
  beauGeneralizeService
} from '@/api/scenic/beauGeneralize.js'
export default {
  name: 'BeauGeneralizeList',
  components: {
  },
  data() {
	return {
	  testData: [],
	  configData: DATA_CONFIG,
	  beauGeneralizeService: beauGeneralizeService,
	  loading: false
	}
  },
  mounted() {
	this.getData()
  },
  methods: {
	getData() {
	  this.beauGeneralizeService.all().then((res) => {
		console.log('----', res)
		if (res && res.length > 0) {
		  this.configData.formModel = res[0]
		}
	  })
	},
	save() {
	  this.$refs.opinion.validateForm()
	  const that = this
	  that.$refs.opinion.submitForm(function(opinionInfoData) {
		console.log('----', opinionInfoData)
		that.loading = true
		if (opinionInfoData.id) {
		  that.beauGeneralizeService.update(opinionInfoData.id, opinionInfoData).then(res => {
			that.$notify.success('提交成功!')
			that.loading = false
			that.getData()
		  }).catch(error => {
			that.loading = false
		  })
		} else {
		  that.beauGeneralizeService.create(opinionInfoData).then(res => {
			that.$notify.success('提交成功!')
			that.loading = false
			that.getData()
		  }).catch(error => {
			that.loading = false
		  })
		}
	  })
	}
  }
}
</script>

`显示容器显示文本行数,并将超出部分用...代替`
	overflow : hidden;
	text-overflow: ellipsis;
	display: -webkit-box;
	-webkit-line-clamp: 要显示的行数;
	-webkit-box-orient: vertical;
`如果文案是英文字符或数字,可采用white-space 限制`
1. word-break:break-all;只对英文起作用,以字母作为换行依据
2. word-wrap:break-word; 只对英文起作用,以单词作为换行依据
3. white-space:pre-wrap; 只对中文起作用,强制换行
4. white-space:nowrap; 强制不换行,都起作用
5. white-space:nowrap; overflow:hidden; text-overflow:ellipsis;不换行,超出部分隐藏且以省略号形式出现

`修改或者新增`
  submitForm() {
	  const that = this
	  that.$refs.preEditDeclareInfo.submitForm(function(preDeclareData) {
		if (preDeclareData.id) {
		  that.preDeclareService.update(preDeclareData.id, preDeclareData).then(res => {
			that.dialogEditVisibleup = false
			that.$refs.mainTable.queryData()
		  })
		} else {
		  preDeclareData.diningDataList = that.diningData
		  preDeclareData.hotelDataList = that.hotelData
		  console.log('结果======>', preDeclareData)
		  that.preDeclareService.create(preDeclareData).then(res => {
			that.dialogEditVisible = false
			that.$refs.mainTable.queryData()
		  })
		}
	  })
	},

导入功能

/**
 *下载模板的接口
 */
@ApiOperation(value = "下载excel模板")
@ApiImplicitParam(name = "id", value = "ID", dataType = "String", paramType = "path", example = "1112", required = true)
@GetMapping("templateurl")
public ResponseData<String> getTemplateUrl() {
    String viewPathString = env.getProperty("framework.config.viewpath");
    String templateUrl = viewPathString + "excel/peopleTemplate.xls";
    return ResponseData.success(templateUrl);
}

服务器上图片的引用

<template>
	<view>
		<cu-custom class="custom-red" :isBack="true" bgColor="common-cu-custom">
			<block slot="backText">返回</block>
			<block slot="content">景区导览</block>
		</cu-custom>
			<image :src="imageService+'dazhaxie/userWx.jpg'" style="width: 550rpx;" mode="widthFix">
								</image>
		<view style="height: 1490rpx;" :style="{background:'url('+imageService+'map/maps.jpg)',backgroundSize:'100% 100%',backgroundRepeat:'no-repeat'}">
		</view>
	</view>
</template>
<script>
	import {
		IMAGE_SERVICE
	} from '@/api/common.js'
	export default {
		data() {
			return {
				imageService: IMAGE_SERVICE,
			}
		},
		methods: {
		}
	}
</script>

/**
*根据上传得文件Id查询文件表的其他属性
*/
SysFjxxInfo sysFjxxInfo= sysFjxxInfoService.selectById(entityDto.getAudioFile());

列表图片展示

image


这里简单写个示例 简单实用后续自己理解探索

后端

@ApiOperation(value = "分页查询")
	@GetMapping("list")
	@PreAuthorize("hasPermission(null,'" + SecurityScenicConstants.BEAU_VILL_LIST + "')")
	public ResponseData<PageResult<ImageCardEntity>> page(BeauVillageVo entity) {
		QueryEntity queryEntity = this.createQueryEntity();
		PageResult<BeauVillage> pageResult = super.page(queryWrapper).getData();
		PageResult<BeauVillageVo> vos = beanVoUtil.changeBean2Vo(pageResult, BeauVillageVo.class, queryEntity);
		PageResult<ImageCardEntity> newPageResult = ImageCardEntity.change(vos,
				new ImageCardChangeEntity("id", "updateTime", "activityName", "activityTime", "activityPictureFileEntity"));
		return ResponseData.success(newPageResult);
	}
	private QueryEntity createQueryEntity() {
		QueryEntity queryEntity = new QueryEntity();
		List<String> ids = CollUtil.newArrayList();
		List<String> propertys = CollUtil.newArrayList();
		List<String> mulFields = CollUtil.newArrayList();
		// 多选字段属性
		List<String> mulPropertys = CollUtil.newArrayList();
		ids.add("e68ef2a53df13f5de3b419061009fa7e");
		propertys.add("activityType");
		queryEntity.setIds(ids);
		queryEntity.setPropertys(propertys);
		queryEntity.setMulPropertys(mulPropertys);
		queryEntity.setSingleFilePropertys(CollUtil.newArrayList("activityPicture"));
		queryEntity.setMulFields(mulFields);
		return queryEntity;
	}

前端

要使用包含 class=”meetingClass” 的dev包裹着分装好的 <fw-card><fw-image-card></fw-image-card></fw-card>

<style lang="scss" >
  .meetingClass{
	.bg-purple {
	  .image{
		width: 286px;
		height: 175px;
		margin-top: 18px;
	  }
	}
  }
  
</style>

vue

  <div class="meetingClass">
	<fw-card>
	  <fw-image-card
		ref="mainTable"
		:api-service="beauVillageService"
		:grid-config="configData.gridConfig"
		:grid-btn-config="configData.gridBtnConfig"
		:form-config="configData.formConfig"
		:form-data="configData.formModel"
		:grid-edit-width="200"
		:form-view-config="configData.formViewConfig"
		:grid-top-btn-config="configData.gridTopBtnConfig"
		:is-async="true"
		:query-config="configData.queryConfig"
		:query-model="configData.queryModel"
		:grid-opera-btn-config="configData.gridOperaBtnConfig"
		:dialog-config="configData.dialogConfig"
		form-title="村容村貌"
		@view="viewZhip">
		<div slot="name"/>
		<div slot="address" slot-scope="data">
		  <div style="display: flex;margin-top: 10px;">
			<div style="margin-top: 5px; flex: 1;color: #000000;font-size: 15px;font-weight: bold; margin-left: 15px;text-align: center;">
			  { { data.data.name } }
			</div>
		  </div>
		  <div style="text-align: center;  margin-top: 10px;color: #666666;font-size: 15px;padding-bottom: 20px;">
			{ { data.data.content } }
		  </div>
		</div>
	  </fw-image-card>

关于框架封装request请求

框架封装有三种方式

默认自动生成的引用

import fwUtil from 'framework-util'
const carExtendsService = new fwUtil.ApiService.ApiService('carExtends');
export { carExtendsService }
//一般get传参要使用params接收值 地址显示所传参数
export function getCarInOutService(query) {
  return custemRequest({
	url: 'carCheck/carInOutNum/',
	method: 'get',
	params: query
  })
}
//一般put传参用data接收值 地址不显示所传参数
export function getHouseUsertService(houseId,data) {
  return custemRequest({
	url: 'peopleInfo/updateHouse/'+houseId,
	method: 'put',
	data:data
  })
}

里面包含增删改查的方法在vue页面引用厚可直接调用



=====================================================================


import request from '@/utils/request'
export function toAliPay(url, data) {
  return request({
	url: 'api/' + url,
	data,
	method: 'post'
  })
}

生成文件后要更改的信息 (版本2.0.44-SNAPSHOT)

entity 里面Id用long类型要加注解@TableId(type = IdType.ASSIGN_ID)

例:@TableId(type = IdType.ASSIGN_ID)
	private Long id;
	后端限制长度和不能为null
	@NotBlank(message = "房屋号不能为空")
	@Size(message = "房屋号最大长度不能超过10", max = 10)
	private String houseNum;
新建表的create_time和update_time要调整为create_data_time和update_date_time字段名称,而且要用datetime类型
@ApiModelProperty(value = "创建时间")
	@TableField(fill = FieldFill.INSERT)
	@JsonFormat(pattern="yyyy-MM-dd hh:mm:ss")
	private Date createDateTime;
	@ApiModelProperty(value = "创建人")
	  @TableField(fill = FieldFill.INSERT)
	private String createMan;
	@ApiModelProperty(value = "修改时间")
	@TableField(fill = FieldFill.INSERT_UPDATE)
	@JsonFormat(pattern="yyyy-MM-dd hh:mm:ss")
	private Date updateDateTime;
	@ApiModelProperty(value = "修改人")
	  @TableField(fill = FieldFill.INSERT_UPDATE)
	private String updateMan;

关于三级菜单配置

新建一个index.vue

<template>
  <div >
	  <router-view />
  </div>
</template>

然后到系统管理=>>菜单管理找到对应要显示三级菜单的二级菜单的组件路径属性中填写该文件的地址即可如

plugins/platform/thirdMenu/index

changeFormModel

属性(每次表单输入填写时触发)

<FwForm
			ref="opinion"
			:dialog-config="dialogConfig"
			:form-config="formConfig"
			:form-data="formModel"
			title="外呼任务配置"
			@changeFormModel="changeFormModel" />

methods

   changeFormModel(prop, fromModel) {
	  console.log('prop====>', prop)//字段名
	  console.log('fromModel====>', fromModel)
	  if (fromModel.startDate != '' && fromModel.endDate != '') {
		if (fromModel.startDate > fromModel.endDate) {
		  fromModel.endDate = ''
		}
	  }
	  if (fromModel.beginTime != '' && fromModel.overTime != '') {
		if (fromModel.beginTime > fromModel.overTime) {
		  fromModel.overTime = ''
		}
	  }
	}

小程序对多图片的储存后端逻辑

    生成UUID储存到当前表
    String imageIdString = StrUtil.uuid();
    entityDto.setPicture(imageIdString);
    this.save(entityDto);
    //在把多图片的各个id和当前存的图片id并对在一对多的图片表中
    if (CollUtil.isNotEmpty(entityDto.getPictureImages())) {
        for (String image : entityDto.getPictureImages()) {
            SysFjxxMul saveSysFjxxMul = new SysFjxxMul();
            saveSysFjxxMul.setFjId(image);
            saveSysFjxxMul.setRecordId(imageIdString);
            saveSysFjxxMul.setMainId(entityDto.getId());
            this.sysFjxxMulService.save(saveSysFjxxMul);
        }
    }

## 接口对接(采集模块)
在自定义采集中,添加ICustomAuthImpl接口,如果需要实现自定义认证的接口,实现该采集接口,并同时配置方式为
#custom_start#完整对象名称#custom_end#即可实现
自定义数据源
在header同级别处添加配置处,同步添加
customData:"com.framework.dffd",类名为自身应用对的数据实现类的完整类型,如果分页,需实现接口ICustomPageData,默认起始页为1,如果不分页,需实现接口ICustomData接口即可"//数据来源
动态数据应用:{
  "header":{
	"deviceId":"$deviceId$"
  }
}

自定义字典表

直接使用sql查询然后封装(也可用于统计)

String sqlEvent = "select count(0) as num from v_country_event_tousu where 1=1";
    if (StrUtil.isNotBlank(roleSql)) {
        sqlEvent += " and org_no " + roleSql;
    }
JdbcTemplate jt = new JdbcTemplate(ds);
Map<String, Object> eventMap = jt.queryForMap(sqlEvent);

通过表名or通过实体逻辑查询

@GetMapping("yesOrNo")
	public ResponseData<Map<String,Object>> getYesOrNoDict(Integer index){
		List<BaseDict> baseList = baseDictService.selectByTableName("t_framework_dict_yesno");
		List<SelectNode> nodes=CollUtil.newArrayList();
		baseList.forEach(self->{
			nodes.add(new SelectNode(self.getId(), self.getName()));
		});
		Map<String,Object> map=MapUtil.newHashMap();
		map.put("index", index);
		map.put("data", nodes);
		return ResponseData.success(map);
	}
	@GetMapping("alubm")
	public ResponseData<Map<String,Object>> getAlbumType(Integer index){
		QueryWrapper<PartyTai> queryWrapper=new QueryWrapper<>();
		queryWrapper.orderByAsc("px");
		List<PartyTai> list= partyTaiService.list(queryWrapper);
		List<SelectNode> nodes=CollUtil.newArrayList();
		list.forEach(self->{
			nodes.add(new SelectNode(self.getId(), self.getName()));
		});
		Map<String,Object> map=MapUtil.newHashMap();
		map.put("index", index);
		map.put("data", nodes);
		return ResponseData.success(map);
}

VUE中watch的使用(监听属性变化触发)

    watch: {
        // 此处监听variable变量,当期有变化时执行
        orgId(item1, item2) {
            // item1为新值,item2为旧值
            this.getMenu(this.orgId)
            this.getRole(this.orgId)
        },
        loading(item1, item2) {
            // item1为新值,item2为旧值
            this.getMenu(this.orgId)
            this.getRole(this.orgId)
        },
        immediate: true // watch侦听操作内的函数会立刻被执行
    },
  • 30
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二价亚铁.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值