Skip to content

Commit 7a696e2

Browse files
committed
可以设置按钮名称和大小 #25
表单字段vifEval表达式显示隐藏
1 parent 52a6c76 commit 7a696e2

File tree

10 files changed

+262
-24
lines changed

10 files changed

+262
-24
lines changed

docs/form.md

+75
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,41 @@ $form->size("small");
9999
$form->disabled(true);
100100
```
101101

102+
### 弹窗模式
103+
104+
在Grid中使用
105+
106+
```php
107+
$form->isDialog();
108+
$grid->dialogForm($this->form()->isDialog());
109+
```
110+
111+
### 创建按钮名称
112+
113+
```php
114+
$form->createButtonName("创建");
115+
```
116+
117+
### 更新按钮名称
118+
119+
```php
120+
$form->updateButtonName("更新");
121+
```
122+
123+
### 取消/返回按钮名称
124+
125+
```php
126+
$form->backButtonName("取消");
127+
```
128+
129+
### 按钮宽度
130+
131+
```php
132+
$form->buttonWidth("200px");
133+
```
134+
135+
136+
102137
## 字段使用
103138

104139
提供各种丰富的表单字段
@@ -208,6 +243,46 @@ $form->item('username', '用户名')->vif("email",false,true) // 表示填写ema
208243
$form->item('username', '用户名')->vif("key.key","value") //支持点操作
209244
```
210245

246+
#### 表达式方式
247+
248+
基于`eval`实现
249+
250+
```php
251+
$form->item('username', '用户名')->vifEval(function (Form\Utils\VIfEval $eval) {
252+
//需要监听的字段,必须是数组
253+
$eval->props(['is_rec', 'is_hot']);
254+
//表达式字符串
255+
$eval->functionStr("console.log(this.form_data)");
256+
//读取js文件,文件地址随意,这个优先级大于functionStr
257+
$eval->functionPath(admin_path('Script/demo.js'));
258+
});
259+
```
260+
261+
##### js表达式模板
262+
263+
建议在`Admin`目录下创建一个`Script`文件夹
264+
265+
```javascript
266+
(function (form_item, form_items, form_data) {
267+
console.log(form_item,form_items,form_data);
268+
return true;
269+
})(this.form_item, this.form_items, this.form_data);
270+
//----------可复制上面的代码,下面是说明
271+
272+
//必须返回true或false
273+
274+
//内置lodash对象,可调用所有方法,文档:https://www.html.cn/doc/lodash/
275+
window._
276+
//当前字段属性
277+
form_item
278+
//当前所有表单字段属性
279+
form_items
280+
//当前表单的值
281+
form_data
282+
```
283+
284+
285+
211286
### 忽略空值(留空则不修改)
212287

213288
> 若此字段的值为 ''/null/undefined 或 空对象/空数组 则在提交的表单对象中删除键名

public/app.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/mix-manifest.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"/app.js": "/app.js?id=f0fb13cdad18a7035008",
2+
"/app.js": "/app.js?id=6de18520d14ae80705c3",
33
"/manifest.js": "/manifest.js?id=8991394a854ee5cdffc3",
44
"/vendor.js": "/vendor.js?id=159feaa1cb9cfd111212"
55
}

resources/js/components/form/Form.vue

