Merge remote-tracking branch 'origin/czkhasrs' into czkhasrs
# Conflicts:
# src/main/java/com/zy/common/service/CommonService.java
# src/main/webapp/static/js/locDetl/locDetl.js
| | |
| | | /*组托 |
| | | * |
| | | * */ |
| | | @RequestMapping(value = "/barcodeMatnr/add1/auth") |
| | | @RequestMapping(value = "/barcodeMatnr/comb/auth") |
| | | @ManagerAuth |
| | | public R comb(WaitPakin waitPakin) { |
| | | Mat mat = matService.selectById(waitPakin.getModiUser()); |
| | |
| | | /*并板 |
| | | * |
| | | * */ |
| | | @RequestMapping(value = "/barcodeMatnr/add2/auth") |
| | | // @RequestMapping(value = "/barcodeMatnr/clamp/auth") |
| | | @ManagerAuth |
| | | public R clamp(WaitPakin waitPakin) { |
| | | if (Cools.isEmpty(waitPakin.getBarcode())||Cools.isEmpty(waitPakin.getModiUser())){ |
| | |
| | | mobileService.adjustNew(combParam, Boolean.TRUE, getUserId()); |
| | | return R.ok("并板成功"); |
| | | } |
| | | |
| | | /*批量并板*/ |
| | | @RequestMapping(value = "/barcodeMatnr/clamp/auth") |
| | | @ManagerAuth |
| | | public R clamp2(@RequestBody List<MatBarcode> list){ |
| | | if (Cools.isEmpty(list)){ |
| | | return R.error(BaseRes.PARAM); |
| | | } |
| | | for (MatBarcode matBarcode : list) { |
| | | MobileAdjustParam combParam=new MobileAdjustParam(); |
| | | ArrayList<CombParam.CombMat> combMats=new ArrayList<>(); |
| | | CombParam.CombMat combMat=new CombParam.CombMat(); |
| | | combMat.setMatnr(matBarcode.getMatnr()); |
| | | combMat.setMaktx(matBarcode.getMaktx()); |
| | | combMat.setAnfme(1.0); |
| | | combMats.add(combMat); |
| | | combParam.setBarcode(matBarcode.getZpallet()); |
| | | combParam.setCombMats(combMats); |
| | | mobileService.adjustNew(combParam, Boolean.TRUE, getUserId()); |
| | | } |
| | | return R.ok("并板成功"); |
| | | } |
| | | } |
| | |
| | | package com.zy.asrs.controller; |
| | | |
| | | import com.core.common.R; |
| | | import com.sun.prism.Image; |
| | | import com.zy.asrs.entity.ImageView; |
| | | import com.zy.asrs.utils.ImagePreviewUtils; |
| | | import com.zy.common.web.BaseController; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import io.swagger.annotations.ApiResponse; |
| | | import io.swagger.annotations.ApiResponses; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.web.bind.annotation.*; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | |
| | | import java.io.FileInputStream; |
| | | import java.io.FileNotFoundException; |
| | | import java.io.IOException; |
| | | import java.nio.file.Files; |
| | | import java.util.*; |
| | | |
| | | @Slf4j |
| | | @RestController |
| | | @RequestMapping() |
| | | public class ImagePreviewController extends BaseController { |
| | | //上传图片 |
| | | @ApiResponses({@ApiResponse(code = 200, message = "上传成功"), @ApiResponse(code = 400, message = "上传失败"), @ApiResponse(code = 500, message = "服务器内部错误")}) |
| | | //@RequestMapping(value = "/saveImage", method = RequestMethod.POST) |
| | | public Map<String, Object> saveImage(@RequestParam("files") MultipartFile[] files) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | @RequestMapping(value = "/saveImage", method = RequestMethod.POST) |
| | | public R saveImage(@RequestParam("files") MultipartFile[] files) { |
| | | // Map<String, Object> map = new HashMap<>(); |
| | | List<String> list = new ArrayList<>(); |
| | | for (int i = 0; i < files.length; i++) { |
| | | MultipartFile mfile = files[i]; |
| | | //获取文件后缀 |
| | | String suffixName = ImagePreviewUtils.getSaveImagePath(mfile); |
| | | //生成新文件名称 |
| | | String newFileName = ImagePreviewUtils.getNewImageFileName(suffixName); |
| | | //String newFileName = ImagePreviewUtils.getNewImageFileName(suffixName); |
| | | //保存文件 |
| | | File file = new File(ImagePreviewUtils.getNewImagePath(newFileName)); |
| | | File file = new File(ImagePreviewUtils.getNewImagePath(mfile.getOriginalFilename())); |
| | | boolean state = ImagePreviewUtils.saveImage(mfile, file); |
| | | if (state) { |
| | | // list.add(ImageUtil.getNewImagePath(newFileName)); |
| | | //保存数据库的图片路径为 相对路径 |
| | | list.add("uploadimage/" + newFileName); |
| | | list.add("uploadimage/" + mfile.getOriginalFilename()); |
| | | } |
| | | } |
| | | map.put("imgList", list); |
| | | return map; |
| | | // map.put("imgList", list); |
| | | return R.ok("上传成功"); |
| | | |
| | | } |
| | | |
| | | //预览图片 |
| | | //@RequestMapping("previewImage") |
| | | @RequestMapping("/previewImage") |
| | | @ApiOperation(value = "根据文件名实现预览功能") |
| | | public void previewFile( |
| | | HttpServletResponse response) throws IOException { |
| | | showImg("D:\\"+"images\\"+"20251022efda188c-56b3-4c38-9940-78d0b61b43a1.png", response); |
| | | } |
| | | |
| | | public static void showImg(String path, HttpServletResponse response){ |
| | | if(path!=null&&!path.equals("")){ |
| | | public String previewFile( |
| | | HttpServletResponse response,String maktx) throws IOException { |
| | | // String[] s = matnr.split("__"); |
| | | showImg("D:\\"+"images\\"+maktx+".png", response,maktx); |
| | | if("D:\\"+"images\\"+maktx+".png"!=null){ |
| | | |
| | | try { |
| | | FileInputStream fis = new FileInputStream(path); |
| | | FileInputStream fis = new FileInputStream("D:\\"+"images\\"+maktx+".png"); |
| | | ServletOutputStream os = response.getOutputStream(); |
| | | |
| | | byte [] b = new byte[1024*8]; |
| | |
| | | } |
| | | } catch (FileNotFoundException e) { |
| | | e.printStackTrace(); |
| | | return "该简图不存在,请上传"; |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | return ""; |
| | | } |
| | | |
| | | public static void showImg(String path, HttpServletResponse response,String maktx){ |
| | | |
| | | } |
| | | public static R showImgToBase64(String path, HttpServletResponse response,String maktx){ |
| | | byte[] imageBytes = null; |
| | | try { |
| | | File file =new File(path); |
| | | imageBytes = Files.readAllBytes(file.toPath()); |
| | | }catch (IOException e){ |
| | | e.printStackTrace(); |
| | | return null; |
| | | } |
| | | String pics = Base64.getEncoder().encodeToString(imageBytes); |
| | | List<String> list = new ArrayList<>(); |
| | | List<ImageView> imageViewList = new ArrayList<>(); |
| | | ImageView imageView = new ImageView(); |
| | | //String s = "http://192.168.0.2/image/"+pics+".jpg"; |
| | | list.add(pics); |
| | | imageView.setPics(list); |
| | | imageView.setMaktx(maktx); |
| | | imageViewList.add(imageView); |
| | | //log.info(s); |
| | | log.info(pics); |
| | | return R.ok().add(imageViewList); |
| | | } |
| | | } |
| New file |
| | |
| | | package com.zy.asrs.entity; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Data |
| | | public class ImageView { |
| | | //图片的base64 |
| | | private List<String> pics; |
| | | |
| | | private String maktx; |
| | | } |
| | |
| | | continue; |
| | | } |
| | | String shallowLoc = Utils.getDeepLoc(slaveProperties, locMast1.getLocNo()); |
| | | LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", shallowLoc).eq("loc_sts", "O")); |
| | | //LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locMast1.getLocNo()).eq("loc_sts", "O")); |
| | | if (Cools.isEmpty(locMast2)) { |
| | | LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", shallowLoc)); |
| | | if (Cools.isEmpty(locMast2)){ |
| | | continue; |
| | | } |
| | | if (locMast2.getLocSts().equals("P")||locMast2.getLocSts().equals("Q")||locMast2.getLocSts().equals("R")||locMast2.getLocSts().equals("S")){ |
| | | continue; |
| | | } |
| | | if (!Cools.isEmpty(locMast2)&&locMast2.getLocSts().equals("O")){ |
| | | locMast = locMast2; |
| | | break; |
| | | } |
| | | if (!Cools.isEmpty(locMast2)&&(locMast2.getLocSts().equals("F")||locMast2.getLocSts().equals("D"))){ |
| | | locMast = locMast1; |
| | | break; |
| | | } |
| | | // LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", shallowLoc).eq("loc_sts", "O")); |
| | | // if (Cools.isEmpty(locMast2)) { |
| | | // locMast = locMast1; |
| | | // break; |
| | | // } |
| | | } |
| | | } |
| | | |
| | |
| | | import com.zy.system.service.*; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.scheduling.annotation.Scheduled; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | |
| | | return R.ok("激活成功,有效期至"+DateUtils.convert(exprTime)); |
| | | } |
| | | |
| | | // @Scheduled(cron = "*/30 * * * * *") |
| | | // public void deleteToken(){ |
| | | // List<User> userList = userService.selectAll(); |
| | | // for (User user : userList) { |
| | | // UserLogin userLogin = userLoginService.selectByUserId(user.getId()); |
| | | // if (System.currentTimeMillis() - userLogin.getCreateTime().getTime() > 30){ |
| | | // userLoginService.delete(new EntityWrapper<UserLogin>().eq("user_id", userLogin.getId())); |
| | | // } |
| | | // } |
| | | // } |
| | | |
| | | |
| | | } |
| | |
| | | import org.apache.ibatis.annotations.Select; |
| | | import org.springframework.stereotype.Repository; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Mapper |
| | | @Repository |
| | | public interface UserLoginMapper extends BaseMapper<UserLogin> { |
| | |
| | | @Select("select count(1) from sys_user_login where yearweek(date_format(create_time,'%Y-%m-%d')) = yearweek(now())") |
| | | int selectCountByCurrentWeek(); |
| | | |
| | | @Select("select * from sys_user_login where user_id = #{userId}") |
| | | UserLogin selectByUserId(Long id); |
| | | |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.mapper.BaseMapper; |
| | | import com.zy.system.entity.User; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | import org.apache.ibatis.annotations.Select; |
| | | import org.springframework.stereotype.Repository; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Mapper |
| | | @Repository |
| | | public interface UserMapper extends BaseMapper<User> { |
| | | |
| | | @Select("select * from sys_user;") |
| | | List<User> selectAll(); |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.service.IService; |
| | | import com.zy.system.entity.UserLogin; |
| | | |
| | | import java.util.List; |
| | | |
| | | public interface UserLoginService extends IService<UserLogin> { |
| | | |
| | | int selectCountByCurrentWeek(); |
| | | |
| | | UserLogin selectByUserId(Long id); |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.service.IService; |
| | | import com.zy.system.entity.User; |
| | | |
| | | import java.util.List; |
| | | |
| | | public interface UserService extends IService<User> { |
| | | |
| | | List<User> selectAll(); |
| | | } |
| | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | |
| | | @Service("userLoginService") |
| | | public class UserLoginServiceImpl extends ServiceImpl<UserLoginMapper, UserLogin> implements UserLoginService { |
| | | |
| | |
| | | public int selectCountByCurrentWeek() { |
| | | return userLoginMapper.selectCountByCurrentWeek(); |
| | | } |
| | | |
| | | @Override |
| | | public UserLogin selectByUserId(Long id) { |
| | | return userLoginMapper.selectByUserId(id); |
| | | } |
| | | } |
| | |
| | | import com.zy.system.entity.User; |
| | | import com.zy.system.mapper.UserMapper; |
| | | import com.zy.system.service.UserService; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | |
| | | @Service("userService") |
| | | public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { |
| | | @Autowired |
| | | private UserMapper userMapper; |
| | | |
| | | @Override |
| | | public List<User> selectAll() { |
| | | return userMapper.selectAll(); |
| | | } |
| | | } |
| | |
| | | }); |
| | | } |
| | | break; |
| | | // case 'clampData': |
| | | // layer.open({ |
| | | // type: 2, |
| | | // title: '并板', |
| | | // maxmin: true, |
| | | // area: [top.detailWidth, top.detailHeight], |
| | | // content: 'barcodeMatnr_clamp.html', |
| | | // success: function(layero, index){ |
| | | // layer.getChildFrame('#data-detail-submit-edit', index).hide(); |
| | | // clearFormVal(layer.getChildFrame('#detail', index)); |
| | | // layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"}); |
| | | // } |
| | | // }); |
| | | // break; |
| | | case 'clampData': |
| | | layer.open({ |
| | | type: 2, |
| | | title: '并板', |
| | | maxmin: true, |
| | | area: [top.detailWidth, top.detailHeight], |
| | | content: 'barcodeMatnr_clamp.html', |
| | | success: function(layero, index){ |
| | | layer.getChildFrame('#data-detail-submit-edit', index).hide(); |
| | | clearFormVal(layer.getChildFrame('#detail', index)); |
| | | layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"}); |
| | | } |
| | | }); |
| | | if (checkStatus.data.length === 0){ |
| | | layer.msg('请至少选择一条数据', {icon: 2}); |
| | | } else { |
| | | layer.confirm('确定并板吗', function(){ |
| | | $.ajax({ |
| | | url: baseUrl+"/barcodeMatnr/clamp/auth", |
| | | headers: {'token': localStorage.getItem('token')}, |
| | | data: JSON.stringify(checkStatus.data), |
| | | contentType:'application/json;charset=UTF-8', |
| | | method: 'POST', |
| | | traditional:true, |
| | | success: function (res) { |
| | | if (res.code === 200){ |
| | | layer.closeAll(); |
| | | tableReload(false); |
| | | layer.msg(res.msg, {icon: 1}) |
| | | } else if (res.code === 403){ |
| | | top.location.href = baseUrl+"/"; |
| | | } else { |
| | | layer.msg(res.msg, {icon: 2}) |
| | | } |
| | | } |
| | | }) |
| | | }); |
| | | } |
| | | break; |
| | | case 'exportData': |
| | | layer.confirm('确定导出Excel吗', {shadeClose: true}, function(){ |
| | |
| | | method("add"); |
| | | }); |
| | | |
| | | form.on('submit(save1)', function () { |
| | | form.on('submit(comb)', function () { |
| | | if (banMsg != null){ |
| | | layer.msg(banMsg); |
| | | return; |
| | | } |
| | | method("add1"); |
| | | method("comb"); |
| | | }); |
| | | |
| | | form.on('submit(save2)', function () { |
| | | form.on('submit(clamp)', function () { |
| | | if (banMsg != null){ |
| | | layer.msg(banMsg); |
| | | return; |
| | | } |
| | | method("add2"); |
| | | method("clamp"); |
| | | }); |
| | | |
| | | // 数据修改动作 |
| | |
| | | ,{field: 'brand', align: 'center',title: '品牌', hide: true} |
| | | ,{field: 'unit', align: 'center',title: '单位', hide: true} |
| | | ,{field: 'price', align: 'center',title: '单价', hide: true} |
| | | ,{field: 'sku', align: 'center',title: '简图', hide: true} |
| | | //,{fixed: 'right', title:'简图', align: 'center', toolbar: '#operate1', width: 300} |
| | | // ,{fixed: 'right', align: 'center',title: '简图', templet:function(row){ |
| | | // var html = "<img src='http://127.0.0.1:8080/czkhasrs/previewImage?maktx=" +row.maktx+"'/>"; |
| | | // return html; |
| | | // }} |
| | | |
| | | |
| | | |
| | | // ,{fixed: 'right', align: 'center', title: '简图', templet: function(row){ |
| | | // var html = "<a href='http://127.0.0.1:8080/czkhasrs/previewImage?maktx=" + row.maktx + "' target='_blank' rel='noopener noreferrer'>查看简图</a>"; |
| | | // return html; |
| | | // }} |
| | | |
| | | |
| | | ,{field: 'units', align: 'center',title: '单位量', hide: true} |
| | | ,{field: 'barcode', align: 'center',title: '条码', hide: true} |
| | | ,{field: 'origin', align: 'center',title: '产地', hide: true} |
| | |
| | | }); |
| | | } |
| | | break; |
| | | // 查看简图 |
| | | // case 'showPic': |
| | | // let imgHtml = '<div style="height:100%;display: flex;justify-content: space-around;align-items: center;flex-wrap: wrap;">'; |
| | | // $.ajax({ |
| | | // url: baseUrl+"/previewImage", |
| | | // headers: {'token': localStorage.getItem('token')}, |
| | | // data: { |
| | | // maktx: data.maktx |
| | | // }, |
| | | // method: 'GET', |
| | | // traditional:true, |
| | | // success: function (res) { |
| | | // if (res.code === 200){ |
| | | // res.data.forEach((item) => { |
| | | // let maktx = item.maktx; |
| | | // let pics = item.pics; |
| | | // pics.forEach((pic) => { |
| | | // let tmp = '<div><div><img width="600" src="' + pic + '" /></div><div>' + maktx + '</div></div>'; |
| | | // imgHtml += tmp; |
| | | // }) |
| | | // }) |
| | | // imgHtml += "</div>"; |
| | | // |
| | | // layer.open({ |
| | | // type: 1, |
| | | // title: '查看简图', |
| | | // area: [top.detailWidth, top.detailHeight], |
| | | // shadeClose: true, |
| | | // content: imgHtml, |
| | | // success: function(layero, index){ |
| | | // } |
| | | // }); |
| | | // |
| | | // } else if (res.code === 403){ |
| | | // top.location.href = baseUrl+"/"; |
| | | // } else { |
| | | // layer.msg(res.msg) |
| | | // } |
| | | // } |
| | | // }); |
| | | // console.log(imgHtml) |
| | | // break; |
| | | |
| | | } |
| | | }); |
| | |
| | | function importExcel() { |
| | | $("#importExcel").trigger("click"); |
| | | } |
| | | // 简图上传 |
| | | function importImage() { |
| | | $("#importImage").trigger("click"); |
| | | } |
| | | function upload(obj){ |
| | | if(!obj.files) { |
| | | return; |
| | |
| | | $("#importExcel").val(""); |
| | | }); |
| | | } |
| | | function uploadImage(obj){ |
| | | if(!obj.files) { |
| | | return; |
| | | } |
| | | var file = obj.files[0]; |
| | | admin.confirm('确认同步 [' + file.name +'] 文件吗?', function (index) { |
| | | layer.load(1, {shade: [0.1,'#fff']}); |
| | | var url = baseUrl + "/saveImage"; |
| | | var form = new FormData(); |
| | | form.append("files", file); |
| | | xhr = new XMLHttpRequest(); |
| | | xhr.open("post", url, true); //post方式,url为服务器请求地址,true 该参数规定请求是否异步处理。 |
| | | xhr.setRequestHeader('token', localStorage.getItem('token')); |
| | | xhr.onload = uploadComplete; //请求完成 |
| | | xhr.onerror = uploadFailed; //请求失败 |
| | | xhr.onloadend = function () { // // 上传完成重置文件流 |
| | | layer.closeAll('loading'); |
| | | $("#importImage").val(""); |
| | | }; |
| | | // xhr.upload.onprogress = progressFunction;//【上传进度调用方法实现】 |
| | | xhr.upload.onloadstart = function(){//上传开始执行方法 |
| | | ot = new Date().getTime(); //设置上传开始时间 |
| | | oloaded = 0;//设置上传开始时,以上传的文件大小为0 |
| | | }; |
| | | xhr.send(form); |
| | | }, function(index){ |
| | | $("#importImage").val(""); |
| | | }); |
| | | } |
| | | function uploadComplete(evt) { |
| | | var res = JSON.parse(evt.target.responseText); |
| | | if(res.code === 200) { |
| | |
| | | <input class="layui-input" type="text" name="matnr" placeholder="商品模具名称" autocomplete="off"> |
| | | </div> |
| | | </div> |
| | | <div class="layui-inline"> |
| | | <div class="layui-input-inline"> |
| | | <input class="layui-input" type="text" name="specs" placeholder="规格" autocomplete="off"> |
| | | </div> |
| | | </div> |
| | | <!-- 日期范围 --> |
| | | <!-- <div class="layui-inline" style="width: 300px">--> |
| | | <!-- <div class="layui-input-inline">--> |
| | |
| | | <hr class="layui-bg-gray"> |
| | | |
| | | <div id="data-detail-btn" class="layui-btn-container layui-form-item"> |
| | | <div id="data-detail-submit-save" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="save2">保存</div> |
| | | <div id="data-detail-submit-save" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="clamp">保存</div> |
| | | <div id="data-detail-submit-edit" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="edit">修改</div> |
| | | <div id="data-detail-close" type="button" class="layui-btn" lay-submit lay-filter="close">关闭</div> |
| | | </div> |
| | |
| | | <hr class="layui-bg-gray"> |
| | | |
| | | <div id="data-detail-btn" class="layui-btn-container layui-form-item"> |
| | | <div id="data-detail-submit-save" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="save1">保存</div> |
| | | <div id="data-detail-submit-save" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="comb">保存</div> |
| | | <div id="data-detail-submit-edit" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="edit">修改</div> |
| | | <div id="data-detail-close" type="button" class="layui-btn" lay-submit lay-filter="close">关闭</div> |
| | | </div> |
| | |
| | | <script type="text/html" id="operate"> |
| | | <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">详情</a> |
| | | </script> |
| | | |
| | | <!--<script type="text/html" id="operate1">--> |
| | | <!-- <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="showPic" >查看简图</a>--> |
| | | <!--</script>--> |
| | | <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script> |
| | | <script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script> |
| | | <script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script> |
| | |
| | | <button class="layui-btn layui-btn-sm" id="btn-print-batch" lay-event="btnPrintBatch">批量打印</button> |
| | | <button class="layui-btn layui-btn-sm layui-btn-normal" id="btn-add" lay-event="addData">新增</button> |
| | | <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">删除</button> |
| | | <!-- <button class="layui-btn layui-btn-sm layui-btn-danger"><a onclick="importImage()" style="font-size: 15px"><i class="layui-icon layui-icon-upload"></i>上传简图</a></button>--> |
| | | <!-- <li style="display: none"><input id="importImage" type="file" onchange="uploadImage(this)" ></li>--> |
| | | <!-- 商品/物料 数据中心 --> |
| | | <div class="dropdown-menu" style="float: right"> |
| | | <button class="layui-btn layui-btn-primary layui-border-black icon-btn layui-btn-sm"> 数据同步 <i class="layui-icon layui-icon-drop"></i></button> |