!60 库存优化

Merge pull request !60 from develop
This commit is contained in:
赵世界 2022-08-23 11:57:15 +00:00 committed by Gitee
commit a3351b1d90
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
16 changed files with 105 additions and 48 deletions

View File

@ -63,10 +63,10 @@ class GoodsSkusExport implements FromCollection, ShouldAutoSize
$arr[1] = $item['goods']['title'];
$arr[2] = $item['goods']['type']['name'];
$arr[3] = $item['goods']['brand']['name'];
$arr[4] = $item['goods']['sku_code'];
$arr[5] = $item['goods']['title'];
$arr[6] = $item['goods']['cost'];
$arr[7] = $item['goods']['stock'];
$arr[4] = $item['sku_code'];
$arr[5] = $item['title'];
$arr[6] = $item['cost'];
$arr[7] = $item['stock'];
$bodyData[] = $arr;
}
unset($arr);

View File

@ -458,6 +458,6 @@ class GoodsSkusController extends Controller
{
$type = $request->get('exportType');
ob_end_clean();
return Excel::download(new GoodsSkusExport($type), $type, '.xlsx');
return Excel::download(new GoodsSkusExport($type), $type . '.xlsx');
}
}

View File

@ -1 +1 @@
#nprogress{pointer-events:none}#nprogress .bar{background:#29d;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #29d,0 0 5px #29d;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:2px solid transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(1turn)}}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.loss[data-v-9c19b6e0]{position:relative}.table[data-v-9c19b6e0]{margin-top:40px;position:relative}.btn[data-v-9c19b6e0]{float:right}[data-v-9c19b6e0] .cell{display:flex;align-items:center}.commodityimg[data-v-9c19b6e0]{width:59px;height:59px;background:hsla(0,0%,89%,.39);opacity:1;display:block;margin-right:12px}.Img[data-v-9c19b6e0]{width:100%;height:100%}.confirmbtn[data-v-9c19b6e0]{width:114px;height:44px;border-radius:3px;margin-top:21px;margin-bottom:8px}.import-right[data-v-9c19b6e0]{margin-top:30px}.import-right a[data-v-9c19b6e0]{text-decoration:none;color:#000}[data-v-9c19b6e0] .btn11{padding:0;width:14px;height:14px}[data-v-9c19b6e0] .btn11 img{width:100%;height:100%}.page[data-v-9c19b6e0]{margin-top:20px}
#nprogress{pointer-events:none}#nprogress .bar{background:#29d;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #29d,0 0 5px #29d;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:2px solid transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(1turn)}}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.loss[data-v-3c585b76]{position:relative}.table[data-v-3c585b76]{margin-top:40px;position:relative}.btn[data-v-3c585b76]{float:right}[data-v-3c585b76] .cell{display:flex;align-items:center}.commodityimg[data-v-3c585b76]{width:59px;height:59px;background:hsla(0,0%,89%,.39);opacity:1;display:block;margin-right:12px}.Img[data-v-3c585b76]{width:100%;height:100%}.confirmbtn[data-v-3c585b76]{width:114px;height:44px;border-radius:3px;margin-top:21px;margin-bottom:8px}.import-right[data-v-3c585b76]{margin-top:30px}.import-right a[data-v-3c585b76]{text-decoration:none;color:#000}[data-v-3c585b76] .btn11{padding:0;width:14px;height:14px}[data-v-3c585b76] .btn11 img{width:100%;height:100%}.page[data-v-3c585b76]{margin-top:20px}

View File