+19-12
Original file line numberDiff line numberDiff line change
@@ -101,20 +101,30 @@
101101
<div></div>
102102
<div>
103103
<el-button
104-
:loading="loading"
104+
v-if="!attrs.attrs.isDialog"
105105
class="submit-btn"
106-
type="primary"
107-
@click="submitForm('ruleForm')"
108-
>{{ isEdit ? "立即修改" : "立即创建" }}</el-button
106+
@click="$router.go(-1)"
107+
:style="{ width: attrs.attrs.buttonWidth }"
108+
>{{ attrs.attrs.backButtonName }}</el-button
109109
>
110110
<el-button
111-
v-if="!attrs.attrs.isDialog"
111+
v-else
112112
class="submit-btn"
113-
@click="$router.go(-1)"
114-
>返回</el-button
113+
@click="closeDialog"
114+
:style="{ width: attrs.attrs.buttonWidth }"
115+
>{{ attrs.attrs.backButtonName }}</el-button
115116
>
116-
<el-button v-else class="submit-btn" @click="closeDialog"
117-
>关闭</el-button
117+
<el-button
118+
:loading="loading"
119+
class="submit-btn"
120+
type="primary"
121+
:style="{ width: attrs.attrs.buttonWidth }"
122+
@click="submitForm('ruleForm')"
123+
>{{
124+
isEdit
125+
? attrs.attrs.updateButtonName
126+
: attrs.attrs.createButtonName
127+
}}</el-button
118128
>
119129
</div>
120130
</div>
@@ -256,9 +266,6 @@ export default {
256266
display: flex;
257267
align-items: center;
258268
justify-content: space-between;
259-
.submit-btn {
260-
width: 120px;
261-
}
262269
}
263270
.form-item-help {
264271
color: #999;
+26-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<div v-if="ifShow">
2+
<div v-if="ifVif && ivEval">
33
<slot></slot>
44
</div>
55
</template>
@@ -8,13 +8,15 @@ export default {
88
props: {
99
form_item: Object,
1010
form_items: Array,
11-
form_data: Object
11+
form_data: Object,
1212
},
13+
mounted() {},
1314
computed: {
14-
ifShow() {
15+
ifVif() {
1516
let key = this.form_item.vif.key;
1617
let value = this.form_item.vif.value;
1718
let anyValue = this.form_item.vif.anyValue;
19+
1820
if (key) {
1921
let cValue = window._.get(this.form_data, key);
2022
if (cValue == value || (cValue && anyValue)) {
@@ -25,7 +27,26 @@ export default {
2527
}
2628
2729
return !anyValue;
28-
}
29-
}
30+
},
31+
ivEval() {
32+
try {
33+
if (!this.form_item.vifEval) {
34+
return true;
35+
}
36+
let expression = this.form_item.vifEval.expression;
37+
let props = this.form_item.vifEval.props;
38+
props.map((prop) => {
39+
window._.get(this.form_data, prop);
40+
});
41+
if (expression) {
42+
return eval(expression);
43+
}
44+
return true;
45+
} catch (error) {
46+
console.error("表达式错误:" + error);
47+
return true;
48+
}
49+
},
50+
},
3051
};
3152
</script>

src/Console/extend-stubs/package.json

+5-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,11 @@
1111
},
1212
"devDependencies": {
1313
"cross-env": "^5.1",
14-
"laravel-mix": "^4.1.4"
14+
"laravel-mix": "^4.1.4",
15+
"resolve-url-loader": "^2.3.1",
16+
"sass": "^1.20.1",
17+
"sass-loader": "7.*",
18+
"vue-template-compiler": "^2.6.10"
1519
},
1620
"dependencies": {
1721
"vue": "^2.6.11"

src/Form/FormAttrs.php

+5
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,9 @@ class FormAttrs
2525

2626
public $isDialog = false;
2727

28+
public $createButtonName = "立即添加";
29+
public $updateButtonName = "立即修改";
30+
public $backButtonName = "返回";
31+
public $buttonWidth;
32+
2833
}

src/Form/FormItem.php

+28-4
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ class FormItem
5858
'anyValue' => false,
5959
];
6060

