init: import production code mss.nahaichuan.com (exclude Runtime/Uploads/backups/logs)
这个提交包含在:
@@ -0,0 +1,491 @@
|
||||
<!--[1.6.48]-->
|
||||
<style>
|
||||
.Business_tb1 table tr th {
|
||||
height: 30px !important;
|
||||
background-color: #D5e9ed;
|
||||
color: #00a3d6;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.Business_tb1 table tr td {
|
||||
/*border: none;*/
|
||||
height: 100%;
|
||||
position: relative;
|
||||
/*background-color: white;*/
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.Business_tb1 table tr {
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.layui-form-item {
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
align-items: center;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
label {
|
||||
margin-bottom: 0;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
select {
|
||||
height: 38px;
|
||||
border: 1px solid #ccc;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.search-btn {
|
||||
height: 40px;
|
||||
display: inline-block;
|
||||
padding: 0 18px;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
line-height: 40px;
|
||||
background: #fff;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 2px;
|
||||
margin: 0;
|
||||
color: #666;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.total {
|
||||
width: 96%;
|
||||
margin-left: 15px;
|
||||
height: 80px;
|
||||
margin-top: 10px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
align-items: flex-end;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.total-num {
|
||||
color: #00a3d6;
|
||||
}
|
||||
|
||||
.import {
|
||||
display: block;
|
||||
width: 122px;
|
||||
height: 40px;
|
||||
opacity: 0;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
input::-webkit-outer-spin-button,
|
||||
input::-webkit-inner-spin-button {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
input[type="number"] {
|
||||
-moz-appearance: textfield;
|
||||
}
|
||||
|
||||
.goods-check-box {
|
||||
display: inline-block;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.showDetail {
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
top: 0;
|
||||
left: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background-color: rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.detail {
|
||||
background-color: white;
|
||||
padding: 20px;
|
||||
box-sizing: border-box;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.checkAll {
|
||||
padding: 0 15px;
|
||||
height: 36px;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
line-height: 36px;
|
||||
border-radius: 0 2px 2px 0;
|
||||
margin: 0 0 10px 18px;
|
||||
background-color: white;
|
||||
color: #333;
|
||||
border: 1px solid #ddd;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.checkAll::selection {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.isCheckAll {
|
||||
background-color: #007aff;
|
||||
color: white;
|
||||
border-color: #007aff;
|
||||
}
|
||||
|
||||
.checkbox {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
border: 1px solid #007aff;
|
||||
}
|
||||
|
||||
.isCheck:before {
|
||||
content: '';
|
||||
width: 6px;
|
||||
height: 10px;
|
||||
background-color: white;
|
||||
border-right: 2px solid #007aff;
|
||||
border-bottom: 2px solid #007aff;
|
||||
position: absolute;
|
||||
transform: rotateZ(45deg);
|
||||
top: 3px;
|
||||
left: 6px;
|
||||
}
|
||||
|
||||
.del:active {
|
||||
transform: scale(0.9);
|
||||
}
|
||||
|
||||
.calc-left {
|
||||
margin-left: 160px;
|
||||
margin-top: 65px !important;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
</style>
|
||||
<div id="mGoodsImport" style="position: relative;with:100%;height: 100%;overflow-y: auto;padding: 0 20px;">
|
||||
<div style="margin: 20px 0 20px;">
|
||||
<el-collapse accordion>
|
||||
<el-collapse-item>
|
||||
<template slot="title">
|
||||
商品导入须知>>></i>
|
||||
</template>
|
||||
<div>1.商品导入前请先下载商品导入模板,务必严格按照商品导入须知中的要求编辑商品信息</div>
|
||||
<div>2.如遇商品导入出错,请先下载商品导入失败表格查看具体失败原因</div>
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
</div>
|
||||
<form style="display: flex;height: calc(100% - 90px);flex-direction: column;">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label" style="width: auto;">数据类型</label>
|
||||
<div class="layui-input-inline" style="width: 150px;">
|
||||
<select v-model="status_type" @change="getGoodsList">
|
||||
<option value="0">--未导入--</option>
|
||||
<option value="1">--已导入--</option>
|
||||
<option value="3">--名称重复--</option>
|
||||
<option value="4">--条码重复--</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width: auto;position: absolute;right: 38px;">
|
||||
|
||||
<div class="search-btn">导入商品表格</div>
|
||||
|
||||
<input type="file" class="import" @change="chooseFile" ref="myChooseFile" style="cursor: pointer">
|
||||
|
||||
<div class="search-btn" @click="downFile">下载商品导入模板</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="Business"
|
||||
style="flex: 1;overflow-y: hidden;display: flex;flex-direction:column;box-sizing: border-box;">
|
||||
<div style="position: relative;display: flex;height: 43px;">
|
||||
<div v-if="status_type==0" class="checkAll" @click="checkAll"
|
||||
:class="checkGoodsList.length==goodsList.length&&goodsList.length?'isCheckAll':''">全选
|
||||
</div>
|
||||
<div v-if="status_type==1" class="checkAll" @click="checkAll"
|
||||
:class="hasImportList.length==goodsList.length&&goodsList.length?'isCheckAll':''">全选
|
||||
</div>
|
||||
<div v-if="status_type==3" class="checkAll" @click="checkAll"
|
||||
:class="goodsNumberList.length==goodsList.length&&goodsList.length?'isCheckAll':''">全选
|
||||
</div>
|
||||
<div v-if="status_type==4" class="checkAll" @click="checkAll"
|
||||
:class="goodsCodeList.length==goodsList.length&&goodsList.length?'isCheckAll':''">全选
|
||||
</div>
|
||||
<div class="checkAll del" @click="delAll" v-if="status_type!=-1">批量删除</div>
|
||||
</div>
|
||||
<div class="Business_tb1" style="max-height: calc(100% - 43px);overflow-y: auto;overflow-x: auto;">
|
||||
<table border="0" cellspacing="0" cellpadding="0" class="layui-table"
|
||||
style="height:calc(100% - 1px);position: relative;overflow-y: auto;margin: 0">
|
||||
<tr style="height: 30px;position: relative;top:0;left:0;" id="tabletitle">
|
||||
<th>选择</th>
|
||||
<th>序号</th>
|
||||
<th>商品名称</th>
|
||||
<th>条码</th>
|
||||
<th>产地</th>
|
||||
<th>品牌</th>
|
||||
<th>单位</th>
|
||||
<th>规格</th>
|
||||
<th>状态</th>
|
||||
</tr>
|
||||
<tr v-if="!goodsList.length" style="height: 30px;">
|
||||
<td colspan="9">暂无该类型数据</td>
|
||||
</tr>
|
||||
<template v-for="(item,index) in goodsList">
|
||||
<tr style="height: 30px;">
|
||||
<td>
|
||||
<input type="checkbox" v-model="checkGoodsList" :value="item.id" v-if="item.status==0"
|
||||
class="goods-check-box">
|
||||
<input type="checkbox" v-model="hasImportList" :value="item.id"
|
||||
v-if="item.status==1&&status_type==1"
|
||||
class="goods-check-box">
|
||||
<input type="checkbox" v-model="goodsNumberList" :value="item.id"
|
||||
v-if="item.status==3&&status_type==3"
|
||||
class="goods-check-box">
|
||||
<input type="checkbox" v-model="goodsCodeList" :value="item.id"
|
||||
v-if="item.status==4&&status_type==4"
|
||||
class="goods-check-box">
|
||||
</td>
|
||||
<td>{{index+1}}</td>
|
||||
<td>{{item.name}}</td>
|
||||
<td>{{item.code}}</td>
|
||||
<td>{{item.origin}}</td>
|
||||
<td>{{item.trademark}}</td>
|
||||
<td>{{item.unit}}</td>
|
||||
<td>{{item.specification}}</td>
|
||||
<td>{{item.statusname}}</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="total">
|
||||
<div class="layui-form-item">
|
||||
<div class="search-btn isCheckAll" @click="downFailFile" v-if="canDownFailFile">下载商品导入失败表格</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label" style="width: auto;">商品种类:
|
||||
<span class="total-num">{{goodsList.length}}</span>
|
||||
</label>
|
||||
<div class="search-btn" @click="doConfirm">同步至商品云库</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var mGoodsImport = new Vue({
|
||||
el: '#mGoodsImport',
|
||||
data() {
|
||||
return {
|
||||
canDownFailFile: false,
|
||||
keyword: "",
|
||||
goodsList: [],
|
||||
checkGoodsList: [],
|
||||
status_type: 0,
|
||||
hasImportList: [],
|
||||
goodsNumberList: [],
|
||||
goodsCodeList: [],
|
||||
skuList: {},
|
||||
showDetail: false
|
||||
}
|
||||
},
|
||||
created() {
|
||||
$('.show-goods-item-box').css({'opacity': 1});
|
||||
this.getGoodsList();
|
||||
},
|
||||
methods: {
|
||||
getGoodsList() {
|
||||
var status_type = this.status_type;
|
||||
$.ajax({
|
||||
url: "{:U('getGoodsList')}",
|
||||
data: {
|
||||
type: status_type
|
||||
},
|
||||
type: 'post',
|
||||
success: (res) => {
|
||||
if (res.status == 1) {
|
||||
this.goodsList = res.data;
|
||||
} else {
|
||||
this.goodsList = [];
|
||||
}
|
||||
},
|
||||
error: (error) => {
|
||||
this.$message.error('错误了。。。')
|
||||
}
|
||||
})
|
||||
},
|
||||
seeDetail(index) {
|
||||
var goodsList = JSON.parse(JSON.stringify(this.goodsList));
|
||||
this.skuList = [];
|
||||
this.skuList = goodsList[index].sku_json;
|
||||
this.$nextTick(() => {
|
||||
this.showDetail = true;
|
||||
});
|
||||
},
|
||||
//同步至云库
|
||||
doConfirm() {
|
||||
var checkGoodsList = this.checkGoodsList;
|
||||
if (this.status_type != 0 && this.status_type != -1) {
|
||||
return;
|
||||
}
|
||||
if (checkGoodsList.length == 0) {
|
||||
return this.$message.warning('请选择要同步的商品');
|
||||
}
|
||||
|
||||
this.$confirm('确定要将选中同步到商品档案中?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
$.ajax({
|
||||
url: "{:U('submitToMGoods')}",
|
||||
data: {
|
||||
checkCodeIds: checkGoodsList.join(','),
|
||||
},
|
||||
type: 'post',
|
||||
success: (res) => {
|
||||
if (res.status == 1) {
|
||||
this.$message.success(res.msg);
|
||||
this.getGoodsList();
|
||||
} else {
|
||||
var remake = '';
|
||||
if (Array.isArray(res.data)) {
|
||||
for (var i = 0; i < res.data.length; i++) {
|
||||
remake += `<p style="margin:5px 0px 0px 10px;color:#009f95;"> ` + (i + 1) + `.` + res.data[i] + `</p>`
|
||||
}
|
||||
} else {
|
||||
remake = res.msg;
|
||||
}
|
||||
this.$alert('<div>' + remake + '</div>', '提示', {
|
||||
dangerouslyUseHTMLString: true
|
||||
});
|
||||
}
|
||||
},
|
||||
error: (error) => {
|
||||
console.log(error);
|
||||
this.$message.error('出错了。')
|
||||
}
|
||||
})
|
||||
}).catch(() => {
|
||||
})
|
||||
},
|
||||
// 下载导入模板
|
||||
downFile() {
|
||||
window.location.href = "{:U('downModelFile')}";
|
||||
},
|
||||
// 上传模板表格
|
||||
chooseFile() {
|
||||
console.log(this.$refs.myChooseFile.files[0]);
|
||||
var file = this.$refs.myChooseFile.files[0];
|
||||
if (file) {
|
||||
var fd = new FormData();
|
||||
fd.append('file', file);
|
||||
$.ajax({
|
||||
url: "{:U('uploadFile')}",
|
||||
data: fd,
|
||||
type: 'post',
|
||||
async: false,
|
||||
cache: false,
|
||||
contentType: false, //不设置内容类型
|
||||
processData: false,
|
||||
success: (res) => {
|
||||
this.canDownFailFile = true;
|
||||
if (res.status == 1) {
|
||||
this.$message.success(res.msg)
|
||||
this.getGoodsList();
|
||||
} else {
|
||||
this.$message.warning(res.msg)
|
||||
this.getGoodsList();
|
||||
}
|
||||
$(this.$refs.myChooseFile).val('');
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
downFailFile() {
|
||||
window.location.href = "{:U('downFailFile')}";
|
||||
},
|
||||
// 全选
|
||||
checkAll() {
|
||||
var checkGoodsList = [];
|
||||
var goodsList = this.goodsList;
|
||||
var status_type = this.status_type;
|
||||
status_type = status_type > 0 ? status_type : 0;
|
||||
for (var i = 0; i < goodsList.length; i++) {
|
||||
if (goodsList[i]['status'] == status_type) {
|
||||
checkGoodsList.push(goodsList[i]['id']);
|
||||
}
|
||||
}
|
||||
var length = checkGoodsList.length;
|
||||
if (status_type == 0 || status_type == -1) {
|
||||
if (this.checkGoodsList.length == length) {
|
||||
this.checkGoodsList = [];
|
||||
return;
|
||||
}
|
||||
this.checkGoodsList = checkGoodsList;
|
||||
} else if (status_type == 1) {
|
||||
if (this.hasImportList.length == length) {
|
||||
this.hasImportList = [];
|
||||
return;
|
||||
}
|
||||
this.hasImportList = checkGoodsList;
|
||||
} else if (status_type == 3) {
|
||||
if (this.goodsNumberList.length == length) {
|
||||
this.goodsNumberList = [];
|
||||
return;
|
||||
}
|
||||
this.goodsNumberList = checkGoodsList;
|
||||
} else if (status_type == 4) {
|
||||
if (this.goodsCodeList.length == length) {
|
||||
this.goodsCodeList = [];
|
||||
return;
|
||||
}
|
||||
this.goodsCodeList = checkGoodsList;
|
||||
}
|
||||
},
|
||||
//删除
|
||||
delAll() {
|
||||
var status_type = this.status_type;
|
||||
var delGoodsList = [];
|
||||
if (status_type == 0 || status_type == -1) {
|
||||
delGoodsList = this.checkGoodsList
|
||||
} else if (status_type == 1) {
|
||||
delGoodsList = this.hasImportList
|
||||
} else if (status_type == 3) {
|
||||
delGoodsList = this.goodsNumberList
|
||||
} else if (status_type == 4) {
|
||||
delGoodsList = this.goodsCodeList
|
||||
}
|
||||
|
||||
if (delGoodsList.length > 0) {
|
||||
this.$confirm('您确定要删除选中的数据吗?', '提示', {
|
||||
confirmButtonText: '删除',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
$.ajax({
|
||||
url: "{:U('delGoodsItem')}",
|
||||
data: {
|
||||
id: delGoodsList.join(',')
|
||||
},
|
||||
type: "post",
|
||||
success: (res) => {
|
||||
// console.log(res);
|
||||
if (res.status == 1) {
|
||||
this.$message.success(res.msg)
|
||||
this.getGoodsList();
|
||||
} else {
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
}
|
||||
})
|
||||
}).catch(() => {
|
||||
})
|
||||
} else {
|
||||
this.$message.warning('请选择您需要删除的数据')
|
||||
}
|
||||
}
|
||||
},
|
||||
})
|
||||
</script>
|
||||
@@ -0,0 +1,111 @@
|
||||
<!--[1.6.54]-->
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
table {
|
||||
border: 1px solid #f1f1f1;
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
.layui-btn {
|
||||
background-color: white !important;
|
||||
color: #999 !important;
|
||||
border: 1px solid #CCCCCC !important;
|
||||
}
|
||||
</style>
|
||||
<div class="goodsCode-box">
|
||||
<input type="text" id="keyword" placeholder="商品条码/名称" class="layui-input" style="width:200px;display: inline-block">
|
||||
<button class="layui-btn" type="button" id="Preservation">查询</button>
|
||||
<if condition="$authArr['export_goods']">
|
||||
<button class="layui-btn" type="button" id="exportGoods">导入</button>
|
||||
</if>
|
||||
<table class="layui-hide" id="test" lay-filter="demo"></table>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
layui.use(['form', 'layedit', 'laydate', 'table'], function () {
|
||||
// 日期
|
||||
var table = layui.table;
|
||||
let url = location.href.split('://');
|
||||
let new_url = url[0] + '://' + url[1].split('/')[0] + '/Public/images/empty-image-1.png';
|
||||
console.log(new_url);
|
||||
//展示已知数据
|
||||
table.render({
|
||||
elem: '#test',
|
||||
url: "{:U('Super/GoodsCode/goodsCodelist')}",
|
||||
method: 'post',
|
||||
cols: [
|
||||
[ //标题栏
|
||||
{
|
||||
field: 'id',
|
||||
title: '序号',
|
||||
width: 160
|
||||
},
|
||||
{
|
||||
field: 'code',
|
||||
title: '商品条码',
|
||||
align: 'center',
|
||||
}, {
|
||||
field: 'name',
|
||||
title: '菜单名称',
|
||||
align: 'center',
|
||||
}, {
|
||||
field: 'specification',
|
||||
title: '商品规格',
|
||||
align: 'center',
|
||||
}, {
|
||||
field: 'unit',
|
||||
title: '商品单位',
|
||||
align: 'center',
|
||||
}, {
|
||||
field: 'origin',
|
||||
title: '产地',
|
||||
align: 'center',
|
||||
}, {
|
||||
field: 'image',
|
||||
title: '商品图片',
|
||||
style: 'height:100%;',
|
||||
align: 'center',
|
||||
templet: `<div><img class="goods-image" src="{{ d.image}}" onerror="this.error=null;this.src='${new_url}'" style="height: 30px;width: 30px;"></div>`
|
||||
}
|
||||
]
|
||||
],
|
||||
page: {
|
||||
layout: ['count', 'prev', 'page', 'next', 'skip'] //自定义分页布局
|
||||
}, //是否开启分页
|
||||
});
|
||||
|
||||
|
||||
//查询
|
||||
$('#Preservation').click(function () {
|
||||
//执行重载
|
||||
table.reload('test', {
|
||||
page: {
|
||||
curr: 1 //重新从第 1 页开始
|
||||
}
|
||||
, where: {
|
||||
keyword: $('#keyword').val()
|
||||
},
|
||||
method: "post"
|
||||
});
|
||||
})
|
||||
})
|
||||
$(".goodsCode-box").on('click', '.goods-image', function () {
|
||||
let image = $(this).attr('src');
|
||||
layer.open({
|
||||
title: '商品图片',
|
||||
type: 1,
|
||||
content: `<div><img style="width: 100%;height:auto;display: block;margin: 0 auto;" src="${image}" alt="商品图片"></div>`,
|
||||
area: ['500px']
|
||||
})
|
||||
})
|
||||
$('#exportGoods').click(() => {
|
||||
MenuApp.pathData.push({
|
||||
name: '导入商品',
|
||||
path: '/index.php/Super/GoodsCode/export_goods',
|
||||
})
|
||||
})
|
||||
</script>
|
||||
在新工单中引用
屏蔽一个用户