【Fastadmin】根据Fieldlist键值组件做一个等级配置的完整示例

news2024/12/25 23:37:34

目录

1.效果展示:

​编辑

2.建表:

3.html页面

4.controller控制器

5.js

6.model


1.效果展示:


2.建表:


表名:fa_xxfb_config

/*
 Navicat Premium Data Transfer

 Source Server         : root
 Source Server Type    : MySQL
 Source Server Version : 50726
 Source Host           : localhost:3306
 Source Schema         : xxx

 Target Server Type    : MySQL
 Target Server Version : 50726
 File Encoding         : 65001

 Date: 11/12/2023 17:50:00
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for fa_xxfb_config
-- ----------------------------
DROP TABLE IF EXISTS `fa_xxfb_config`;
CREATE TABLE `fa_xxfb_config`  (
  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '配置项名称',
  `value` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '配置项值',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `name`(`name`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

3.html页面


<style>
    .upload-image {
        background: url('__CDN__/assets/img/plus.png') no-repeat center center;
        background-size: 30px 30px;
        height: 30px;
        width: 30px;
        border: 1px solid #ccc;
    }
</style>
<div class="row">
    <div class="col-md-6">
        <div class="box box-info">
            <!--<div class="panel-heading">
                等级配置
            </div>-->
            <div class="panel-body">
                <div class="alert alert-success-light">
                    <b>温馨提示</b><br>
                    这里是等级的配置<br>
<!--                    <b>下面的演示textarea为了便于调试,设置为可见的,实际使用中应该添加个hidden的class进行隐藏</b>-->
                </div>
                <form id="second-form" role="form" data-toggle="validator" method="POST" action="">
                    <div class="form-group row">
                        <label class="control-label col-xs-12">等级配置:</label>
                        <div class="col-xs-12">
                            <table class="table fieldlist" data-template="gradetpl" data-name="row[grade]" id="first-table">
                                <tr>
                                    <td>{:__('名称')}</td>
                                    <td>{:__('累计收益')}</td>
                                    <td>{:__('押金')}</td>
                                    <td>{:__('图标')}</td>
<!--                                    <td>{:__('状态')}</td>-->
                                    <td width="100"></td>
                                </tr>
                                <tr>
                                    <td colspan="5"><a href="javascript:;" class="btn btn-sm btn-success btn-append"><i class="fa fa-plus"></i> {:__('Append')}</a></td>
                                </tr>
                            </table>

                            <!--请注意实际开发中textarea应该添加个hidden进行隐藏-->
                            <textarea name="row[grade]" class="form-control hidden" cols="30" rows="5">{$grade.value}</textarea>
                            <script id="gradetpl" type="text/html">
                                <tr class="form-inline">
                                    <td><input type="text" name="<%=name%>[<%=index%>][name]" class="form-control" size="15" value="<%=row.name%>" placeholder="名称"/></td>
                                    <td><input type="text" onkeyup="value=value.replace(/[^\d]/g,'')" name="<%=name%>[<%=index%>][income]" class="form-control" size="15" value="<%=row.income%>" placeholder="累计收益"/></td>
                                    <td><input type="text" onkeyup="value=value.replace(/[^\d]/g,'')" name="<%=name%>[<%=index%>][deposit]" class="form-control" size="15" value="<%=row.deposit%>" placeholder="押金"/></td>
                                    <td>
                                        <input type="hidden" name="<%=name%>[<%=index%>][image]" id="c-image-<%=index%>" value="<%=row.image%>">
                                        <!--@formatter:off-->
                                        <button type="button" id="faupload-image" class="btn btn-danger faupload upload-image" data-input-id="c-image-<%=index%>" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp,image/webp" data-multiple="false" <%if(row.image){%>style="background-image: url('<%=Fast.api.cdnurl(row.image)%>')"<%}%>></button>
                                        <!--@formatter:on-->
                                    </td>
                                    <!--<td>
                                        <input type="hidden" name="<%=name%>[<%=index%>][state]" id="c-state-<%=index%>" class="form-control" style="width:50px" value="<%=row.state%>" placeholder="状态"/>
                                        <a href="javascript:;" data-toggle="switcher" class="btn-switcher" data-input-id="c-state-<%=index%>" data-yes="1" data-no="0" >
                                            <i class="fa fa-toggle-on text-success <%if(row.state==0){%>fa-flip-horizontal text-gray<%}%> fa-2x"></i>
                                        </a>
                                    </td>-->
                                    <td>
                                        <!--下面的两个按钮务必保留-->
                                        <span class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times"></i></span>
                                        <span class="btn btn-sm btn-primary btn-dragsort"><i class="fa fa-arrows"></i></span>
                                    </td>
                                </tr>
                            </script>
                        </div>
                    </div>
                    <div class="alert alert-danger-light">
                        <b>什么是账号等级?</b><br>
                    </div>
                    <div class="form-group row">
                        <div class="col-xs-12">
                            <table class="table fieldlist" data-template="grade_explaintpl" data-name="row[grade_explain]" id="second-table">
                                <tr>
                                    <td>{:__('账号等级说明')}:</td>
                                </tr>
                            </table>

                            <!--请注意实际开发中textarea应该添加个hidden进行隐藏-->
                            <textarea name="row[grade_explain]" class="form-control editor" cols="30" rows="5">{$grade_explain.value}</textarea>
                        </div>
                    <div class="form-group row">
                        <label class="control-label col-xs-12"></label>
                        <div class="col-xs-12">
                            <button type="submit" class="btn btn-success btn-embossed">{:__('OK')}</button>
                            <button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
                        </div>
                    </div>

                </form>
            </div>
        </div>

    </div>

</div>

plus图标:

4.controller控制器


<?php

namespace app\admin\controller\xxfb;

use app\common\controller\Backend;
use app\common\model\xxfb\Config;

/**
 * 自定义表单示例
 *
 * @icon   fa fa-table
 * @remark FastAdmin支持在控制器间跳转,点击后将切换到另外一个TAB中,无需刷新当前页面
 */