61+
protected $vifEval;
62+
6163
/**
6264
* FormItem constructor.
6365
* @param $prop
@@ -127,9 +129,9 @@ public function footerComponent($component)
127129
}
128130

129131
/**
130-
* @deprecated
131132
* @param $component
132133
* @return $this
134+
* @deprecated
133135
*/
134136
public function displayComponent($component)
135137
{
@@ -240,7 +242,7 @@ public function defaultValue($defaultValue)
240242
{
241243
$this->defaultValue = $defaultValue;
242244

243-
if($this->component) $this->component->componentValue($defaultValue);
245+
if ($this->component) $this->component->componentValue($defaultValue);
244246

245247
return $this;
246248
}
@@ -449,6 +451,7 @@ public function help($help)
449451
/**
450452
* @param $key
451453
* @param $value
454+
* @param bool $anyValue
452455
* @return $this
453456
*/
454457
public function vif($key, $value, $anyValue = false)
@@ -461,6 +464,21 @@ public function vif($key, $value, $anyValue = false)
461464
return $this;
462465
}
463466

467+
/**
468+
* @param \Closure $closure
469+
* @return FormItem
470+
*/
471+
public function vifEval(\Closure $closure)
472+
{
473+
$vifEval = new Form\Utils\VIfEval();
474+
475+
call_user_func($closure, $vifEval);
476+
477+
$this->vifEval = $vifEval->build();
478+
return $this;
479+
}
480+
481+
464482
/**
465483
* 设置字段所属tab名称
466484
* @param string $tab
@@ -489,16 +507,18 @@ public function ignoreEmpty()
489507
$this->ignoreEmpty = true;
490508
return $this;
491509
}
510+
492511
/**
493512
* 传递当前组件所在模式
494-
* @param string $value
513+
* @param string $value
495514
* @return $this
496515
*/
497516
public function hiddenMode($value = '')
498517
{
499518
$this->hiddenMode = $value;
500519
return $this;
501520
}
521+
502522
/**
503523
* @return mixed
504524
*/
@@ -507,6 +527,7 @@ public function hiddenInCreate()
507527
$this->hiddenMode = Form::MODE_CREATE;
508528
return $this;
509529
}
530+
510531
/**
511532
* @return mixed
512533
*/
@@ -515,13 +536,15 @@ public function hiddenInEdit()
515536
$this->hiddenMode = Form::MODE_EDIT;
516537
return $this;
517538
}
539+
518540
/**
519541
* @return mixed
520542
*/
521543
public function getHiddenMode()
522544
{
523545
return $this->hiddenMode;
524546
}
547+
525548
public function getAttrs()
526549
{
527550
return [
@@ -543,7 +566,8 @@ public function getAttrs()
543566
'relationName' => $this->relationName,
544567
'relationValueKey' => $this->relationValueKey,
545568
'vif' => $this->vif,
546-
'tab'=>$this->tab,
569+
'vifEval' => $this->vifEval,
570+
'tab' => $this->tab,
547571
'ignoreEmpty' => $this->ignoreEmpty,
548572
'hiddenMode' => $this->hiddenMode,
549573
];

src/Form/TraitFormAttrs.php

+43
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,49 @@ public function hideTab(bool $hideTab = true)
168168
return $this;
169169
}
170170

171+
/**
172+
* 创建按钮名称
173+
* @param $createButtonName
174+
* @return $this
175+
*/
176+
public function createButtonName($createButtonName)
177+
{
178+
$this->attrs->createButtonName = $createButtonName;
179+
return $this;
180+
}
181+
182+
/**
183+
* 修改按钮名称
184+
* @param $updateButtonName
185+
* @return $this
186+
*/
187+
public function updateButtonName($updateButtonName)
188+
{
189+
$this->attrs->updateButtonName = $updateButtonName;
190+
return $this;
191+
}
192+
193+
/**
194+
* 返回按钮名称
195+
* @param $backButtonName
196+
* @return $this
197+
*/
198+
public function backButtonName($backButtonName)
199+
{
200+
$this->attrs->backButtonName = $backButtonName;
201+
return $this;
202+
}
203+
204+
public function buttonWidth($buttonWidth)
205+
{
206+
$this->attrs->buttonWidth = $buttonWidth;
207+
return $this;
208+
}
209+
210+
/**
211+
* 弹窗模式
212+
* @return $this
213+
*/
171214
public function isDialog()
172215
{
173216
$this->attrs->isDialog = true;

0 commit comments

Comments
 (0)