一、构建父子工程

<groupId>com.ruoyi</groupId>
<artifactId>ruoyi</artifactId>
<version>3.8.5</version>
<modules>
    <module>ruoyi-admin</module>
    <module>ruoyi-framework</module>
    <module>ruoyi-system</module>
    <module>ruoyi-quartz</module>
    <module>ruoyi-generator</module>
    <module>ruoyi-common</module>
</modules>

孩子

//设置父亲
<parent>
    <artifactId>ruoyi</artifactId>
    <groupId>com.ruoyi</groupId>
    <version>3.8.5</version>
</parent>
//孩子定义
<artifactId>ruoyi-system</artifactId>
<modelVersion>4.0.0</modelVersion>
//引用其它模块
<dependency>
    <groupId>com.ruoyi</groupId>
    <artifactId>ruoyi-common</artifactId>
</dependency>

分页

startPage()只对该语句以后的第一个查询(Select)语句得到的数据进行分页。

startPage();
List<SysUser> list = userService.selectUserList(user);

下拉框选择

多选

<el-form-item label="归属机构" prop="deptId">
              <treeselect 
                          v-model="form.deptId" 
                          :options="deptOptions" 
                          :show-count="true" placeholder="请选择归属机构" 				    						  @select="selectKsbms" />
</el-form-item>
<el-form-item label="选择科室">
              <el-select v-model="form.ksbms" multiple placeholder="请选择科室">
                <el-option
                  v-for="item in ksbmOptions"
                  :key="item.ksbm"
                  :label="item.ksmc"
                  :value="item.ksbm"
                  :disabled="item.status == 1"
                ></el-option>
              </el-select>
</el-form-item>

js

      // 岗位选项
      postOptions: [],
      // 角色选项
      roleOptions: [],
      // 科室选项
      ksbmOptions: [],
this.form = {
        postIds: [],
        roleIds: [],
        ksbms:[]
      };
/** 机构下的所有科室 */
    selectKsbms(node) {
      const deptId = node.id;
      listKsbmkByDeptId(deptId).then(response => {
        this.ksbmOptions = response.rows;
        }
      );
    }

根据用户名更新下拉框

//data中
// 科室选项
ksbmOptions: [],
//from表单
loginForm: {
  ksbm:""
},
//方法
// 下拉框之前获取用户的科室信息并设置第一个为默认选择
    inputChange(){
      const userName = this.loginForm.username;
      listKsbmkByUserName(userName).then(response => {
        this.ksbmOptions = response.rows;
        if(this.ksbmOptions.length === 0){
          this.loginForm.ksbm = "";
        }else{
          this.loginForm.ksbm = this.ksbmOptions[0].ksbm;
        }
        }
      );
    },
    seletChange(){
      this.$forceUpdate();
    }

组件

<el-form-item prop="username">
        <el-input
          v-model="loginForm.username"
          type="text"
          auto-complete="off"
          placeholder="请输入账户或选择账户"
          @change="inputChange"
        >
        <img :src="user" slot="prefix" class="user" alt="user">
        </el-input>
</el-form-item>
<el-form-item >
        <el-select v-model="loginForm.ksbm" placeholder="请选择科室" @change="seletChange">
          <template slot="prefix">
            <img :src="department" slot="prefix" class="user" alt="department">
          </template>
          <el-option
            v-for="item in ksbmOptions"
            :key="item.ksbm"
            :label="item.ksmc"
            :value="item.ksbm"
          ></el-option>
        </el-select>
</el-form-item>

前后端分离设置匿名访问

前端:url请求设置没有token,白名单添加url

后端: controller层接口设置无权限访问,权限config类设置url匿名访问

前后端分离登录之后,前端保存登录信息

https://blog.csdn.net/qq_60668274/article/details/131166072

面包屑

 //切换科室之后关闭所有页面回到首页
    submitForm(){
      store.state.user.ksbm = this.form.ksbm;
      this.mainTabs = [];
      this.menuActiveName = '';
      this.$router.push("/index");
      this.closeAllTags();
    },
    //关闭所有面包屑标签
    closeAllTags() {
      store.state.tagsView.visitedViews = [];
    }

点击下拉框弹出弹出框

父组件

<el-dropdown-item @click.native="changeKsbmHandle()">切换科室</el-dropdown-item>
  <!-- 组件使用子组件, ChangeKsbm vue命名转换change-ksbm  ref规定在本组件中用changeKsbm访问-->
<change-ksbm v-if="changeKsbmVisible" ref="changeKsbm"></change-ksbm>

//组件映入子组件
import ChangeKsbm from './changeKsbm'
export default {
  //组件映入子组件
  components: {
    ChangeKsbm
  },
  data() {
    return {
      // 是否显示切换科室弹出层
      changeKsbmVisible: false
    }
  },
  methods:{
    changeKsbmHandle(){
      // 显示切换科室编码弹出框
      this.changeKsbmVisible = true
      this.$nextTick(() => {
          //调用使用组件的init方法
        this.$refs.changeKsbm.init()
      })
    }
  }
}

input输入框验证

data() {
    //检查是不是数字
    const isNum = (rule, value, callback) => {
        const num= /^[0-9]*$/
        if (!num.test(value)) {
          callback(new Error('只能输入整数'));
        }else{
          callback();
        }
      }
    // 检查CODE是否存在
    const checkCode = (rule, value, callback) => {
      if(this.flag == 1){
        const CODE = this.form.CODE;
        getSYPC(CODE).then(response => {
          if(response.data == null){
            callback();
          }else{
            callback(new Error("代码已经存在"));
          }
        });
      }else {
        callback();
      }
    }
}

rules: {
        CODE: [
          { required: true, message: "代码不能为空",trigger: "blur"},
          { required: true,validator: checkCode, trigger: "blur"}
        ],
        NAME: [
          { required: true, message: "名称不能为空", trigger: "blur"}
        ],
        MRCS: [
          { required: true, message: "只能输入整数",trigger: "blur"},
          { required: true,validator: isNum, trigger: "blur"}
        ],
}

表单一行占三个

<el-form ref="form" :model="form" :rules="rules" label-width="80px">
        <el-row>
          <el-col :span="8">
            <el-form-item label="代码" prop="CODE">
              <el-input v-model="form.CODE" placeholder="请输入代码" :disabled="inputState" />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="名称" prop="NAME">
              <el-input v-model="form.NAME" placeholder="请输入名称" />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="每日次数" prop="MRCS">
              <el-input v-model.number="form.MRCS"
                        type="number"
                        placeholder="请输入每日次数" />
            </el-form-item>
          </el-col>
        </el-row>
 </el-form>

计算与监听

计算data中的值

computed: {
    "计算属性名": {
        set(){
            
        },
        get(){
            return}
    }
 }
//其它引用计算属性名

监听

watch:{
	属性:'监听方法',
    //监听输入值变化
    inputValue:{
        handler(newName, oldName){
            this.watchInputValue = newName
        }
    }
}

