Merge branch 'develop' of gitee.com:hzchunfen/erp into develop

This commit is contained in:
赵世界 2022-09-07 07:49:14 +08:00
commit 1da2e43dd4
21 changed files with 19826 additions and 3557 deletions

File diff suppressed because it is too large Load Diff

View File

@ -7,9 +7,10 @@
</div> </div>
</template> </template>
<script> <script>
export default { export default {
}; };
</script> </script>
<style lang="scss"></style> <style lang="scss">
</style>

View File

@ -1,169 +0,0 @@
<template>
<div class="m-map">
<div class="search"
v-if="placeSearch">
<div id="js-result"
v-show="searchKey"
class="result"></div>
</div>
<div id="js-container"
class="map">正在加载数据 ...</div>
</div>
</template>
<script>
import remoteLoad from '@/util/remoteLoad.js'
window._AMapSecurityConfig = {
securityJsCode: '4c7f32be1ae23595dd423fbdf337df3f',
}
export default {
name: 'MapDrag',
props: {
searchKey: {
default: '',
},
},
data() {
return {
// searchKey: "",
placeSearch: null,
dragStatus: false,
AMapUI: null,
AMap: null,
city: '',
geolocation: null,
}
},
watch: {
searchKey() {
if (this.searchKey === '') {
this.placeSearch.clear()
}
},
},
async created() {
// API
if (window.AMap && window.AMapUI) {
this.initMap()
// APIAPI
} else {
await remoteLoad(
'https://webapi.amap.com/maps?v=2.0&key=4b083a38fc17ad7c5e3df667931e0cf0'
)
await remoteLoad('https://webapi.amap.com/ui/1.1/main.js')
this.initMap()
}
},
methods: {
//
handleSearch() {
console.log(this.searchKey, '33333oooo')
if (this.searchKey) {
this.placeSearch.search(this.searchKey)
}
},
//
initMap() {
// PositionPickerloadUI 'ui/'
const AMapUI = (this.AMapUI = window.AMapUI)
const AMap = (this.AMap = window.AMap)
const that = this
AMapUI.loadUI(['misc/PositionPicker'], (PositionPicker) => {
const mapConfig = {
zoom: 16,
}
const map = new AMap.Map('js-container', mapConfig)
//
AMap.plugin('AMap.CitySearch', function () {
const citySearch = new AMap.CitySearch()
console.log('citySearch', citySearch)
//
AMap.plugin('AMap.PlaceSearch', () => {
that.placeSearch = new AMap.PlaceSearch({
pageSize: 5,
pageIndex: 1,
citylimit: false,
map: map,
panel: 'js-result',
// city: that.city, //
})
AMap.Event.addListener(
that.placeSearch,
'listElementClick',
function (e) {
that.$emit('listElementClick', e)
}
)
AMap.Event.addListener(
that.placeSearch,
'markerClick',
function (e) {
that.$emit('listElementClick', e)
}
)
})
// citySearch.getLocalCity(function (status, result) {
// console.log('getLocalCity', status, result)
// if (status === 'complete' && result.info === 'OK') {
// // result
// that.city = result.adcode
// }
// })
})
//
AMap.plugin(
['AMap.ToolBar', 'AMap.Scale', 'AMap.Geolocation'],
function () {
map.addControl(
new AMap.ToolBar({
position: 'RB',
})
)
map.addControl(
new AMap.Scale({
position: 'LB',
})
)
}
)
//
const positionPicker = new PositionPicker({
mode: 'dragMap', // 'dragMap''dragMarker''dragMap'
map: map, //
})
//
positionPicker.start()
})
},
},
}
</script>
<style lang="css" scoped>
.m-map {
max-width: 700px;
max-height: 462px;
position: relative;
}
.m-map .map {
min-width: 700px;
min-height: 462px;
}
.m-map .search {
position: absolute;
top: 10px;
left: 10px;
width: 285px;
z-index: 1;
}
.m-map .result {
max-height: 300px;
overflow: auto;
margin-top: 10px;
}
</style>

View File

@ -6,7 +6,6 @@ import ElementUI from "element-ui";
import "element-ui/lib/theme-chalk/index.css"; import "element-ui/lib/theme-chalk/index.css";
import "@/css/style.css"; import "@/css/style.css";
import "./router/index2"; import "./router/index2";
import axios from "axios";
// import Router from 'vue-router' // import Router from 'vue-router'
// const routerPush = Router.prototype.push // const routerPush = Router.prototype.push

View File