class Grade extends Backend
{
    public $grade = '';
    public $grade_explain = '';
    public function _initialize()
    {
        $this->grade = Config::where('name', 'grade')->find();
        $this->assign('grade', $this->grade);
        $this->grade_explain = Config::where('name', 'grade_explain')->find();
        $this->assign('grade_explain', $this->grade_explain);
        parent::_initialize();
    }

    public function index()
    {
        if ($this->request->isPost()) {
            $data = $this->request->post("row/a");
            if($data['grade']){

                if($this->grade){
                    $this->grade->value = $data['grade'];
                    $this->grade->save();
                }else{
                    $arr = ['name' => 'grade', 'value' => $data['grade']];
                    Config::create($arr);
                }
            }
            if($data['grade_explain']){
                if($this->grade_explain){
                    $this->grade_explain->value = $data['grade_explain'];
                    $this->grade_explain->save();
                }else{
                    $arr = ['name' => 'grade_explain', 'value' => $data['grade_explain']];
                    Config::create($arr);
                }
            }

            $this->success("提交成功");
        }
        return $this->view->fetch();
    }

}

5.js


define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {

    var Controller = {
        index: function () {
            Template.helper("Fast", Fast);

            $(document).on("fa.event.appendfieldlist", "#first-table .btn-append", function (e, obj) {
                //绑定上传组件
                Form.events.faupload(obj);

                //上传成功回调事件,变更按钮的背景
                $(".upload-image", obj).data("upload-success", function (data) {
                    $(this).css("background-image", "url('" + Fast.api.cdnurl(data.url) + "')");
                })
            });
            Form.api.bindevent($("form[role=form]"), function (data, ret) {
                // Layer.alert(data.data);
            });
        },
    };
    return Controller;
});

6.model


<?php

namespace app\common\model\xxfb;

use think\Model;

/**
 * 配置
 */