new Vue({
  el: '#root',
  data: {
    cityName: 'shanghai'
  },
  watch: {
    cityName(newName, oldName) {
      // ...
    }
  } 
})

::inline=“true”

当垂直方向空间受限且表单较简单时,可以在一行内放置表单。

通过设置 inline 属性为 true 可以让表单域变为行内的表单域。

v-hasPermi=“[‘system:user:remove’]”

有权限才显示

ref本页面获取demo元素

<template>
  <div id="app">
    <div ref="testDom">11111</div>
    <button @click="getTest">获取test节点</button>
  </div>
</template>

<script>
export default {
  methods: {
    getTest() {
      console.log(this.$refs.testDom)
    }
  }
};
</script>

ref获取子组件的data数据

子组件

<template>
  <div>
      {{ msg }}
  </div>
</template>

<script>
export default {
  data() {
    return {
      msg: "hello world"
    }
  }
}
</script>

父组件

<template>
  <div id="app">
    //使用子组件,定义子组件响应式为hello
    <HelloWorld ref="hello"/>
    <button @click="getHello">获取helloworld组件中的值</button>
  </div>
</template>

<script>
//导入子组件
import HelloWorld from "./components/HelloWorld.vue";

export default {
  //使用
  components: {
    HelloWorld
  },
  data() {
    return {}
  },
  methods: {
    getHello() {
      //获得子组件data中名字为msg的数据
      console.log(this.$refs.hello.msg)
    }
  }
};
</script>

ref父组件调用子组件的方法

子组件

<template>
  <div id="app">
    <HelloWorld ref="hello"/>
    <button @click="getHello">获取helloworld组件中的值</button>
  </div>
</template>

<script>
import HelloWorld from "./components/HelloWorld.vue";

export default {
  components: {
    HelloWorld
  },
  data() {
    return {}
  },
  methods: {
    getHello() {
      console.log(this.$refs.hello.msg)
    }
  }
};
</script>

父组件

<template>
  <div id="app">
    <HelloWorld ref="hello"/>
    <button @click="getHello">获取helloworld组件中的值</button>
  </div>
</template>

<script>
import HelloWorld from "./components/HelloWorld.vue";

export default {
  components: {
    HelloWorld
  },
  data() {
    return {}
  },
  methods: {
    getHello() {
      this.$refs.hello.open();
    }
  }
};
</script>

子组件调用父组件

子组件

<template>
  <div>
</div>
</template>

<script>
export default {
  methods: {
    open() {
      console.log("调用了");
      //  调用父组件方法
      this.$emit("refreshData");
    }
  }
}
</script>

父组件

<template>
  <div id="app">
      //@refreshData定义给子组件调用的方法名 getData子组件具体调用父组件的方法名
    <HelloWorld ref="hello" @refreshData="getData"/>
    <button @click="getHello">获取helloworld组件中的值</button>
  </div>
</template>

<script>
import HelloWorld from "./components/HelloWorld.vue";

export default {
  components: {
    HelloWorld
  },
  data() {
    return {}
  },
  methods: {
    getHello() {
      this.$refs.hello.open()
    },
    getData() {
      console.log('111111')
    }
  }
};
</script>

el-table,:show-overflow-tooltip=“true“

当el-tabel中的内容过长,用省略号显示

v-bind = :

v-on = @

syns父子组件之间的数据双向绑定

子组件修改父组件的值

父组件

//将父组件名字为numParent的data传递给子组件名为mum
<child :num.sync="numParent">

子组件

props:['num'],
methods:{
    changeNumber(){
        this.$emit('updata:num',修改之后的值)
    }
}

属性对应

prop中的name与rolue中的name对应

<el-form-item label="名称" prop="name">
    <el-input v-model="form.name" placeholder="请输入名称" />
</el-form-item>
 rules: {
    name: [
        { required: true, message: "名称不能为空", trigger: "blur" }
    ],

}

模糊查询