@ -11,7 +11,7 @@ const list = [
{ {
path: "GOODS_LIST", path: "GOODS_LIST",
name: "商品列表", name: "商品列表",
component: () => import("../views/yingyeting/yingyeting.vue"), component: () => import("../views/goods/goods.vue"),
meta: { meta: {
keepAlive: true, keepAlive: true,
}, },
@ -19,7 +19,7 @@ const list = [
{ {
path: "GOODS_TYPE", path: "GOODS_TYPE",
name: "商品种类", name: "商品种类",
component: () => import("../views/home/home.vue"), component: () => import("../views/goodsType/goodsType.vue"),
}, },
{ {
path: "GOODS_BRAND", path: "GOODS_BRAND",
@ -44,17 +44,17 @@ const list = [
{ {
path: "SYSTEM_LOG", path: "SYSTEM_LOG",
name: "系统日志", name: "系统日志",
component: () => import("../views/shuju/shuju.vue"), component: () => import("../views/logs/logs.vue"),
}, },
{ {
path: "GOODS_LOG", path: "GOODS_LOG",
name: "商品记录", name: "商品记录",
component: () => import("../views/shuju/record.vue"), component: () => import("../views/logs/record.vue"),
}, },
{ {
path: "ADDGOODS", path: "ADDGOODS",
name: "新建商品", name: "新建商品",
component: () => import("../views/yingyeting/addgoods/addgoods.vue"), component: () => import("../views/goods/addgoods/addgoods.vue"),
}, },
{ {
path: "/", path: "/",

View File

@ -18,8 +18,8 @@
</template> </template>
<script> <script>
import axios from "axios"; import axios from "axios";
export default { export default {
data() { data() {
return { return {
checked: false, // checked: false, //
@ -104,20 +104,20 @@
this.setCookie("", "", false, -1); this.setCookie("", "", false, -1);
}, },
}, },
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.backimg { .backimg {
width: 100%; width: 100%;
height: 1080px; height: 1080px;
background-image: url("./../css/img/组 32.png"); background-image: url("./../css/img/组 32.png");
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: 100%; background-size: 100%;
position: relative; position: relative;
} }
.sign { .sign {
width: 400px; width: 400px;
height: 500px; height: 500px;
position: absolute; position: absolute;
@ -187,5 +187,5 @@
.el-checkbox { .el-checkbox {
color: rgba(43, 83, 236); color: rgba(43, 83, 236);
} }
} }
</style> </style>

View File

@ -1,14 +1,12 @@
<template> <template>
<div class="conent"> <div class="conent">
<!-- 新增按钮 --> <!-- 新增按钮 -->
<div class="btn">
<el-button type="primary" @click="handAdd">新增</el-button> <el-button type="primary" @click="handAdd">新增</el-button>
</div>
<!-- 列表 --> <!-- 列表 -->
<div class="table"> <div class="table" style="margin-top: 20px">
<el-table ref="multipleTable" :data="tableData" tooltip-effect="dark" style="width: 100%" <el-table ref="multipleTable" :data="tableData" tooltip-effect="dark" style="width: 100%"
@selection-change="handleSelectionChange"> @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55"> </el-table-column>
<el-table-column prop="name" label="商品品牌"> </el-table-column> <el-table-column prop="name" label="商品品牌"> </el-table-column>
<el-table-column prop="" label="操作"> <el-table-column prop="" label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
@ -19,6 +17,14 @@
</el-table> </el-table>
</div> </div>
<!-- 分页功能 -->
<div class="block">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page="current_page" :page-sizes="[15, 50, 100]" :page-size="per_page"
layout="total, sizes, prev, pager, next, jumper" :total="Paginationdata.total">
</el-pagination>
</div>
<!-- 新增品牌对话框 --> <!-- 新增品牌对话框 -->
<el-dialog title="新增品牌" :visible.sync="dialogFormVisible" :close-on-click-modal="false"> <el-dialog title="新增品牌" :visible.sync="dialogFormVisible" :close-on-click-modal="false">
<el-form :model="form"> <el-form :model="form">
@ -44,25 +50,17 @@
<el-button type="primary" @click="EditSubmit"> </el-button> <el-button type="primary" @click="EditSubmit"> </el-button>
</div> </div>
</el-dialog> </el-dialog>
<!-- 分页功能 -->
<div class="block">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="current_page"
:page-sizes="[15, 50, 100]" :page-size="per_page" layout="total, sizes, prev, pager, next, jumper"
:total="Paginationdata.total">
</el-pagination>
</div>
</div> </div>
</template> </template>
<script> <script>
import { import {
Brand_goods_types, Brand_goods_types,
DelBrand_goods_types, DelBrand_goods_types,
AddBrandgoods_types, AddBrandgoods_types,
editBrand_types, editBrand_types,
} from "../../api/rankingData"; } from "../../api/rankingData";
export default { export default {
data() { data() {
return { return {
id: "", //id id: "", //id
@ -177,35 +175,11 @@
}); });
}, },
}, },
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.conent { .block {
width: 100%;
min-height: calc(100vh - 200px);
position: relative;
}
.btn {
height: 104px;
border-radius: 5px;
display: flex;
align-items: center;
}
.el-button {
width: 114px;
height: 44px;
border-radius: 3px;
}
.table {
margin-top: 20px; margin-top: 20px;
} }
.block {
margin-top: 30px;
}
</style> </style>

View File

@ -0,0 +1,473 @@
<template>
<div>
<el-card class="box-card">
<div class="goods" style="margin: 20px">
<div class="add-item-info" style="margin-bottom: 10px; margin-left: 52px">
<div>
<div style="font-size: 14px">商品列表</div>
<el-select v-model="lid" placeholder="选择商品" @change="onchange" filterable>
<el-option v-for="item in goodschoose" :key="item.id" :label="item.title" :value="item.id">
</el-option>
</el-select>
</div>
<span style="font-size: 14px">商品图片
<el-upload class="avatar-uploader" action="#" :limit="1" :auto-upload="false"
:show-file-list="true" list-type="picture-card" :on-change="handleAvatarSuccess">
<img v-if="imageUrl" :src="imageUrl" class="avatar" />
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</span>
</div>
<!-- 编辑按钮进入显示 -->
<el-form ref="form" :inline="true" :model="form" v-if="goodsData != ''">
<div>
<el-form-item label="商品名称:">
<el-input placeholder="商品名称" v-model="goodsData.goods.title"></el-input>
</el-form-item>
<el-form-item label="商品编码:">
<el-input placeholder="商品编码" v-model="goodsData.goods.goods_code"></el-input>
</el-form-item>
<el-form-item label="商品种类:">
<el-select v-model="goodsData.goods.type_id" placeholder="商品种类" filterable>
<el-option v-for="item in cate" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="商品品牌:">
<el-select v-model="goodsData.goods.brand_id" placeholder="商品品牌" filterable>
<el-option v-for="item in brand" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
</div>
<div>
<el-form-item label="商品规格:">
<el-input placeholder="商品规格" v-model="goodsData.title"></el-input>
</el-form-item>
<el-form-item label="规格编码:">
<el-input v-model="goodsData.sku_code" placeholder="商品编码">
</el-input>
</el-form-item>
<el-form-item label="商品状态:">
<el-select v-model="goodsData.status">
<el-option v-for="item in options" :key="item.id" :label="item.label" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<div>
<el-form-item label="商品数量:">
<el-input v-model="goodsData.num" placeholder="商品数量">
</el-input>
</el-form-item>
<el-form-item label="商品成本:">
<el-input v-model="goodsData.cost" placeholder="商品成本">
</el-input>
</el-form-item>
</div>
</div>
<div class="btn">
<el-form-item>
<el-button type="primary" @click="Edititem()">保存</el-button>
<el-button plain @click="cancel()">取消</el-button>
</el-form-item>
</div>
</el-form>
<!-- 新建商品进入显示 -->
<el-form ref="form" :inline="true" :model="form" v-if="goodsData == ''">
<div>
<el-form-item label="商品名称:">
<el-input placeholder="商品名称" v-model="form.title" :disabled="true" v-if="isShow"></el-input>
<el-input placeholder="商品名称" v-model="form.title" v-else></el-input>
</el-form-item>
<el-form-item label="商品编码:">
<el-input placeholder="商品编码" v-model="form.goods_code" :disabled="true" v-if="isShow">
</el-input>
<el-input placeholder="商品编码" v-model="form.goods_code" v-else></el-input>
</el-form-item>
<el-form-item label="商品种类:">
<el-select v-model="form.type_id" placeholder="商品种类" filterable>
<el-option v-for="item in cate" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="商品品牌:">
<el-select v-model="form.brand_id" placeholder="商品品牌" filterable>
<el-option v-for="item in brand" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
</div>
<div v-for="(item, i) in skus" :key="i">
<span style="margin-right: -15px">{{ i + 1 }}.</span>
<el-form-item label="商品规格:">
<el-input placeholder="商品规格" v-model="skus[i].title"></el-input>
</el-form-item>
<span class="addto" @click="handleAdd()">+</span>
<el-form-item label="规格编码:">
<el-input v-model="skus[i].sku_code" placeholder="商品编码">
</el-input>
</el-form-item>
<el-form-item label="商品状态:">
<el-select v-model="skus[i].reserve" placeholder="下架(默认)">
<el-option v-for="item in options" :key="item.id" :label="item.label" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<div>
<el-form-item label="商品数量:">
<el-input v-model="skus[i].num" placeholder="商品数量">
</el-input>
</el-form-item>
<el-form-item label="商品成本:">
<el-input v-model="skus[i].cost" placeholder="商品成本">
</el-input>
</el-form-item>
<el-button type="primary" @click="handleDelete(i)">删除</el-button>
</div>
</div>
<div class="btn">
<el-form-item>
<el-button type="primary" @click="handleSave()">保存</el-button>
<el-button plain @click="cancel()">取消</el-button>
</el-form-item>
</div>
</el-form>
</div>
</el-card>
</div>
</template>
<script>
import {
addGoods,
checkGoods,
goodsList,
updateGoods,
imgUpload,
} from "../../../api/goods.js";
import { goods_types, Brand_goods_types } from "../../../api/rankingData.js";
export default {
data() {
return {
imgs: [],
gallery: "",
imageUrl: "",
lid: "", // id
gid: "", // id
brand: [], //
cate: [], //
goodschoose: [], //
goodsID: "", //id
goodsData: [], //
//
skus: [
{
title: "",
sku_code: "",
status: "0",
num: "0",
cost: "0",
reserve: "0",
},
],
//
form: {
goods_id: "",
title: "",
img_url: "",
type_id: "",
brand_id: "",
goods_code: "",
},
//
options: [
{
id: "0",
label: "下架",
},
{
id: "1",
label: "在售",
},
{
id: "2",
label: "预警",
},
],
file: [],
isShow: false,
URL: "",
};
},
watch: {
lid: {
handler(newVal, oldVal) {
if (newVal) {
this.goodschoose.forEach((item) => {
if (item.id == newVal) {
this.form = { ...item };
}
});
}
},
deep: true, //
immediate: true, //
},
},
methods: {
//
handleAvatarSuccess(res, files) {
let formData = new FormData();
files.forEach((file) => {
formData.append("uploadFile", file.raw); //
});
let requestConfig = {
headers: {
"Content-Type": "multipart/form-data",
},
};
imgUpload(formData, requestConfig).then((res) => {
this.form.img_url = res.data.resource;
if (this.goodsData.length !== 0) {
this.goodsData.goods.img_url = res.data.resource;
}
});
},
//
handleUpdate() {
this.gid = this.$route.query;
if (this.gid.id) {
checkGoods(this.gid.id).then((res) => {
const data = res.data.data;
const sku = this.skus[0];
const list = {};
Object.keys(data).map((key) => {
Object.keys(sku).map((i) => {
if (key == i) {
list[i] = data[key];
}
});
});
});
}
},
//
handleList() {
goodsList().then((res) => {
this.goodschoose = res.data.data;
this.goodschoose = [
{
title: "",
id: "",
},
...this.goodschoose,
];
});
},
//
handleSave() {
const goods = this.form;
const skus = this.skus;
const updata = {
...goods,
goods_id: this.lid,
skus: skus,
};
addGoods(updata).then((res) => {
if (res.statusText === "OK") {
this.$message({
message: "商品添加成功!",
type: "success",
});
this.updateForm();
this.$router.push("/GOODS_LIST");
}
});
},
//
updateForm() {
this.form = {
title: "",
img_url: "abc.jpg",
type_id: "",
brand_id: "",
goods_code: "",
};
this.skus = [
{
title: "",
sku_code: "",
status: "",
num: "",
cost: "",
},
];
},
//
handleAdd() {
this.skus.push({
title: "",
sku_code: "",
status: "0",
num: "",
cost: "",
});
},
//
handleDelete(index) {
this.skus.splice(index, 1);
},
//
getgoodsidData() {
let id = this.bigID;
checkGoods(id).then((res) => {
this.goodsData = res.data.data;
});
},
//
Edititem() {
let id = this.bigID;
let goods = {
title: this.goodsData.goods.title,
img_url: this.goodsData.goods.img_url,
type_id: this.goodsData.goods.type_id,
brand_id: this.goodsData.goods.brand_id,
goods_code: this.goodsData.goods.goods_code,
};
let sku = {
title: this.goodsData.title,
sku_code: this.goodsData.sku_code,
status: this.goodsData.status,
num: this.goodsData.num,
cost: this.goodsData.cost,
};
if (sku.status == "下架") {
sku.status = 0;
} else if (sku.status == "在售") {
sku.status = 1;
} else if (sku.status == "预警") {
sku.status = 2;
}
let updateData = {
goods_id: this.goodsData.goods_id,
goods,
sku,
};
updateGoods(id, updateData).then((res) => {
this.$router.push("/GOODS_LIST");
this.$message({
message: "商品编辑成功!",
type: "success",
});
});
},
//
cancel() {
this.$router.push("/GOODS_LIST");
},
onchange(value) {
if (value !== "") {
this.isShow = true;
}
if (value === "") {
this.isShow = false;
this.form = {};
}
},
},
created() {
this.goodsID = sessionStorage.getItem("商品ID");
this.bigID = sessionStorage.getItem("ID");
},
mounted() {
this.gid = this.$route.query;
//
goods_types().then((res) => {
this.cate = res.data.data;
});
//
Brand_goods_types().then((res) => {
this.brand = res.data.data;
});
this.handleList();
this.handleUpdate();
this.getgoodsidData();
},
beforeDestroy() {
sessionStorage.removeItem("商品ID"); //ID
sessionStorage.removeItem("ID"); //ID
},
};
</script>
<style scoped>
.el-upload--picture-card {
width: 50px;
height: 50px;
}
.el-form-item {
margin-left: 60px;
}
.addto {
display: inline-block;
width: 30px;
height: 30px;
background-color: blue;
color: #fff;
font-size: 25px;
text-align: center;
line-height: 30px;
border-radius: 5px;
margin-top: 4px;
}
/* 分割 */
.avatar-uploader .el-upload {
border: 1px dashed #d9d9d9;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
}
.avatar-uploader .el-upload:hover {
border-color: #409eff;
}
.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 148px;
height: 148px;
line-height: 148px;
text-align: center;
}
.avatar {
width: 148px;
height: 148px;
display: block;
}
</style>

View File

@ -0,0 +1,969 @@
<template>
<!-- 商品管理页面 -->
<div>
<!-- 条件筛选板块 -->
<el-card :body-style="{ padding: '20px 20px 0 20px' }">
<div class="goods">
<el-form ref="form" :inline="true" :model="form">
<el-form-item label="商品名称:">
<el-input v-model="form.goods_title" placeholder="商品名称" style="width: 100px">
</el-input>
</el-form-item>
<el-form-item label="商品种类:">
<el-select v-model="form.type_id" placeholder="商品种类" style="width: 125px">
<el-option v-for="item in cate" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="商品规格:">
<el-input v-model="form.sku_title" placeholder="商品规格" style="width: 100px">
</el-input>
</el-form-item>
<el-form-item label="商品品牌:">
<el-select v-model="form.brand_id" placeholder="商品品牌" style="width: 125px">
<el-option v-for="item in brand" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="商品状态:">
<el-select v-model="form.status" placeholder="商品状态" style="width: 115px">
<el-option v-for="item in options" :key="item.id" :label="item.label" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<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" range-separator=""
start-placeholder="开始时间" end-placeholder="结束时间" value-format="yyyy-MM-dd HH:mm:ss"
@change="getSTime" style="width: 300px">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleChoose()">筛选</el-button>
<el-button plain @click="handleReChoose()">重置筛选</el-button>
</el-form-item>
</el-form>
</div>
</el-card>
<el-card style="margin-top: 20px">
<div>
<!-- 表格头部操作 -->
<div>
<span>全部商品({{ total }})</span>
<div class="btn">
<el-button type="primary" plain @click="addNewgoods">新建商品</el-button>
<el-button type="primary" plain @click="update()">上新</el-button>
<el-button type="primary" plain @click="onCount()">库存盘点</el-button>
<el-button type="primary" plain @click="handleImport()">导入商品</el-button>
<el-button type="primary" plain @click="handleExport()">表格导出</el-button>
</div>
</div>
<!-- 表格 -->
<el-table ref="multipleTable" :data="tableData" class="table" tooltip-effect="dark" style="width: 100%"
@selection-change="handleSelectionChange" max-height="1500">
<!-- 多选框 -->
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column label="商品信息" width="300">
<template slot-scope="scope">
<div class="commodityimg">
<img :src="scope.row.goods.img_url" class="Img" />
</div>
<div>
<p>{{ scope.row.goods.title }}&nbsp;{{ scope.row.title }}</p>
<p>
{{ scope.row.goods.goods_code + "_" + scope.row.sku_code }}
</p>
<p>
{{ scope.row.goods.updated_at }}
</p>
</div>
</template>
</el-table-column>
<el-table-column label="品类">
<template slot-scope="scope">
<div>
{{ scope.row.goods.type ? scope.row.goods.type.name : "" }}
</div>
</template>
</el-table-column>
<el-table-column label="规格" prop="title"> </el-table-column>
<el-table-column label="品牌">
<template slot-scope="scope">
<div>
{{ scope.row.goods.brand ? scope.row.goods.brand.name : "" }}
</div>
</template>
</el-table-column>
<el-table-column prop="two_days_ago_num" sortable label="2T">
</el-table-column>
<el-table-column prop="yesterday_num" sortable label="1T">
</el-table-column>
<el-table-column sortable label="0T" min-width="80">
<template slot-scope="scope">
<div v-if="isShow">
<el-input v-model="scope.row.arrived_today_num11"></el-input>
</div>
<div v-else>
{{ scope.row.daily.arrived_today_num }}
</div>
</template>
</el-table-column>
<el-table-column prop="cost" sortable label="成本">
<template slot-scope="scope">
<div v-if="isShow">
<el-input v-model="scope.row.cost"></el-input>
</div>
<div v-else>
{{ scope.row.cost != null ? scope.row.cost : 0 }}
</div>
</template>
</el-table-column>
<el-table-column prop="reference_price" sortable label="售价" min-width="80">
<template slot-scope="scope">
<div v-if="scope.row.id === id">
<el-input v-model="scope.row.reference_price" @blur="reference_priceBlur(scope.row)">
</el-input>
</div>
<div v-else>
{{ scope.row.reference_price }}
<el-button slot="reference" class="btn11" @click="reference_priceClick(scope.row.id)">
<img src="../../css/img/编辑.png" />
</el-button>
</div>
</template>
</el-table-column>
<el-table-column prop="num" sortable label="总量" min-width="80">
</el-table-column>
<el-table-column prop="reserve" sortable label="预留" min-width="80">
<template slot-scope="scope">
<div v-if="scope.row.id === id1">
<el-input v-model="scope.row.reserve" @blur="reservebBlur(scope.row)"></el-input>
</div>
<div v-else>
{{ scope.row.reserve }}
</div>
<el-button slot="reference" class="btn11" @click="onreserve(scope.row.id)"><img
src="../../css/img/编辑.png" alt="" /></el-button>
</template>
</el-table-column>
<el-table-column sortable label="订单" min-width="80">
<template slot-scope="scope">
<div>
<span>{{ scope.row.order_goods_num }}</span>
</div>
<el-popover placement="right-start" width="200" trigger="hover"
v-if="scope.row.order_detail.length !== 0">
<div>
<span v-for="(j, index) in scope.row.order_detail" :key="index">
<div>{{ j.shop.name }}:{{ j.number }}</div>
</span>
</div>
<el-button class="btn11" type="text" slot="reference"><img src="../../css/img/眼睛.png"
alt="" />
</el-button>
</el-popover>
</template>
</el-table-column>
<el-table-column sortable label="损耗">
<template slot-scope="scope">
<div v-if="scope.row.id === id2">
<el-input v-model="scope.row.daily.loss_num"></el-input>
</div>
<div v-else>
{{ scope.row.daily.loss_num }}
</div>
<el-popover placement="right-start" width="220" trigger="click" @hide="noBubbles">
<p>损耗:</p>
<el-input v-model="scope.row.daily.loss_num"></el-input>
<el-radio-group v-model="radio">
<el-radio disabled>原因:</el-radio>
<el-radio label="48h以上">48h以上</el-radio>
<el-radio label="到货错误">到货错误</el-radio>
<el-radio label="灰霉">灰霉</el-radio>
<el-radio label="长度">长度</el-radio>
<el-radio label="花朵">花朵</el-radio>
<el-radio label="其他">其他</el-radio>
</el-radio-group>
<div class="list_btn">
<el-button type="primary" @click="onLoss(scope.row)">保存</el-button>
</div>
<el-button slot="reference" class="btn11" @click="loss(scope.row.id)"><img
src="../../css/img/编辑.png" alt="" /></el-button>
</el-popover>
</template>
</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>
<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">
<div>
<el-button type="text" @click="ejectstock(scope.row)">库存</el-button>
</div>
<div>
<el-button type="text" @click="handleEdit(scope.row.goods_id, scope.row.id)">编辑
</el-button>
</div>
<div>
<el-button type="text" @click="goodslog(scope.row)">记录</el-button>
</div>
<!-- 点击库存按钮弹出框 -->
<el-dialog title="库存修改" :visible.sync="ejectstock1" width="30%"
:close-on-click-modal="false">
<el-table :data="ommodityInventory" tooltip-effect="dark" style="width: 100%"
@selection-change="handleSelectionChange">
<el-table-column prop="two_days_ago_num" label="2天前库存">
<template slot-scope="scope">
<div>
{{ scope.row.two_days_ago_num }}
<el-input v-model="scope.row.two_days_ago_num"></el-input>
</div>
</template>
</el-table-column>
<el-table-column prop="yesterday_num" label="1天前库存">
<template slot-scope="scope">
<div>
{{ scope.row.yesterday_num }}
<el-input v-model="scope.row.yesterday_num"></el-input>
</div>
</template>
</el-table-column>
<el-table-column sortable label="今日到货">
<template slot-scope="scope">
<div>
{{ scope.row.daily.arrived_today_num }}
<el-input v-model="scope.row.daily.arrived_today_num"></el-input>
</div>
</template>
</el-table-column>
</el-table>
<span slot="footer" class="dialog-footer">
<el-button @click="cancelStock()"> </el-button>
<el-button type="primary" @click="oldStock()"> </el-button>
</span>
</el-dialog>
</template>
</el-table-column>
</el-table>
</div>
<!-- 底部按钮 -->
<div class="footerBtn" v-show="isShow || stock">
<el-button type="primary" class="confirmbtn" @click="cancel()">取消</el-button>
<el-button type="primary" class="confirmbtn" @click="onSubmit()">保存</el-button>
</div>
<!-- 分页功能 -->
<div class="page">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page="current_page" :page-sizes="[15, 50, 100]" :page-size="per_page"
layout="total, sizes, prev, pager, next, jumper" :total="Paginationdata.total">
</el-pagination>
</div>
</el-card>
<!-- 参考售价弹出确认框 -->
<el-dialog :visible.sync="dialogVisible3" width="20%" :close-on-click-modal="false">
<span>您确定要修改吗?</span>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible3 = false"> </el-button>
<el-button type="primary" @click="reference_priceRequest()"> </el-button>
</span>
</el-dialog>
<!-- 预留量弹出框 -->
<el-dialog :visible.sync="dialogVisible4" width="20%" :close-on-click-modal="false">
<span>您确定要修改吗?</span>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible4 = false"> </el-button>
<el-button type="primary" @click="reserveRequest()"> </el-button>
</span>
</el-dialog>
<!-- 点击表格导出弹出框 -->
<el-dialog title="表格导出" :visible.sync="Tableexport" width="30%" :close-on-click-modal="false">
<div>
选择:
<template>
<el-select v-model="value" placeholder="盘点表/运营表/成本表">
<el-option v-for="item in options2" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</template>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="Tableexport = false"> </el-button>
<el-button type="primary" @click="derivation()"> </el-button>
<!-- <a href="/goods_skus/export">确定</a> -->
</span>
</el-dialog>
<!-- 点击商品文件导入弹出框 -->
<el-dialog title="导入商品" :visible.sync="docImportDrawer" direction="rtl" custom-class="demo-drawer" ref="drawer"
size="20%" width="30%" @close="importForm.imFileList = []" :close-on-click-modal="false">
<div class="demo-drawer__content">
<el-form :model="importForm" :rules="improtRules" ref="importForm">
<el-form-item label="上传文件" label-width="100px" prop="fileList">
<el-upload class="uploader" action="" :limit="1"
accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"
:file-list="importForm.fileList" :auto-upload="false" :on-change="importFileChange">
<i class="el-icon-plus"></i>
</el-upload>
</el-form-item>
</el-form>
<div class="demo-drawer__footer btn-style">
<el-button @click="docImportDrawer = false"> </el-button>
<el-button type="primary" @click="saveUpload"> </el-button>
</div>
</div>
<div class="import-right">
<el-button size="medium" class="button-query">
<a :href="`http://erp.staging.miaoxuan66.cn/goods/import/template`">下载模板</a>
</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import axios from "axios";
import { goods_types, Brand_goods_types } from "../../api/rankingData.js";
import { goods, update, singleUpdate } from "../../api/goods";
export default {
data() {
return {
id: "", //id
id1: "", //id
id2: "", //id
total: 0, //
radio: "", //
brand: [], //
cate: [], //
tableData: [], //
shopsData: [], //
sku_code: {}, //
// shopOrder: {}, //
options: [
{
id: "1",
label: "在售",
},
{
id: "2",
label: "预警",
},
{
id: "0",
label: "下架",
},
], //
options2: [
{
value: "inventory",
label: "盘点表",
},
{
value: "cost",
label: "成本表",
},
], //
value: "", //
options3: [
{
value: "stock",
label: "库存",
},
{
value: "cost",
label: "成本",
},
{
value: "loss_num",
label: "损耗",
},
{
value: "reserve",
label: "预留",
},
], //
//
form: {
goods_title: "", //
type_id: "", // id
brand_id: "", // id
sku_title: "", //
status: "", //
keyword_type: "stock", //
keyword_value: "", //
},
Paginationdata: {}, //
current_page: 1, //
per_page: 100, //
multipleSelection: [], //id
updateType: "", //newest-, inventory-, stock-
stock: false, //
isShow: false, //
ejectstock1: false, //
Importgoods: false, //
Tableexport: false, //
isShow1: false, //
//
importForm: {
fileList: [],
},
docImportDrawer: false,
improtRules: {
fileList: [
{ required: true, message: "请导入Excel文件", trigger: "change" },
{
validator: (rule, value, callback) => {
if (!value.length) {
callback(new Error("请导入Excel文件"));
} else {
callback();
}
},
trigger: "change",
},
],
},
//
publicPath: process.env.BASE_URL, // public
excelTemplatePath: "", // Excel -
visible: false,
updateField: "", //reference_price-, reserve-, loss_num-, status-
reference_priceShow: false,
reserveShow: false, //-input
value1: "", //
ommodityInventory: [], //
dialogVisible: false, //
dialogVisible2: false, //
dialogVisible3: false, //
dialogVisible4: false, //
publicId: "", // id
reference_price: "", //
reserve: "", //
};
},
methods: {
//
handleEdit(goodsid, id) {
sessionStorage.setItem("商品ID", goodsid);
sessionStorage.setItem("ID", id);
this.$router.push("/ADDGOODS");
},
//
getList() {
let page = {
page: this.current_page,
per_page: this.per_page,
};
goods(page).then((res) => {
this.tableData = res.data.data;
this.tableData = this.tableData.map((item) => {
item = {
...item,
arrived_today_num11: 0,
};
return item;
});
this.total = res.data.meta.total;
this.Paginationdata = res.data.meta;
this.shopsData = this.tableData.map((item) => {
item = item.goods.goods_code + "_" + item.sku_code;
return item;
});
this.sku_code = {
sku_code: this.shopsData,
};
});
},
//
handleChoose() {
this.form = {
...this.form,
page: this.current_page,
per_page: this.per_page,
};
//
const newObj = filterParams(this.form);
function filterParams(obj) {
const _newPar = {};
for (const key in obj) {
// 0
if (
(obj[key] === 0 || obj[key]) &&
obj[key].toString().replace(/(^\s*)|(\s*$)/g, "") !== ""
) {
//
_newPar[key] = obj[key];
}
}
//
return _newPar;
}
goods(newObj).then((res) => {
this.tableData = res.data.data;
this.tableData = this.tableData.map((item) => {
item = {
...item,
arrived_today_num11: 0,
};
return item;
});
this.total = res.data.meta.total;
this.Paginationdata = res.data.meta;
});
},
//
handleReChoose() {
this.form = {
goods_title: "", //
type_id: "", // id
brand_id: "", // id
sku_title: "", //
status: "", //
};
this.value1 = "";
},
//
handleImport() {
this.docImportDrawer = true;
},
//
handleExport() {
this.Tableexport = true;
},
//
update() {
this.isShow = true;
this.stock = false;
this.updateType = "newest";
},
//
handleSelectionChange(val) {
this.multipleSelection = val.map((item) => item.id);
},
//
addNewgoods() {
this.$router.push("/ADDGOODS");
},
//
handleSizeChange(val) {
//
this.per_page = val;
this.handleChoose();
},
handleCurrentChange(val) {
//
this.current_page = val;
this.handleChoose();
},
//or
cancel() {
this.handleChoose();
this.isShow = false;
this.stock = false;
},
// or
onSubmit() {
//
if (this.updateType === "newest") {
let skus = this.tableData.map((item) => {
return [
{
id: item.id,
cost: item.cost,
arrived_today_num: item.arrived_today_num11,
},
];
});
let patchdata = {
updateType: this.updateType,
skus: skus.flat(),
};
//
update(patchdata).then((res) => {
this.handleChoose();
this.$message({
message: "上新成功!",
type: "success",
});
});
}
//
if (this.updateType === "inventory") {
let skus = this.tableData.map((item) => {
return [
{
id: item.id,
inventory: item.daily.inventory,
},
];
});
let patchdata = {
updateType: this.updateType,
skus: skus.flat(),
};
//
update(patchdata).then((res) => {
this.handleChoose();
this.$message({
message: "库存盘点成功!",
type: "success",
});
});
}
this.isShow = false;
this.stock = false;
this.handleChoose();
},
//
onCount() {
this.dialogVisible2 = false;
this.isShow = false;
this.stock = true;
this.updateType = "inventory";
},
//
ejectstock(row) {
this.ommodityInventory = [];
this.ejectstock1 = true;
this.updateType = "stock";
this.ommodityInventory.push(row);
},
//
cancelStock() {
this.handleChoose();
this.ejectstock1 = false;
},
//
oldStock() {
this.ejectstock1 = false;
//
if (this.updateType === "stock") {
let skus = [
{
id: this.ommodityInventory[0].id,
yesterday_num: this.ommodityInventory[0].yesterday_num,
two_days_ago_num: this.ommodityInventory[0].two_days_ago_num,
arrived_today_num:
this.ommodityInventory[0].daily.arrived_today_num,
},
];
let stockpatch = {
updateType: this.updateType,
skus: skus,
};
//
update(stockpatch).then((res) => {
this.handleChoose();
this.$message({
message: "库存更新成功!",
type: "success",
});
});
}
},
//
importFile() {
this.docImportDrawer = true;
},
// -Excel
async importFileChange(file, fileList) {
this.importForm.fileList = fileList; //
},
//
saveUpload() {
this.$refs.importForm.validate(async (isValid) => {
if (!isValid) return;
try {
//
const params = new FormData();
params.append("goodsSkus", this.importForm.fileList[0].raw);
this.isLoadingDialog = true;
let token = localStorage.getItem("token");
axios
.post("/api/goods_skus", params, {
headers: {
Authorization: `Bearer ${token}`,
},
})
.then((res) => {
if (res.status === 200) {
this.$message.success("模板导入成功");
}
});
this.docImportDrawer = false;
} finally {
this.isLoadingDialog = false;
}
});
},
// -Excel
getExcelTemplatePath() {
this.$requestInternet.get("/api/xxx").then((res) => {
this.excelTemplatePath = res;
});
},
//
derivation() {
window.open("/goods_skus/export?exportType=" + this.value);
},
//
goodslog(row) {
this.$router.push({
path: "/GOODS_LOG",
query: {
id: row.id,
},
});
},
//
getSTime(val) {
this.form.keyword_value = val.join(" - ");
},
//
reference_priceClick(id) {
this.updateField = "reference_price";
this.reference_priceShow = true;
this.id = id;
this.id1 = "";
},
// input
reference_priceBlur(row) {
this.dialogVisible3 = true;
this.publicId = row.id;
this.reference_price = row.reference_price;
},
//
reference_priceRequest() {
this.dialogVisible3 = false;
let reference_priceData = {
updateField: this.updateField,
reference_price: this.reference_price,
};
singleUpdate(this.publicId, reference_priceData).then((res) => {
this.id = "";
this.$message({
message: "参考售价修改成功!",
type: "success",
});
});
},
onreserve(id) {
this.updateField = "reserve";
this.id1 = id;
this.id = "";
},
//
reservebBlur(row) {
this.reserve = row.reserve;
this.dialogVisible4 = true;
this.publicId = row.id;
},
//
reserveRequest() {
let reservebData = {
updateField: this.updateField,
reserve: this.reserve,
};
singleUpdate(this.publicId, reservebData).then((res) => {
this.id1 = "";
this.dialogVisible4 = false;
this.$message({
message: "预留量修改成功!",
type: "success",
});
});
},
loss(id) {
this.updateField = "loss_num";
this.id2 = id;
this.id = "";
this.id1 = "";
},
//
onLoss(row) {
let id = row.id;
let lossData = {
updateField: this.updateField,
reason: this.radio,
loss_num: row.daily.loss_num,
};
singleUpdate(id, lossData).then((res) => {
this.getList();
this.id2 = "";
this.$message({
message: "损耗添加成功!",
type: "success",
});
});
},
//
noBubbles() {
this.handleChoose();
this.updateField = "";
this.id2 = "";
},
//
getgoodsType() {
let param = {
per_page: 99999,
};
goods_types(param).then((res) => {
this.cate = res.data.data;
});
},
//
getbrandType() {
let parsm = {
per_page: 99999,
};
Brand_goods_types(parsm).then((res) => {
this.brand = res.data.data;
});
},
},
watch: {
$route(to, from) {
window.location.reload(); //
},
},
mounted() {
this.getList();
this.getgoodsType();
this.getbrandType();
this.id = "";
this.id1 = "";
this.id2 = "";
},
};
</script>
<style lang="css" scoped>
.table {
margin-top: 20px;
position: relative;
}
.btn {
float: right;
}
::v-deep .cell {
display: flex;
align-items: center;
}
.commodityimg {
width: 59px;
height: 59px;
background: rgba(227, 227, 227, 0.39);
opacity: 1;
display: block;
margin-right: 12px;
}
.Img {
width: 100%;
height: 100%;
}
.confirmbtn {
width: 114px;
height: 44px;
border-radius: 3px;
margin-top: 21px;
margin-bottom: 8px;
}
.import-right {
margin-top: 30px;
}
.import-right a {
text-decoration: none;
color: black;
}
::v-deep .btn11 {
padding: 0;
width: 14px;
height: 14px;
}
::v-deep .btn11 img {
width: 100%;
height: 100%;
}
.page {
margin-top: 20px;
}
</style>

View File

@ -0,0 +1,186 @@
<template>
<div class="conent">
<!-- 新增按钮 -->
<el-button type="primary" @click="handAdd">新增</el-button>
<!-- 列表 -->
<div class="table" style="margin-top: 20px">
<el-table ref="multipleTable" :data="tableData" tooltip-effect="dark" style="width: 100%"
@selection-change="handleSelectionChange">
<el-table-column prop="name" label="商品种类"> </el-table-column>
<el-table-column prop="" label="操作">
<template slot-scope="scope">
<el-button type="primary" @click="handEdit(scope.row.id, scope.row)">编辑</el-button>
<el-button type="danger" @click="handdel(scope.row.id)">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
<!-- 分页功能 -->
<div class="block">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page="current_page" :page-sizes="[15, 50, 100]" :page-size="per_page"
layout="total, sizes, prev, pager, next, jumper" :total="Paginationdata.total">
</el-pagination>
</div>
<!-- 新增种类对话框 -->
<el-dialog title="新增" :visible.sync="dialogFormVisible" :close-on-click-modal="false">
<el-form :model="form">
<el-form-item label="商品种类" :label-width="formLabelWidth">
<el-input v-model="form.kindName" autocomplete="off"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false"> </el-button>
<el-button type="primary" @click="addSubmit"> </el-button>
</div>
</el-dialog>
<!-- 编辑 -->
<el-dialog title="编辑" :visible.sync="dialogFormVisible1" :close-on-click-modal="false">
<el-form :model="form1">
<el-form-item label="编辑种类" :label-width="formLabelWidth1">
<el-input v-model="form1.kindName1" autocomplete="off"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible1 = false"> </el-button>
<el-button type="primary" @click="EditSubmit"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
goods_types,
Delgoods_types,
Addgoods_types,
editGoods_types,
} from "../../api/rankingData";
export default {
data() {
return {
id: "", //id
tableData: [],
multipleSelection: [],
dialogFormVisible: false,
dialogFormVisible1: false,
form: {
kindName: "", //
},
form1: {
kindName1: "", //
},
formLabelWidth: "120px",
formLabelWidth1: "120px",
newKind: [],
Paginationdata: {}, //
current_page: 1, //
per_page: 15, //
};
},
mounted() {
this.getGoods_types();
},
methods: {
//
handleSelectionChange(val) {
this.multipleSelection = val;
},
//
handleSizeChange(val) {
//
this.per_page = val;
this.getGoods_types();
},
handleCurrentChange(val) {
//
this.current_page = val;
this.getGoods_types();
},
//
handAdd() {
this.form.kindName = "";
this.dialogFormVisible = true;
},
//
addSubmit() {
var string;
string = this.form.kindName.replace(/\s/g, ",").split(",");
Addgoods_types({
names: string,
}).then((res) => {
this.$message({
type: "success",
message: "添加成功",
});
this.getGoods_types();
});
this.dialogFormVisible = false;
},
//
handEdit(id, item) {
this.id = id;
this.form1.kindName1 = item.name;
this.dialogFormVisible1 = true;
},
//
EditSubmit() {
editGoods_types(this.id, {
name: this.form1.kindName1,
}).then((res) => {
this.$message({
type: "success",
message: "编辑成功",
});
this.getGoods_types();
});
this.dialogFormVisible1 = false;
},
//
handdel(id) {
this.$confirm("确定删除此条商品种类吗?", "确认删除", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
Delgoods_types(id).then((res) => {
this.getGoods_types();
});
this.$message({
type: "success",
message: "删除成功!",
});
})
.catch(() => {
this.$message({
type: "info",
message: "已取消删除",
});
});
},
//
getGoods_types() {
let page = {
page: this.current_page,
per_page: this.per_page,
};
goods_types(page).then((res) => {
this.tableData = res.data.data;
this.Paginationdata = res.data.meta;
});
},
},
};
</script>
<style lang="scss" scoped>
.block {
margin-top: 20px;
}
</style>

View File

@ -1,212 +0,0 @@
<template>
<div class="conent">
<!-- 新增按钮 -->
<div class="btn">
<el-button type="primary" @click="handAdd">新增</el-button>
</div>
<!-- 列表 -->
<div class="table">
<el-table ref="multipleTable" :data="tableData" tooltip-effect="dark" style="width: 100%"
@selection-change="handleSelectionChange">
<el-table-column type="selection" width="55"> </el-table-column>
<el-table-column prop="name" label="商品种类"> </el-table-column>
<el-table-column prop="" label="操作">
<template slot-scope="scope">
<el-button type="primary" @click="handEdit(scope.row.id, scope.row)">编辑</el-button>
<el-button type="danger" @click="handdel(scope.row.id)">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
<!-- 新增种类对话框 -->
<el-dialog title="新增" :visible.sync="dialogFormVisible" :close-on-click-modal="false">
<el-form :model="form">
<el-form-item label="商品种类" :label-width="formLabelWidth">
<el-input v-model="form.kindName" autocomplete="off"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false"> </el-button>
<el-button type="primary" @click="addSubmit"> </el-button>
</div>
</el-dialog>
<!-- 编辑 -->
<el-dialog title="编辑" :visible.sync="dialogFormVisible1" :close-on-click-modal="false">
<el-form :model="form1">
<el-form-item label="编辑种类" :label-width="formLabelWidth1">
<el-input v-model="form1.kindName1" autocomplete="off"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible1 = false"> </el-button>
<el-button type="primary" @click="EditSubmit"> </el-button>
</div>
</el-dialog>
<!-- 分页功能 -->
<div class="block">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="current_page"
:page-sizes="[15, 50, 100]" :page-size="per_page" layout="total, sizes, prev, pager, next, jumper"
:total="Paginationdata.total">
</el-pagination>
</div>
</div>
</template>
<script>
import {
goods_types,
Delgoods_types,
Addgoods_types,
editGoods_types,
} from "../../api/rankingData";
export default {
data() {
return {
id: "", //id
tableData: [],
multipleSelection: [],
dialogFormVisible: false,
dialogFormVisible1: false,
form: {
kindName: "", //
},
form1: {
kindName1: "", //
},
formLabelWidth: "120px",
formLabelWidth1: "120px",
newKind: [],
Paginationdata: {}, //
current_page: 1, //
per_page: 15, //
};
},
mounted() {
this.getGoods_types();
},
methods: {
//
handleSelectionChange(val) {
this.multipleSelection = val;
},
//
handleSizeChange(val) {
//
this.per_page = val;
this.getGoods_types();
},
handleCurrentChange(val) {
//
this.current_page = val;
this.getGoods_types();
},
//
handAdd() {
this.form.kindName = "";
this.dialogFormVisible = true;
},
//
addSubmit() {
var string;
string = this.form.kindName.replace(/\s/g, ",").split(",");
Addgoods_types({
names: string,
}).then((res) => {
this.$message({
type: "success",
message: "添加成功",
});
this.getGoods_types();
});
this.dialogFormVisible = false;
},
//
handEdit(id, item) {
this.id = id;
this.form1.kindName1 = item.name;
this.dialogFormVisible1 = true;
},
//
EditSubmit() {
editGoods_types(this.id, {
name: this.form1.kindName1,
}).then((res) => {
this.$message({
type: "success",
message: "编辑成功",
});
this.getGoods_types();
});
this.dialogFormVisible1 = false;
},
//
handdel(id) {
this.$confirm("确定删除此条商品种类吗?", "确认删除", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
Delgoods_types(id).then((res) => {
this.getGoods_types();
});
this.$message({
type: "success",
message: "删除成功!",
});
})
.catch(() => {
this.$message({
type: "info",
message: "已取消删除",
});
});
},
//
getGoods_types() {
let page = {
page: this.current_page,
per_page: this.per_page,
};
goods_types(page).then((res) => {
this.tableData = res.data.data;
this.Paginationdata = res.data.meta;
});
},
},
};
</script>
<style lang="scss" scoped>
.conent {
width: 100%;
min-height: calc(100vh - 200px);
position: relative;
}
.btn {
height: 104px;
border-radius: 5px;
display: flex;
align-items: center;
}
.el-button {
width: 114px;
height: 44px;
border-radius: 3px;
}
.table {
margin-top: 20px;
}
.block {
margin-top: 30px;
}
</style>

View File

@ -13,7 +13,9 @@
<template slot="title"> <template slot="title">
<span>{{ item.name }}</span> <span>{{ item.name }}</span>
</template> </template>
<el-menu-item :index="items.code" :key="items.id" v-for="items in item.children">{{ items.name }} <el-menu-item :index="items.code" :key="items.id" v-for="items in item.children">{{
items.name
}}
</el-menu-item> </el-menu-item>
</el-submenu> </el-submenu>
</div> </div>
@ -30,7 +32,8 @@
</div> </div>
<div class="right"> <div class="right">
<el-breadcrumb separator-class="el-icon-arrow-right"> <el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item v-for="(item, index) in titie" :key="index">{{ item.name }}</el-breadcrumb-item> <el-breadcrumb-item v-for="(item, index) in titie" :key="index">{{ item.name }}
</el-breadcrumb-item>
</el-breadcrumb> </el-breadcrumb>
</div> </div>
</li> </li>
@ -49,9 +52,9 @@
</div> </div>
</template> </template>
<script> <script>
import { removeToken } from "@/util/auth"; import { removeToken } from "@/util/auth";
import { getMenu } from "../api/menu.js"; import { getMenu } from "../api/menu.js";
export default { export default {
mounted() { mounted() {
getMenu().then((res) => { getMenu().then((res) => {
this.menu = res.data.data; this.menu = res.data.data;
@ -181,10 +184,10 @@
} }
}, },
}, },
}; };
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.table { .table {
background-color: #fff; background-color: #fff;
ul { ul {
@ -241,76 +244,82 @@
display: flex; display: flex;
} }
} }
.width { .width {
transition: all 0.3s; transition: all 0.3s;
opacity: 0; opacity: 0;
width: 0px !important; width: 0px !important;
} }
.width1 { .width1 {
transition: all 0.3s; transition: all 0.3s;
opacity: 1; opacity: 1;
width: 200px !important; width: 200px !important;
} }
.el-container { .el-container {
height: 100vh; height: 100vh;
} }
.el-header { .el-header {
background-color: #b3c0d1; background-color: #b3c0d1;
color: #333; color: #333;
text-align: center; text-align: center;
} }
.el-aside { .el-aside {
background-color: #d3dce6; background-color: #d3dce6;
color: #333; color: #333;
text-align: center; text-align: center;
overflow-x: hidden; overflow-x: hidden;
} }
.el-aside::-webkit-scrollbar { .el-aside::-webkit-scrollbar {
width: 8px; width: 8px;
/*对垂直流动条有效*/ /*对垂直流动条有效*/
} }
.el-aside::-webkit-scrollbar-thumb { .el-aside::-webkit-scrollbar-thumb {
background-color: rgba(144, 147, 153, 0.3); background-color: rgba(144, 147, 153, 0.3);
border-radius: 20px; border-radius: 20px;
} }
.el-main { .el-main {
background-color: #f0f2f5; background-color: #f0f2f5;
color: #333; color: #333;
padding: 0 0 !important; padding: 0 0 !important;
} }
.el-main::-webkit-scrollbar { .el-main::-webkit-scrollbar {
width: 10px; width: 10px;
/*对垂直流动条有效*/ /*对垂直流动条有效*/
} }
.el-main::-webkit-scrollbar-thumb { .el-main::-webkit-scrollbar-thumb {
background-color: rgba(144, 147, 153, 0.3); background-color: rgba(144, 147, 153, 0.3);
} }
.box-card { .box-card {
background-color: #fff; background-color: #fff;
min-height: calc(100vh - 200px); min-height: calc(100vh - 120px);
margin: 10px; margin: 10px;
padding: 20px; padding: 20px;
} }
.add { .conent {
width: 100%;
min-height: calc(100vh - 200px);
position: relative;
}
.add {
cursor: pointer; cursor: pointer;
font-size: 25px; font-size: 25px;
color: #606266; color: #606266;
} }
.head { .head {
padding: 10px; padding: 10px;
background-color: #fff; background-color: #fff;
border-bottom: 1px solid #f6f6f6; border-bottom: 1px solid #f6f6f6;
@ -333,33 +342,47 @@
} }
} }
} }
} }
.el-aside { .el-aside {
background: #282c34; background: #282c34;
box-shadow: 2px 0 6px rgb(0 21 41 / 35%); box-shadow: 2px 0 6px rgb(0 21 41 / 35%);
} }
::v-deep .el-menu { ::v-deep .el-menu {
border: none; border: none;
} }
// .el-menu-item { // .el-menu-item {
// margin: 0 20px 10px; // margin: 0 20px 10px;
// } // }
.el-menu-item:hover { .el-menu-item:hover {
outline: 0 !important; outline: 0 !important;
background: #5470c6 !important; background: #5470c6 !important;
border-radius: 5px !important; border-radius: 5px !important;
} }
.el-menu-item.is-active { .el-menu-item.is-active {
color: #fff !important; color: #fff !important;
background: #5470c6 !important; background: #5470c6 !important;
border-radius: 5px !important; border-radius: 5px !important;
} }
.el-menu-item-group__title { .el-menu-item-group__title {
padding: 0 0 !important; padding: 0 0 !important;
} }
.table {
margin-top: 20px;
}
.block {
margin-top: 30px;
}
.from-btn {
display: flex;
justify-content: space-around;
align-content: center;
}
</style> </style>

