# 底部菜单插件开发

## &#x20;【插件中进行底部菜单的赋值】

&#x20;       如何在插件中设置底部菜单栏呢，目前移动bos不支持对于某一个菜单项的处理，目前需要对于整个菜单控件进行赋值 场景如下：我们在界面上有个底部菜单，控件的key为FTabMenuField&#x20;

&#x20;       简单说明：因为实在手机上，所以我们的底部菜单定义参考目前通用的做法，支持两级，因为也不建议第一级定义太多，那样会导致无法显示，一般一级三个已经够了，更多的放到二级菜单中去&#x20;

### 1、首先定义一个菜单列表，如下&#x20;

```
List _tabMenuList = new List();
```

### 2、带子菜单的，添加一级菜单&#x20;

```
BaseTabMenu tabMenuApproval = new BaseTabMenu();
tabMenuApproval.Id = "FApproval";
tabMenuApproval.Key = "FApproval";
tabMenuApproval.Value = "处理";
tabMenuApproval.Type = "view";//click表示此菜单就是直接点击的，如果是有子菜单的话，此处要设置成为view
_tabMenuList.Add(tabMenuApproval);
tabMenuApproval.sub_button = new List<BaseTabMenu>();
BaseTabMenu subTabMenu = new BaseTabMenu();
subTabMenu.Id = "FSubtest1";
subTabMenu.Key = "FSubtest1";
subTabMenu.Value = "Ftitle";
subTabMenu.Type = "click";
tabMenuApproval.sub_button.Add(subTabMenu);
```

### 3、直接一级菜单就是处理点击的

```
BaseTabMenu tabMenuApproval = new BaseTabMenu();
tabMenuApproval.Id = "FCancel";
tabMenuApproval.Key = "FCancel";
tabMenuApproval.Value = "撤销";
tabMenuApproval.Type = "click";
_tabMenuList.Add(tabMenuApproval);
```

### 4、最后设置对应控件的菜单值&#x20;

```
string value = BaseMenuManager.ParseToString(_tabMenuList);
this.View.GetControl("FTabMenuField").SetCustomPropertyValue("value", value);
```

## &#x20;【底部菜单属性设置代码示例】

### 1、设置底部菜单背景色&#x20;

#### 1）移动单据列表底部菜单样式设置插件代码：

```
JSON.JSONObject style = new JSON.JSONObject();
style["FApproval"] = "background-color:#EF0000;";
this.View.GetControl("FList").SetCustomPropertyValue("bottomMenuStyle", style);
```

#### 2）移动表单底部菜单控件样式设置插件代码：

```
JSON.JSONObject style = new JSON.JSONObject();
style["FB"] = "background-color:#EF0000;";
style["FB_a"] = "background-color:#00EF00;width:150px;";    //子菜单
this.View.GetControl("FTabMenuField").SetCustomPropertyValue("tabMenuStyle", style);
```

### 2、插件设置列表底部菜单

```
List<BaseTabMenu> tabMenuList = new List<BaseTabMenu>();
BaseTabMenu tabMenuApproval1 = new BaseTabMenu();
tabMenuApproval1.Id = "FApproval";
tabMenuApproval1.Key = "FApproval";
tabMenuApproval1.Value = "批量审批";
tabMenuApproval1.Type = "click"; //按钮类型,view = 菜单，click = 按钮
string value = BaseMenuManager.ParseToString(tabMenuList);
this.View.GetControl("FList").SetCustomPropertyValue("bottomMenuValue", value);
```

### 3、插件设置底部菜单控件

```
List<BaseTabMenu> tabMenuList = new List<BaseTabMenu>();
BaseTabMenu tabMenuApproval = new BaseTabMenu();
tabMenuApproval.Id = "FApproval";
tabMenuApproval.Key = "FApproval";
tabMenuApproval.Value = "任务处理";
tabMenuApproval.Type = "view"; //按钮类型,view = 菜单，click = 按钮
tabMenuApproval.sub_button = new List<BaseTabMenu>();   
BaseTabMenu tabMenuForward = new BaseTabMenu();
tabMenuForward.Id = "FForward";
tabMenuForward.Key = "FForward";
tabMenuForward.Value = "转发";
tabMenuForward.Type = "click"; //按钮类型,view = 菜单，click = 按钮
tabMenuApproval.sub_button.Add(tabMenuForward);
tabMenuList.Add(tabMenuApproval);
string value = BaseMenuManager.ParseToString(tabMenuList);
this.View.GetControl("FTabMenuField").SetCustomPropertyValue("value", value); 
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://bos.gitbook.io/mobilebos/yi-dong-biao-dan/di-bu-cai-dan-cha-jian-kai-fa.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