CODE like concat('%', #{CODE}, '%') //sqlserve 2008
CODE like '%'+#{CODE}+'%'           //高版本

VUE生命周期

创建

beforeCreate

实例已经初始化,获取不到DOM节点,拿不到data,methods

created

实例已经创建,获取不到DOM节点,可以使用data,methods,没有el

挂载

beforeMount

挂载节点已经创建、有el

mounted

DOM已经被渲染出来

更新

beforeUpdate

检测到数据更新,在DOM更新之前执行

updated

更新结束后执行,需要对数据更新做统一处理的;如果需要区分不同的数据更新操作可以使用$nextTick

销毁

beforeDestroy

当要销毁vue实例时,在销毁前执行

destroyed

销毁vue实例时执行

数据库设计主键自动增加

删除原来表,重新建立

当 IDENTITY_INSERT 设置为 OFF 时,不能为表 ‘ZY_YPYF’ 中的标识列插入显式值。

插入时候不能插入主键值

Treeselect不显示

引入

import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
components: { Treeselect },

使用

<treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" placeholder="请选择归属机构" />

绑定值

在使用el-select组件的时候,el-option选项中的label和value的值分别是对应的,但是value的值需要在传参的时候,需要的是数字,不是字符串。

<el-option label="数字1" :value="1"></el-option>
<el-option label="字符串" value="2"></el-option>

表单验证

  this.$refs["form"].validate(valid => {
        if (valid) {
这段代码是一个表单验证的示例。当调用 this.$refs["form"].validate 方法时,它会验证表单中的输入是否符合预设的规则。如果验证通过,就会执行回调函数中的代码。

在这个回调函数中,valid 参数表示表单是否通过验证。如果 valid 的值为 true,则表示表单验证通过,可以执行下一步操作,比如提交表单或显示成功消息。如果 valid 的值为 false,则表示表单验证失败,需要显示错误消息或阻止表单提交。

vue页面宽度

vue 弹出层页面宽度不够,会造成布局混乱

报错

将截断字符串或二进制数据:输入的数据长度大于数据库规定的

远程下拉框

<el-form-item label="药品编码" prop="yYpbm">
<!--              <el-input v-model="form.yYpbm" placeholder="请输入药品编码" />-->
              <el-select
                v-model="form.yYpbm"
                multiple
                filterable
                remote
                reserve-keyword
                placeholder="请输入药品编码"
                :remote-method="remoteMethod"
                :loading="optionLoading">
                <el-option
                  v-for="item in hxyfOptions"
                  :key="item.hRowid"
                  :label="item.yYpmc"
                  :value="item.yYpmc">
                  <span style="float: left">{{ item.yYpbm }}</span>
                  <span style="float: right; color: #8492a6; font-size: 13px">{{ item.yYpmc }}</span>
                </el-option>
              </el-select>
            </el-form-item>
data:
return{
      //现有库存表
      hxyfOptions:[],
}
methods:{
    /** 输入药品编码获得药房药品 */
    remoteMethod(key){
      const num= /(^[0-9]+(.[0-9]{1,})?$)|(^[0-9]*$)/
      if (!num.test(key)) {
        this.$modal.msgWarning("药品编码只能输入数字");
      }else{
        this.optionLoading = true;
        listXyfYpbm(this.$store.state.user.deptId,key).then(response => {
            this.optionLoading = false;
            //有不同批号的药品
            this.hxyfOptions = response.data;
          }
        );
      }
    }
}

输入框输入点击回车事件

@keyup.enter.native="handleQuery"

数据表条件判断

<el-table-column label="标志" width="100" align="center" >
  <template slot-scope="scope">
    <span v-if="scope.row.hCk == 0">入库</span>
    <span v-else>出库</span>
  </template>
</el-table-column>

可编辑表格

 <el-dialog title="添加出入库" :visible.sync="addOpen" width="1300px" append-to-body>
      <el-form :model="addForm"  label-width="68px">
        <el-row>
          <el-col :span="6">
            <el-form-item label="标志" prop="hCk">
              <el-radio-group v-model="addForm.hCk">
                <el-radio :label="1">出库</el-radio>
                <el-radio :label="0">入库</el-radio>
              </el-radio-group>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="往来单位" prop="wlDwmc">
              <el-select v-model="addForm.wlDwmc"
                         filterable
                         placeholder="请选择往来单位" >
                <el-option
                  v-for="item in ksbmOptions"
                  :key="item.ksbm"
                  :label="item.ksmc"
                  :value="item.ksbm"
                ></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="入出摘要" prop="hPzzy">
              <el-select v-model="addForm.hPzzy"
                         filterable
                         placeholder="请选择入出摘要" >
                <el-option
                  v-for="item in rczyOptions"
                  :key="item.bm"
                  :label="item.mc"
                  :value="item.bm"
                ></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-button
              type="primary"
              plain
              icon="el-icon-plus"
              size="mini"
              @click="addLine"
              v-hasPermi="['yf:crk:add']"
            >新增</el-button>
            <el-button
              type="primary"
              plain
              icon="el-icon-plus"
              size="mini"
              @click="handleSave"
              v-hasPermi="['yf:crk:add']"
            >保存</el-button>
          </el-col>
        </el-row>
      </el-form>
      <el-table v-loading="loading" :data="addCrkTempList" @selection-change="handleSelectionChange">
        <el-table-column type="selection" width="55" align="center" />
        <el-table-column label="标志" width="100" align="center" >
          <template slot-scope="scope">
            <span v-if="scope.row.hCk == 0">入库</span>
            <span v-else>出库</span>
          </template>
        </el-table-column>
        <el-table-column label="药品编码" width="180" align="center" >
          <template slot-scope="scope">
            <el-input v-if="scope.row.showInput" width="160" v-model="scope.row.yYpbm"  @keyup.enter.native="handleSelect(scope.row)"/>
          </template>
        </el-table-column>
        <el-table-column label="药品名称" align="center" prop="yYpmc" />
        <el-table-column label="规格" align="center" prop="yYpgg" />
        <el-table-column label="零售价" align="center" prop="hCrdj" />
        <el-table-column label="进价" align="center" prop="yCrjj" />
        <el-table-column label="出入数量" width="100" align="center" prop="hCrsl" >
          <template slot-scope="scope">
            <input v-if="scope.row.showInput" width="80" type="number" v-model="scope.row.hCrsl"  />
          </template>
        </el-table-column>
        <el-table-column label="单位" align="center" prop="yDw" />
        <el-table-column label="分装数量" align="center" prop="yDwsl" />
        <el-table-column label="科室编码" align="center" prop="ksbm" />
        <el-table-column label="往来单位名称" width="100" align="center" prop="wlDwmc" />
        <el-table-column label="出入日期" align="center" prop="hCrrq" width="200">
          <template slot-scope="scope">
            <el-date-picker clearable
                            v-model="scope.row.hCrrq"
                            type="datetime"
                            value-format="yyyy-MM-dd HH:mm:ss"
                            placeholder="请选择出入日期">
            </el-date-picker>
          </template>
        </el-table-column>
        <el-table-column label="帐套日期" align="center" prop="rbrq" width="180">
          <template slot-scope="scope">
            <span>{{ parseTime(scope.row.rbrq, '{y}-{m}-{d}') }}</span>
          </template>
        </el-table-column>
        <el-table-column label="操作员" width="100" align="center" prop="czy" />
        <el-table-column label="单位编码" align="center" prop="yDwbm" />
        <el-table-column label="批价" align="center" prop="yYppj" />
        <el-table-column label="上传标识" align="center" prop="datatran" />
        <el-table-column label="核对凭证号" width="200" align="center" prop="hHdpzh" />
        <el-table-column label="凭证摘要" width="100" align="center" prop="hPzzy" />
        <el-table-column label="产地编码" align="center" prop="yCdbm" />
        <el-table-column label="批号" align="center" prop="yYpph" />
        <el-table-column label="个人编码" align="center" prop="grbm" />
        <el-table-column label="处方号" align="center" prop="hCfh" />
        <el-table-column label="种类" width="100" align="center" prop="yZlmc"  >
          <template slot-scope="scope">
            <el-select v-if="scope.row.showInput" filterable clearable v-model="scope.row.yZlmc"  placeholder="请选择种类">
              <el-option
                v-for="item in ypzlOptions"
                :key="item.id"
                :label="item.name"
                :value="item.id">
              </el-option>
            </el-select>
          </template>
        </el-table-column>
        <el-table-column label="剂型" width="100" align="center" >
          <template slot-scope="scope">
            <el-select v-if="scope.row.showInput" filterable clearable v-model="scope.row.yJxmc"  placeholder="请选择剂型">
              <el-option
                v-for="item in ypjxOptions"
                :key="item.id"
                :label="item.name"
                :value="item.id">
              </el-option>
            </el-select>
          </template>
        </el-table-column>
        <el-table-column label="功效" width="100" align="center" >
          <template slot-scope="scope">
            <el-select v-if="scope.row.showInput" filterable clearable v-model="scope.row.yGxmc"  placeholder="请选择功效">
              <el-option
                v-for="item in ypgxOptions"
                :key="item.id"
                :label="item.name"
                :value="item.id">
              </el-option>
            </el-select>
          </template>
        </el-table-column>
        <el-table-column label="药房" width="100" align="center" prop="yYfmc" >
          <template slot-scope="scope">
            <el-select v-if="scope.row.showInput" filterable clearable v-model="scope.row.yYfmc" placeholder="请选择药房">
              <el-option
                v-for="item in yfOptions"
                :key="item.id"
                :label="item.name"
                :value="item.id">
              </el-option>
            </el-select>
          </template>
        </el-table-column>
        <el-table-column label="库存ID" align="center" prop="hRowid" />
        <el-table-column label="有效日期" align="center" prop="yYxrq" width="180">
          <template slot-scope="scope">
            <span>{{ parseTime(scope.row.yYxrq, '{y}-{m}-{d}') }}</span>
          </template>
        </el-table-column>
        <el-table-column label="机构ID" align="center" prop="deptId" />
        <el-table-column label="操作" align="center" width="180" class-name="small-padding fixed-width">
          <template slot-scope="scope">
            <el-button
              size="mini"
              type="text"
              icon="el-icon-delete"
              @click="handleDelete(scope.row)"
              v-hasPermi="['yf:crk:remove']"
            >删除</el-button>
          </template>
        </el-table-column>
      </el-table>
    </el-dialog>

方法

/* 新增一行 */
    addLine(){
      const wldw = this.addForm.wlDwmc;
      if(wldw==null || wldw == ""){
        this.$modal.msgWarning("来往单位没有选择,不能新增!");
        return;
      }
      this.addCrkTempList.push({
        line:++this.i,
        showInput:true,
        hCk:this.addForm.hCk,
        wlDwmc:this.addForm.wlDwmc,
        czy:this.$store.state.user.name,
        hPzzy:this.addForm.hPzzy,
        ksbm:this.addForm.wlDwmc,
      })
    },

数据字典使用

引入

dicts: ['ks_lv','KSBM'],
<ta-select-option v-for="item in dict.type.KSBM" :key="item.ksbm" :value="item.ksbm">{{item.ksbm}}</ta-select-option>

使用

          <el-form-item label="科室统计级别" prop="ksJb">
            <el-select  placeholder="请选择" style="width: 240px;"  v-model="queryParams.ksJb">
                <el-option v-for="item in dict.type.ks_lv" :key="item.value" :value="item.value" :label="item.label"/>
              </el-select>
          </el-form-item>

动态表格

<template>
  <div class="app-container">
    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
      <el-form-item label="核对凭证号" prop="hHdpzh">
        <el-input
          v-model="queryParams.hHdpzh"
          placeholder="核对凭证号"
          clearable
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
      <el-form-item label="操作员" prop="czy">
        <el-input
          v-model="queryParams.czy"
          placeholder="操作员"
          clearable
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
      <el-form-item>
        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
      </el-form-item>
    </el-form>

    <el-row :gutter="10" class="mb8">
      <el-col :span="1.5">
        <el-button
          type="primary"
          plain
          icon="el-icon-plus"
          size="mini"
          @click="handleAdd"
          v-hasPermi="['yf:crk:add']"
        >新增</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="danger"
          plain
          icon="el-icon-delete"
          size="mini"
          :disabled="multiple"
          @click="handleDelete"
          v-hasPermi="['yf:crk:remove']"
        >删除</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="warning"
          plain
          icon="el-icon-download"
          size="mini"
          @click="handleExport"
          v-hasPermi="['yf:crk:export']"
        >导出</el-button>
      </el-col>
      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
    </el-row>

    <el-table v-loading="loading" :data="crkList" @selection-change="handleSelectionChange">
      <el-table-column type="selection" width="55" align="center" />
      <el-table-column label="核对凭证号" align="center" prop="hHdpzh" />
      <el-table-column label="数量" align="center" prop="hcrkCount" />
      <el-table-column label="单价总和" align="center" prop="djSum" />
      <el-table-column label="进价总和" align="center" prop="jjSum" />
      <el-table-column label="操作员" align="center" prop="czy" />
      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
        <template slot-scope="scope">
          <el-button
            size="mini"
            type="text"
            icon="el-icon-edit"
            @click="handleDetil(scope.row)"
            v-hasPermi="['yf:crk:edit']"
          >详情</el-button>
        </template>
      </el-table-column>
    </el-table>

    <pagination
      v-show="total>0"
      :total="total"
      :page.sync="queryParams.pageNum"
      :limit.sync="queryParams.pageSize"
      @pagination="getList"
    />

    <!-- 显示药房药品 -->
    <el-dialog title="选择药品" :visible.sync="yfDialogopen" width="1400px" append-to-body @close="yfDialogClose">

      <el-table v-loading="yfLoading" :data="xyfList"
                highlight-current-row
                @current-change="handleCurrentChange">
        <el-table-column label="药品编码" align="center" prop="yYpbm" />
        <el-table-column label="药品名称" align="center" prop="yYpmc" />
        <el-table-column label="规格" align="center" prop="yYpgg" />
        <el-table-column label="当前库存" align="center" prop="hKc" >
        </el-table-column>
        <el-table-column label="单位" align="center" prop="dqDw" >
          <template slot-scope="scope">
            <span v-if="scope.row.yDwsl == 1">{{ scope.row.ypDdw }}</span>
            <span v-else>{{ scope.row.ypXdw }}</span>
          </template>
        </el-table-column>
        <el-table-column label="零售价" align="center" prop="hDj" />
        <el-table-column label="产地" align="center" prop="cdmc" />
        <el-table-column label="批号" align="center" prop="yYpph" />
        <el-table-column label="库存ID" align="center" prop="hRowid" />
        <el-table-column label="有效日期" align="center" prop="yYxrq" />
        <el-table-column label="记录状态" align="center" prop="stop" >
          <template slot-scope="scope">
            <span v-if="scope.row.stop == 0">使用中</span>
            <span v-else>停用</span>
          </template>
        </el-table-column>
      </el-table>
      <pagination
        v-show="xyfTotal>0"
        :total="xyfTotal"
        :page.sync="queryParamsYf.pageNum"
        :limit.sync="queryParamsYf.pageSize"
        @pagination="getXyList"
      />
    </el-dialog>

    <el-dialog title="出入库详情" :visible.sync="detilOpen" width="1300px" append-to-body>
      <el-table v-loading="loadingDetil" :data="crkListDetil" >
        <el-table-column label="药品编码" width="100" align="center" prop="yYpbm" />
        <el-table-column label="出入单价" align="center" prop="hCrdj" />
        <el-table-column label="出入进价" align="center" prop="yCrjj" />
        <el-table-column label="出入数量" align="center" prop="hCrsl" />
        <el-table-column label="出入日期" align="center" prop="hCrrq" width="180">
          <template slot-scope="scope">
            <span>{{ parseTime(scope.row.hCrrq, '{y}-{m}-{d}') }}</span>
          </template>
        </el-table-column>
        <el-table-column label="出入标识" width="160" align="center" prop="hCk" >
          <template slot-scope="scope">
            <span v-if="scope.row.hCk == 0">入库</span>
            <span v-else>出库</span>
          </template>
        </el-table-column>
        <el-table-column label="药房" align="center" prop="hYfmc" />
        <el-table-column label="出入核对" align="center" prop="hCrhd" />
        <el-table-column label="分装数量" align="center" prop="yDwsl" />
        <el-table-column label="单位编码" align="center" prop="yDwbm" />
        <el-table-column label="科室编码" align="center" prop="ksbm" />
        <el-table-column label="单位" align="center" prop="yDw" />
        <el-table-column label="操作员" width= "100" align="center" prop="czy" />
        <el-table-column label="帐套日期" align="center" prop="rbrq" width="180">
          <template slot-scope="scope">
            <span>{{ parseTime(scope.row.rbrq, '{y}-{m}-{d}') }}</span>
          </template>
        </el-table-column>
        <el-table-column label="盘点标识" align="center" prop="yPdlr" />
        <el-table-column label="批价" align="center" prop="yYppj" />
        <el-table-column label="上传标识" align="center" prop="datatran" />
        <el-table-column label="核对凭证号" width="200" align="center" prop="hHdpzh" />
        <el-table-column label="产地编码" align="center" prop="yCdbm" />
        <el-table-column label="批号" align="center" prop="yYpph" />
        <el-table-column label="药品柜" align="center" prop="yphgh" />
        <el-table-column label="药品名称" width= "200" align="center" prop="yYpmc" />
        <el-table-column label="规格" width= "200" align="center" prop="yYpgg" />
        <el-table-column label="凭证摘要" align="center" prop="hPzzy" />
        <el-table-column label="个人编码" align="center" prop="grbm" />
        <el-table-column label="处方号" align="center" prop="hCfh" />
        <el-table-column label="往来单位名称" width="200" align="center" prop="wlDwmc" />
        <el-table-column label="种类" align="center" prop="yZlmc" />
        <el-table-column label="剂型" align="center" prop="yJxmc" />
        <el-table-column label="功效" align="center" prop="yGxmc" />
        <el-table-column label="库存ID" align="center" prop="hRowid" />
        <el-table-column label="有效日期" align="center" prop="yYxrq" width="180">
          <template slot-scope="scope">
            <span>{{ parseTime(scope.row.yYxrq, '{y}-{m}-{d}') }}</span>
          </template>
        </el-table-column>
        <el-table-column label="机构ID" align="center" prop="deptId" />
      </el-table>
    </el-dialog>

    <el-dialog title="添加出入库" :visible.sync="addOpen" width="1300px" height="800px" append-to-body @close="addDialogClose">
      <el-form :model="addForm"  label-width="68px">
        <el-row>
          <el-col :span="6">
            <el-form-item label="标志" prop="hCk">
              <el-radio-group v-model="addForm.hCk">
                <el-radio :label="1">出库</el-radio>
                <el-radio :label="0">入库</el-radio>
              </el-radio-group>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="往来单位" prop="ksbm">
              <el-select v-model="addForm.ksbm"
                         filterable
                         placeholder="请选择往来单位"
                         @change="setWldwmc">
                <el-option
                  v-for="item in dict.type.KSBM"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                ></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="入出摘要" prop="hPzzy">
              <el-select v-model="addForm.hPzzy"
                         filterable
                         placeholder="请选择入出摘要"
                         @change="setYpzl">
                <el-option
                  v-for="item in rczyOptions"
                  :key="item.bm"
                  :label="item.mc"
                  :value="item.bm"
                ></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-button
              type="primary"
              plain
              icon="el-icon-plus"
              size="mini"
              @click="addLine"
              v-hasPermi="['yf:crk:add']"
            >新增</el-button>
            <el-button
              type="primary"
              plain
              icon="el-icon-plus"
              size="mini"
              @click="handleSave"
              v-hasPermi="['yf:crk:add']"
            >保存</el-button>
          </el-col>
        </el-row>
      </el-form>
      <el-table v-loading="loading" :data="addCrkTempList" @selection-change="handleSelectionChange">
        <el-table-column type="selection" width="55" align="center" />
        <el-table-column label="标志" width="100" align="center" >
          <template slot-scope="scope">
            <span v-if="scope.row.hCk == 0">入库</span>
            <span v-else>出库</span>
          </template>
        </el-table-column>
        <el-table-column label="药品编码" width="180" align="center" >
          <template slot-scope="scope">
            <el-input v-if="scope.row.showInput" width="160" v-model="scope.row.yYpbm"  @keyup.enter.native="getYp(scope.row)"/>
          </template>
        </el-table-column>
        <el-table-column label="药品名称" width="150" align="center" prop="yYpmc" />
        <el-table-column label="规格" width="150" align="center" prop="yYpgg" />
        <el-table-column label="零售价" align="center" prop="hCrdj" />
        <el-table-column label="进价" align="center" prop="yCrjj" />
        <el-table-column label="出入数量" width="100" align="center" prop="hCrsl" >
          <template slot-scope="scope">
            <el-input v-if="scope.row.showInput" width="80" type="number" v-model="scope.row.hCrsl"
                      onKeypress="return(/^[0-9]*$/.test(String.fromCharCode(event.keyCode)))" />
          </template>
        </el-table-column>
        <el-table-column label="单位" align="center" prop="yDw" />
        <el-table-column label="分装数量" align="center" prop="yDwsl" />
        <el-table-column label="科室编码" align="center" prop="ksbm" />
        <el-table-column label="往来单位名称" width="100" align="center" prop="wlDwmc" />
        <el-table-column label="出入日期" align="center" prop="hCrrq" width="200">
          <template slot-scope="scope">
            <el-date-picker clearable
                            v-model="scope.row.hCrrq"
                            type="datetime"
                            value-format="yyyy-MM-dd HH:mm:ss"
                            placeholder="请选择出入日期">
            </el-date-picker>
          </template>
        </el-table-column>
        <el-table-column label="帐套日期" align="center" prop="rbrq" width="180">
          <template slot-scope="scope">
            <span>{{ parseTime(scope.row.rbrq, '{y}-{m}-{d}') }}</span>
          </template>
        </el-table-column>
        <el-table-column label="操作员" width="100" align="center" prop="czy" />
        <el-table-column label="单位编码" align="center" prop="yDwbm" />
        <el-table-column label="批价" align="center" prop="yYppj" />
        <el-table-column label="上传标识" align="center" prop="datatran" />
        <el-table-column label="核对凭证号" width="200" align="center" prop="hHdpzh" />
        <el-table-column label="凭证摘要" width="100" align="center" prop="hPzzy" />
        <el-table-column label="产地编码" align="center" prop="yCdbm" />
        <el-table-column label="批号" align="center" prop="yYpph" />
        <el-table-column label="个人编码" align="center" prop="grbm" />
        <el-table-column label="处方号" align="center" prop="hCfh" />
        <el-table-column label="种类" width="150" align="center" prop="yZlmc"  >
          <template slot-scope="scope">
            <el-select v-if="scope.row.showInput" filterable clearable v-model="scope.row.yZlbm"  placeholder="请选择种类">
              <el-option
                v-for="item in ypzlOptions"
                :key="item.yZlbm"
                :label="item.yZlmc"
                :value="item.yZlbm">
              </el-option>
            </el-select>
          </template>
        </el-table-column>
        <el-table-column label="剂型" width="200" align="center" >
          <template slot-scope="scope">
            <el-select v-if="scope.row.showInput" filterable clearable v-model="scope.row.yJxbm"  placeholder="请选择剂型">
              <el-option
                v-for="item in ypjxOptions"
                :key="item.yJxbm"
                :label="item.yJxmc"
                :value="item.yJxbm">
              </el-option>
            </el-select>
          </template>
        </el-table-column>
        <el-table-column label="功效" width="200" align="center" >
          <template slot-scope="scope">
            <el-select v-if="scope.row.showInput" filterable clearable v-model="scope.row.yGxbm"  placeholder="请选择功效">
              <el-option
                v-for="item in ypgxOptions"
                :key="item.yGxbm"
                :label="item.yGxmc"
                :value="item.yGxbm">
              </el-option>
            </el-select>
          </template>
        </el-table-column>
        <el-table-column label="药房" width="150" align="center" prop="yYfmc" >
          <template slot-scope="scope">
            <el-select v-if="scope.row.showInput" filterable clearable v-model="scope.row.hBz" placeholder="请选择药房">
              <el-option
                v-for="item in yfOptions"
                :key="item.hBz"
                :label="item.hYfmc"
                :value="item.hBz">
              </el-option>
            </el-select>
          </template>
        </el-table-column>
        <el-table-column label="库存ID" align="center" prop="hRowid" />
        <el-table-column label="有效日期" align="center" prop="yYxrq" width="180">
          <template slot-scope="scope">
            <span>{{ parseTime(scope.row.yYxrq, '{y}-{m}-{d}') }}</span>
          </template>
        </el-table-column>
        <el-table-column label="操作" align="center" width="180" class-name="small-padding fixed-width">
          <template slot-scope="scope">
            <el-button
              size="mini"
              type="text"
              icon="el-icon-delete"
              @click="handleDelete(scope.row)"
              v-hasPermi="['yf:crk:remove']"
            >删除</el-button>
          </template>
        </el-table-column>
      </el-table>
    </el-dialog>
  </div>
</template>

<script>
import { listMainCrk, getCrk, delCrk, addCrk, updateCrk, listCrk, showCrk, addCrkList } from '@/api/yf/crk'
import { allListKsbmk } from '@/api/system/ksbmk'
import { getAllRclb } from '@/api/yf/rclb'
import { listXyf } from '@/api/yf/xyf'
import { listYfbm } from '@/api/yf/yfbm'
import { listJxbm } from '@/api/kf/jxbm'
import { listYpgx } from '@/api/kf/ypgx'
import { listYpzl } from '@/api/kf/ypzl'
import { listYplx } from '@/api/kf/yplx'

export default {
  name: "Crk",
  dicts: ['KSBM'],
  data() {
    return {
      //科室选项
      ksbmOptions:[],
      //入出摘要
      rczyOptions:[],
      //药品类型选项
      ypzlOptions:[],
      //药品功效选项
      ypgxOptions:[],
      //药品剂型选项
      ypjxOptions:[],
      //药房选项
      yfOptions:[],
      //批量添加数据
      addCrkTempList:[],
      //药房数据显示
      yfLoading: false,
      //药房选择数据
      xyfList:[],
      //添加之前的form
      addForm:{
        hCk:1,
        wlDwmc: null,
        hPzzy: null,
        ksbm:null,
      },
      //添加弹出框
      yfDialogopen: false,
      //添加时查找的药品
      addYpbm: null,
      //批号
      addYpph: null,
      // 遮罩层
      loading: true,
      //
      loadingDetil: true,
      // 选中数组
      ids: [],
      // 选中药品批号数组
      hHdpzhs: [],
      // 非单个禁用
      single: true,
      // 非多个禁用
      multiple: true,
      // 显示搜索条件
      showSearch: true,
      // 总条数
      total: 0,
      //药房总条数量
      xyfTotal:0,
      // 药房出入库表格数据
      crkList: [],
      // 是否显示弹出层
      detilOpen: false,
      // 药房出入库表格数据
      crkListDetil: [],
      //添加
      addOpen:false,
      //当前活动行
      currentRow:null,
      // 查询参数
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        czy: null,
        hHdpzh: null,
        deptId: this.$store.state.user.deptId,
      },
      // 查询参数
      queryParamsDetil: {
        pageNum: 1,
        pageSize: 10,
        hHdpzh: null,
        deptId: this.$store.state.user.deptId,
      },
      // 查询参数
      queryParamsYf: {
        pageNum: 1,
        pageSize: 10,
        yYpbm: null,
        yYpdm: null,
        deptId: this.$store.state.user.deptId,
      },
      // 表单参数
      form: {},
      // 表单校验
      rules: {
      }
    };
  },
  created() {
    this.getList();
  },
  methods: {
    /** 查询药房出入库列表 */
    getList() {
      this.loading = true;
      listMainCrk(this.queryParams).then(response => {
        this.crkList = response.rows;
        this.total = response.total;
        this.loading = false;
      });
    },
    // 取消按钮
    cancel() {
      this.open = false;
      this.reset();
    },
    /** 搜索按钮操作 */
    handleQuery() {
      this.queryParams.pageNum = 1;
      this.getList();
    },
    /** 重置按钮操作 */
    resetQuery() {
      this.resetForm("queryForm");
      this.handleQuery();
    },
    // 多选框选中数据
    handleSelectionChange(selection) {
      this.pyphs = selection.map(item => item.pyph);
      this.single = selection.length!==1
      this.multiple = !selection.length
    },
    /** 新增按钮操作 */
    handleAdd() {
      this.addOpen = true;
      this.getKsbm();
      this.getRuzy();

    },
    /** 修改按钮操作 */
    handleUpdate(row) {
      this.reset();
      const id = row.id || this.ids
      getCrk(id).then(response => {
        this.form = response.data;
        this.open = true;
        this.title = "修改药房出入库";
      });
    },
    /** 删除按钮操作 */
    handleDelete(row) {
      const hHdpzhs = row.id || this.hHdpzhs;
      this.$modal.confirm('是否确认删除药房出入库核对凭证号为"' + hHdpzhs + '"的数据项?').then(function() {
        return delCrkhHdpzhs(hHdpzhs);
      }).then(() => {
        this.getList();
        this.$modal.msgSuccess("删除成功");
      }).catch(() => {});
    },
    /** 导出按钮操作 */
    handleExport() {
      this.download('yf/crk/export', {
        ...this.queryParams
      }, `crk_${new Date().getTime()}.xlsx`)
    },
    /** 详情 */
    handleDetil(row){
      const hdpzh = row.hHdpzh;
      this.queryParamsDetil.hHdpzh = hdpzh;
      this.loadingDetil = true;
      listCrk(this.queryParamsDetil).then(response => {
        this.crkListDetil = response.rows;
        this.total = response.total;
        this.loadingDetil = false;
      });
      this.detilOpen = true;
    },
    /** 获得当前登录机构的科室 */
    getKsbm(){
      const deptId = this.$store.state.user.deptId;
      this.form.deptId = deptId;
      allListKsbmk(deptId).then(response => {
        this.ksbmOptions = response.data;
      });
    },
    /** 入出摘要 */
    getRuzy(){
      getAllRclb().then(response => {
        this.rczyOptions = response.data;
      });
    },
    /* 新增一行 */
    addLine(){
      const wldw = this.addForm.wlDwmc;
      if(wldw==null || wldw == ""){
        this.$modal.msgWarning("来往单位没有选择,不能新增!");
        return;
      }
      this.addCrkTempList.push({
        line:++this.i,
        showInput:true,
        hCk:this.addForm.hCk,
        wlDwmc:this.addForm.wlDwmc,
        czy:this.$store.state.user.name,
        hPzzy:this.addForm.hPzzy,
        ksbm:this.addForm.ksbm,
      })
    },
    setWldwmc(value){
      for(let i = 0 ,length = this.ksbmOptions.length;i<length;i++){
        if(this.ksbmOptions[i].ksbm == value){
          this.addForm.wlDwmc = this.ksbmOptions[i].ksmc;
          return;
        }
      }
    },
    setYpzl(value){
      for(let i = 0 ,length = this.rczyOptions.length;i<length;i++){
        if(this.rczyOptions[i].bm == value){
          this.addForm.hPzzy = this.rczyOptions[i].mc;
          return;
        }
      }
    },
    getYp(row){
      this.addYpbm = row.yYpbm;
      this.queryParamsYf.yYpbm = this.addYpbm;
      listXyf(this.queryParamsYf).then(response => {
        if (response.rows.length == 0) {
          this.$modal.msgError("药品编码输入错误!");
          return;
        }else{
          this.getXyList();
          this.yfDialogopen = true;
        }
      });

    },
    /** 查询药房现有库存列表 */
    getXyList() {
      this.yfLoading = true;
      this.queryParamsYf.yYpbm = this.addYpbm;
      listXyf(this.queryParamsYf).then(response => {
        this.xyfList = response.rows;
        this.xyfTotal = response.total;
        this.yfLoading = false;
      });
    },
    /** 保存出入库 */
    handleSave(){
      const timestamp = Date.parse(new Date());
      for(let i = 0 ,length = this.addCrkTempList.length;i<length;i++){
        this.addCrkTempList[i].hHdpzh = timestamp;
      }
      addCrkList(this.addCrkTempList).then(response => {
        if(response.code == 200){
          this.$modal.msgSuccess("新增成功");
          this.addCrkTempList = [];
        }else{
          this.$modal.msgError("新增失败!新增数据含有空数据!");
        }
      });

    },
    /** 退出药房数据表 */
    yfDialogClose(){
      this.xyfList=[];
      this.queryParamsYf={
        pageNum: 1,
        pageSize: 10,
        yYpbm: null,
        yYpdm: null,
        deptId: this.$store.state.user.deptId,
      };
      this.yfDialogopen = false;
    },
    /** 退出添加 */
    addDialogClose(){
      this.addCrkTempList = [];
      this.addForm = {
          hCk:1,
          wlDwmc: null,
          hPzzy: null,
          ksbm:null,
      };
      this.addOpen = false;
      this.getList();
    },
    /** 选中 */
    handleCurrentChange(val){
      const yYpbm = val.yYpbm;
      this.addYpbm = yYpbm;
      this.addYpph = val.yYpph;
      this.yfDialogClose();
      const length = this.addCrkTempList.length
      showCrk(yYpbm,this.addYpph,this.$store.state.user.deptId).then(response => {
        const crk = response.data;
        this.addCrkTempList.pop();
        this.addCrkTempList.push({
          line:++this.i,
          showInput:true,
          hCk:this.addForm.hCk,
          wlDwmc:this.addForm.wlDwmc,
          hPzzy:this.addForm.hPzzy,
          czy:this.$store.state.user.name,
          ksbm:this.addForm.ksbm,
          yYpbm:crk.yYpbm,
          yYpmc:crk.yYpmc,
          hCrdj:crk.hCrdj,
          yCrjj:crk.yCrjj,
          yDw:crk.yDw,
          yDwsl:crk.yDwsl,
          rbrq:crk.rbrq,
          yYpgg:crk.yYpgg,
          yYpph:crk.yYpph,
          yYppj:crk.yYppj,
          yYxrq:crk.yYxrq,
          hRowid:crk.hRowid,
          yDwbm:crk.yDwbm,
          yCdbm:crk.yCdbm,
          yZlbm:crk.yZlbm,
          yJxbm:crk.yJxbm,
          yGxbm:crk.yGxbm,
          hBz:crk.hBz,
          hCrhd:0,
          yPdlr:0,
          deptId:this.$store.state.user.deptId,


        })
      });
      listYfbm().then(response => {
        this.yfOptions = response.rows;
      });
      listYpzl().then(response => {
        this.ypzlOptions = response.rows;
      });
      listJxbm().then(response => {
        this.ypjxOptions = response.rows;
      });
      listYpgx().then(response => {
        this.ypgxOptions = response.rows;
      });
    }
  }
};
</script>

同步方法

https 请求加 await

await checkHSlsl(pkId, this.$store.state.user.deptId).then(response => {
          a = response.data.yKc;
        });

定义方法加 async

async handleSave(){}

调用直接和原来一样

Join 连接查询(药品申领详情)

select sl.y_ypbm, sl.y_ypmc,sl.y_ypdm, sl.y_ypgg, sl.y_dwsl,sl.y_ddw,sl.y_ypdj,sl.y_ypjj,sl.pk_id,sl.h_ypph,sl.yydwbm,
               sl.czy,sl.djh,sl.h_slsl,sl.h_jzbs,sl.rbrq,sl.y_lyph,
               yk.y_kfmc,yf.h_yfmc,cd.y_cdmc,lx.y_lxmc
        from h_ypsl as sl
                 LEFT JOIN y_kf as yk on sl.y_bz = yk.y_bz
                 LEFT JOIN h_yf as yf on sl.h_bz = yf.h_bz
                 LEFT JOIN y_cdbm as cd on sl.y_cdbm = cd.y_cdbm
                 LEFT JOIN y_yplx as lx on sl.h_lxbm = lx.y_yplx
        where sl.y_lyph = #{yLyph} and sl.dept_id = #{deptId}

获得药库和批库药品

select yk.y_ypbm, yp.y_ypmc,
yp.y_ypdm, yp.y_ypgg, yp.y_dwsl,yp.ddw,yp.y_ypms,yp.y_yptm,yp.y_yplx,
pk.y_ypdj,pk.y_ypjj,pk.y_yppj,pk.id,pk.y_ypph,pk.y_kc,pk.y_yxrq,pk.y_dwbm as ghDwbm,pk.yydwbm,pk.y_ypzl,pk.y_cdbm,cd.y_cdmc,
lx.y_lxmc,
jx.y_jxmc,
gh.y_dwmc as ghDwmc
from y_xyk as yk
left JOIN y_h1 as yp on  yk.y_ypbm = yp.y_ypbm
left JOIN y_yplx as lx on  yp.y_yplx = lx.y_yplx
right JOIN y_yppk as pk on yk.y_ypbm = pk.y_ypbm
left Join y_jxbm as jx on yp.y_jxbm = jx.y_jxbm
left Join y_ghdw as gh on pk.y_dwbm = gh.y_dwbm
left Join y_cdbm as cd on pk.y_cdbm = cd.y_cdbm
where yk.y_ypbm = 10000001 and pk.y_kc > 0 

Vue焦距事件

@keyup.enter.native="inputChange"  //回车事件
@mouseleave.native="inputChange"   //鼠标移开事件

批量删除

public int deleteHYpslByLyphIds(@Param("lyphIds") String[] lyphIds ,@Param("deptId") Long deptId);

mapper.xml

    <delete id="deleteHYpslByLyphIds" >
        delete from h_ypsl where y_lyph in
        <foreach item="y_lyph" collection="lyphIds" open="(" separator="," close=")">
            #{y_lyph}
        </foreach>
        and dept_id = #{deptId} and h_jzbs = 0
    </delete>

el-table单元格单击事件

双击

@cell-dblclick

单击事件

 @row-click

分组聚合查询

    <select id="listPdbGroup" parameterType="HPdb" resultMap="HPdbVoResult">
        SELECT pd.czy,pd.rbrq,pd.h_bz,pd.h_pdqr,pd.y_pdscbm,'0'  as xz,u.user_name as czyName,yf.h_yfmc,pd.dept_id,
               sum(h_pddj*h_pdkc)  as groupZcdj,
               sum(h_pddj*h_pdsc)  as groupScdj,
               (sum(h_pddj*h_pdsc)  - sum(h_pddj*h_pdkc)) as ykje,
               sum(y_ypjj*h_pdsc)  as groupScjj,
               sum(y_ypjj*h_pdkc)  as groupZcjj,
               min(pd.y_pdscrq) as y_pdscrq,
               max(pd.y_pdzzrq) as y_pdzzrq
        FROM h_pdb as pd
        left join sys_user as u on pd.czy = u.user_id
        left join h_yf as yf on pd.h_bz = yf.h_bz
        GROUP BY pd.czy,
                 pd.h_bz,
                 pd.rbrq,
                 pd.h_pdqr,
                 pd.y_pdscbm,
                 u.user_name,
                 yf.h_yfmc,
                 pd.dept_id
        having pd.h_bz = #{hBz} and pd.dept_id=#{deptId}
    </select>

SQLserver批量删除并更新修改时间

    <update id="batchUpdate" parameterType="java.util.List">
        <foreach collection="list" item="item" index="index">
            UPDATE h_pdb SET h_pdsc = #{item.hPdsc}, h_xgrq = CONVERT(varchar(20), GETDATE(), 120) WHERE id = #{item.id}
        </foreach>
    </update>

el-input出发回车事件时会导致页面刷新

问题描述:页面搜索数据的时候,使用el-input回车事件搜索,有时会导致页面没搜索,直接重新刷新页面

原因分析:当表单只有一个文本框时,按下回车将会触发表单的提交事件, 导致页面的刷新。

1:el-input上使用回车事件

<el-input v-model=“input” @keyup.enter.native=“search1”>

解决方法一:在el-form表单加上@submit.native.prevent

<el-form @submit.native.prevent>
    <el-input  v-model="input" @keyup.enter.native="search1">
</el-form>

解决方法二:加一个隐藏的文本框,即表单不只有一个文本框

<el-form >
     <el-form-item >
      <el-input  v-model="input" @keyup.enter.native="search1">
    </el-form-item>
	<el-form-item style="margin-bottom:0;display:none;">
      <el-input></el-input>
    </el-form-item>
</el-form>

SQLserver模糊查询满足一个

and yf.y_ypbm like '%'+#{yYpbm}+'%' or yf.y_ypdm like '%'+#{yYpbm}+'%'

批量添加时间与批量修改时间

<update id="batchUpdate" parameterType="java.util.List">
        <foreach collection="list" item="item" index="index">
            UPDATE h_pdb SET h_pdsc = #{item.hPdsc},h_pdqr = '2', h_xgrq = CONVERT(varchar(20), GETDATE(), 120) WHERE id = #{item.id}
        </foreach>
    </update>

  <insert id="batchHPdbVo">
        insert into h_pdb(y_ypbm, h_pddj, h_pdpj, h_pdkc, h_pdsc, h_pddw, y_dwsl, h_pdxkc, h_qrrq, czy, h_xgrq, h_bz, rbrq, h_pdqr, y_ypjj, y_ypph, h_ypph, datatran, yphgh, y_cdbm, y_ypmc, y_ypgg, y_zlbm, y_jxbm, y_gxbm, y_pdscbm, h_rowid, h_pdscrq, yydwbm, y_pdscrq, y_pdzzrq, y_pzwh, y_yxrq, y_scrq, h_pdkc_b, h_pdsc_b, dept_id) values
        <foreach item="item" index="index" collection="list" separator=",">
            ( #{item.yYpbm}, #{item.hPddj}, #{item.hPdpj}, #{item.hPdkc}, #{item.hPdsc}, #{item.hPddw}, #{item.yDwsl}, #{item.hPdxkc}, #{item.hQrrq}, #{item.czy}, #{item.hXgrq}, #{item.hBz}, #{item.rbrq}, #{item.hPdqr}, #{item.yYpjj}, #{item.yYpph}, #{item.hYpph}, #{item.datatran}, #{item.yphgh}, #{item.yCdbm}, #{item.yYpmc}, #{item.yYpgg}, #{item.yZlbm}, #{item.yJxbm}, #{item.yGxbm}, #{item.yPdscbm}, #{item.hRowid}, #{item.hPdscrq}, #{item.yydwbm}, #{item.yPdscrq}, #{item.yPdzzrq}, #{item.yPzwh}, #{item.yYxrq}, #{item.yScrq}, #{item.hPdkcB}, #{item.hPdscB}, #{item.deptId})
        </foreach>
    </insert>

单选框选择事件

<el-radio-group v-model="queryParams.hCk" @change="handleQuery">
          <el-radio :label="1">出库</el-radio>
          <el-radio :label="0">入库</el-radio>
          <el-radio :label="2">全部</el-radio>
        </el-radio-group>

前端传入时间后端接受

java类Date 类型字段

后端接受转换

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
hXyfVo.setStartDate(sdf.parse(hXyfVo.getStartTime()));

不同单元格根据条件显示不同单元格背景颜色

定义css

<style lang="less">
.el-table .exit-row{
  background: #f6f68b !important;
}
.el-table .success-row{
  background: #d4f6c1 !important;
}
</style>

定义判断方法

 //根据行数据改变行颜色
    tableRowClassName({row}) {
      if (row.hJzbs == 1) {
        return 'success-row';
      } else if (row.hJzbs == 2) {
        return 'exit-row';
      }
      return '';
    },

使用

  <el-table v-loading="loading"
              :data="ypslList"
              @selection-change="handleSelectionChange"
              style="width: 100%"
              :stripe="false"
              :row-class-name="tableRowClassName"
              height="400px">
Logo

快速构建 Web 应用程序

更多推荐