View File

@ -0,0 +1,370 @@
<template>
<div>
<!-- 筛选框 -->
<el-card class="box-card" :body-style="{ padding: '20px 20px 0 20px' }">
<el-form ref="form" :inline="true" :model="form">
<el-form-item label="模块:" style="margin-right: 40px">
<el-select v-model="form.module" clearable>
<el-option v-for="item in mouduleOptions" :key="item.value" :label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="操作:" style="margin-right: 40px">
<el-select v-model="form.action" clearable>
<el-option v-for="item in actionOptions" :key="item.value" :label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="目标类型:" style="margin-right: 40px">
<el-select v-model="form.target_type" clearable>
<el-option v-for="item in target_ypeOptions" :key="item.value" :label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="类别:" style="margin-right: 40px">
<el-select v-model="form.targetField" clearable>
<el-option v-for="item in target_fieldOptions" :key="item.value" :label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="操作人:" style="margin-right: 40px">
<el-select v-model="form.userId" placeholder="输入操作人" clearable>
<el-option v-for="item in userOptions" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="时间:">
<el-date-picker v-model="value1" type="datetimerange" range-separator="-" start-placeholder=""
end-placeholder="止" value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="query()">查询</el-button>
</el-form-item>
</el-form>
</el-card>
<!-- 表格 -->
<el-card style="margin-top: 20px" class="box-card">
<el-table :data="tableData" border style="width: 100%">
<el-table-column prop="id" label="序号" width="75"> </el-table-column>
<el-table-column prop="module" label="模块" width="70"> </el-table-column>
<el-table-column prop="action" label="操作" width="70"> </el-table-column>
<el-table-column prop="target_type" label="目标类型" width="100"> </el-table-column>
<el-table-column prop="target_id" label="目标ID" width="70"> </el-table-column>
<el-table-column prop="target_field" label="类别" width="100"> </el-table-column>
<el-table-column label="操作前">
<template slot-scope="scope">
<div style="height:45px">
{{ scope.row.before_update }}
</div>
</template>
</el-table-column>
<el-table-column label="操作后">
<template slot-scope="scope">
<div style="height:45px">
{{ scope.row.after_update }}
</div>
</template>
</el-table-column>
<el-table-column label="信息" width="300">
<template slot-scope="scope">
<div style="overflow-x: hidden;white-space: nowrap;">
{{ scope.row.message }}
</div>
</template>
</el-table-column>
<el-table-column prop="user.name" label="操作人" width="120"></el-table-column>
<el-table-column label="操作时间" width="100">
<template slot-scope="scope">
<p>{{ scope.row.created_at }}</p>
</template>
</el-table-column>
</el-table>
</el-card>
<!-- 分页功能 -->
<div class="block">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page="current_page" :page-sizes="[15, 50, 100]" :page-size="per_page"
layout="total, sizes, prev, pager, next, jumper" :total="Paginationdata.total">
</el-pagination>
</div>
</div>
</template>
<script>
import { recordList } from "../../api/record";
import { userList } from "../../api/user";
export default {
data() {
return {
target_fieldOptions: [
{
value: "add",
label: "创建",
},
{
value: "status",
label: "状态",
},
{
value: "name",
label: "名称",
},
{
value: "title",
label: "标题",
},
{
value: "import",
label: "导入",
},
{
value: "export",
label: "导出",
},
{
value: "set",
label: "设置",
},
{
value: "cost",
label: "成本",
},
{
value: "stock",
label: "库存",
},
{
value: "inventory",
label: "库存盘点",
},
{
value: "reserve",
label: "预留量",
},
{
value: "timingInventory",
label: "7点盘点",
},
{
value: "pdd.ktt.goods.query.list",
label: "快团团下载绑定商品",
},
{
value: "arrived_today_num",
label: "今日到货",
},
{
value: "loss_num",
label: "损耗",
},
{
value: "pdd.pop.auth.token.create",
label: "快团团授权",
},
{
value: "reference_price",
label: "参考价格",
},
{
value: "update",
label: "更新",
},
{
value: "pdd.ktt.goods.incr.quantity",
label: "快团团库存同步",
},
{
value: "pdd.ktt.order.list",
label: "快团团下载订单",
},
{
value: "pdd.ktt.increment.order.query",
label: "快团团增量下载订单",
},
], //
mouduleOptions: [
{
value: "menu",
label: "菜单",
},
{
value: "goods",
label: "商品",
},
{
value: "file",
label: "文件",
},
{
value: "permission",
label: "权限",
},
{
value: "role",
label: "角色",
},
{
value: "user",
label: "用户",
},
{
value: "plat",
label: "平台",
},
],//
actionOptions: [
{
value: "POST",
label: "新增",
},
{
value: "PATCH",
label: "更新",
},
{
value: "DELETE",
label: "删除",
},
{
value: "GET",
label: "查看",
},
],//
target_ypeOptions: [
{
value: "upload",
label: "上传",
},
{
value: "goods_sku",
label: "商品规格",
},
{
value: "goods_brand",
label: "商品品牌",
},
{
value: "goods_type",
label: "种类",
},
{
value: "menu",
label: "菜单",
},
{
value: "role",
label: "角色",
},
{
value: "permission",
label: "权限",
},
{
value: "user",
label: "用户",
},
{
value: "kuaituantuan",
label: "快团团",
},
{
value: "miaoxuan",
label: "秒选",
},
{
value: "goods",
label: "商品",
},
],//
userOptions: [], //
form: {
module: '',// goods-(),'menu' => '',file-,permission-,role-,user-,plat-
action: '',// POST-,PATCH-,DELETE-,'GET' => '',
target_type: '',// upload-,goods_sku,goods_brand-,goods_type-,menu-,permission-,role-,user-,kuaituantuan-,miaoxuan-,'goods' => '',
targetField: "",//
userId: "",//id()
},
value1: "", //
tableData: [], //
Paginationdata: {}, //
current_page: 1, //
per_page: 15, //
};
},
methods: {
//
getList() {
let page = {
page: this.current_page,
per_page: this.per_page,
};
recordList(page).then((res) => {
this.tableData = res.data.data;
this.Paginationdata = res.data.meta;
});
},
//
getUser() {
userList().then((res) => {
this.userOptions = res.data.data;
});
},
//
query() {
let queryData = {
page: this.current_page,
per_page: this.per_page,
module: this.form.module,
action: this.form.action,
target_type: this.form.target_type,
target_id: this.$route.query.id ? this.$route.query.id : '',
target_field: this.form.targetField ? this.form.targetField : '',
user_id: this.form.userId,
start_time: this.value1[0] ? this.value1[0] : '',
end_time: this.value1[1] ? this.value1[1] : '',
};
recordList(queryData).then((res) => {
this.tableData = res.data.data;
this.Paginationdata = res.data.meta;
});
},
//
handleSizeChange(val) {
//
this.per_page = val;
this.query();
},
handleCurrentChange(val) {
//
this.current_page = val;
this.query();
},
},
mounted() {
this.getList();
this.getUser();
},
};
</script>
<style lang="scss" scoped>
.block {
margin-top: 20px;
}
::v-deep .el-card__body {
padding: 0;
}
</style>

