初始上传

This commit is contained in:
2026-04-04 17:27:12 +08:00
parent 4d80d28eb4
commit b7e11774ee
11191 changed files with 1588469 additions and 0 deletions

View File

@@ -0,0 +1,242 @@
html,body,.main-wrap {
height: 100%;
width: 100%;
background: #fff;
}
.main-wrap {
padding: 20px;
box-sizing: border-box;
}
.error {
font-size: 12px;
color: #f00;
line-height: 1;
margin-top: 10px;
display: none;
margin-left: 130px;
}
.layui-input-inline i {
position: absolute;
top: 50%;
right: 10px;
transform: translateY(-50%);
}
.search-wrap {
position: relative;
}
.search-wrap i {
border-left: 1px solid #E6E6E6;
line-height: 30px;
padding-left: 10px;
cursor: pointer;
}
.layui-form-label {
width: 130px;
}
.word-aux {
margin-left: 130px!important;
}
.layui-form-label + .layui-input-block {
margin-left: 130px;
}
.select-time .time-wrap {
width: 330px;
padding: 15px;
display: flex;
flex-wrap: wrap;
}
.select-time .no-today {
display: none;
}
.select-time .time-item {
height: 30px;
line-height: 30px;
width: 60px;
cursor: pointer;
}
.select-time .time-item:hover,.select-time .time-item.active {
color: var(--base-color);
}
.select-time .time-item.no-select {
color: #999;
cursor: not-allowed;
}
.align-center {
text-align: center!important;
}
.service-item,.servicer-item {
display: flex;
border: 1px solid #E6E6E6;
align-items: center;
cursor: pointer;
height: 52px;
}
.service-item .iconfont, .servicer-item .iconfont {
margin-right: 5px;
}
.service-item .info, .servicer-item .info {
flex: 1;
padding: 6px 10px;
}
.service-item .info .desc, .servicer-item .info .desc{
font-size: 12px;
color: #999;
}
.service-item .info .title, .servicer-item .info .title {
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.select-service {
width: 660px;
height: 240px;
box-sizing: border-box;
padding: 15px;
}
.select-service .service-wrap {
overflow-y: scroll;
height: 100%;
}
.select-service .service-wrap .empty {
line-height: 200px;
text-align: center;
width: 100%;
}
.select-service .service-wrap::-webkit-scrollbar {
width: 6px;
height: 6px;
background-color: transparent;
}
.select-service .service-wrap::-webkit-scrollbar-button {
display: none;
}
.select-service .service-wrap::-webkit-scrollbar-thumb {
border-radius: .06rem;
box-shadow: inset 0 0 .06rem rgba(45,43,43,.45);
background-color: #ddd;
}
.select-service .service-wrap::-webkit-scrollbar-track {
background-color: transparent;
}
.select-service .service-wrap .flex-wrap{
display: flex;
flex-wrap: wrap;
}
.select-service .service-wrap .item {
margin: 0 8px 8px 0;
background: #eee;
padding: 8px;
width: 186px;
cursor: pointer;
transition: all .3s;
}
.select-service .service-wrap .item:hover{
background: #fff5ed;
}
.select-service .service-wrap .item:nth-child(3n+3) {
margin-right: 0;
}
.select-service .service-wrap .title{
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.select-service .service-wrap .desc {
font-size: 12px;
color: #999;
}
.save-wrap {
position: fixed;
bottom: 0;
left: 0;
background: #fff;
height: 50px;
display: flex;
align-items: center;
justify-content: center;
border-top: 1px solid #eee;
width: 100%;
}
.member-info {
display: inline-flex;
padding: 10px;
border: 1px solid #e6e6e6;
min-width: 300px;
max-width: 590px;
}
.member-info img {
width: 50px;
height: 50px;
}
.member-info .info {
flex: 1;
display: flex;
flex-direction: column;
padding-left: 10px;
justify-content: space-around;
}
.member-info .info div {
line-height: 1;
}
.member-info .info span{
margin-right: 10px;
}
.select-servicer {
width: 150px;
height: 240px;
box-sizing: border-box;
padding: 15px 10px;
overflow-y: scroll;
}
.select-servicer .select-item {
width: 100%;
height: 40px;
line-height: 40px;
overflow: hidden;
text-overflow: ellipsis;
padding: 0 10px;
background: #f5f5f5;
cursor: pointer;
margin-bottom: 10px;
transition: all .3s;
box-sizing: border-box;
}
.select-servicer .select-item:hover {
background: #fff5ed;
}
.select-servicer::-webkit-scrollbar {
width: 6px;
height: 6px;
background-color: transparent;
}
.select-servicer::-webkit-scrollbar-button {
display: none;
}
.select-servicer::-webkit-scrollbar-thumb {
border-radius: .06rem;
box-shadow: inset 0 0 .06rem rgba(45,43,43,.45);
background-color: #ddd;
}
.select-servicer::-webkit-scrollbar-track {
background-color: transparent;
}
.layui-dropdown {
position: absolute;
left: -999999px;
top: -999999px;
z-index: 66666666;
margin: 5px 0;
min-width: 100px
}
.layui-dropdown:before {
content: "";
position: absolute;
width: 100%;
height: 6px;
left: 0;
top: -6px
}

View File

@@ -0,0 +1,68 @@
.card-type {
display: flex;
flex-wrap: wrap;
}
.card-type .card-type-item {
padding: 15px;
border: 1px solid #ddd;
line-height: 1;
margin: 0 10px 10px 0;
/*border-radius: 4px;*/
cursor: pointer;
position: relative;
overflow: hidden;
width: 285px;
}
.card-type .card-type-item:hover,.card-type .card-type-item.active {
border-color: var(--base-color);
color: var(--base-color);
}
.card-type .card-type-item .title{
font-size: 14px;
font-weight: bold;
}
.card-type .card-type-item .desc{
margin-top: 8px;
color: #999;
}
.card-type .card-type-item .iconfont {
position: absolute;
right: 0;
display: none;
}
.card-type .card-type-item.active .iconfont {
display: block;
}
.relation-goods-table {
margin-right: 50px;
max-width: 800px;
}
.relation-goods-table .layui-table-body {
max-height: 300px;
}
.relation-goods-table .table-bottom{
display: none;
}
.relation-goods-table .len-short {
width: 80px!important;
}
.relation-goods-table .layui-table-view {
margin-top: 10px;
}
.card-type-content .batch-set {
font-size: 14px;
display: none;
}
.card-type-content .batch-set .batch-set-wrap{
display: flex;
align-items: center;
}
.card-type-content .batch-set .len-short {
width: 80px!important;
}
.card-type-content .batch-set .set-content-wrap {
display: none;
}
.card-type-content .batch-set .layui-btn+.layui-btn{
margin-left: 0;
}

View File

@@ -0,0 +1,337 @@
.layui-body {
padding-bottom: 0!important;
}
.uni-flex {
display: flex;
flex-direction: row;
}
.uni-flex-item {
flex: 1;
}
.uni-row {
flex-direction: row;
}
.uni-column {
flex-direction: column;
}
.panel-head {
align-items: center;
}
.panel-head button {
margin: 0 10px 0 0;
}
.panel-head .status {
align-items: center;
}
.panel-head .status div {
line-height: 1;
}
.panel-head .status .color {
width: 16px;
height: 16px;
margin: 0 10px 0 30px;
}
.stay-confirm {
background: #8558FA;
border-color: #8558FA;
}
.stay-tostore {
background: #1475FA;
border-color: #1475FA;
}
.arrived-store {
background: #FA5B14;
border-color: #FA5B14;
}
.completed {
background-color: #10C610;
border-color: #10C610;
}
.cancelled {
background-color: #E6E6E6;
border-color: #E6E6E6;
}
.panel-body {
margin-top: 20px;
position: relative;
}
.panel-body .time-type{
position:absolute;
top:14px;
right:0px;
display:flex;
flex-direction: row;
}
.panel-body .time-type span{
width:32px;
line-height:32px;
text-align: center;
border:1px solid #E6E6E6;
font-size:14px;
cursor: pointer;
}
.panel-body .time-type span:nth-child(1){
border-right:none;
}
.panel-body .time-type span:nth-child(2){
border-left:none;
}
.panel-body .time-type span.on{
background: #8558FA;
border-color:#8558FA;
color:#fff;
}
.panel-body .time-data{
height:100%;
}
.panel-body .head > div, .panel-body .body > div {
display: flex;
align-items: center;
justify-content: center;
flex: 1;
border-right: 1px solid #E6E6E6;
}
.panel-body .head > div:last-child, .panel-body .body > div:last-child {
border-right: 0;
}
.panel-body .head {
height: 60px;
border: 1px solid #E6E6E6;
}
.panel-body .head button {
font-size: 12px;
padding: 0 10px;
}
.panel-body .head span {
font-size: 12px;
margin-left: 5px;
}
.panel-body .body {
height: 50vh;
border: 1px solid #E6E6E6;
border-top:none;
}
.panel-body .time-wrap {
font-size: 18px;
align-items: center;
justify-content: center;
height: 60px;
}
.panel-body .time-wrap .date{
flex: unset;
margin: 0 20px;
border: none;
}
.panel-body .time-wrap .iconfont {
font-size: 18px;
cursor: pointer;
font-weight: bold;
}
.panel-body .prev,.panel-body .next {
cursor: pointer;
}
.panel-body .body > div {
height: 100%;
}
.panel-body .body .common-scrollbar {
overflow-y: scroll;
}
.panel-body .body .iconqianhou1, .panel-body .body .iconqianhou2 {
font-size: 0.28rem;
color: #E6E6E6;
}
.panel-body .body .box {
width: 100%;
}
.panel-body .body .panel-item {
width: calc(100% - 20px);
margin: 20px 10px 0 10px;
padding: 10px;
border-width: 4px 1px 1px 1px;
border-style: solid;
box-sizing: border-box;
border-radius: 4px;
background-color: #fff !important;
}
.panel-body .body .panel-item:last-child {
margin-bottom: 20px;
}
.panel-body .body .common-scrollbar {
display: block;
}
.panel-body .body .username {
font-size: 14px;
line-height: 1;
}
.panel-body .body .time {
color: #fff;
font-size: 12px;
padding: 5px;
line-height: 1;
width: auto;
display: inline-block;
margin-top: 10px;
border-radius: 2px;
}
.panel-body .body .service {
margin-top: 10px;
line-height: 1;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.panel-body .body .action {
text-align: right;
margin-top: 5px;
}
.panel-body .body .action:after{
clear: both;
}
.panel-body .body .action .iconfont {
font-size: 14px;
color: #E6E6E6;
cursor: pointer;
border: 1.5px solid #ccc;
border-radius: 50%;
padding: 2px;
}
.common-scrollbar {
overflow-y: scroll;
box-sizing: border-box;
}
.common-scrollbar::-webkit-scrollbar {
width: 6px;
height: 6px;
background-color: rgba(0, 0, 0, 0);
}
.common-scrollbar::-webkit-scrollbar-button {
display: none;
}
.common-scrollbar::-webkit-scrollbar-thumb {
border-radius: 6px;
box-shadow: inset 0 0 6px rgba(45, 43, 43, 0.45);
background-color: #ddd;
}
.common-scrollbar::-webkit-scrollbar-track {
background-color: transparent;
}
.panel-body .month-table .table-tr{
display:flex;
flex-direction: row;
border:1px solid #E6E6E6;
border-bottom:none;
}
.panel-body .month-table .table-body .table-tr:last-child{
border-bottom:1px solid #E6E6E6;
}
.panel-body .month-table .table-tr .table-td{
width:100%;
border-right:1px solid #E6E6E6;
}
.panel-body .month-table .table-tr .table-td:last-child{
border-right: none;
}
.panel-body .month-table .table-head .table-td{
text-align: center;
line-height:40px;
}
.panel-body .month-table .table-body .table-td{
text-align: left;
}
.panel-body .month-table .table-body .table-td .top{
border-bottom:1px solid #E6E6E6;
line-height: 26px;
text-indent: 8px;
}
.panel-body .month-table .table-body .table-td.not-curr-month .top{
color:#909399;
}
.panel-body .month-table .table-body .table-td .bottom{
height:78px;
}
.panel-body .month-table .table-body .table-td .bottom .item-box{
position: relative;
}
.panel-body .month-table .table-body .table-td .bottom .item{
display:flex;
flex-direction: row;
align-items: center;
cursor: pointer;
}
.panel-body .month-table .table-body .table-td .bottom .item span:first-child{
display:block;
width:4px;
height:4px;
min-width: 4px;
border-radius: 50%;
/*background: #60BECA;*/
margin:0 6px;
}
.panel-body .month-table .table-body .table-td .bottom .item span:last-child{
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
overflow: hidden;
}
.panel-body .month-table .table-body .table-td .bottom .item-box .detail-card{
position: absolute;
bottom:25px;
left:30px;
border:1px solid #ccc;
width:150px;
padding:8px 8px;
background: #fff;
z-index:1;
border-radius: 3px;
display:none;
}
.panel-body .month-table .table-body .table-td .bottom .item-box .detail-card:after {
position: absolute;
left: 40px;
bottom: -6px;
width: 10px;
height: 10px;
margin-top: -2px;
border-right: 1px solid #ccc;
border-bottom: 1px solid #ccc;
-webkit-transform: rotate(45deg);
content: '';
background: #ffffff;
}
.panel-body .month-table .table-body .table-td .bottom .item-box .detail-card .time{
display:inline-block;
color:#fff;
padding:2px 5px;
border-radius: 2px;
margin-top:2px;
margin-bottom:2px;
}
.panel-body .month-table .table-body .table-td .bottom .item-box .detail-card .state{
text-align: right;
margin-top:2px;
}
.panel-body .month-table .table-body .table-td .bottom .item-box .detail-card .service{
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
.panel-body .month-table .table-body .table-td .bottom .item-box:hover .detail-card{
display: block;
}
.panel-body .month-table .table-body .table-td .bottom .more{
text-indent: 6px;
cursor: pointer;
}
.panel-body .month-table .table-body .table-td .bottom .more a{
color:#8558FA;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

View File

@@ -0,0 +1,347 @@
requestAdd = 'cardservice://shop/card/addGoods';
requestEdit = 'cardservice://shop/card/editGoods';
goodsTag = '卡项';
var relationGoods = [];
// 追加刷新商品sku数据
appendRefreshGoodsSkuData = {
service_length: 0
};
// 追加单规格数据
function appendSingleGoodsData(data) {
return {
service_length: data.field.service_length
};
}
// 追加保存数据
function appendSaveData(data) {
var card_type = $('.card-type-item.active').attr('data-value');
if (card_type == 'oncecard') {
relationGoods.forEach(function (item, index) {
item.num = $('.relation-goods-table.oncecard .layui-table-body tr:eq(' + index + ') .num').val();
})
} else {
relationGoods.forEach(function (item, index) {
item.discount = $('.relation-goods-table.discountcard .layui-table-body tr:eq(' + index + ') .discount').val();
})
}
return {
card_type: card_type,
validity_type: $('[name="validity_type"]:checked').val(),
relation_goods: JSON.stringify(relationGoods) // 卡项参数格式
};
}
// 编辑初始化数据回调
function initEditDataCallBack() {
relationGoods = $('[name="relation_goods"]').val() ? JSON.parse($('[name="relation_goods"]').val()) : [];
}
$(function () {
layui.use(['element', 'laytpl', 'form', 'laydate', 'table'], function () {
form = layui.form;
element = layui.element;
laytpl = layui.laytpl;
laydate = layui.laydate;
laytable = layui.table;
form.render();
var time = new Date();
var currentTime = time.toLocaleDateString + " " + time.getHours() + ":" + time.getMinutes() + ":" + time.getSeconds();
//卡项有效期
laydate.render({
elem: '#validity_time', //指定元素
type: 'datetime',
min: currentTime
});
//核销有效期类型
form.on('radio(validity_type)', function (data) {
var value = parseInt(data.value);
$('.validity-type').addClass('layui-hide');
$('.validity-type.validity-type-' + value).removeClass('layui-hide');
});
// 选择卡项类型
$('.card-type-item').click(function () {
if ($(this).hasClass('active')) return;
var value = $(this).attr('data-value');
$(this).addClass('active').siblings('.card-type-item').removeClass('active');
$('.card-type-content').hide();
$('.card-type-content.' + value).show();
fetchRelationGoods();
});
// 选择关联商品
$('.add-relation-goods').click(function () {
var skuids = [];
relationGoods.forEach(function (item) {
skuids.push(item.sku_id)
});
var select_goods_class = $(this).data('goods-class');
goodsSelect(function (data) {
var skuList = [];
for (var key in data) {
for (var sku in data[key].selected_sku_list) {
var item = data[key].selected_sku_list[sku];
skuList.push(item);
}
}
relationGoods = skuList;
fetchRelationGoods();
}, skuids, {mode: 'sku', goods_class: select_goods_class ?? '1,4'});
});
function fetchRelationGoods() {
var cardType = $('.card-type-item.active').attr('data-value');
var elem = cardType == 'discountcard' ? '#relationDiscountGoods' : '#relationGoods';
var cols = [
{
field: 'sku_name',
title: '商品/项目名称',
width: '35%'
},
{
field: 'goods_class_name',
title: '商品类型',
},
{
field: 'sex',
title: '售价',
width: '15%',
align: 'right',
templet: function (data) {
return '¥' + data.price;
}
},
{
title: '操作',
align: 'right',
templet: function (data) {
return `<a href="javascript:;" class="text-color delete">删除</a>`;
}
}
];
switch (cardType) {
case 'oncecard':
cols.splice(2, 0, {
title: '可用次数/数量',
align: 'center',
templet: function (data) {
return `<input type="text" placeholder="0" lay-verify="use_num" value="` + (data.num ? data.num : '') + `" class="layui-input len-short num" autocomplete="off">`;
}
});
break;
case 'discountcard':
cols.splice(2, 0, {
title: '可享折扣',
align: 'center',
templet: function (data) {
return `<input type="text" placeholder="0" lay-verify="discount" value="` + (data.discount ? data.discount : '') + `" class="layui-input len-short discount" autocomplete="off"> %`;
}
});
break;
}
var _table = laytable.render({
elem: elem,
data: relationGoods,
cols: [cols],
skin: 'nob',
done: function () {
if (cardType == 'oncecard' || cardType == 'discountcard') $('.card-type-content .batch-set').show();
else $('.card-type-content .batch-set').hide();
$('body').off('click', '.relation-goods-table .delete').on('click', '.relation-goods-table .delete', function () {
$(this).parents('tr').remove();
relationGoods.splice($(this).parents('tr').index(), 1);
})
}
});
if (!relationGoods.length) {
$(elem).next('.layui-table-view').remove();
$('.card-type-content .batch-set').hide();
}
}
fetchRelationGoods();
// 关联商品批量设置
$('.batch-set .set').click(function () {
var parents = $(this).parents('.batch-set');
parents.find('.set-item').hide();
parents.find('.set-content-wrap').show();
});
$('.batch-set .cancel').click(function () {
var parents = $(this).parents('.batch-set');
parents.find('.value').val('');
parents.find('.set-item').show();
parents.find('.set-content-wrap').hide();
});
$('.batch-set .confirm').click(function () {
var parents = $(this).parents('.batch-set');
var value = parents.find('.value').val();
var type = parents.find('.value').attr('data-type');
if (!regExp.required.test(value)) {
layer.msg('请输入要设置的值');
return;
}
if (type == 'num') {
if (!regExp.number.test(value)) {
layer.msg('可用次数格式错误');
return;
}
if (parseInt(value) < 1) {
layer.msg('可用次数不能小于等于0');
return;
}
}
if (type == 'discount') {
if (!regExp.number.test(value)) {
layer.msg('折扣格式错误');
return;
}
if (parseInt(value) < 1 || parseInt(value) > 99) {
layer.msg('折扣需在[1-99]之间设置');
return;
}
}
// 批量设置值
$(this).parents('.layui-form-item').find('.' + type).val(value);
parents.find('.value').val('');
parents.find('.set-item').show();
parents.find('.set-content-wrap').hide();
});
form.on('radio(discount_goods_type)', function (data) {
$('.discount-goods').hide();
$('.discount-goods.' + data.value).show();
});
form.verify({
//销售价
price: function (value) {
if (!$("input[name='spec_type']").is(":checked")) {
if (value.length == 0) {
element.tabChange('goods_tab', "price-stock");
return "请输入卡项开卡价";
}
if (isNaN(value) || !regExp.digit.test(value)) {
element.tabChange('goods_tab', "price-stock");
return '[卡项开卡价]格式输入错误';
}
}
},
renew_price: function (value) {
if (value.length == 0) {
element.tabChange('goods_tab', "price-stock");
return "请输入卡项续费价";
}
if (isNaN(parseInt(value)) || !regExp.digit.test(value)) {
element.tabChange('goods_tab', "price-stock");
return '[卡项续费价]格式输入错误';
}
},
//有效期
validity_day: function (value) {
var verify_validity_type = $('[name="validity_type"]:checked').val();
if (verify_validity_type == 1) {
if (isNaN(value) || !regExp.number.test(value)) {
element.tabChange('goods_tab', "basic");
return '[卡项有效期]格式输入错误';
}
if (value < 1) {
element.tabChange('goods_tab', "basic");
return '卡项有效期不能小于1天';
}
}
},
validity_time: function (value) {
var verify_validity_type = $('[name="validity_type"]:checked').val();
if (verify_validity_type == 2 && value.length == 0) {
element.tabChange('goods_tab', "basic");
return "请输入有效期";
}
},
relation_goods: function () {
var cardType = $('.card-type-item.active').attr('data-value');
if (cardType != 'discountcard' && !$('.relation-goods-table.oncecard .layui-table-body tr').length) {
return '请选择卡项内容';
}
},
relation_discount_goods: function () {
var cardType = $('.card-type-item.active').attr('data-value');
if (cardType == 'discountcard' && $('[name="discount_goods_type"]:checked').val() != 'all' && !$('.relation-goods-table.discountcard .layui-table-body tr').length) {
return '请选择卡项内容';
}
},
use_num: function (value) {
var cardType = $('.card-type-item.active').attr('data-value');
if (cardType == 'oncecard') {
if (!regExp.required.test(value)) {
return '请输入可用次数/数量';
}
if (!regExp.number.test(value)) {
return '次数/数量格式错误';
}
if (parseInt(value) < 1) {
return '可用次数/数量不能小于等于0';
}
}
},
discount: function (value) {
var cardType = $('.card-type-item.active').attr('data-value');
if (cardType == 'discountcard' && $('[name="discount_goods_type"]:checked').val() != 'all') {
if (!regExp.required.test(value)) {
return '请输入折扣卡折扣';
}
if (!regExp.number.test(value)) {
return '折扣卡折扣格式错误';
}
if (parseInt(value) < 1 || parseInt(value) > 99) {
return '折扣卡折扣需在[1-99]之间设置';
}
}
},
common_discount: function (value) {
var cardType = $('.card-type-item.active').attr('data-value');
if (cardType == 'discountcard' && $('[name="discount_goods_type"]:checked').val() == 'all') {
if (!regExp.required.test(value)) {
return '请输入折扣卡折扣';
}
if (!regExp.number.test(value)) {
return '折扣卡折扣格式错误';
}
if (parseInt(value) < 1 || parseInt(value) > 99) {
return '折扣卡折扣需在[1-99]之间设置';
}
}
},
common_num: function (value) {
var cardType = $('.card-type-item.active').attr('data-value');
if (cardType == 'commoncard') {
if (!regExp.required.test(value)) {
return '请输入卡项可用次数/数量';
}
if (!regExp.number.test(value)) {
return '卡项可用次数/数量格式错误';
}
if (parseInt(value) < 1) {
return '卡项可用次数/数量不能小于等于0';
}
}
}
});
});
});

View File

@@ -0,0 +1,109 @@
var layCascader, goodsCategory = [];
layui.use(['layCascader'], function () {
layCascader = layui.layCascader;
$('.goods-category-con-wrap .layui-block').each(function () {
var category_id = $(this).find('.category_id').val();
var _this = this;
fetchCategory({elem: $(this).find('.select-category'), value: category_id ? parseInt(category_id.split(',').splice(-1)) : ''},
function (value, node) {
var categoryId = [];
node.path.forEach(function (item) {
categoryId.push(item.value)
});
$(_this).find('.category_id').val(categoryId.toString())
}
)
});
});
// 刷新项目分类,更新选择项目分类数据
$('body').off('click', '.goods-category-con-wrap .js-refresh-category').on('click', '.goods-category-con-wrap .js-refresh-category', function () {
$.ajax({
url : ns.url("cardservice://shop/servicecategory/lists"),
dataType: 'JSON',
type: 'POST',
async: false,
success: function(res) {
goodsCategory = res.data;
// 刷新商品分类下拉框数据
$('.goods-category-con-wrap .layui-block').each(function () {
$(this).find('.el-cascader').remove(); // 清空渲染
var category_id = $(this).find('.category_id').val();
var _this = this;
fetchCategory({elem: $(this).find('.select-category'), value: category_id ? parseInt(category_id.split(',').splice(-1)) : ''},
function (value, node) {
var categoryId = [];
node.path.forEach(function (item) {
categoryId.push(item.value)
});
$(_this).find('.category_id').val(categoryId.toString())
}
)
});
}
});
});
$('body').off('click', '.goods-category-wrap-box .js-add-category').on('click', '.goods-category-wrap-box .js-add-category', function () {
if ($('.goods-category-con-wrap .layui-block').length >= 10) {
layer.msg('最多添加十个分类');
return;
}
var h = `<div class="layui-block">
<div class="layui-input-inline cate-input-default">
<input type="text" readonly lay-verify="required" autocomplete="off" class="layui-input len-mid select-category" />
<input type="hidden" class="category_id" />
</div>
<a href="javascript:;" class="text-color js-delete-category">删除</a>
</div>`;
$('.goods-category-con-wrap').append(h);
fetchCategory({elem: $('.goods-category-con-wrap .layui-block:last-child').find('.select-category')}, function (value, node) {
var categoryId = [];
node.path.forEach(function (item) {
categoryId.push(item.value)
});
$('.goods-category-con-wrap .layui-block:last-child').find('.category_id').val(categoryId.toString());
})
});
$('body').off('click', '.goods-category-con-wrap .js-delete-category').on('click', '.goods-category-con-wrap .js-delete-category', function () {
$(this).parents('.layui-block').remove();
});
/**
* 渲染分类选择
* @param option
* @param callback
*/
function fetchCategory(option, callback){
if (!goodsCategory.length) {
$.ajax({
url : ns.url("cardservice://shop/servicecategory/lists"),
dataType: 'JSON',
type: 'POST',
async: false,
success: function(res) {
goodsCategory = res.data;
}
})
}
var _option = {
options: goodsCategory,
props: {
value: 'category_id',
label: 'category_name',
children: 'child_list'
}
};
if (option) Object.assign(_option, option);
var _cascader = layCascader(_option);
_cascader.changeEvent(function (value, node) {
typeof callback == 'function' && callback(value, node)
});
}

View File

@@ -0,0 +1,407 @@
var link_url_json = $("input[name='link_url']").val();
if(link_url_json) {
link_url_json = JSON.parse(link_url_json);
$(".link-url-show").text(link_url_json.title);
}
var laytpl, form, layerIndex;
var categoryFullName = [];//组装名称
var saveData = null;
var totalUploadNum = 0;
var completeUploadNum = 0;
$(function () {
//编辑时赋值组装名称
if ($("input[name='category_full_name']").length > 0) {
categoryFullName = $("input[name='category_full_name']").val().split("/").slice(0, $("input[name='category_full_name']").val().split("/").length - 1);
}
layui.use(['form', 'laytpl'], function () {
var repeat_flag = false;//防重复标识
laytpl = layui.laytpl;
form = layui.form;
/**
* 表单验证
*/
form.verify({
commission_rate: function (value) {
var reg = /^\d{0,2}(.?\d{0,2})$/;
if (value.length > 0) {
if (isNaN(value)) {
return '佣金比率输入错误';
}
if (!reg.test(value) || value < 0 || value > 100) {
return '佣金比率范围:0~100%';
}
}
},
num: function (value) {
if (value == '') {
return;
}
if (value % 1 != 0) {
return '排序数值必须为整数';
}
if (value < 0) {
return '排序数值必须为大于0';
}
}
});
var upload = new Upload({
elem: '#imgUpload',
size:100,
auto:false,
bindAction:'#imageUploadAction',
callback: function(res) {
uploadComplete('image', res.data.pic_path);
}
});
var adv_upload = new Upload({
elem: '#imgUploadAdv',
auto:false,
bindAction:'#imageAdvUploadAction',
callback: function(res) {
uploadComplete('image_adv', res.data.pic_path);
}
});
function uploadComplete(field, pic_path) {
saveData.field[field] = pic_path;
completeUploadNum += 1;
if(completeUploadNum == totalUploadNum){
saveFunc();
}
}
form.on('submit(save)', function (data) {
saveData = data;
var obj = $("img.img_prev[data-prev='1']");
totalUploadNum = obj.length;
if(totalUploadNum > 0){
obj.each(function(){
var actionId = $(this).attr('data-action-id');
$(actionId).click();
})
}else{
saveFunc();
}
return false;
});
function saveFunc(){
var data = saveData;
categoryFullName.push(data.field.category_name);
data.field.category_full_name = categoryFullName.join("/");
data.field.attr_class_name = $("select[name='attr_class_id'] option:checked").text();
// 删除图片
if(!data.field.image) upload.delete();
if(!data.field.image_adv) adv_upload.delete();
if (repeat_flag) return false;
repeat_flag = true;
var url = ns.url("cardservice://shop/servicecategory/addCategory");
if (data.field.category_id) url = ns.url("cardservice://shop/servicecategory/editCategory");
$.ajax({
url: url,
data: data.field,
dataType: 'json',
type: 'post',
success: function (data) {
layer.msg(data.message);
if (data.code == 0) {
location.hash = ns.hash("cardservice://shop/servicecategory/lists");
} else {
repeat_flag = false;
}
}
});
}
//保存上级分类
form.on('submit(save_pid)', function (data) {
var option_category_id_1 = $("select[name='category_id_1'] option:checked");
var option_category_id_2 = $("select[name='category_id_2'] option:checked[value!='0']");
categoryFullName = [];
var level, category_name, pid;
if (option_category_id_1.length) {
level = parseInt(option_category_id_1.attr("data-level"));
category_name = option_category_id_1.text();
pid = option_category_id_1.val();//上级分类id
var category_id_1 = option_category_id_1.val();//一级分类id
if (category_id_1 > 0) {
$("input[name='category_id_1']").val(category_id_1);
categoryFullName.push(category_name);
}
}
if($("input[name='category_name_1']").length){
categoryFullName.push($("input[name='category_name_1']").val());
}
// 选中了二级商品分类
if (option_category_id_2.length) {
level = parseInt(option_category_id_2.attr("data-level"));
category_name = option_category_id_2.text();
pid = option_category_id_2.val();
var category_id_2 = option_category_id_2.val();//二级分类id
if (category_id_2 > 0) {
$("input[name='category_id_2']").val(category_id_2);
categoryFullName.push(category_name);
}
}
$(".js-pid span").text(category_name);
$("input[name='pid']").val(pid);
$("input[name='level']").val(level + 1);//当前添加的层级+1
layer.close(layerIndex);
return false;
});
setTimeout(()=>{
form.render();
},600)
});
});
//选择商品分类弹出框
function selectedCategoryPopup() {
if ($("input[name='category_id']").length) {
// 修改
editSelectedPid();
} else {
//添加
addSelectedPid();
}
}
/**
* 获取商品分类列表
* @param data
* @param callback
*/
function getCategoryList(data, callback) {
$.ajax({
url: ns.url("cardservice://shop/servicecategory/getCategoryList"),
data: data,
dataType: 'json',
type: 'post',
async: false,
success: function (res) {
var data = res.data;
if (callback) callback(data);
}
});
}
/**
* 添加时,选择上级分类
*/
function addSelectedPid() {
//查询一级商品分类
getCategoryList({pid: 0}, function (list) {
var html = $("#selectedCategory").html();
var data = {
category_id_1: $("input[name='category_id_1']").val(),
category_list_1: list
};
laytpl(html).render(data, function (html) {
layerIndex = layer.open({
title: '选择商品分类',
skin: 'layer-tips-class',
type: 1,
area: ['450px'],
content: html,
success: function () {
form.render();
form.on('select(category_id_1)', function (item) {
if (item.value > 0) {
getCategoryList({pid: item.value}, function (list) {
var h = '<option value="0">请选择</option>';
for (var i = 0; i < list.length; i++) {
if ($("input[name='category_id_2']").val() == list[i].category_id) {
h += '<option value="' + list[i].category_id + '" data-level="' + list[i].level + '" selected>' + list[i].category_name + '</option>';
} else {
h += '<option value="' + list[i].category_id + '" data-level="' + list[i].level + '">' + list[i].category_name + '</option>';
}
}
$("select[name='category_id_2']").html(h);
form.render("select");
});
} else {
//顶级分类不需要查询
$("select[name='category_id_2']").html('<option value="0">请选择</option>');
form.render("select");
}
});
$("select[name='category_id_1']").siblings("div.layui-form-select").find("dl dd[lay-value='" + $("input[name='category_id_1']").val() + "']").click();
}
});
});
});
}
/**
* 编辑时,选择上级分类
*/
function editSelectedPid() {
var html = $("#selectedCategory").html();
laytpl(html).render({}, function (html) {
layerIndex = layer.open({
title: '选择商品分类',
skin: 'select-category',
type: 1,
area: ['650px'],
content: html,
btn: ['确定', '取消'],
success: function () {
var pid = $('input[name="pid"]').val();
var level = $('input[name="level"]').val();
$('.table_div input[name="category_id"][data-category-id="'+pid+'"]').attr('checked', true);
if(level == 3) $('.table_div div[data-cateid="'+pid+'"]').parents('.table_two_div').show().prev('.table_tr').find('.switch').attr('data-open', 1).html('-');
form.render();
$(".js-switch").click(function (event) {
event.stopPropagation();
var category_id = $(this).attr("data-category-id");
var level = $(this).attr("data-level");
var open = parseInt($(this).attr("data-open").toString());
if(open){
$(".goods-category-list .layui-table tr[data-category-id-"+ level+"='" + category_id + "']").hide();
// $(this).children("img").removeClass('rotate');
$(this).text("+");
if(level == 1) $(this).parents('.table_tr').siblings('.table_two_div').hide();
else if(level == 2) $(this).parents('.table_tr').siblings('.table_three').hide();
}else{
$(".goods-category-list .layui-table tr[data-category-id-"+ level+"='" + category_id + "']").show();
$(this).text("-");
// $(this).children("img").addClass('rotate');
if(level == 1) $(this).parents('.table_tr').siblings('.table_two_div').show();
else if(level == 2) $(this).parents('.table_tr').siblings('.table_three').show();
}
$(this).attr("data-open", (open ? 0 : 1));
});
form.on('checkbox(category)', function (data) {
if(data.elem.checked==true){
$('.table_move').children('div').removeClass('layui-form-checked');
$(".table_move input").prop("checked",false);
}
$(this).parents('.table_move').children('div').addClass('layui-form-checked');
$(this).parents('.table_move').find('input').prop("checked",true);
return false;
});
},
yes: function(index, layero){
var obj = $('.table_div input[name="category_id"]:checked');
var num = $(obj).length;
if(num > 1){
layer.msg('只能选择一个上级');
return false;
}
var parent_level = $(obj).attr('data-level');
var pid = $(obj).val();
var parent_name = $(obj).attr('data-name');
if(num < 1){
parent_level = 0;
pid = 0;
parent_name = '顶级分类';
}
$.ajax({
url: ns.url("cardservice://shop/servicecategory/checkEditCategory"),
data: {
category_id: $('#category_id').val(),
pid : pid
},
dataType: 'json',
type: 'post',
async: false,
success: function (res) {
if(res.code >= 0){
$(".js-pid span").text(parent_name);
$("input[name='pid']").val(pid);
$("input[name='level']").val(parseInt(parent_level) + 1);//当前添加的层级+1
layer.close(layerIndex);
}else{
layer.msg(res.message)
}
}
});
}
});
});
}
/**
* 获取商品分类信息
* @param category_id
* @param callback
*/
function getCategoryInfo(category_id, callback) {
$.ajax({
url: ns.url("cardservice://shop/servicecategory/getCategoryInfo"),
data: {category_id: category_id},
dataType: 'json',
type: 'post',
async: false,
success: function (res) {
var data = res.data;
if (callback) callback(data);
}
});
}
function backCardServiceCategoryList() {
location.hash = ns.hash("cardservice://shop/servicecategory/lists")
}
function selectedLink() {
if (link_url_json == "") {
link_url_json = {};
}
ns.select_link(link_url_json, function (data) {
for (var o in data) {
if (data[o] == null) delete data[o];
}
$("input[name='link_url']").val(JSON.stringify(data));
$(".link-url-show-wrap .layui-input-block").find('.link-url-show').remove();
$(".link-url-show-wrap .layui-input-block").prepend(`<span class="link-url-show">${data.title}</span>`);
});
}

View File

@@ -0,0 +1,104 @@
requestAdd = 'cardservice://shop/service/addGoods';
requestEdit = 'cardservice://shop/service/editGoods';
goodsTag = '项目';
// 追加刷新商品sku数据
appendRefreshGoodsSkuData = {
service_length: 0
};
// 追加单规格数据
function appendSingleGoodsData(data) {
return {
service_length: data.field.service_length
};
}
// 追加保存数据
function appendSaveData(data) {
return {
verify_validity_type: $('[name="verify_validity_type"]:checked').val()
};
}
$(function () {
layui.use(['element', 'laytpl', 'form', 'laydate'], function () {
form = layui.form;
element = layui.element;
laytpl = layui.laytpl;
laydate = layui.laydate;
form.render();
var time = new Date();
var currentTime = time.toLocaleDateString + " " + time.getHours() + ":" + time.getMinutes() + ":" + time.getSeconds();
//核销有效期
laydate.render({
elem: '#virtual_time', //指定元素
type: 'datetime',
min: currentTime
});
//卡项有效期类型
form.on('radio(verify_validity_type)', function (data) {
var value = parseInt(data.value);
$('.validity-type').addClass('layui-hide');
$('.validity-type.validity-type-' + value).removeClass('layui-hide');
});
form.verify({
//有效期
virtual_indate: function (value) {
var verify_validity_type = $('[name="verify_validity_type"]:checked').val();
if (verify_validity_type == 1) {
if (isNaN(value) || !regExp.number.test(value)) {
element.tabChange('goods_tab', "basic");
return '[核销有效期]格式输入错误';
}
if (value < 1) {
element.tabChange('goods_tab', "basic");
return '核销有效期不能小于1天';
}
}
},
virtual_time: function (value) {
var verify_validity_type = $('[name="verify_validity_type"]:checked').val();
if (value.length == 0 && verify_validity_type == 2) {
element.tabChange('goods_tab', "basic");
return "请输入有效期";
}
},
service_length: function (value) {
if (value.length > 0) {
value = parseInt(value);
if (isNaN(value) || !regExp.number.test(value)) {
element.tabChange('goods_tab', "price-stock");
return '[服务时长]格式输入错误';
}
if (value < 0) {
element.tabChange('goods_tab', "price-stock");
return '[服务时长]不能小于0';
}
}
},
//销售价
service_price: function (value) {
if (!$("input[name='spec_type']").is(":checked")) {
if (value.length == 0) {
element.tabChange('goods_tab', "basic");
return "请输入销售价";
}
if (isNaN(value) || !regExp.digit.test(value)) {
element.tabChange('goods_tab', "basic");
return '[销售价]格式输入错误';
}
}
},
});
});
});