fastadmin 后台商品sku(vue)
先上个效果图
首先先引入vue
define(['backend'], function (Backend) {require.config({paths: {'vue': '/assets/jeekshopskugoods/libs/vue.min','skuimg': '/assets/jeekshopskugoods/js/skuimg','skugoods': '/assets/jeekshopskugoods/js/skugoods','layui': '/assets/LayuiSpzj/layui/layui',//js省略,如果是vue.min.js,就学vue.min},shim: {//sku商品插件'vue': {exports: 'vue'},'skugoods': {deps: ['css!/assets/jeekshopskugoods/css/skugoods.css',],exports: 'skugoods'},'layui': {deps: ['css!/assets/LayuiSpzj/layui/css/layui.css'],init:function (){return this.layui.config({ base:'/assets/laySku-master/lay-module/'} );}},// 'skuTable': {// // deps: ['/assets/laySku-master/layui/layui.js'],// exports: 'skuTable'// },// 'sorTable': {// deps: ['/assets/laySku-master/layui/layui.js','/assets/laySku-master/lay-module/sorTable.js'],// exports: 'sorTable'// },}});});
sku.html
<style>.delete{width: 20px;height: 20px;position: relative;top: -20px;font-size: 18px;color: red;right: 8px;cursor:pointer;}
</style>
<div class="form-group"><label class="control-label col-xs-12 col-sm-2">{:__('SKU库')}:</label><div class="col-xs-12 col-sm-10"><input id="c-skutitle" data-source="skus/skus/index" class="form-control selectpage" data-field="title" name="row[skutitle]" type="text" value="" placeholder="选择sku,会覆盖现在的sku,请慎重"></div>
</div>
<div class="form-group"><div id="app" v-cloak class="col-xs-12 col-sm-12"><input id="c-skutitles" name="row[skutitle]" @change="getskus" type="hidden" value=""><label class="control-label col-xs-12 col-sm-2">库存/规格</label><div class="input-group"><input type="text" class="form-control" placeholder="输入规格名称" ref="attr-group-name"> <span class="input-group-addon pointer" @click="addRow">添加规格</span></div><!-- 规格项 --><div class="sku-content"><div class="panel panel-default" v-for="(v, i) in attrGroups"><header class="panel-heading text-center"><b>{{v}}</b> <i class="pull-right fa fa-trash pointer text-danger" @click="removeGroup(i)"></i></header><div class="row row-content"><div class="col-md-6 col-sm-6 col-xs-6"><div class="input-group"><input type="text" class="form-control" :ref="`attr-item-name-${i}`"><span class="input-group-addon pointer" @click="addChild(i)">添加</span></div></div><div class="col-md-6 col-sm-6 col-xs-6 tag-content"><span class="tag" v-for="(vv, j) in attrItems[i]">{{vv}} <i class="fa fa-minus-circle pointer text-danger" @click="removeChild(i, j)"></i></span></div></div></div></div><div class="row" v-show="attrGroups.length"><div class="col-md-12"><table class="table table-bordered attr-table"><thead><tr><th v-for="(v, i) in attrGroups">{{v}}</th><th width="80">UPC</th><th width="80">价格</th>
<!-- <th width="80">库存</th>-->
<!-- <th width="80">编码</th>--><th width="180">图片</th>
<!-- <th width="80">状态</th>--></tr></thead><tbody><tr><td :colspan="attrGroups.length" width="80">批量设置</td><td><div class="input-group "><input type="number" ref="batch-market_price" class="form-control no-padding text-center"> <span @click="batchSetAttrs('market_price')" class="input-group-addon pointer">设置</span></div></td><td><div class="input-group "><input type="number" ref="batch-price" class="form-control no-padding text-center"> <span @click="batchSetAttrs('price')" class="input-group-addon pointer">设置</span></div></td><td><!-- <img src="/assets/jeekshopskugoods/img/upload.png" @click="upimage()">--><div @click="upimage()">批量设置</div><!-- <div class="input-group"><input type="number" ref="batch-stock" class="form-control no-padding text-center"> <span @click="batchSetAttrs('stock')" class="input-group-addon pointer">设置</span></div>--></td><!-- <td>--><!-- <div class="input-group"><input type="text" ref="batch-sn" class="form-control"> <span @click="batchSetAttrs('sn')" class="input-group-addon pointer">设置</span></div>--><!-- </td>--></tr><tr v-for="(v, i) in productSkus" :class="v.status!=1?'':'disabled'"><td v-for="(vv, j) in v.attr" width="80">{{vv}}</td><td width="80"><input type="number" name="dsd" class="input-sm form-control attr-market_price" v-model="v.market_price"></td><td width="80"><input type="number" class="input-sm form-control attr-price" v-model="v.price"></td>
<!-- <td width="80">-->
<!-- <input type="number" class="input-sm form-control attr-stock" v-model="v.stock">-->
<!-- </td>-->
<!-- <td width="80">-->
<!-- <input type="text" class="input-sm form-control attr-sn" v-model="v.sn">-->
<!-- </td>--><td width="80"><div class="sku-img" style="width: auto"><div v-if="v.image.length > 0" style="display: inline"><span v-for="(ita,a) in v.image" :key='a' style="margin-top:10px ;display: inline-block"><img:src="ita"style="":draggable="true"@dragstart="dragCurrentStart($event,i, a)"@dragover="e=>e.preventDefault()"@dragenter="dragTargetEnter($event,i ,a)"@drop="dragEnd"><span class="delete" @click="showFiguredelete(i,a)">×</span></span>
<!-- <i v-if="v.image.length > 0" class="fa fa-minus-circle text-danger img-trash" @click.stop="delimage(i,a)"></i>--></div><img src="/assets/jeekshopskugoods/img/upload.png" @click="upimagea($event,i)"></div></td>
<!-- <td width="80">-->
<!-- <input type="hidden" class="input-sm form-control attr-status" v-model="v.status">-->
<!-- <i v-if="v.status==1" class="fa fa-toggle-on text-success fa-2x" @click="toggle(i,0)"></i>-->
<!-- <i v-else class="fa fa-toggle-off text-gray fa-2x" @click="toggle(i,1)"></i>-->
<!-- </td>--></tr></tbody></table><div class="hide"><input type="text" name="row[skus]" :value="productSkusStr"><input type="text" name="row[groups]" :value="attrGroupsStr"><input type="text" name="row[items]" :value="attrItemsStr"></div></div></div></div>
</div>
skugoods.js
define(['jquery', 'vue', 'skuimg'], function($, Vue, Skuimg) {'use strict';var jeekshopsku = {_init: function(d) {var f = { 'market_price': '', 'price': '', 'image': [] }; // 默认商品规格的字段this.vueInit(f, d);},vueInit: function(f, d) {var vm = new Vue({el: '#app',data() {return {attrGroups: d.groups,attrItems: d.items,productSkus: d.products,dragCurIndex: null, // 当前拖拽图片下标timer: null}},computed: {productSkusStr() {return JSON.stringify(this.productSkus)},attrGroupsStr() {return JSON.stringify(this.attrGroups)},attrItemsStr() {return JSON.stringify(this.attrItems)}},mounted() {Skuimg.init()},methods: {// 开始拖拽当前图片dragCurrentStart(e, index,a) {this.dragCurIndex = a;},// 图片拖拽排序dragTargetEnter(e,index,a) {e.preventDefault();if (this.timer) {clearTimeout(this.timer);}// console.log(this.productSkus[index].image)this.timer = setTimeout(()=>{let tmp = this.productSkus[index].image[a];this.productSkus[index].image.splice(a, 1, this.productSkus[index].image[this.dragCurIndex]);this.productSkus[index].image.splice(this.dragCurIndex, 1, tmp);this.dragCurIndex = index;},100)// console.log(this.productSkus[index].image)},// 拖拽结束清除定时器dragEnd() {clearTimeout(this.timer);},setAttrGroupName(i, e) {this.$set(this.attrGroups, i, e.target.value)},addRow() {var val = this.$refs['attr-group-name'].valueif ($.trim(val) == '') {Toastr.error("不能为空")return}if (val.indexOf(',') > -1) {Toastr.error("不能包含符号‘,’")return}this.attrGroups.push(val)this.attrItems.push([])this.$refs['attr-group-name'].value = ''},addChild(index) {var val = this.$refs['attr-item-name-' + index][0].valueif ($.trim(val) == '') {Toastr.error("不能为空")return}if (val.indexOf(',') > -1) {Toastr.error("不能包含符号‘,’")return}if (!val) return falseconsole.log(this.productSkus)if (this.attrItems[index]) {this.attrItems[index].push(val)} else {this.attrItems.push([val])this.productSkus.push( { 'attr':[val],'market_price': '', 'price': '', 'image': [] });}let oldtproductSkus=this.productSkus;this.$refs['attr-item-name-' + index][0].value = ""this.generateProducts()for (var i = 0; i < this.productSkus.length; i++){if (oldtproductSkus.hasOwnProperty(i) && oldtproductSkus[i].attr.length==1){this.productSkus[i].image=oldtproductSkus[i].imagethis.productSkus[i].market_price=oldtproductSkus[i].market_pricethis.productSkus[i].price=oldtproductSkus[i].price}else {for (var j = 0; j < oldtproductSkus.length; j++) {if (this.isEqual(this.productSkus[i].attr,oldtproductSkus[j].attr)) {this.productSkus[i].image = oldtproductSkus[j].imagethis.productSkus[i].market_price = oldtproductSkus[j].market_pricethis.productSkus[i].price = oldtproductSkus[j].price}}}// console.log(arr[i]);}},isEqual(arr1, arr2) {if (arr1.length !== arr2.length) {return false;}for (let i = 0; i < arr1.length; i++) {if (arr1[i] !== arr2[i]) {return false;}}return true;},upimagea(event,i) {let that = this;Skuimg.open(function(data) {console.log(i)console.log(that.productSkus)that.productSkus[i].image=that.productSkus[i].image.concat(data.url)// that.productSkus[i].image.push()// console.log(that.productSkus)Skuimg.close()})},upimage() {let that = this;Skuimg.open(function(data) {// console.log(i)console.log(that.productSkus)for (var i = 0; i < that.productSkus.length; i++){that.productSkus[i].image=that.productSkus[i].image.concat(data.url)// console.log(arr[i]);}// that.productSkus[0].image.push()// console.log(that.productSkus)Skuimg.close()})},getskus(event){this.inputValue = event.target.value; // 更新数据属性let newsku=JSON.parse(this.inputValue);this.productSkus=newsku.productsthis.attrItems=newsku.itemsthis.attrGroups=newsku.groupsconsole.log(1111)console.log(newsku); // 打印输入框的值},showFiguredelete(i,index){console.log(i)console.log(this.productSkus[i].image)// this.productSkus[i].image=this.productSkus[i].image.concat(data.url)this.productSkus[i].image.splice(index,1)},delimage(i,a) {console.log(a)console.log(this.productSkus[i][0]);// vm.$set(this.productSkus[i], 'image', '')// vm.productSkus[i].image.pop();},// toggle(i, j) {// vm.$set(vm.productSkus[i], 'status', j)// },removeElement1(arr, index) {arr.splice(index, 1);return arr;},removeChild(i, j) {let oldtproductSkus=this.productSkus;console.log(this.attrItems)this.removeElement1(this.attrItems[i],j)// this.attrItems[i].pop(j)this.generateProducts()for (var i = 0; i < this.productSkus.length; i++){if (oldtproductSkus[i].attr.length==1){this.productSkus[i].image=oldtproductSkus[i].imagethis.productSkus[i].market_price=oldtproductSkus[i].market_pricethis.productSkus[i].price=oldtproductSkus[i].price}else {for (var n = 0; n < oldtproductSkus.length; n++) {if (this.isEqual(this.productSkus[i].attr,oldtproductSkus[n].attr)) {this.productSkus[i].image = oldtproductSkus[n].imagethis.productSkus[i].market_price = oldtproductSkus[n].market_pricethis.productSkus[i].price = oldtproductSkus[n].price}}}// console.log(arr[i]);}},removeGroup(i) {let oldtproductSkus=this.productSkus;this.attrGroups.pop(i)if (this.attrItems[i]){this.attrItems.pop(i)}for (var i = 0; i < this.productSkus.length; i++){if (oldtproductSkus[i].attr.length==1){this.productSkus[i].image=oldtproductSkus[i].imagethis.productSkus[i].market_price=oldtproductSkus[i].market_pricethis.productSkus[i].price=oldtproductSkus[i].price}else {for (var n = 0; n < oldtproductSkus.length; n++) {if (this.isEqual(this.productSkus[i].attr,oldtproductSkus[n].attr)) {this.productSkus[i].image = oldtproductSkus[n].imagethis.productSkus[i].market_price = oldtproductSkus[n].market_pricethis.productSkus[i].price = oldtproductSkus[n].price}}}// console.log(arr[i]);}this.generateProducts()},generateProducts() {this.productSkus = this.descartes(this.attrItems)},descartes(array) {var arr = [].reduce.call(array, function(a, b) {var ret = [];a.forEach(function(a) {b.forEach(function(b) {ret.push(a.concat([b]));});});return ret;}, [[]]);var ret = [];arr.map(function(v, i) {var sku = { "attr": v };Object.assign(sku, f);ret.push(sku)});return ret;},batchSetAttrs(field) {var v = this.$refs['batch-' + field].valuevar v = isNaN(Number(v)) ? v : Number(v);var productSkus = this.productSkusfor (var i = 0; i < productSkus.length; i++) {productSkus[i][field] = v}this.productSkus = productSkus}}})},}return jeekshopsku;
});
skuimg.js
define(['jquery', 'upload', 'form'
], function($, Upload, Form) {'use strict';var skuimg = {html: '<div class="i-modal"><div class="i-content"><p>上传/选择图片</p><button data-upload-success="onSuccess" data-multiple="true" type="button" id="plupload-i-image" class="plupload" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp"><i class="fa fa-upload"></i> 上传</button><button type="button" id="fachoose-i-image" class="fachoose" data-mimetype="image/*" ><i class="fa fa-list"></i>选择</button><span class="close fa fa-close"></span></div></div>',css: "<style>.i-modal {background: rgba(0, 0, 0, 0.3); z-index: 9999; position: fixed;left: 0; top: 0; height: 100%; width: 100%;}.i-content{text-align: center;background: #fff; border-radius: 8px; width: 400px; height: 190px;position: absolute;left: 50%;top: 50%;-webkit-transform: translate(-50%, -50%);transform: translate(-50%, -50%);}.i-content button{width: 100px;height: 100px;color: #606266;border: 1px dashed #999;border-radius: 10px;background: none;margin: 0 5px;}.i-content button:hover{border-color: #409eff}.i-modal .i-content p {margin: 15px 0;}.i-modal .i-content .close{position: absolute;right: 5px; top: 5px; font-size: 20px;}</style>",el: '.i-modal',cb: function() {},open: function(cb) {var _this = thisthis.cb = cbUpload.api.custom['onSuccess'] = _this.cb$(this.el).show()},close: function() {$(this.el).hide()},init: function() {$(document.body).append(this.html)$(document.body).append(this.css)this.bindEvent()this.close()},bindEvent: function() {var _this = thisUpload.api.plupload('.plupload', $(_this.el))$(".fachoose", _this.el).on('click', function() {var multiple = $(this).data("multiple") ? $(this).data("multiple") : false;var mimetype = $(this).data("mimetype") ? $(this).data("mimetype") : '';var admin_id = $(this).data("admin-id") ? $(this).data("admin-id") : '';var user_id = $(this).data("user-id") ? $(this).data("user-id") : '';parent.Fast.api.open("general/attachment/select?element_id=" + $(this).attr("id") + "&multiple=" + multiple + "&mimetype=" + mimetype + "&admin_id=" + admin_id + "&user_id=" + user_id, __('Choose'), {callback: function(data) {console.log(data)// var arr = data.url.split(",");// data.url = arr;_this.cb(data)// console.log(data)}})})$('.close', _this.el).on('click', function() {_this.close()})$('.i-modal', document).on('click', function(e) {_this.close()})$('.i-content', '.i-modal').on('click', function(e) {e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true})}};return skuimg;
});
goods.js
define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'skugoods'], function($, undefined, Backend, Table, Form, Sku) {var Controller = {index: function () {// 初始化表格参数配置Table.api.init({extend: {index_url: 'goods/goods/index' + location.search,add_url: 'goods/goods/add',edit_url: 'goods/goods/edit',del_url: 'goods/goods/del',multi_url: 'goods/goods/multi',import_url: 'goods/goods/import',table: 'goods',}});var table = $("#table");// 初始化表格table.bootstrapTable({url: $.fn.bootstrapTable.defaults.extend.index_url,pk: 'id',sortName: 'id',maintainSelected: true,fixedColumns: true,fixedRightNumber: 1,columns: [[{checkbox: true},{field: 'id', title: __('Id')},{field: 'member_id', title: __('Member_id')},{field: 'title', title: __('Title'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},{field: 'sku', title: __('Sku'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},{field: 'upc', title: __('Upc'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},{field: 'image', title: __('Image'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.image},// {field: 'images', title: __('Images'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images},{field: 'price', title: __('Price'), operate:'BETWEEN'},{field: 'currency_unit', title: __('Currency_unit'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},{field: 'url', title: __('Url'), operate: 'LIKE', formatter: Table.api.formatter.url},{field: 'create_time', title: __('Create_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false},// {field: 'image_trans', title: __('Image_trans')},{field: 'button',width: "150px",title: __('转化图片'),table: table,// events: Controller.api.events.trans,buttons: [{name: 'click',title: __('转化图片'),classname: 'btn btn-xs btn-info btn-trans btn-click',icon: 'fa fa-magic',}],formatter: function (value, row, index) {var progress = "<div class='progress'><div class='progress-bar' role='progressbar' aria-valuenow='50' aria-valuemin='0' aria-valuemax='100' style='width:"+row['image_trans'].toFixed(2)+"%'>"+row['image_trans'].toFixed(2)+"</div></div>"var trans = ''if(row['image_trans']<100) trans = Table.api.buttonlink(this, this.buttons, value, row, index, 'button')transhtml = "<div class='trans'>" + trans + "</div>"return transhtml + progress;}},{field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}]]});//导出var submitForm = function (ids, layero) {var options = table.bootstrapTable('getOptions');console.log(options);var columns = [];$.each(options.columns[0], function (i, j) {if (j.field && !j.checkbox && j.visible && j.field != 'operate') {columns.push(j.field);}});var search = options.queryParams({});$("input[name=search]", layero).val(options.searchText);$("input[name=ids]", layero).val(ids);$("input[name=filter]", layero).val(search.filter);$("input[name=op]", layero).val(search.op);$("input[name=columns]", layero).val(columns.join(','));$("form", layero).submit();};var submitData = function (ids, layero) {var options = table.bootstrapTable('getOptions');console.log(options);var columns = [];$.each(options.columns[0], function (i, j) {if (j.field && !j.checkbox && j.visible && j.field != 'operate') {columns.push(j.field);}});var search = options.queryParams({});return search;};$(document).on("click", ".btn-export", function () {var ids = Table.api.selectedids(table);var page = table.bootstrapTable('getData');var all = table.bootstrapTable('getOptions').totalRows;console.log(ids, page, all);Layer.confirm("请选择导出的选项<form action='" + Fast.api.fixurl("goods/goods/export") + "' method='post' target='_blank'><input type='hidden' name='ids' value='' /><input type='hidden' name='filter' ><input type='hidden' name='op'><input type='hidden' name='search'><input type='hidden' name='columns'></form>", {title: '导出数据',btn: ["选中项(" + ids.length + "条)", "本页(" + page.length + "条)", "全部(" + all + "条)"],success: function (index,layero) {$(".layui-layer-btn a", layero).addClass("layui-layer-btn0");},yes: function (index, layero) {submitForm(ids.join(","), layero);return false;},btn2: function (index, layero) {var ids = [];$.each(page, function (i, j) {ids.push(j.id);});submitForm(ids.join(","), layero);return false;},btn3: function (index, layero) {submitForm("all", layero);return false;}});parent.Layer.close(index);});// 为表格绑定事件Table.api.bindevent(table);},add: function () {//获取sku库数据var d = { groups: [], items: [], products: [] }$('input[name="row[skutitle]"]').change(function() {// 当单选按钮的值发生变化时,这里的代码会被执行var selectedValue = $(this).val();console.log('选中的值是:', selectedValue);$.ajax({url:'skus/skus/getOne',type: 'GET',dataType: 'json',data: {ids: selectedValue,},success:function(res){console.log(res.data)var inputElement = document.getElementById('c-skutitles');inputElement.value = res.data;// $('#c-skutitles').val();inputElement.dispatchEvent(new Event('change'));}});});Sku._init(d);Controller.api.bindevent();},edit: function (row) {$('input[name="row[skutitle]"]').change(function() {// 当单选按钮的值发生变化时,这里的代码会被执行var selectedValue = $(this).val();console.log('选中的值是:', selectedValue);$.ajax({url:'skus/skus/getOne',type: 'GET',dataType: 'json',data: {ids: selectedValue,},success:function(res){console.log(res.data)var inputElement = document.getElementById('c-skutitles');inputElement.value = res.data;// $('#c-skutitles').val();inputElement.dispatchEvent(new Event('change'));}});});Sku._init(Config.skus);Controller.api.bindevent();},api: {bindevent: function () {Form.api.bindevent($("form[role=form]"));},}};return Controller;
});
项目代码 https://gitee.com/btzhyxjdmg/sku-plugin
相关文章:
fastadmin 后台商品sku(vue)
先上个效果图 首先先引入vue define([backend], function (Backend) {require.config({paths: {vue: /assets/jeekshopskugoods/libs/vue.min,skuimg: /assets/jeekshopskugoods/js/skuimg,skugoods: /assets/jeekshopskugoods/js/skugoods,layui: /assets/LayuiSpzj/layui/la…...
Qt显示一个hello world
一、显示思路 思路一:通过图形化方式,界面上创建出一个控件显示。 思路二:通过编写C代码在界面上创建控件显示。 二、思路一实现 点开 Froms 的 widget.ui,拖拽 label 控件,显示 hello world 即可。 qmake 基于 .…...
LeetCode 热题 100 53. 最大子数组和
LeetCode 热题 100 | 53. 最大子数组和 大家好,今天我们来解决一道经典的算法题——最大子数组和。这道题在 LeetCode 上被标记为中等难度,要求我们找出一个具有最大和的连续子数组,并返回其最大和。下面我将详细讲解解题思路,并…...
需求: 使用 minio 做一个 企业微信对话的下载、存储,利用deepseek进行对话回复
以下是基于企业微信会话存档API和MinIO对象存储实现对话记录下载与存储的完整方案,涵盖技术选型、接口对接、存储配置及安全性设计等核心环节: 一、技术架构设计 系统组成: 数据采集层:通过企业微信API拉取会话存档数据࿰…...
vulnhub靶场之【digitalworld.local系列】的bravery靶机
前言 靶机:digitalworld.local-bravery,IP地址为192.168.10.8 攻击:kali,IP地址为192.168.10.6 kali采用VMware虚拟机,靶机采用virtualbox虚拟机,网卡都为桥接模式 这里官方给的有两种方式,…...
JMeter 实战项目脚本录制最佳实践(含 BadBoy 录制方式)
JMeter 实战项目脚本录制最佳实践(含 BadBoy 录制方式) 一、项目背景 在软件测试过程中,使用 JMeter 进行性能测试和功能测试是常见的操作。本实战项目将详细介绍如何使用 JMeter 自带工具以及 BadBoy 进行脚本录制,并完善脚本以…...
数据库基础五(数据库环境变量配置详细教程)
1、在小皮的设置界面检测3306端口,保障3306端口可用; 2、在小皮的首面界面,启动MySQL; 3、进行环境变量设置,找到MySQL的路径,进行复制; 4、在Windows的搜索栏内,输入“环境变量”&a…...
Matlab 大量接单
分享一个matlab接私活、兼职的平台 1、技术方向满足任一即可 2、技术要求 3、最后 技术方向满足即可 MATLAB:熟练掌握MATLAB编程语言,能够使用MATLAB进行数据处理、机器学习和深度学习等相关工作。 机器学习、深度学习、强化学习、仿真、复现、算法、…...
【算法】链表题型总结
链表题型可分为快慢指针和虚拟头节点两种解题技巧。 快慢指针 使用两个指针(快指针和慢指针),以不同的速度遍历链表,解决与链表位置、环检测相关的问题。 反转链表 快慢指针,慢指针一次走一步,快指针一次…...
【C++】对字符串的常用操作
C 中的字符串操作主要通过两种方式实现:使用 C 风格的字符串(字符数组)和使用 C 标准库中的 std::string 类型。大多数现代 C 程序使用 std::string 进行字符串处理,因为它提供了许多便捷的成员函数来处理字符串操作。以下是常见的…...
人工智能AI在汽车设计领域的应用探索
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活…...
Linux mkdir 命令
Linux mkdir(英文全拼:make directory)命令用于创建目录。 语法 mkdir [-p] dirName 参数说明: -p 确保目录名称存在,不存在的就建一个。 实例 在工作目录下,建立一个名为 runoob 的子目录 : mkdir …...
gin框架学习笔记
初始gin package mainimport "github.com/gin-gonic/gin"type Response struct {Code int json:"code"Msg string json:"msg"Data any json:"data" }func index(c *gin.Context) {c.JSON(200, Response{Code: 0,Msg: "1…...
什么是预训练语言模型下游任务?
问题:Word2Vec模型是预训练模型吗? 由于训练的特性,word2Vec模型一定是与训练模型。给定一个词先使用独热编码然后使用预训练好的Q矩阵得到这个词的词向量。这里指的是词向量本身就是预训练的语言模型。 什么是下游任务? 在自然…...
cursor 弹出在签出前,请清理仓库工作树 窗口
问题出现的背景:是因为我有两台电脑开发,提交后,另一个电脑的代码是旧的,这个时候我想拉取最新的代码,就会出现如下弹窗,因为这个代码暂存区有记录或者工作区有代码的修改,所以有冲突࿰…...
Ubuntu2204下使用NVIDIA GeForce RTX 4090进行DeepSeek-R1-Distill-Llama-8B模型微调
Ubuntu2204下使用NVIDIA GeForce RTX 4090进行DeepSeek-R1-Distill-Llama-8B模型微调 环境准备创建Python微调环境准备数据集准备模型文件 模型微调模型预测原始模型预测微调模型预测 使用unsloth,可以方便地对大模型进行微调。以微调DeepSeek-R1-Distill-Llama-8B为…...
Ubuntu20.04安装Redis
目录 切换到root用户 使用 apt install redis 安装redis 修改配置文件 编辑 重新启动服务器 使用Redis客户端连接服务器 切换到root用户 如果没有切换到root用户的,切换到root用户。 使用 apt install redis 安装redis 遇到y/n直接y即可。 redis安装好之…...
【Word2Vec】Skip-gram 的直观理解(深入浅出)
01 什么是skip-gram 一句话来说就是,给定中心词,然后预测其周围的词: 02 模型结构 对于skip-gram来说,输入是一个[1 x V]维的ont-hot向量,其中V为词表大小,值为1的那一项就表示我们的中心词。经过一个[V x…...
MQ 笔记
什么是消息队列? 消息队列(Message Queue, MQ)是一种用于在分布式系统中传递消息的中间件技术。 它允许应用程序通过发送和接收消息进行异步通信。 消息队列的核心思想是解耦生产者和消费者,生产者将消息发送到队列中ÿ…...
leetcode第216题组合总和Ⅲ
原题出于leetcode第216题https://leetcode.cn/problems/combination-sum-iii/description/题目为: 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表…...
【零基础C语言】第四节 数组
【零基础C语言系列】 【零基础C语言】第一节 C语言概述【数制进制码制】-CSDN博客 【零基础C语言】第二节 数据类型、运算符、表达式-CSDN博客 【零基础C语言】第三节 控制结构-CSDN博客 一、一维数组...
20250225-代码笔记03-class CVRPModel AND other class
文章目录 前言一、class CVRPModel(nn.Module):__init__(self, **model_params)函数功能函数代码 二、class CVRPModel(nn.Module):pre_forward(self, reset_state)函数功能函数代码 三、class CVRPModel(nn.Module):forward(self, state)函数功能函数代码 四、def _get_encodi…...
京准电钟快讯:NTP时钟同步服务在智造行业应用
京准电钟快讯:NTP时钟同步服务在智造行业应用 京准电钟快讯:NTP时钟同步服务在智造行业应用 一、NTP技术概述 基本原理 NTP(Network Time Protocol)是一种用于同步计算机系统时间的网络协议,通过分层时钟源ÿ…...
【Qt】详细介绍如何在Visual Studio Code中编译、运行Qt项目
Visual Studio Code一只用的顺手,写Qt的时候也能用VS Code开发就方便多了。 理论上也不算困难,毕竟Qt项目其实就是CMake(QMake的情况这里就暂不考虑了)项目,VS Code在编译、运行CMake项目还是比较成熟的。 这里笔者打…...
jsherp importItemExcel接口存在SQL注入
一、漏洞简介 很多人说管伊佳ERP(原名:华夏ERP,英文名:jshERP)是目前人气领先的国产ERP系统虽然目前只有进销存财务生产的功能,但后面将会推出ERP的全部功能,有兴趣请帮点一下 二、漏洞影响 …...
Node.js, Bun, Deno 比较概述
以下是 Node.js、Bun 和 Deno 的对比分析 概览 对比维度Node.jsDenoBun首次发布200920202022创始人Ryan DahlRyan Dahl(Node.js 原作者)Jarred Sumner运行时引擎V8(Chrome)V8(Chrome)JavaScriptCore&#…...
大白话跨域问题怎么破,解决方法有啥?
大白话跨域问题怎么破,解决方法有啥? 啥是跨域问题 咱先说说啥是跨域。你可以把每个网站想象成一个独立的小房子,每个房子都有自己的地址(也就是域名)。正常情况下,一个房子里的东西只能在这个房子里用&a…...
DeepSeek R1满血+火山引擎详细教程
DeepSeek R1满血火山引擎详细教程 一、安装Cherry Studio。 Cherry Studio AI 是一款强大的多模型 AI 助手,支持 iOS、macOS 和 Windows 平台。可以快速切换多个先进的 LLM 模型,提升工作学习效率。下载地址 https://cherry-ai.com/ 认准官网,无强制注册。 这…...
Pytorch中的ebmedding到底怎么理解?
在 PyTorch 中,nn.Embedding 是一个用于处理离散符号映射到连续向量空间的模块。它通常用于自然语言处理(NLP)任务(如词嵌入)、处理分类特征,或任何需要将离散索引转换为密集向量的场景。 核心理解 功能&am…...
【JAVA面试题】什么是面向对象?谈谈你对面向对象的理解。
【JAVA面试题】什么是面向对象?谈谈你对面向对象的理解 在 Java 面试中,面向对象 是一个高频考点。它不仅是一种编程思想,更是现代软件开发的核心方法论。本文将从 面向对象的概念、与面向过程的对比、以及 面向对象的三大特性(封…...
【C】链式二叉树算法题1 -- 单值二叉树
leetcode链接https://leetcode.cn/problems/univalued-binary-tree/description/ 1 题目描述 如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。 示例 1࿱…...
基于单片机的GPS定位系统设计
1 系统硬件 1.1单片机模块 单片机的种类和型号可以说是有成百上千种,很多大的公司和企业都生产开发自己的单片机芯片,并且广泛应用于各种产品。Intel、 philips、 摩托罗拉、凌阳、宏晶等等种类繁多。大体上可以分为51系列单片机和非51系列单片机。 其…...
[React]Render Props、自定义Hooks和Context API优化详解
关于React中的Render Props、自定义Hooks和Context API优化的详解。我需要根据我搜索到的资料来综合回答这三个部分。首先,我需要分别理解每个概念的定义、用途以及优化方法。 首先看Render Props。根据Render Props是一种通过传递函数作为prop来共享组件间逻辑的技…...
关于大型语言模型的结构修剪
本文介绍了一种名为 **LLM-Pruner** 的方法,用于对大型语言模型(LLMs)进行结构化剪枝,以减少模型大小和计算需求,同时保留其多任务解决和语言生成能力。LLM-Pruner 通过依赖检测和重要性估计实现高效剪枝,并…...
【语法】C++中string类中的两个问题及解答
贴主在学习string类时遇到过两个困扰我的问题,今天拿出来给大家分享一下我是如何解决的 一、扩容时capacity的增长问题 在string的capacity()接口中,调用的是这个string对象的容量(可以存多少个有效字符),而size()是调用的string对象现在有…...
Linux(centOS) 命令提示符格式修改(PS1)
1. 命令提示符的组成 命令提示符(PS1)通常由以下部分组成: 部分示例说明[ 和 ][...]提示符的开头和结尾,用于视觉分隔。用户名root 或 tianjiajie当前登录的用户。root 是超级用户,普通用户可能是其他名称。分隔用户…...
QwenVL 2.5-本地安装编译布署全教程
开篇 DeepSeek开源后我国又开源了一个震撼大模型,QwenVL2.5,这是一个多模态的模形,它可以认图、识图、更能作图,还能读懂video。 Qwen2.5-VL 的主要特点如下所示: 感知更丰富的世界:Qwen2.5-VL 不仅擅长识别常见物体,如花、鸟、鱼和昆虫,还能够分析图像中的文本、图表…...
Hutool - JWT:轻松玩转 JSON Web Token
各位开发者朋友们,在现代的前后端分离开发模式里,身份验证和授权可是至关重要的环节。JSON Web Token(JWT)作为一种轻量级的身份验证和授权机制,在很多项目中都得到了广泛应用。它可以在客户端和服务器之间安全地传输信…...
2024年第十五届蓝桥杯大赛软件赛省赛Python大学A组真题解析《更新中》
文章目录 试题A: 拼正方形(本题总分:5 分)解析答案试题B: 召唤数学精灵(本题总分:5 分)解析答案试题C: 数字诗意解析答案试题D:回文数组试题A: 拼正方形(本题总分:5 分) 【问题描述】 小蓝正在玩拼图游戏,他有7385137888721 个2 2 的方块和10470245 个1 1 的方块,他需…...
【2025年2月28日稳定版】小米路由器4C刷机Immortalwrt 23.05.4系统搭载mentohust 0.3.1插件全记录
小米路由器4C刷机Immortalwrt系统搭载mentohust插件全记录 首先将路由器按住后面的reset,用一个针插进去然后等待5s左右,松开,即可重置路由器。 然后要用物理网线物理连接路由器Lan口和电脑,并将路由器WAN口连接至网口。确保电脑…...
W3C标准和ES规范之一文通
W3C标准和ES规范之一文通 以下是关于W3C标准和ES规范的透彻解析,通过结构化对比和生活化类比帮助理解和记忆: 一、核心概念对比(总览) 维度W3C标准ES规范(ECMAScript)定位Web技术的建筑蓝图JavaScript的语…...
Linux:应用层协议
协议是一种 "约定". socket api的接口, 在读写数据时, 都是按 "字符串" 的方式来发送接收的. 如果我们要传输一些"结构化的数据" 怎么办呢? 无论我们采用什么方案, 只要保证, 一端发送时构造的数据, 在另一端能够正确的进行解析, 就是ok的. 这种…...
深度学习五大模型:CNN、Transformer、BERT、RNN、GAN详细解析
# 深度学习五虎将:当CNN遇见Transformer的奇幻漂流 ## 序章:AI江湖的兵器谱排行 2012年,多伦多大学的厨房里,Hinton的学生们用GPU煎了个"AlexNet"荷包蛋,从此开启了深度学习的热兵器时代。如今五大模型各显…...
微服务组件详解——sentinel
1.启动sentinel: 下载jar sentinel-dashboard-1.8.0.jar 使用以下命令直接运行 jar 包(JDK 版本必须≥ 1.8): java -Dserver.port9999 -jar D:\sentinel-dashboard-1.8.0.jar 控制台访问地址:http://localhost:9999…...
波导阵列天线 学习笔记11双极化全金属垂直公共馈电平板波导槽阵列天线
摘要: 本communicaition提出了一种双极化全金属垂直公共馈电平板波导槽阵列天线。最初提出了一种公共馈电的单层槽平板波导来实现双极化阵列。此设计消除了传统背腔公共馈电的复杂腔体边缘的必要性,提供了一种更简单的天线结构。在2x2子阵列种发展了宽十…...
swift 开发效率提升工具
安装github copliot for xcode github/CopilotForXcode brew install --cask github-copilot-for-xcode安装swiftformat for xcode brew install swiftformatXcode Swift File代码格式化-SwiftFormat...
3-5 WPS JS宏 工作表的移动与复制学习笔记
************************************************************************************************************** 点击进入 -我要自学网-国内领先的专业视频教程学习网站 *******************************************************************************************…...
Centos7部署k8s(单master节点安装)
单master节点部署k8s集群(Centos) 一、安装前准备 1、修改主机名 按照资源准备修改即可 # master01 hostnamectl set-hostname master01 ; bash # node1 hostnamectl set-hostname node1 ; bash # node2 hostnamectl set-hostname node2 ; bash2、修改hosts文件 以下命令所…...
Tomcat
1.Tomcat是什么? Tomcat 是一个开源的、轻量级的 Servlet 容器,也被称为 Web 服务器,由 Apache 软件基金会的 Jakarta 项目开发,在 Java Web 开发领域应用广泛。 1)Servlet 容器:Servlet 是 Java 语言编写…...
基于SpringBoot+Vue的电影订票及评论网站的设计与实现(源码+SQL脚本+LW+部署讲解等)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...