View File

@ -0,0 +1,183 @@
<template>
<div>
<!-- 筛选框 -->
<el-card :body-style="{ padding: '20px 20px 0 20px' }">
<el-form ref="form" :inline="true" :model="form">
<el-form-item label="查询类别:">
<el-select v-model="form.targetField" placeholder="全部">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="操作用户">
<el-select v-model="form.userId" placeholder="输入操作用户">
<el-option v-for="item in options1" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="操作时间:">
<el-date-picker v-model="value1" type="datetimerange" range-separator="-" start-placeholder=""
end-placeholder="止" value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="query()">查询</el-button>
</el-form-item>
</el-form>
</el-card>
<!-- 表格 -->
<el-card style="margin-top: 20px">
<el-table :data="tableData" style="width: 100%" border>
<el-table-column prop="id" label="序号" width="70"> </el-table-column>
<el-table-column prop="created_at" label="时间" width="200">
</el-table-column>
<el-table-column prop="target_field" label="类别" width="100">
</el-table-column>
<el-table-column prop="before_update" label="操作前" :resizable="ture">
</el-table-column>
<el-table-column prop="after_update" label="操作后" :resizable="ture">
</el-table-column>
<el-table-column prop="user.name" label="操作人" width="100">
</el-table-column>
</el-table>
</el-card>
<!-- 分页功能 -->
<div class="block">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page="current_page" :page-sizes="[15, 50, 100]" :page-size="per_page"
layout="total, sizes, prev, pager, next, jumper" :total="Paginationdata.total">
</el-pagination>
</div>
</div>
</template>
<script>
import { userList } from "../../api/user";
import { recordList } from "../../api/record";
export default {
data() {
return {
options: [
{
value: "cost",
label: "成本",
},
{
value: "stock",
label: "库存",
},
{
value: "inventory",
label: "库存盘点",
},
{
value: "status",
label: "状态",
},
{
value: "set",
label: "设置",
},
], //
options1: [], //
form: {
targetField: "",
userId: "",
},
value1: "", //
tableData: [], //
Paginationdata: {}, //
current_page: 1, //
per_page: 15, //
moudule: "goods",
};
},
methods: {
//
getList() {
let queryData = {
userId: this.form.userId,
target_field: this.form.targetField,
moudule: this.moudule,
target_id: this.$route.query.id,
startTime: this.value1[0],
endTime: this.value1[1],
page: this.current_page,
per_page: this.per_page,
};
recordList(queryData).then((res) => {
this.tableData = res.data.data;
this.Paginationdata = res.data.meta;
});
},
//
handleSizeChange(val) {
//
this.per_page = val;
this.query();
},
handleCurrentChange(val) {
//
this.current_page = val;
this.query();
},
//
getUser() {
userList().then((res) => {
this.options1 = res.data.data;
});
},
//
query() {
let queryData = {
userId: this.form.userId,
target_field: this.form.targetField,
page: this.current_page,
per_page: this.per_page,
moudule: this.moudule,
target_id: this.$route.query.id,
startTime: this.value1[0],
endTime: this.value1[1],
};
//
const newObj = filterParams(queryData);
function filterParams(obj) {
const _newPar = {};
for (const key in obj) {
// 0
if (
(obj[key] === 0 || obj[key]) &&
obj[key].toString().replace(/(^\s*)|(\s*$)/g, "") !== ""
) {
//
_newPar[key] = obj[key];
}
}
//
return _newPar;
}
recordList(newObj).then((res) => {
this.tableData = res.data.data;
this.Paginationdata = res.data.meta;
});
},
},
mounted() {
this.getList();
this.getUser();
},
};
</script>
<style lang="scss" scoped>
.block {
margin-top: 20px;
}
</style>

