若依使用技巧

后端:sysUser 表

// 用户表主键叫 userId long 20 所以其他表关联用户表也是一样 userId long 20 创建新表一定要有自增id
// 新表只有content 是新增的 其他都是模板
CREATE TABLE `ln_maintain_records` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `userId` bigint(20) NOT NULL  COMMENT '用户id',
  `content` text COMMENT '内容',
  `status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)',
  `del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `user_id` bigint(20) DEFAULT NULL COMMENT '用户id',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
// sysUser增加属性如车牌号码
//server/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
 @Excel(name = "车牌号码")
 private String licensePlate; // get set
// server/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
// 需要添加的地方 id  SysUserResult  selectUserVo selectUserList selectAllocatedList

//更改用户 不要用 updateSysUser 会同时更改角色
updateUser // x
updateUserProfile // √

后台:多字段模糊搜索

    <select id="findUserInfoByKeyword" parameterType="String" resultMap="SysUserResult">
       SELECT user_id , user_name , nick_name , license_plate , car_wash_surplus , car_maintain_num
        FROM sys_user
        WHERE user_name LIKE CONCAT('%', #{keyword}, '%')
           OR nick_name LIKE CONCAT('%', #{keyword}, '%')
           OR license_plate LIKE CONCAT('%', #{keyword}, '%');
    </select>

后台:getinfo 需要更改

// server/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
SysUser user = SecurityUtils.getLoginUser().getUser();
Set<String> roles = permissionService.getRolePermission(user);
// 更改后  获取到最新的
LnUser lnUser = new LnUser();
lnUser.setUserId(user.getUserId());
List<LnUser> lnUsers = lnUserService.selectLnUserList(lnUser);

后台:新增认证方式

// server/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
 @Bean
    public AuthenticationManager authenticationManager()
    {
        // 默认
        DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider();
        daoAuthenticationProvider.setUserDetailsService(userDetailsService);
        daoAuthenticationProvider.setPasswordEncoder(bCryptPasswordEncoder());
        return new ProviderManager(daoAuthenticationProvider);

        // wx登陆鉴权 Provider
        WxCodeAuthenticationProvider wxCodeAuthenticationProvider = new WxCodeAuthenticationProvider();
        wxCodeAuthenticationProvider.setUserDetailsService(userDetailsServiceByOpenId);
        List<AuthenticationProvider> providers = new ArrayList<>();

        providers.add(wxCodeAuthenticationProvider);
        providers.add(daoAuthenticationProvider);
        return new ProviderManager(providers);
    }

// 重点是userDetailsServiceByOpenId类的实现
// server/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
// 使用方法默认
// 将账号和密码封装成一个对象
UsernamePasswordAuthenticationToken authenticationToken = new
UsernamePasswordAuthenticationToken(username, password);
// 将这个账号密码 推入到认证的对象上
AuthenticationContextHolder.setContext(authenticationToken);
// 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
// 将账号和密码进行验证
authentication = authenticationManager.authenticate(authenticationToken);

// 使用方法-新的方法
 authentication = authenticationManager.authenticate(new WxCodeAuthenticationToken(username));

app:储存

// constant.js
const constant = {
   avatar: 'vuex_avatar',
   name: 'vuex_name',
   roles: 'vuex_roles',
   permissions: 'vuex_permissions',

   user:"vuex_user",

 }
 // strage.js
// 存储节点变量名
let storageNodeKeys = [constant.avatar, constant.name, constant.roles, constant.permissions,constant.user]

后端:处理复杂的 json

// 可使用JSONObject
// 比较重要两个方法 碧
public JSONArray getJSONArray(String key)
public JSONObject getJSONObject(String key)
//使用示例
JSONObject resultObj = JSONObject.parseObject(postResult);
String phoneNumber = resultObj.getJSONObject("phone_info").getString("phoneNumber");

后端:添加 lombok

// server/ruoyi-common/pom.xml
 <dependency>
     <groupId>org.projectlombok</groupId>
     <artifactId>lombok</artifactId>
 </dependency>

app:快速刷新

// wechat/store/modules/user.js
refreshList:{}
mutations: {
	  SET_REFRESH:(state,parm)=>{ // parm {页面,是否需要刷新}
		  state.refreshList[parm.page] = page.isFresh;
	  },
      }
      // 跳转之前的页面
       store.dispath("SET_REFRESH",{page:'B',false})
      // 跳转之后的页面
      onshow(){
        if(store.refreshList.A){
            this.getList();
            store.dispath("SET_REFRESH",{page:'A',false})
        }
      }

app:请求处理

// 由于在 wechat/utils/request.js 文件中已经处理了 请求失败的弹窗,所以不用在页面请求的时候在catch请求了
if (code === 401) {
  showConfirm("登录状态已过期,您可以继续留在该页面,或者重新登录?").then(
    (res) => {
      if (res.confirm) {
        store.dispatch("LogOut").then((res) => {
          uni.reLaunch({ url: "/pages/login" });
        });
      }
    }
  );
  store.dispatch("LogOut");
  toast("登录状态已过期");
  reject("无效的会话,或者会话已过期,请重新登录。");
}
// 更改为
if (code === 401) {
  store.dispatch("LogOut");
  // 判断是否跳回登录页面
  toast("登录状态已过期");
  reject("无效的会话,或者会话已过期,请重新登录。");
}

app:v-for 对象改键值

// {key:value}  转成[[key,value],[key,value],...]
<view v-for="(item,index) in obj" :key="index">
			<uni-easyinput  v-model="item[0]" placeholder="" />
			<uni-easyinput  v-model="item[1]" placeholder="" />
</view>

后端:A返回不需要分页,直接返回全数据

class A {
    private boolean returnAll;// get  set 
    // 与上面相似 如果A中需要带B类 
    private B b; // get set
    private boolean hasB;
}
// controller
 public TableDataInfo list(A A) {

        if (A.isReturnAll()) {
            return getDataTable(AService.selectAList(A));
        } else {
            startPage();
            List<A> list = AService.selectAList(A);
            return getDataTable(list);
        }

    }
// SeviceImp
 @Override
    public List<A> selectAList(A A)
    {
        List<A> A1 = AMapper.selectAList(A);
        if(A.isHasB()){
            for(A A2 : A1){
                B B = BService.selectUserById(A2.getUserId());
                A2.setB(B);
            }
        }
        return A1;
    }

后端:直接通过后端接口访问vue编译后的文件

// router/index
export default new Router({
  mode: 'hash', // 改为hash
  scrollBehavior: () => ({ y: 0 }),
  routes: constantRoutes
})
// .env.production
# 若依管理系统/生产环境
# VUE_APP_BASE_API = '/prod-api'
VUE_APP_BASE_API = '/fixshop'
// vue.config.js
module.exports = {
  // 部署生产环境和开发环境下的URL。
  // 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上
  // 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
 publicPath: process.env.NODE_ENV === "production" ? "/fixshop/WEB/" : "/",
  // 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist)
  outputDir: './../ruoyi-admin/src/main/resources/public/WEB',
// server/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java

 .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**","/WEB/**").permitAll()

@Controller
public class WEBIndexController {

    @GetMapping("/WEB")
    public String index() {
        return "forward:/WEB/index.html";
    }
}

nginx /fixshop重定向后台服务
访问logo
http://ip/fixshop/WEB/static/img/logo.4eeb8a8e.png
访问接口
http://ip/fixshop/getInfo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值