@ -1 +1 @@
<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>erp</title><link href="css/chunk-3ad98ce0.c0acee9a.css" rel="prefetch"><link href="css/chunk-3c532032.e437602b.css" rel="prefetch"><link href="css/chunk-3e22dfcf.0c73552c.css" rel="prefetch"><link href="css/chunk-4da2392c.0ff9404a.css" rel="prefetch"><link href="css/chunk-516d32cc.90c055c4.css" rel="prefetch"><link href="css/chunk-5ed10db2.12c276ba.css" rel="prefetch"><link href="css/chunk-62101cb8.67947a26.css" rel="prefetch"><link href="css/chunk-959f9a24.ed76f224.css" rel="prefetch"><link href="css/chunk-ba60ef82.e437602b.css" rel="prefetch"><link href="css/chunk-dce0c6c0.3d009b2d.css" rel="prefetch"><link href="css/chunk-dee9adee.5a9e4325.css" rel="prefetch"><link href="js/chunk-2d23156c.6af6d42e.js" rel="prefetch"><link href="js/chunk-3ad98ce0.d4852cea.js" rel="prefetch"><link href="js/chunk-3c532032.adbdd0d5.js" rel="prefetch"><link href="js/chunk-3e22dfcf.17a21be0.js" rel="prefetch"><link href="js/chunk-4da2392c.ab05e274.js" rel="prefetch"><link href="js/chunk-516d32cc.5004e058.js" rel="prefetch"><link href="js/chunk-5ed10db2.f7bc8652.js" rel="prefetch"><link href="js/chunk-62101cb8.df8fe332.js" rel="prefetch"><link href="js/chunk-959f9a24.63a93281.js" rel="prefetch"><link href="js/chunk-ba60ef82.bd8a71c1.js" rel="prefetch"><link href="js/chunk-dce0c6c0.51e6f004.js" rel="prefetch"><link href="js/chunk-dee9adee.6297d8e4.js" rel="prefetch"><link href="css/app.62fa08a2.css" rel="preload" as="style"><link href="css/chunk-vendors.a6a7f90c.css" rel="preload" as="style"><link href="js/app.f8eef007.js" rel="preload" as="script"><link href="js/chunk-vendors.dc4080e5.js" rel="preload" as="script"><link href="css/chunk-vendors.a6a7f90c.css" rel="stylesheet"><link href="css/app.62fa08a2.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but erp doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="js/chunk-vendors.dc4080e5.js"></script><script src="js/app.f8eef007.js"></script></body></html>
<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>erp</title><link href="css/chunk-3ad98ce0.c0acee9a.css" rel="prefetch"><link href="css/chunk-3c532032.e437602b.css" rel="prefetch"><link href="css/chunk-3e22dfcf.0c73552c.css" rel="prefetch"><link href="css/chunk-516d32cc.90c055c4.css" rel="prefetch"><link href="css/chunk-5ed10db2.12c276ba.css" rel="prefetch"><link href="css/chunk-62101cb8.67947a26.css" rel="prefetch"><link href="css/chunk-7d4c6d10.2d7ae665.css" rel="prefetch"><link href="css/chunk-959f9a24.ed76f224.css" rel="prefetch"><link href="css/chunk-ba60ef82.e437602b.css" rel="prefetch"><link href="css/chunk-dce0c6c0.3d009b2d.css" rel="prefetch"><link href="css/chunk-dee9adee.5a9e4325.css" rel="prefetch"><link href="js/chunk-2d23156c.6af6d42e.js" rel="prefetch"><link href="js/chunk-3ad98ce0.d4852cea.js" rel="prefetch"><link href="js/chunk-3c532032.adbdd0d5.js" rel="prefetch"><link href="js/chunk-3e22dfcf.17a21be0.js" rel="prefetch"><link href="js/chunk-516d32cc.5004e058.js" rel="prefetch"><link href="js/chunk-5ed10db2.f7bc8652.js" rel="prefetch"><link href="js/chunk-62101cb8.df8fe332.js" rel="prefetch"><link href="js/chunk-7d4c6d10.37608443.js" rel="prefetch"><link href="js/chunk-959f9a24.63a93281.js" rel="prefetch"><link href="js/chunk-ba60ef82.bd8a71c1.js" rel="prefetch"><link href="js/chunk-dce0c6c0.51e6f004.js" rel="prefetch"><link href="js/chunk-dee9adee.c53fcd10.js" rel="prefetch"><link href="css/app.62fa08a2.css" rel="preload" as="style"><link href="css/chunk-vendors.a6a7f90c.css" rel="preload" as="style"><link href="js/app.e9757350.js" rel="preload" as="script"><link href="js/chunk-vendors.dc4080e5.js" rel="preload" as="script"><link href="css/chunk-vendors.a6a7f90c.css" rel="stylesheet"><link href="css/app.62fa08a2.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but erp doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="js/chunk-vendors.dc4080e5.js"></script><script src="js/app.e9757350.js"></script></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -76,3 +76,12 @@ export function imgUpload(data, item) {
data,
});
}
// 表格导出
export function tableExport(params) {
return http({
url: "/goods_skus/export",
method: "get",
params,
});
}

View File