View File

@ -1,185 +0,0 @@
<template>
<div>
<!-- 筛选框 -->
<el-card class="box-card">
<div class="goods" style="margin: 20px">
<el-form ref="form" :inline="true" :model="form">
<el-form-item label="查询类别:">
<el-select v-model="form.targetField" placeholder="全部">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="操作用户">
<el-select v-model="form.userId" placeholder="输入操作用户">
<el-option v-for="item in options1" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="操作时间:">
<el-date-picker v-model="value1" type="datetimerange" range-separator="-" start-placeholder=""
end-placeholder="止" value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="query()">查询</el-button>
</el-form-item>
</el-form>
</div>
</el-card>
<!-- 表格 -->
<el-card style="margin-top: 30px" class="box-card">
<el-table :data="tableData" style="width: 100%" border>
<el-table-column prop="id" label="序号" width="70"> </el-table-column>
<el-table-column prop="created_at" label="时间" width="200">
</el-table-column>
<el-table-column prop="target_field" label="类别" width="100">
</el-table-column>
<el-table-column prop="before_update" label="操作前" :resizable="ture">
</el-table-column>
<el-table-column prop="after_update" label="操作后" :resizable="ture">
</el-table-column>
<el-table-column prop="user.name" label="操作人" width="100">
</el-table-column>
</el-table>
</el-card>
<!-- 分页功能 -->
<div class="block">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="current_page"
:page-sizes="[15, 50, 100]" :page-size="per_page" layout="total, sizes, prev, pager, next, jumper"
:total="Paginationdata.total">
</el-pagination>
</div>
</div>
</template>
<script>
import { userList } from "../../api/user";
import { recordList } from "../../api/record";
export default {
data() {
return {
options: [
{
value: "cost",
label: "成本",
},
{
value: "stock",
label: "库存",
},
{
value: "inventory",
label: "库存盘点",
},
{
value: "status",
label: "状态",
},
{
value: "set",
label: "设置",
},
], //
options1: [], //
form: {
targetField: "",
userId: "",
},
value1: "", //
tableData: [], //
Paginationdata: {}, //
current_page: 1, //
per_page: 15, //
moudule: "goods",
};
},
methods: {
//
getList() {
let queryData = {
userId: this.form.userId,
target_field: this.form.targetField,
moudule: this.moudule,
target_id: this.$route.query.id,
startTime: this.value1[0],
endTime: this.value1[1],
page: this.current_page,
per_page: this.per_page,
};
recordList(queryData).then((res) => {
this.tableData = res.data.data;
this.Paginationdata = res.data.meta;
});
},
//
handleSizeChange(val) {
//
this.per_page = val;
this.query();
},
handleCurrentChange(val) {
//
this.current_page = val;
this.query();
},
//
getUser() {
userList().then((res) => {
this.options1 = res.data.data;
});
},
//
query() {
let queryData = {
userId: this.form.userId,
target_field: this.form.targetField,
page: this.current_page,
per_page: this.per_page,
moudule: this.moudule,
target_id: this.$route.query.id,
startTime: this.value1[0],
endTime: this.value1[1],
};
//
const newObj = filterParams(queryData);
function filterParams(obj) {
const _newPar = {};
for (const key in obj) {
// 0
if (
(obj[key] === 0 || obj[key]) &&
obj[key].toString().replace(/(^\s*)|(\s*$)/g, "") !== ""
) {
//
_newPar[key] = obj[key];
}
}
//
return _newPar;
}
recordList(newObj).then((res) => {
this.tableData = res.data.data;
this.Paginationdata = res.data.meta;
});
},
},
mounted() {
this.getList();
this.getUser();
},
};
</script>
<style>
.block {
margin-top: 30px;
}
</style>

View File

@ -1,367 +0,0 @@
<template>
<div>
<!-- 筛选框 -->
<el-card class="box-card">
<div class="goods" style="margin: 20px">
<el-form ref="form" :inline="true" :model="form">
<el-form-item label="模块:" style="margin-right: 40px">
<el-select v-model="form.module" clearable >
<el-option v-for="item in mouduleOptions" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="操作:" style="margin-right: 40px">
<el-select v-model="form.action" clearable>
<el-option v-for="item in actionOptions" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="目标类型:" style="margin-right: 40px">
<el-select v-model="form.target_type" clearable>
<el-option v-for="item in target_ypeOptions" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="类别:" style="margin-right: 40px">
<el-select v-model="form.targetField" clearable>
<el-option v-for="item in target_fieldOptions" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="操作人:" style="margin-right: 40px">
<el-select v-model="form.userId" placeholder="输入操作人" clearable>
<el-option v-for="item in userOptions" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="时间:">
<el-date-picker v-model="value1" type="datetimerange" range-separator="-" start-placeholder=""
end-placeholder="止" value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="query()">查询</el-button>
</el-form-item>
</el-form>
</div>
</el-card>
<!-- 表格 -->
<el-card style="margin-top: 30px" class="box-card">
<el-table :data="tableData" border style="width: 100%">
<el-table-column prop="id" label="序号" width="75"> </el-table-column>
<el-table-column prop="module" label="模块" width="70"> </el-table-column>
<el-table-column prop="action" label="操作" width="70"> </el-table-column>
<el-table-column prop="target_type" label="目标类型" width="100"> </el-table-column>
<el-table-column prop="target_id" label="目标ID" width="70"> </el-table-column>
<el-table-column prop="target_field" label="类别" width="100"> </el-table-column>
<el-table-column label="操作前">
<template slot-scope="scope">
<div style="height:45px">
{{scope.row.before_update}}
</div>
</template>
</el-table-column>
<el-table-column label="操作后">
<template slot-scope="scope">
<div style="height:45px">
{{scope.row.after_update}}
</div>
</template>
</el-table-column>
<el-table-column label="信息" width="300">
<template slot-scope="scope">
<div style="overflow-x: hidden;white-space: nowrap;">
{{scope.row.message}}
</div>
</template>
</el-table-column>
<el-table-column prop="user.name" label="操作人" width="120"></el-table-column>
<el-table-column label="操作时间" width="100">
<template slot-scope="scope">
<p>{{scope.row.created_at}}</p>
</template>
</el-table-column>
</el-table>
</el-card>
<!-- 分页功能 -->
<div class="block">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="current_page"
:page-sizes="[15, 50, 100]" :page-size="per_page" layout="total, sizes, prev, pager, next, jumper"
:total="Paginationdata.total">
</el-pagination>
</div>
</div>
</template>
<script>
import { recordList } from "../../api/record";
import { userList } from "../../api/user";
export default {
data() {
return {
target_fieldOptions: [
{
value: "add",
label: "创建",
},
{
value: "status",
label: "状态",
},
{
value: "name",
label: "名称",
},
{
value: "title",
label: "标题",
},
{
value: "import",
label: "导入",
},
{
value: "export",
label: "导出",
},
{
value: "set",
label: "设置",
},
{
value: "cost",
label: "成本",
},
{
value: "stock",
label: "库存",
},
{
value: "inventory",
label: "库存盘点",
},
{
value: "reserve",
label: "预留量",
},
{
value: "timingInventory",
label: "7点盘点",
},
{
value: "pdd.ktt.goods.query.list",
label: "快团团下载绑定商品",
},
{
value: "arrived_today_num",
label: "今日到货",
},
{
value: "loss_num",
label: "损耗",
},
{
value: "pdd.pop.auth.token.create",
label: "快团团授权",
},
{
value: "reference_price",
label: "参考价格",
},
{
value: "update",
label: "更新",
},
{
value: "pdd.ktt.goods.incr.quantity",
label: "快团团库存同步",
},
{
value: "pdd.ktt.order.list",
label: "快团团下载订单",
},
{
value: "pdd.ktt.increment.order.query",
label: "快团团增量下载订单",
},
], //
mouduleOptions:[
{
value: "menu",
label: "菜单",
},
{
value: "goods",
label: "商品",
},
{
value: "file",
label: "文件",
},
{
value: "permission",
label: "权限",
},
{
value: "role",
label: "角色",
},
{
value: "user",
label: "用户",
},
{
value: "plat",
label: "平台",
},
],//
actionOptions:[
{
value: "POST",
label: "新增",
},
{
value: "PATCH",
label: "更新",
},
{
value: "DELETE",
label: "删除",
},
{
value: "GET",
label: "查看",
},
],//
target_ypeOptions:[
{
value: "upload",
label: "上传",
},
{
value: "goods_sku",
label: "商品规格",
},
{
value: "goods_brand",
label: "商品品牌",
},
{
value: "goods_type",
label: "种类",
},
{
value: "menu",
label: "菜单",
},
{
value: "role",
label: "角色",
},
{
value: "permission",
label: "权限",
},
{
value: "user",
label: "用户",
},
{
value: "kuaituantuan",
label: "快团团",
},
{
value: "miaoxuan",
label: "秒选",
},
{
value: "goods",
label: "商品",
},
],//
userOptions: [], //
form: {
module:'',// goods-(),'menu' => '',file-,permission-,role-,user-,plat-
action:'',// POST-,PATCH-,DELETE-,'GET' => '',
target_type:'',// upload-,goods_sku,goods_brand-,goods_type-,menu-,permission-,role-,user-,kuaituantuan-,miaoxuan-,'goods' => '',
targetField: "",//
userId: "",//id()
},
value1: "", //
tableData: [], //
Paginationdata: {}, //
current_page: 1, //
per_page: 15, //
};
},
methods: {
//
getList() {
let page = {
page: this.current_page,
per_page: this.per_page,
};
recordList(page).then((res) => {
this.tableData = res.data.data;
this.Paginationdata = res.data.meta;
});
},
//
getUser() {
userList().then((res) => {
this.userOptions = res.data.data;
});
},
//
query() {
let queryData = {
page: this.current_page,
per_page: this.per_page,
module: this.form.module,
action:this.form.action,
target_type:this.form.target_type,
target_id: this.$route.query.id?this.$route.query.id:'',
target_field: this.form.targetField?this.form.targetField:'',
user_id: this.form.userId,
start_time: this.value1[0]?this.value1[0]:'',
end_time: this.value1[1]?this.value1[1]:'',
};
recordList(queryData).then((res) => {
this.tableData = res.data.data;
this.Paginationdata = res.data.meta;
});
},
//
handleSizeChange(val) {
//
this.per_page = val;
this.query();
},
handleCurrentChange(val) {
//
this.current_page = val;
this.query();
},
},
mounted() {
this.getList();
this.getUser();
},
};
</script>
<style scoped>
.block {
margin-top: 30px;
}
::v-deep .el-card__body {
padding: 0;
}
</style>