class Config Extends Model
{
    protected $table = 'fa_xxfb_config';

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1302161.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

城市生态与交通,数据可视化大屏,PSD源文件(ps大屏设计素材)

用酷炫的大屏展示其城市的生态与交通情况&#xff0c;辅助相关决策。好的大屏组件也可以让设计师的工作更加便捷&#xff0c;使其更高效快速的完成设计任务。现分享城市生态与交通的大屏Photoshop源文件&#xff0c;开箱即用&#xff01;以下为部分截图示意。 若需更多的 智慧…

Gemini:AI领域的璀璨明星

随着人工智能技术的飞速发展&#xff0c;AI领域的竞争越来越激烈。在这个充满挑战与机遇的时代&#xff0c;一个备受瞩目的AI平台——Gemini&#xff0c;以其卓越的性能和广泛的应用前景&#xff0c;成为了人们关注的焦点。本文将详细介绍Gemini的背景、技术特点、应用场景以及…

利用Ransac算法进行平面拟合

RANSAC算法是“Random Sample Consensus”的缩写&#xff0c;它的全称是随机抽样一致性算法。算法可以从一组包含“局外点”的观测数据集中&#xff0c;通过迭代方式估计数学模型的参数。RANSAC算法是不确定的算法——它是由一定的概率得出一个合理的结果&#xff0c;为了提高概…

机器人制作开源方案 | 网球收纳机器人

作者&#xff1a;孙宇晗、刘子昊、单正扬、李悦、张紫琦 单位&#xff1a;山东大学&#xff08;威海&#xff09; 指导老师&#xff1a;庞豹 1. 场景调研 1.1 宏观背景 体育作为社会经济、政治、文化的重要组成部分,越来越受政府、社会、学校等各阶层的关注。近年来&#x…

zabbix6入门到精通

https://www.yuque.com/fenghuo-tbnd9/ffmkvs/oy6tr9hqsyg5kb35 https://www.bilibili.com/video/BV1NY411Z76g?p5&vd_source126a7422b12e6881dc2c90565ad13d40 语雀课件地址&#xff1a;https://www.yuque.com/fenghuo-tbnd9/ffmkvs?# 《zabbix6入门到精通》 ppt课件百度…

Dijkstra求最短路 I(Dijkstra算法)

给定一个 n 个点 m 条边的有向图&#xff0c;图中可能存在重边和自环&#xff0c;所有边权均为正值。 请你求出 1 号点到 n 号点的最短距离&#xff0c;如果无法从 1 号点走到 n 号点&#xff0c;则输出 −1。 输入格式 第一行包含整数 n 和 m。 接下来 m 行每行包含三个整…

HubSpot细分目标市场:拓展业务边界,突破增长瓶颈

在数字化时代&#xff0c;企业面临前所未有的市场挑战。随着科技的飞速发展&#xff0c;消费者期望个性化的体验&#xff0c;即时的互动&#xff0c;以及高质量、有价值的信息。这些变化使得企业不仅需要适应新的技术和趋势&#xff0c;还需要更加精细化地理解和满足不同细分市…

新工具:CloudBees Pipeline Explorer改善日志查看体验,简化复杂Jenkins流水线故障排除

流水线是开发过程的关键组成部分&#xff0c;然而&#xff0c;在复杂的流水线中进行故障排除是一件耗时且繁琐的事情&#xff0c;特别是对于规模较大的公司而言。 这就是CloudBees Pipeline Explorer用武之处&#xff0c;它提供了一种简化且高效的流水线故障排除方法。 现有流…

win10脚本 | 使用 Word 自动化对象模型找出指定路径下含有特定内容的.docx

场景 今年的实验日志被我放在这样一个文件夹下&#xff0c;每个月下是每天具体的.docx文件&#xff0c;里面记录了我的一些实验操作步骤。现在我需要补充一个实验&#xff0c;用到一个名为chatunitest的插件&#xff0c;但是这是很久之前做的事情了&#xff0c;我无法判断是哪…

chronyc立即加载时间同步

不需要等待直接加载 chronyc makestep chronyc sources -v chronyd 服务正在使用的 NTP 源服务器的详细状态。这个命令会列出每个源服务器的 IP 地址&#xff0c;以及每个源服务器的状态和时间偏移量。通过这个命令&#xff0c;你可以看到你的系统是从哪些 NTP 服务器获取时间…

边缘智能网关如何应对环境污染难题

随着我国工业化、城镇化的深入推进&#xff0c;包括大气污染在内的环境污染防治压力继续加大。为应对环境污染防治难题&#xff0c;佰马综合边缘计算、物联网、智能感知等技术&#xff0c;基于边缘智能网关打造环境污染实时监测、预警及智能干预方案&#xff0c;可应用于大气保…

内网穿透的应用-如何结合Cpolar内网穿透工具实现在IDEA中远程访问家里或者公司的数据库

文章目录 1. 本地连接测试2. Windows安装Cpolar3. 配置Mysql公网地址4. IDEA远程连接Mysql小结 5. 固定连接公网地址6. 固定地址连接测试 IDEA作为Java开发最主力的工具&#xff0c;在开发过程中需要经常用到数据库&#xff0c;如Mysql数据库&#xff0c;但是在IDEA中只能连接本…

程序员考公笔记之逻辑判断(图形推理)

文章目录 写在前面1、逻辑判断1.1、图形推理1.1.1、位置类1.1.2、样式类1.1.3、数量类1.1.4、属性类1.1.5、六面体 写在前面 1、逻辑判断 1.1、图形推理 观察&#xff1a;先宏观&#xff0c;再微观 图形推理的命题形式&#xff1a; 一组式 观察路径&#xff1a;顺序看(考最…

解密防泄密成功密码:银行机构案例分享迅软DSE带你走过风险之路!

近日&#xff0c;央行发布了《中国人民银行业务领域数据安全管理办法&#xff08;征求意见稿&#xff09;》&#xff0c;旨在落实《数据安全法》有关要求&#xff0c;加强中国人民银行业务领域数据安全管理。 从银行业务领域来看&#xff0c;数据主要涉及各类市场交易数据、金…

MeterSphere实战(一)

MeterSphere是一位朋友讲到的测试平台&#xff0c;说这东西是开源的&#xff0c;因为我是做测试的&#xff0c;很乐意了解一些新鲜事物。在我看来&#xff0c;测试就是要专注一些领域&#xff0c;然后要啥都会一点点&#xff0c;接着融会贯通起来&#xff0c;这样就可以万变不离…

自定义类型详解(1)

文章目录 目录1. 结构体1.1 结构的基础知识1.2 结构的声明1.3 特殊的声明1.4 结构的自引用1.5 结构体变量的定义和初始化1.6 结构体内存对齐1.7 修改默认对齐数1.8 结构体传参 2. 位段2.1 什么是位段2.2 位段的内存分配2.3 位段的跨平台问题2.4 位段的应用 3. 枚举3.1 枚举类型…

vue2-elementUI部分组件样式修改

el-radio样式&#xff1a; /deep/ .el-radio__input .el-radio__inner {width: 20px;height: 20px;position: relative;cursor: pointer;-webkit-appearance: none;-moz-appearance: none;appearance: none;border: 1px solid #999;border-radius: 0;outline: none;transition…

亚马逊鲲鹏系统智能自动注册与AI角色养号,探索数字化新境界

在数字化时代&#xff0c;亚马逊鲲鹏系统以其强大的自动化功能&#xff0c;为用户提供了前所未有的购物体验。如果你想利用鲲鹏系统进行自动化注册&#xff0c;那么准备好邮箱、IP、手机号等关键信息后&#xff0c;你将轻松实现自动注册&#xff0c;为购物之旅开启智能化新篇章…

V2X全方位通信部署产品支持智能交通建设!

来源&#xff1a;德思特测试测量丨德思特案例 | V2X全方位通信部署产品支持智能交通建设&#xff01; 原文链接&#xff1a;https://mp.weixin.qq.com/s/Fhnvcq9HA60Sed5BIGcnSw 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; 01 案例背景 后疫情时代人们更注重于享…

CommonJs模块化实现原理ES Module模块化原理

CommonJs模块化实现原理 首先看一个案例 初始化项目 npm init npm i webpack -D目录结构如下&#xff1a; webpack.config.js const path require("path"); module.exports {mode: "development",entry: "./src/index.js",output: {path: p…