@ -66,8 +66,20 @@
</el-option>
</el-select>
</el-form-item>
<el-form-item label="创建时间:">
<el-form-item>
<div class="block">
<el-select
v-model="form.keyword_type"
style="width: 80px; margin-right: 5px; margin-left: 10px"
>
<el-option
v-for="item in options3"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
<el-date-picker
v-model="value1"
type="datetimerange"
@ -76,7 +88,7 @@
end-placeholder="结束时间"
value-format="yyyy-MM-dd HH:mm:ss"
@change="getSTime"
style="width: 190px"
style="width: 180px"
>
</el-date-picker>
</div>
@ -165,7 +177,7 @@
<span slot="footer" class="dialog-footer">
<el-button @click="Tableexport = false"> </el-button>
<el-button type="primary" @click="derivation()"> </el-button>
<!-- <a :href="`http://erp.staging.miaoxuan66.cn/goods_skus/export`"> </a> -->
<!-- <a href="/goods_skus/export"></a> -->
</span>
</el-dialog>
@ -335,25 +347,25 @@
<el-table-column sortable label="订单" min-width="80">
<template slot-scope="scope">
<div>
<span v-if="shopOrder[scope.row.daily.sku_id]">{{
<!-- <span v-if="shopOrder[scope.row.daily.sku_id]">{{
shopOrder[scope.row.daily.sku_id].total
}}</span>
<span v-else>0</span>
<span v-else>0</span> -->
<span>{{ scope.row.order_goods_num }}</span>
</div>
<el-popover
placement="right-start"
width="200"
trigger="hover"
v-if="shopOrder[scope.row.daily.sku_id]"
v-if="scope.row.order_detail.length !== 0"
>
<div>
<p
v-for="(j, index) in shopOrder[scope.row.daily.sku_id]
.items"
<span
v-for="(j, index) in scope.row.order_detail"
:key="index"
>
{{ j.shop_name }} : {{ j.num }}
</p>
<div>{{ j.shop.name }}:{{ j.number }}</div>
</span>
</div>
<el-button class="btn11" type="text" slot="reference"
><img src="../../css/img/眼睛.png" alt=""
@ -403,14 +415,29 @@
</el-table-column>
<el-table-column prop="stock" sortable label="库存">
</el-table-column>
<el-table-column prop="address" sortable label="盘点">
<template slot-scope="scope">
<div v-if="stock">
<el-input v-model="scope.row.daily.inventory"></el-input>
</div>
<div v-else>{{ scope.row.daily.inventory }}</div>
<el-popover
placement="right-start"
width="100"
trigger="hover"
:content="
scope.row.daily.inventory_time
? scope.row.daily.inventory_time
: ''
"
>
<div v-if="!stock" slot="reference">
{{ scope.row.daily.inventory }}
</div>
</el-popover>
</template>
</el-table-column>
<el-table-column prop="status" label="状态"> </el-table-column>
<el-table-column label="操作" width="100">
<template slot-scope="scope">
@ -517,7 +544,13 @@
<script>
import axios from "axios";
import { goods_types, Brand_goods_types } from "../../api/rankingData.js";
import { goods, update, singleUpdate, shops } from "../../api/goods";
import {
goods,
update,
singleUpdate,
shops,
tableExport,
} from "../../api/goods";
export default {
data() {
return {
@ -531,7 +564,7 @@ export default {
tableData: [], //
shopsData: [], //
sku_code: {}, //
shopOrder: {}, //
// shopOrder: {}, //
options: [
{
id: "1",
@ -559,8 +592,26 @@ export default {
value: "cost",
label: "成本表",
},
], //
], //
value: "", //
options3: [
{
value: "stock",
label: "库存",
},
{
value: "cost",
label: "成本",
},
{
value: "loss_num",
label: "损耗",
},
{
value: "reserve",
label: "预留",
},
], //
//
form: {
goods_title: "", //
@ -568,6 +619,7 @@ export default {
brand_id: "", // id
sku_title: "", //
status: "", //
keyword_type: "stock", //
keyword_value: "", //
},
Paginationdata: {}, //
@ -630,11 +682,11 @@ export default {
},
//
getShop() {
shops(this.sku_code).then((res) => {
this.shopOrder = res.data;
});
},
// getShop() {
// shops(this.sku_code).then((res) => {
// this.shopOrder = res.data;
// });
// },
//
getList() {
@ -660,7 +712,8 @@ export default {
this.sku_code = {
sku_code: this.shopsData,
};
this.getShop();
console.log(this.tableData);
// this.getShop();
});
},
@ -691,6 +744,7 @@ export default {
}
goods(newObj).then((res) => {
this.tableData = res.data.data;
console.log(this.tableData, 111111);
this.tableData = this.tableData.map((item) => {
item = {
...item,
@ -913,11 +967,7 @@ export default {
//
derivation() {
let data = {
exportType: this.value,
};
console.log(data);
this.Tableexport = false;
window.open('/goods_skus/export?exportType=' + this.value);
},
//
@ -932,9 +982,7 @@ export default {
//
getSTime(val) {
val.forEach((item, index, ary) => {
this.form.keyword_value = item + "-" + item;
});
this.form.keyword_value = val.join(" - ");
},
//

View File

@ -19,7 +19,7 @@ Route::get('/', function () {
header('Location: ' . url()->current() . "/dist");
});
Route::get('goods_skus/export', [GoodsSkusController::class, 'export'])->name('goods_skus.export')->middleware('check.permissions');
Route::get('goods_skus/export', [GoodsSkusController::class, 'export'])->name('goods_skus.export');
Route::get('goods/import/template', [GoodsController::class, 'download'])->name('download.goods_import.template');