View File

@ -1,11 +1,9 @@
<template> <template>
<div class="conent"> <div class="conent">
<!-- 新增按钮 --> <!-- 新增按钮 -->
<div class="btn">
<el-button type="primary" @click="handAdd">新增</el-button> <el-button type="primary" @click="handAdd">新增</el-button>
</div>
<div class="table"> <div class="table" style="margin-top: 20px">
<el-table :data="tableData" style="width: 100%"> <el-table :data="tableData" style="width: 100%">
<el-table-column prop="id" label="ID" width="180"> </el-table-column> <el-table-column prop="id" label="ID" width="180"> </el-table-column>
<el-table-column prop="name" label="店铺名称" width="180"> <el-table-column prop="name" label="店铺名称" width="180">
@ -13,8 +11,10 @@
<el-table-column prop="plat_id" label="所属平台"></el-table-column> <el-table-column prop="plat_id" label="所属平台"></el-table-column>
<el-table-column label="操作"> <el-table-column label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="danger" v-if="scope.row.status === '未授权'"><a :href="scope.row.authUrl" target="_blank" <el-button type="danger" v-if="scope.row.status === '未授权'"><a :href="scope.row.authUrl"
rel="noopener noreferrer">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a></el-button> target="_blank"
rel="noopener noreferrer">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>
</el-button>
<div v-if="scope.row.status === '已授权'"> <div v-if="scope.row.status === '已授权'">
<el-button type="success" :disabled="true">{{ <el-button type="success" :disabled="true">{{
scope.row.status scope.row.status
@ -22,7 +22,8 @@
<el-button @click="download(scope.row)">下载商品</el-button> <el-button @click="download(scope.row)">下载商品</el-button>
</div> </div>
<div v-if="scope.row.status === '重新授权'"> <div v-if="scope.row.status === '重新授权'">
<el-button type="danger" target="_blank"><a :href="scope.row.authUrl" rel="noopener noreferrer">重新授权</a> <el-button type="danger" target="_blank"><a :href="scope.row.authUrl"
rel="noopener noreferrer">重新授权</a>
</el-button> </el-button>
<el-button @click="download(scope.row)">下载商品</el-button> <el-button @click="download(scope.row)">下载商品</el-button>
</div> </div>
@ -38,6 +39,14 @@
</el-table> </el-table>
</div> </div>
<!-- 分页功能 -->
<div class="block">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page="current_page" :page-sizes="[15, 50, 100]" :page-size="per_page"
layout="total, sizes, prev, pager, next, jumper" :total="Paginationdata.total">
</el-pagination>
</div>
<!-- 新增店铺 --> <!-- 新增店铺 -->
<el-dialog title="新增店铺" :visible.sync="dialogFormVisible" :close-on-click-modal="false"> <el-dialog title="新增店铺" :visible.sync="dialogFormVisible" :close-on-click-modal="false">
<el-form :model="form"> <el-form :model="form">
@ -56,20 +65,12 @@
<el-button type="primary" @click="addSubmit"> </el-button> <el-button type="primary" @click="addSubmit"> </el-button>
</div> </div>
</el-dialog> </el-dialog>
<!-- 分页功能 -->
<div class="block">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="current_page"
:page-sizes="[15, 50, 100]" :page-size="per_page" layout="total, sizes, prev, pager, next, jumper"
:total="Paginationdata.total">
</el-pagination>
</div>
</div> </div>
</template> </template>
<script> <script>
import { shopListId, shopAdd, storeList, downloadGoods } from "../../api/shop"; import { shopListId, shopAdd, storeList, downloadGoods } from "../../api/shop";
export default { export default {
data() { data() {
return { return {
dialogFormVisible: false, dialogFormVisible: false,
@ -149,40 +150,15 @@
}); });
}, },
}, },
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
a { a {
text-decoration: none; text-decoration: none;
color: white; color: white;
} }
.block {
.conent {
width: 100%;
min-height: calc(100vh - 200px);
position: relative;
}
.btn {
height: 104px;
border-radius: 5px;
display: flex;
align-items: center;
}
.el-button {
width: 114px;
height: 44px;
border-radius: 3px;
}
.table {
margin-top: 20px; margin-top: 20px;
} }
.block {
margin-top: 30px;
}
</style> </style>

View File

@ -1,10 +1,5 @@
<template> <template>
<div class="conent"> <div class="conent">
<!-- 新增按钮 -->
<div class="btn">
<el-button type="primary" @click="dialogVisible2 = true">新增</el-button>
</div>
<!-- 点击新增弹出表单 --> <!-- 点击新增弹出表单 -->
<div class="from"> <div class="from">
<el-dialog title="新增角色" :visible.sync="dialogVisible2" width="30%" :close-on-click-modal="false"> <el-dialog title="新增角色" :visible.sync="dialogVisible2" width="30%" :close-on-click-modal="false">
@ -22,8 +17,11 @@
</el-dialog> </el-dialog>
</div> </div>
<!-- 角色表单 --> <!-- 新增按钮 -->
<div class="table"> <el-button type="primary" @click="dialogVisible2 = true">新增</el-button>
<!-- 角色列表 -->
<div class="table" style="margin-top: 20px">
<el-table :data="tableList" style="width: 100%"> <el-table :data="tableList" style="width: 100%">
<el-table-column prop="id" label="ID"> </el-table-column> <el-table-column prop="id" label="ID"> </el-table-column>
<el-table-column prop="name" label="角色名称"> </el-table-column> <el-table-column prop="name" label="角色名称"> </el-table-column>
@ -43,7 +41,8 @@
<!-- 点击编辑弹出权限框 --> <!-- 点击编辑弹出权限框 -->
<el-dialog title="编辑权限" :visible.sync="dialogVisible" width="30%" :close-on-click-modal="false"> <el-dialog title="编辑权限" :visible.sync="dialogVisible" width="30%" :close-on-click-modal="false">
<el-tree v-if="isShowtree" :data="Role_Permission" show-checkbox :default-expand-all="false" node-key="id" <el-tree v-if="isShowtree" :data="Role_Permission" show-checkbox :default-expand-all="false" node-key="id"
ref="tree" highlight-current :props="defaultProps" :default-checked-keys="chekedKeys" v-model="permissionIds"> ref="tree" highlight-current :props="defaultProps" :default-checked-keys="chekedKeys"
v-model="permissionIds">
</el-tree> </el-tree>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button @click="cancel()"> </el-button> <el-button @click="cancel()"> </el-button>
@ -54,13 +53,13 @@
</template> </template>
<script> <script>
import { import {
roleList, roleList,
roleAdd, roleAdd,
jurisdiction, jurisdiction,
jurisdictionEdit, jurisdictionEdit,
} from "../../api/role.js"; } from "../../api/role.js";
export default { export default {
data() { data() {
return { return {
id: "", //id id: "", //id
@ -153,37 +152,8 @@
}); });
}, },
}, },
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.conent {
width: 100%;
min-height: calc(100vh - 200px);
}
.btn {
height: 104px;
border-radius: 5px;
display: flex;
align-items: center;
}
.el-button {
width: 114px;
height: 44px;
border-radius: 3px;
}
.table {
margin-top: 20px;
}
.from-btn {
display: flex;
justify-content: space-around;
align-content: center;
}
</style> </style>

View File

@ -1,9 +1,5 @@
<template> <template>
<div class="conent"> <div class="conent">
<!-- 新增按钮 -->
<div class="btn">
<el-button type="primary" @click="dialogVisible = true">新增</el-button>
</div>
<!-- 点击新增弹出表单 --> <!-- 点击新增弹出表单 -->
<div class="from"> <div class="from">
@ -22,7 +18,8 @@
<el-form-item label="角色"> <el-form-item label="角色">
<template> <template>
<el-select v-model="value" placeholder="请选择"> <el-select v-model="value" placeholder="请选择">
<el-option v-for="item in roleOptions" :key="item.value" :label="item.name" :value="item.name"> <el-option v-for="item in roleOptions" :key="item.value" :label="item.name"
:value="item.name">
</el-option> </el-option>
</el-select> </el-select>
</template> </template>
@ -53,7 +50,8 @@
<el-form-item label="角色"> <el-form-item label="角色">
<template> <template>
<el-select v-model="edit_from.role_name" placeholder="请选择"> <el-select v-model="edit_from.role_name" placeholder="请选择">
<el-option v-for="item in roleOptions" :key="item.value" :label="item.name" :value="item.name"> <el-option v-for="item in roleOptions" :key="item.value" :label="item.name"
:value="item.name">
</el-option> </el-option>
</el-select> </el-select>
</template> </template>
@ -73,8 +71,11 @@
</el-dialog> </el-dialog>
</div> </div>
<!-- 新增按钮 -->
<el-button type="primary" @click="dialogVisible = true">新增</el-button>
<!-- 用户列表 --> <!-- 用户列表 -->
<div class="table"> <div class="table" style="margin-top: 20px">
<template> <template>
<el-table :data="tableList" style="width: 100%"> <el-table :data="tableList" style="width: 100%">
<el-table-column prop="id" label="ID"></el-table-column> <el-table-column prop="id" label="ID"></el-table-column>
@ -96,23 +97,23 @@
<!-- 分页功能 --> <!-- 分页功能 -->
<div class="block"> <div class="block">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="current_page" <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
:page-sizes="[15, 50, 100]" :page-size="per_page" layout="total, sizes, prev, pager, next, jumper" :current-page="current_page" :page-sizes="[15, 50, 100]" :page-size="per_page"
:total="Paginationdata.total"> layout="total, sizes, prev, pager, next, jumper" :total="Paginationdata.total">
</el-pagination> </el-pagination>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import { import {
userList, userList,
userAdd, userAdd,
userEdit, userEdit,
userConfirm, userConfirm,
roleList, roleList,
} from "../../api/user"; } from "../../api/user";
export default { export default {
data() { data() {
return { return {
id: "", id: "",
@ -222,41 +223,11 @@
this.getList(); this.getList();
}, },
}, },
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.conent { .block {
width: 100%;
min-height: calc(100vh - 200px);
position: relative;
}
.btn {
height: 104px;
border-radius: 5px;
display: flex;
align-items: center;
}
.el-button {
width: 114px;
height: 44px;
border-radius: 3px;
}
.table {
margin-top: 20px; margin-top: 20px;
} }
.from-btn {
display: flex;
justify-content: space-around;
align-content: center;
}
.block {
margin-top: 30px;
}
</style> </style>

View File

@ -1,472 +0,0 @@
<template>
<div>
<el-card class="box-card">
<div class="goods" style="margin: 20px">
<div class="add-item-info" style="margin-bottom: 10px; margin-left: 52px">
<div>
<div style="font-size: 14px">商品列表</div>
<el-select v-model="lid" placeholder="选择商品" @change="onchange" filterable>
<el-option v-for="item in goodschoose" :key="item.id" :label="item.title" :value="item.id">
</el-option>
</el-select>
</div>
<span style="font-size: 14px">商品图片
<el-upload class="avatar-uploader" action="#" :limit="1" :auto-upload="false" :show-file-list="true"
list-type="picture-card" :on-change="handleAvatarSuccess">
<img v-if="imageUrl" :src="imageUrl" class="avatar" />
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</span>
</div>
<!-- 编辑按钮进入显示 -->
<el-form ref="form" :inline="true" :model="form" v-if="goodsData != ''">
<div>
<el-form-item label="商品名称:">
<el-input placeholder="商品名称" v-model="goodsData.goods.title"></el-input>
</el-form-item>
<el-form-item label="商品编码:">
<el-input placeholder="商品编码" v-model="goodsData.goods.goods_code"></el-input>
</el-form-item>
<el-form-item label="商品种类:">
<el-select v-model="goodsData.goods.type_id" placeholder="商品种类" filterable>
<el-option v-for="item in cate" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="商品品牌:">
<el-select v-model="goodsData.goods.brand_id" placeholder="商品品牌" filterable>
<el-option v-for="item in brand" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
</div>
<div>
<el-form-item label="商品规格:">
<el-input placeholder="商品规格" v-model="goodsData.title"></el-input>
</el-form-item>
<el-form-item label="规格编码:">
<el-input v-model="goodsData.sku_code" placeholder="商品编码">
</el-input>
</el-form-item>
<el-form-item label="商品状态:">
<el-select v-model="goodsData.status">
<el-option v-for="item in options" :key="item.id" :label="item.label" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<div>
<el-form-item label="商品数量:">
<el-input v-model="goodsData.num" placeholder="商品数量">
</el-input>
</el-form-item>
<el-form-item label="商品成本:">
<el-input v-model="goodsData.cost" placeholder="商品成本">
</el-input>
</el-form-item>
</div>
</div>
<div class="btn">
<el-form-item>
<el-button type="primary" @click="Edititem()">保存</el-button>
<el-button plain @click="cancel()">取消</el-button>
</el-form-item>
</div>
</el-form>
<!-- 新建商品进入显示 -->
<el-form ref="form" :inline="true" :model="form" v-if="goodsData == ''">
<div>
<el-form-item label="商品名称:">
<el-input placeholder="商品名称" v-model="form.title" :disabled="true" v-if="isShow"></el-input>
<el-input placeholder="商品名称" v-model="form.title" v-else></el-input>
</el-form-item>
<el-form-item label="商品编码:">
<el-input placeholder="商品编码" v-model="form.goods_code" :disabled="true" v-if="isShow"></el-input>
<el-input placeholder="商品编码" v-model="form.goods_code" v-else></el-input>
</el-form-item>
<el-form-item label="商品种类:">
<el-select v-model="form.type_id" placeholder="商品种类" filterable>
<el-option v-for="item in cate" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="商品品牌:">
<el-select v-model="form.brand_id" placeholder="商品品牌" filterable>
<el-option v-for="item in brand" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
</div>
<div v-for="(item, i) in skus" :key="i">
<span style="margin-right: -15px">{{ i + 1 }}.</span>
<el-form-item label="商品规格:">
<el-input placeholder="商品规格" v-model="skus[i].title"></el-input>
</el-form-item>
<span class="addto" @click="handleAdd()">+</span>
<el-form-item label="规格编码:">
<el-input v-model="skus[i].sku_code" placeholder="商品编码">
</el-input>
</el-form-item>
<el-form-item label="商品状态:">
<el-select v-model="skus[i].reserve" placeholder="下架(默认)">
<el-option v-for="item in options" :key="item.id" :label="item.label" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<div>
<el-form-item label="商品数量:">
<el-input v-model="skus[i].num" placeholder="商品数量">
</el-input>
</el-form-item>
<el-form-item label="商品成本:">
<el-input v-model="skus[i].cost" placeholder="商品成本">
</el-input>
</el-form-item>
<el-button type="primary" @click="handleDelete(i)">删除</el-button>
</div>
</div>
<div class="btn">
<el-form-item>
<el-button type="primary" @click="handleSave()">保存</el-button>
<el-button plain @click="cancel()">取消</el-button>
</el-form-item>
</div>
</el-form>
</div>
</el-card>
</div>
</template>
<script>
import {
addGoods,
checkGoods,
goodsList,
updateGoods,
imgUpload,
} from "../../../api/goods.js";
import { goods_types, Brand_goods_types } from "../../../api/rankingData.js";
export default {
data() {
return {
imgs: [],
gallery: "",
imageUrl: "",
lid: "", // id
gid: "", // id
brand: [], //
cate: [], //
goodschoose: [], //
goodsID: "", //id
goodsData: [], //
//
skus: [
{
title: "",
sku_code: "",
status: "0",
num: "0",
cost: "0",
reserve: "0",
},
],
//
form: {
goods_id: "",
title: "",
img_url: "",
type_id: "",
brand_id: "",
goods_code: "",
},
//
options: [
{
id: "0",
label: "下架",
},
{
id: "1",
label: "在售",
},
{
id: "2",
label: "预警",
},
],
file: [],
isShow: false,
URL: "",
};
},
watch: {
lid: {
handler(newVal, oldVal) {
if (newVal) {
this.goodschoose.forEach((item) => {
if (item.id == newVal) {
this.form = { ...item };
}
});
}
},
deep: true, //
immediate: true, //
},
},
methods: {
//
handleAvatarSuccess(res, files) {
let formData = new FormData();
files.forEach((file) => {
formData.append("uploadFile", file.raw); //
});
let requestConfig = {
headers: {
"Content-Type": "multipart/form-data",
},
};
imgUpload(formData, requestConfig).then((res) => {
this.form.img_url = res.data.resource;
if (this.goodsData.length !== 0) {
this.goodsData.goods.img_url = res.data.resource;
}
});
},
//
handleUpdate() {
this.gid = this.$route.query;
if (this.gid.id) {
checkGoods(this.gid.id).then((res) => {
const data = res.data.data;
const sku = this.skus[0];
const list = {};
Object.keys(data).map((key) => {
Object.keys(sku).map((i) => {
if (key == i) {
list[i] = data[key];
}
});
});
});
}
},
//
handleList() {
goodsList().then((res) => {
this.goodschoose = res.data.data;
this.goodschoose = [
{
title: "",
id: "",
},
...this.goodschoose,
];
});
},
//
handleSave() {
const goods = this.form;
const skus = this.skus;
const updata = {
...goods,
goods_id: this.lid,
skus: skus,
};
addGoods(updata).then((res) => {
if (res.statusText === "OK") {
this.$message({
message: "商品添加成功!",
type: "success",
});
this.updateForm();
this.$router.push("/GOODS_LIST");
}
});
},
//
updateForm() {
this.form = {
title: "",
img_url: "abc.jpg",
type_id: "",
brand_id: "",
goods_code: "",
};
this.skus = [
{
title: "",
sku_code: "",
status: "",
num: "",
cost: "",
},
];
},
//
handleAdd() {
this.skus.push({
title: "",
sku_code: "",
status: "0",
num: "",
cost: "",
});
},
//
handleDelete(index) {
this.skus.splice(index, 1);
},
//
getgoodsidData() {
let id = this.bigID;
checkGoods(id).then((res) => {
this.goodsData = res.data.data;
});
},
//
Edititem() {
let id = this.bigID;
let goods = {
title: this.goodsData.goods.title,
img_url: this.goodsData.goods.img_url,
type_id: this.goodsData.goods.type_id,
brand_id: this.goodsData.goods.brand_id,
goods_code: this.goodsData.goods.goods_code,
};
let sku = {
title: this.goodsData.title,
sku_code: this.goodsData.sku_code,
status: this.goodsData.status,
num: this.goodsData.num,
cost: this.goodsData.cost,
};
if (sku.status == "下架") {
sku.status = 0;
} else if (sku.status == "在售") {
sku.status = 1;
} else if (sku.status == "预警") {
sku.status = 2;
}
let updateData = {
goods_id: this.goodsData.goods_id,
goods,
sku,
};
updateGoods(id, updateData).then((res) => {
this.$router.push("/GOODS_LIST");
this.$message({
message: "商品编辑成功!",
type: "success",
});
});
},
//
cancel() {
this.$router.push("/GOODS_LIST");
},
onchange(value) {
if (value !== "") {
this.isShow = true;
}
if (value === "") {
this.isShow = false;
this.form = {};
}
},
},
created() {
this.goodsID = sessionStorage.getItem("商品ID");
this.bigID = sessionStorage.getItem("ID");
},
mounted() {
this.gid = this.$route.query;
//
goods_types().then((res) => {
this.cate = res.data.data;
});
//
Brand_goods_types().then((res) => {
this.brand = res.data.data;
});
this.handleList();
this.handleUpdate();
this.getgoodsidData();
},
beforeDestroy() {
sessionStorage.removeItem("商品ID"); //ID
sessionStorage.removeItem("ID"); //ID
},
};
</script>
<style scoped>
.el-upload--picture-card {
width: 50px;
height: 50px;
}
.el-form-item {
margin-left: 60px;
}
.addto {
display: inline-block;
width: 30px;
height: 30px;
background-color: blue;
color: #fff;
font-size: 25px;
text-align: center;
line-height: 30px;
border-radius: 5px;
margin-top: 4px;
}
/* 分割 */
.avatar-uploader .el-upload {
border: 1px dashed #d9d9d9;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
}
.avatar-uploader .el-upload:hover {
border-color: #409eff;
}
.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 148px;
height: 148px;
line-height: 148px;
text-align: center;
}
.avatar {
width: 148px;
height: 148px;
display: block;
}
</style>

View File

@ -1,972 +0,0 @@
<template>
<!-- 商品管理页面 -->
<div>
<!-- 条件筛选板块 -->
<el-card class="box-card">
<div class="goods">
<el-form ref="form" :inline="true" :model="form">
<el-form-item label="商品名称:">
<el-input v-model="form.goods_title" placeholder="商品名称" style="width: 100px">
</el-input>
</el-form-item>
<el-form-item label="商品种类:">
<el-select v-model="form.type_id" placeholder="商品种类" style="width: 125px">
<el-option v-for="item in cate" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="商品规格:">
<el-input v-model="form.sku_title" placeholder="商品规格" style="width: 100px">
</el-input>
</el-form-item>
<el-form-item label="商品品牌:">
<el-select v-model="form.brand_id" placeholder="商品品牌" style="width: 125px">
<el-option v-for="item in brand" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="商品状态:">
<el-select v-model="form.status" placeholder="商品状态" style="width: 115px">
<el-option v-for="item in options" :key="item.id" :label="item.label" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<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" range-separator="至" start-placeholder="开始时间"
end-placeholder="结束时间" value-format="yyyy-MM-dd HH:mm:ss" @change="getSTime" style="width: 300px">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleChoose()">筛选</el-button>
<el-button plain @click="handleReChoose()">重置筛选</el-button>
</el-form-item>
</el-form>
</div>
</el-card>
<el-card class="box-card1" style="margin-top: 30px">
<div>
<!-- 表格头部操作 -->
<div>
<span>全部商品({{ total }})</span>
<div class="btn">
<el-button type="primary" plain @click="addNewgoods">新建商品</el-button>
<el-button type="primary" plain @click="update()">上新</el-button>
<el-button type="primary" plain @click="onCount()">库存盘点</el-button>
<el-button type="primary" plain @click="handleImport()">导入商品</el-button>
<el-button type="primary" plain @click="handleExport()">表格导出</el-button>
</div>
</div>
<!-- 参考售价弹出确认框 -->
<el-dialog :visible.sync="dialogVisible3" width="20%" :close-on-click-modal="false">
<span>您确定要修改吗?</span>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible3 = false"> </el-button>
<el-button type="primary" @click="reference_priceRequest()"> </el-button>
</span>
</el-dialog>
<!-- 预留量弹出框 -->
<el-dialog :visible.sync="dialogVisible4" width="20%" :close-on-click-modal="false">
<span>您确定要修改吗?</span>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible4 = false"> </el-button>
<el-button type="primary" @click="reserveRequest()"> </el-button>
</span>
</el-dialog>
<!-- 点击表格导出弹出框 -->
<el-dialog title="表格导出" :visible.sync="Tableexport" width="30%" :close-on-click-modal="false">
<div>
选择:
<template>
<el-select v-model="value" placeholder="盘点表/运营表/成本表">
<el-option v-for="item in options2" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</template>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="Tableexport = false"> </el-button>
<el-button type="primary" @click="derivation()"> </el-button>
<!-- <a href="/goods_skus/export">确定</a> -->
</span>
</el-dialog>
<!-- 点击商品文件导入弹出框 -->
<el-dialog title="导入商品" :visible.sync="docImportDrawer" direction="rtl" custom-class="demo-drawer" ref="drawer"
size="20%" width="30%" @close="importForm.imFileList = []" :close-on-click-modal="false">
<div class="demo-drawer__content">
<el-form :model="importForm" :rules="improtRules" ref="importForm">
<el-form-item label="上传文件" label-width="100px" prop="fileList">
<el-upload class="uploader" action="" :limit="1"
accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"
:file-list="importForm.fileList" :auto-upload="false" :on-change="importFileChange">
<i class="el-icon-plus"></i>
</el-upload>
</el-form-item>
</el-form>
<div class="demo-drawer__footer btn-style">
<el-button @click="docImportDrawer = false"> </el-button>
<el-button type="primary" @click="saveUpload"> </el-button>
</div>
</div>
<div class="import-right">
<el-button size="medium" class="button-query">
<a :href="`http://erp.staging.miaoxuan66.cn/goods/import/template`">下载模板</a>
</el-button>
</div>
</el-dialog>
<!-- 表格 -->
<el-table ref="multipleTable" :data="tableData" class="table" tooltip-effect="dark" style="width: 100%"
@selection-change="handleSelectionChange" max-height="1500">
<!-- 多选框 -->
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column label="商品信息" width="300">
<template slot-scope="scope">
<div class="commodityimg">
<img :src="scope.row.goods.img_url" class="Img" />
</div>
<div>
<p>{{ scope.row.goods.title }}&nbsp;{{ scope.row.title }}</p>
<p>
{{ scope.row.goods.goods_code + "_" + scope.row.sku_code }}
</p>
<p>
{{ scope.row.goods.updated_at }}
</p>
</div>
</template>
</el-table-column>
<el-table-column label="品类">
<template slot-scope="scope">
<div>
{{ scope.row.goods.type ? scope.row.goods.type.name : "" }}
</div>
</template>
</el-table-column>
<el-table-column label="规格" prop="title"> </el-table-column>
<el-table-column label="品牌">
<template slot-scope="scope">
<div>
{{ scope.row.goods.brand ? scope.row.goods.brand.name : "" }}
</div>
</template>
</el-table-column>
<el-table-column prop="two_days_ago_num" sortable label="2T">
</el-table-column>
<el-table-column prop="yesterday_num" sortable label="1T">
</el-table-column>
<el-table-column sortable label="0T" min-width="80">
<template slot-scope="scope">
<div v-if="isShow">
<el-input v-model="scope.row.arrived_today_num11"></el-input>
</div>
<div v-else>
{{ scope.row.daily.arrived_today_num }}
</div>
</template>
</el-table-column>
<el-table-column prop="cost" sortable label="成本">
<template slot-scope="scope">
<div v-if="isShow">
<el-input v-model="scope.row.cost"></el-input>
</div>
<div v-else>
{{ scope.row.cost != null ? scope.row.cost : 0 }}
</div>
</template>
</el-table-column>
<el-table-column prop="reference_price" sortable label="售价" min-width="80">
<template slot-scope="scope">
<div v-if="scope.row.id === id">
<el-input v-model="scope.row.reference_price" @blur="reference_priceBlur(scope.row)"></el-input>
</div>
<div v-else>
{{ scope.row.reference_price }}
<el-button slot="reference" class="btn11" @click="reference_priceClick(scope.row.id)"><img
src="../../css/img/编辑.png" /></el-button>
</div>
</template>
</el-table-column>
<el-table-column prop="num" sortable label="总量" min-width="80">
</el-table-column>
<el-table-column prop="reserve" sortable label="预留" min-width="80">
<template slot-scope="scope">
<div v-if="scope.row.id === id1">
<el-input v-model="scope.row.reserve" @blur="reservebBlur(scope.row)"></el-input>
</div>
<div v-else>
{{ scope.row.reserve }}
</div>
<el-button slot="reference" class="btn11" @click="onreserve(scope.row.id)"><img src="../../css/img/编辑.png"
alt="" /></el-button>
</template>
</el-table-column>
<el-table-column sortable label="订单" min-width="80">
<template slot-scope="scope">
<div>
<span>{{ scope.row.order_goods_num }}</span>
</div>
<el-popover placement="right-start" width="200" trigger="hover"
v-if="scope.row.order_detail.length !== 0">
<div>
<span v-for="(j, index) in scope.row.order_detail" :key="index">
<div>{{ j.shop.name }}:{{ j.number }}</div>
</span>
</div>
<el-button class="btn11" type="text" slot="reference"><img src="../../css/img/眼睛.png" alt="" />
</el-button>
</el-popover>
</template>
</el-table-column>
<el-table-column sortable label="损耗">
<template slot-scope="scope">
<div v-if="scope.row.id === id2">
<el-input v-model="scope.row.daily.loss_num"></el-input>
</div>
<div v-else>
{{ scope.row.daily.loss_num }}
</div>
<el-popover placement="right-start" width="220" trigger="click" @hide="noBubbles">
<p>损耗:</p>
<el-input v-model="scope.row.daily.loss_num"></el-input>
<el-radio-group v-model="radio">
<el-radio disabled>原因:</el-radio>
<el-radio label="48h以上">48h以上</el-radio>
<el-radio label="到货错误">到货错误</el-radio>
<el-radio label="灰霉">灰霉</el-radio>
<el-radio label="长度">长度</el-radio>
<el-radio label="花朵">花朵</el-radio>
<el-radio label="其他">其他</el-radio>
</el-radio-group>
<div class="list_btn">
<el-button type="primary" @click="onLoss(scope.row)">保存</el-button>
</div>
<el-button slot="reference" class="btn11" @click="loss(scope.row.id)"><img src="../../css/img/编辑.png"
alt="" /></el-button>
</el-popover>
</template>
</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>
<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">
<div>
<el-button type="text" @click="ejectstock(scope.row)">库存</el-button>
</div>
<div>
<el-button type="text" @click="handleEdit(scope.row.goods_id, scope.row.id)">编辑</el-button>
</div>
<div>
<el-button type="text" @click="goodslog(scope.row)">记录</el-button>
</div>
<!-- 点击库存按钮弹出框 -->
<el-dialog title="库存修改" :visible.sync="ejectstock1" width="30%" :close-on-click-modal="false">
<el-table :data="ommodityInventory" tooltip-effect="dark" style="width: 100%"
@selection-change="handleSelectionChange">
<el-table-column prop="two_days_ago_num" label="2天前库存">
<template slot-scope="scope">
<div>
{{ scope.row.two_days_ago_num }}
<el-input v-model="scope.row.two_days_ago_num"></el-input>
</div>
</template>
</el-table-column>
<el-table-column prop="yesterday_num" label="1天前库存">
<template slot-scope="scope">
<div>
{{ scope.row.yesterday_num }}
<el-input v-model="scope.row.yesterday_num"></el-input>
</div>
</template>
</el-table-column>
<el-table-column sortable label="今日到货">
<template slot-scope="scope">
<div>
{{ scope.row.daily.arrived_today_num }}
<el-input v-model="scope.row.daily.arrived_today_num"></el-input>
</div>
</template>
</el-table-column>
</el-table>
<span slot="footer" class="dialog-footer">
<el-button @click="cancelStock()"> </el-button>
<el-button type="primary" @click="oldStock()"> </el-button>
</span>
</el-dialog>
</template>
</el-table-column>
</el-table>
</div>
<!-- 底部按钮 -->
<div class="footerBtn" v-show="isShow || stock">
<el-button type="primary" class="confirmbtn" @click="cancel()">取消</el-button>
<el-button type="primary" class="confirmbtn" @click="onSubmit()">保存</el-button>
</div>
<!-- 分页功能 -->
<div class="page">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page="current_page" :page-sizes="[15, 50, 100]" :page-size="per_page"
layout="total, sizes, prev, pager, next, jumper" :total="Paginationdata.total">
</el-pagination>
</div>
</el-card>
</div>
</template>
<script>
import axios from "axios";
import { goods_types, Brand_goods_types } from "../../api/rankingData.js";
import {
goods,
update,
singleUpdate,
shops,
tableExport,
} from "../../api/goods";
export default {
data() {
return {
id: "", //id
id1: "", //id
id2: "", //id
total: 0, //
radio: "", //
brand: [], //
cate: [], //
tableData: [], //
shopsData: [], //
sku_code: {}, //
// shopOrder: {}, //
options: [
{
id: "1",
label: "在售",
},
{
id: "2",
label: "预警",
},
{
id: "0",
label: "下架",
},
], //
options2: [
{
value: "inventory",
label: "盘点表",
},
{
value: "cost",
label: "成本表",
},
], //
value: "", //
options3: [
{
value: "stock",
label: "库存",
},
{
value: "cost",
label: "成本",
},
{
value: "loss_num",
label: "损耗",
},
{
value: "reserve",
label: "预留",
},
], //
//
form: {
goods_title: "", //
type_id: "", // id
brand_id: "", // id
sku_title: "", //
status: "", //
keyword_type: "stock", //
keyword_value: "", //
},
Paginationdata: {}, //
current_page: 1, //
per_page: 100, //
multipleSelection: [], //id
updateType: "", //newest-, inventory-, stock-
stock: false, //
isShow: false, //
ejectstock1: false, //
Importgoods: false, //
Tableexport: false, //
isShow1: false, //
//
importForm: {
fileList: [],
},
docImportDrawer: false,
improtRules: {
fileList: [
{ required: true, message: "请导入Excel文件", trigger: "change" },
{
validator: (rule, value, callback) => {
if (!value.length) {
callback(new Error("请导入Excel文件"));
} else {
callback();
}
},
trigger: "change",
},
],
},
//
publicPath: process.env.BASE_URL, // public
excelTemplatePath: "", // Excel -
visible: false,
updateField: "", //reference_price-, reserve-, loss_num-, status-
reference_priceShow: false,
reserveShow: false, //-input
value1: "", //
ommodityInventory: [], //
dialogVisible: false, //
dialogVisible2: false, //
dialogVisible3: false, //
dialogVisible4: false, //
publicId: "", // id
reference_price: "", //
reserve: "", //
};
},
methods: {
//
handleEdit(goodsid, id) {
sessionStorage.setItem("商品ID", goodsid);
sessionStorage.setItem("ID", id);
this.$router.push("/ADDGOODS");
},
//
getList() {
let page = {
page: this.current_page,
per_page: this.per_page,
};
goods(page).then((res) => {
this.tableData = res.data.data;
this.tableData = this.tableData.map((item) => {
item = {
...item,
arrived_today_num11: 0,
};
return item;
});
this.total = res.data.meta.total;
this.Paginationdata = res.data.meta;
this.shopsData = this.tableData.map((item) => {
item = item.goods.goods_code + "_" + item.sku_code;
return item;
});
this.sku_code = {
sku_code: this.shopsData,
};
});
},
//
handleChoose() {
this.form = {
...this.form,
page: this.current_page,
per_page: this.per_page,
};
//
const newObj = filterParams(this.form);
function filterParams(obj) {
const _newPar = {};
for (const key in obj) {
// 0
if (
(obj[key] === 0 || obj[key]) &&
obj[key].toString().replace(/(^\s*)|(\s*$)/g, "") !== ""
) {
//
_newPar[key] = obj[key];
}
}
//
return _newPar;
}
goods(newObj).then((res) => {
this.tableData = res.data.data;
this.tableData = this.tableData.map((item) => {
item = {
...item,
arrived_today_num11: 0,
};
return item;
});
this.total = res.data.meta.total;
this.Paginationdata = res.data.meta;
});
},
//
handleReChoose() {
this.form = {
goods_title: "", //
type_id: "", // id
brand_id: "", // id
sku_title: "", //
status: "", //
};
this.value1 = "";
},
//
handleImport() {
this.docImportDrawer = true;
},
//
handleExport() {
this.Tableexport = true;
},
//
update() {
this.isShow = true;
this.stock = false;
this.updateType = "newest";
},
//
handleSelectionChange(val) {
this.multipleSelection = val.map((item) => item.id);
},
//
addNewgoods() {
this.$router.push("/ADDGOODS");
},
//
handleSizeChange(val) {
//
this.per_page = val;
this.handleChoose();
},
handleCurrentChange(val) {
//
this.current_page = val;
this.handleChoose();
},
//or
cancel() {
this.handleChoose();
this.isShow = false;
this.stock = false;
},
// or
onSubmit() {
//
if (this.updateType === "newest") {
let skus = this.tableData.map((item) => {
return [
{
id: item.id,
cost: item.cost,
arrived_today_num: item.arrived_today_num11,
},
];
});
let patchdata = {
updateType: this.updateType,
skus: skus.flat(),
};
//
update(patchdata).then((res) => {
this.handleChoose();
this.$message({
message: "上新成功!",
type: "success",
});
});
}
//
if (this.updateType === "inventory") {
let skus = this.tableData.map((item) => {
return [
{
id: item.id,
inventory: item.daily.inventory,
},
];
});
let patchdata = {
updateType: this.updateType,
skus: skus.flat(),
};
//
update(patchdata).then((res) => {
this.handleChoose();
this.$message({
message: "库存盘点成功!",
type: "success",
});
});
}
this.isShow = false;
this.stock = false;
this.handleChoose();
},
//
onCount() {
this.dialogVisible2 = false;
this.isShow = false;
this.stock = true;
this.updateType = "inventory";
},
//
ejectstock(row) {
this.ommodityInventory = [];
this.ejectstock1 = true;
this.updateType = "stock";
this.ommodityInventory.push(row);
},
//
cancelStock() {
this.handleChoose();
this.ejectstock1 = false;
},
//
oldStock() {
this.ejectstock1 = false;
//
if (this.updateType === "stock") {
let skus = [
{
id: this.ommodityInventory[0].id,
yesterday_num: this.ommodityInventory[0].yesterday_num,
two_days_ago_num: this.ommodityInventory[0].two_days_ago_num,
arrived_today_num:
this.ommodityInventory[0].daily.arrived_today_num,
},
];
let stockpatch = {
updateType: this.updateType,
skus: skus,
};
//
update(stockpatch).then((res) => {
this.handleChoose();
this.$message({
message: "库存更新成功!",
type: "success",
});
});
}
},
//
importFile() {
this.docImportDrawer = true;
},
// -Excel
async importFileChange(file, fileList) {
this.importForm.fileList = fileList; //
},
//
saveUpload() {
this.$refs.importForm.validate(async (isValid) => {
if (!isValid) return;
try {
//
const params = new FormData();
params.append("goodsSkus", this.importForm.fileList[0].raw);
this.isLoadingDialog = true;
let token = localStorage.getItem("token");
axios
.post("/api/goods_skus", params, {
headers: {
Authorization: `Bearer ${token}`,
},
})
.then((res) => {
if (res.status === 200) {
this.$message.success("模板导入成功");
}
});
this.docImportDrawer = false;
} finally {
this.isLoadingDialog = false;
}
});
},
// -Excel
getExcelTemplatePath() {
this.$requestInternet.get("/api/xxx").then((res) => {
this.excelTemplatePath = res;
});
},
//
derivation() {
window.open('/goods_skus/export?exportType=' + this.value);
},
//
goodslog(row) {
this.$router.push({
path: "/GOODS_LOG",
query: {
id: row.id,
},
});
},
//
getSTime(val) {
this.form.keyword_value = val.join(" - ");
},
//
reference_priceClick(id) {
this.updateField = "reference_price";
this.reference_priceShow = true;
this.id = id;
this.id1 = "";
},
// input
reference_priceBlur(row) {
this.dialogVisible3 = true;
this.publicId = row.id;
this.reference_price = row.reference_price;
},
//
reference_priceRequest() {
this.dialogVisible3 = false;
let reference_priceData = {
updateField: this.updateField,
reference_price: this.reference_price,
};
singleUpdate(this.publicId, reference_priceData).then((res) => {
this.id = "";
this.$message({
message: "参考售价修改成功!",
type: "success",
});
});
},
onreserve(id) {
this.updateField = "reserve";
this.id1 = id;
this.id = "";
},
//
reservebBlur(row) {
this.reserve = row.reserve;
this.dialogVisible4 = true;
this.publicId = row.id;
},
//
reserveRequest() {
let reservebData = {
updateField: this.updateField,
reserve: this.reserve,
};
singleUpdate(this.publicId, reservebData).then((res) => {
this.id1 = "";
this.dialogVisible4 = false;
this.$message({
message: "预留量修改成功!",
type: "success",
});
});
},
loss(id) {
this.updateField = "loss_num";
this.id2 = id;
this.id = "";
this.id1 = "";
},
//
onLoss(row) {
let id = row.id;
let lossData = {
updateField: this.updateField,
reason: this.radio,
loss_num: row.daily.loss_num,
};
singleUpdate(id, lossData).then((res) => {
this.getList();
this.id2 = "";
this.$message({
message: "损耗添加成功!",
type: "success",
});
});
},
//
noBubbles() {
this.handleChoose();
this.updateField = "";
this.id2 = "";
},
//
getgoodsType() {
let param = {
per_page:99999
}
goods_types(param).then((res) => {
this.cate = res.data.data;
});
},
//
getbrandType() {
let parsm = {
per_page:99999
}
Brand_goods_types(parsm).then((res) => {
this.brand = res.data.data;
});
},
},
watch: {
$route(to, from) {
window.location.reload(); //
},
},
mounted() {
this.getList();
this.getgoodsType();
this.getbrandType();
this.id = "";
this.id1 = "";
this.id2 = "";
},
};
</script>
<style lang="css" scoped>
.loss {
position: relative;
}
.table {
margin-top: 40px;
position: relative;
}
.btn {
float: right;
}
::v-deep .cell {
display: flex;
align-items: center;
}
.commodityimg {
width: 59px;
height: 59px;
background: rgba(227, 227, 227, 0.39);
opacity: 1;
display: block;
margin-right: 12px;
}
.Img {
width: 100%;
height: 100%;
}
.confirmbtn {
width: 114px;
height: 44px;
border-radius: 3px;
margin-top: 21px;
margin-bottom: 8px;
}
.import-right {
margin-top: 30px;
}
.import-right a {
text-decoration: none;
color: black;
}
::v-deep .btn11 {
padding: 0;
width: 14px;
height: 14px;
}
::v-deep .btn11 img {
width: 100%;
height: 100%;
}
.page {
margin-top: 20px;
}
</style>