提交 2a2c9304 authored 作者: Chris Harris's avatar Chris Harris

sync: 同步服务器代码 2-22-12-9 13:31

上级 805d343b
# Generated by Django 3.1.4 on 2022-11-29 11:54
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('banquet', '0006_apply_annotation'),
]
operations = [
migrations.AddField(
model_name='apply_codes',
name='label_id',
field=models.BigIntegerField(blank=True, db_index=True, null=True, verbose_name='标签ID'),
),
migrations.AddField(
model_name='apply_codes',
name='label_pk_id',
field=models.BigIntegerField(blank=True, db_index=True, null=True, verbose_name='标签PKID'),
),
]
# Generated by Django 3.1.4 on 2022-11-29 17:38
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('banquet', '0007_auto_20221129_1154'),
]
operations = [
migrations.AddField(
model_name='apply_codes',
name='dt',
field=models.DateField(auto_now_add=True, db_index=True, null=True, verbose_name='生成日期'),
),
]
# Generated by Django 3.1.4 on 2022-11-23 16:00
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('contenttypes', '0002_remove_content_type_name'),
('sales', '0298_lotteryseeds_batch_id'),
('company', '0306_operationlog'),
]
operations = [
migrations.CreateModel(
name='BonusPointsLog',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('ancestor_id', models.IntegerField(blank=True, null=True, verbose_name='所属族系')),
('object_id', models.IntegerField(blank=True, null=True, verbose_name='实例ID')),
('points', models.DecimalField(decimal_places=2, max_digits=12, verbose_name='当前积分变化值')),
('dt', models.DateField(auto_now_add=True, db_index=True, verbose_name='日期')),
('tm', models.DateTimeField(auto_now_add=True, verbose_name='时间')),
('remark', models.CharField(blank=True, max_length=100, null=True, verbose_name='备注说明')),
('activity', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='bonuspointslog_activity', to='sales.activities', verbose_name='所属活动')),
('company', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='bonuspointslog_company', to='company.company', verbose_name='所属公司')),
('contenttype', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype', verbose_name='实例对像')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='bonuspointslog_user', to='company.company', verbose_name='用户帐号')),
],
options={
'verbose_name': '用户积分日志',
'verbose_name_plural': '用户积分日志',
},
),
migrations.CreateModel(
name='PointsRedeemed',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('ancestor_id', models.IntegerField(blank=True, null=True, verbose_name='所属族系')),
('points', models.DecimalField(decimal_places=2, max_digits=12, verbose_name='兑换积分值')),
('amount', models.DecimalField(blank=True, decimal_places=2, max_digits=12, null=True, verbose_name='金额')),
('payment_method', models.SmallIntegerField(choices=[(1, '微信钱包'), (2, '银行卡'), (3, '货返')], default=1, verbose_name='付款方式')),
('invoice_needed', models.SmallIntegerField(choices=[(1, '开票提现'), (0, '不开票提现')], default=0, verbose_name='是否开票')),
('bank_receipt', models.CharField(blank=True, max_length=50, null=True, verbose_name='银行/微信回单编号')),
('qty', models.IntegerField(blank=True, null=True, verbose_name='兑换奖项个数')),
('dt', models.DateField(auto_now_add=True, db_index=True, verbose_name='日期')),
('tm', models.DateTimeField(auto_now_add=True, verbose_name='时间')),
('remark', models.CharField(blank=True, max_length=100, null=True, verbose_name='备注说明')),
('award', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='sales.award', verbose_name='兑换奖项')),
('company', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pointsredeem_company', to='company.company', verbose_name='所属公司')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pointsredeem_user', to='company.company', verbose_name='用户帐号')),
],
options={
'verbose_name': '积分兑换',
'verbose_name_plural': '积分兑换',
},
),
migrations.CreateModel(
name='PointsLogDetails',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('ancestor_id', models.IntegerField(blank=True, null=True, verbose_name='所属族系')),
('label_code', models.CharField(db_index=True, max_length=20, verbose_name='标签号码')),
('label_id', models.BigIntegerField(db_index=True, verbose_name='标签ID')),
('label_pk_id', models.BigIntegerField(db_index=True, verbose_name='标签PKID')),
('label_pkg', models.SmallIntegerField(db_index=True, verbose_name='标签类型')),
('points', models.DecimalField(decimal_places=2, max_digits=12, verbose_name='积分值')),
('dt', models.DateField(auto_now_add=True, db_index=True, verbose_name='日期')),
('tm', models.DateTimeField(auto_now_add=True, verbose_name='时间')),
('remark', models.CharField(blank=True, max_length=100, null=True, verbose_name='备注说明')),
('activity', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='pointslogdetails_activity', to='sales.activities', verbose_name='所属活动')),
('company', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pointslogdetails_company', to='company.company', verbose_name='所属公司')),
('log', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='company.bonuspointslog', verbose_name='所属积分日志')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pointslogdetails_user', to='company.company', verbose_name='用户帐号')),
],
options={
'verbose_name': '积分物流标签明细',
'verbose_name_plural': '积分物流标签明细',
},
),
migrations.CreateModel(
name='BonusPoints',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('ancestor_id', models.IntegerField(blank=True, null=True, verbose_name='所属族系')),
('points', models.DecimalField(blank=True, decimal_places=2, max_digits=12, null=True, verbose_name='当前积分值')),
('remark', models.CharField(blank=True, max_length=100, null=True, verbose_name='备注说明')),
('tm', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
('company', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='bonuspoints_company', to='company.company', verbose_name='所属公司')),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='bonuspoints_user', to=settings.AUTH_USER_MODEL, verbose_name='用户帐号')),
],
options={
'verbose_name': '用户积分',
'verbose_name_plural': '用户积分',
},
),
]
# Generated by Django 3.1.4 on 2022-11-25 10:25
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('company', '0307_bonuspoints_bonuspointslog_pointslogdetails_pointsredeemed'),
]
operations = [
migrations.AlterField(
model_name='bonuspointslog',
name='user',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='bonuspointslog_user', to=settings.AUTH_USER_MODEL, verbose_name='用户帐号'),
),
migrations.AlterField(
model_name='pointslogdetails',
name='user',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pointslogdetails_user', to=settings.AUTH_USER_MODEL, verbose_name='用户帐号'),
),
migrations.AlterField(
model_name='pointsredeemed',
name='user',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pointsredeem_user', to=settings.AUTH_USER_MODEL, verbose_name='用户帐号'),
),
]
# Generated by Django 3.1.4 on 2022-11-28 09:01
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('sales', '0298_lotteryseeds_batch_id'),
('company', '0308_auto_20221125_1025'),
]
operations = [
migrations.RemoveField(
model_name='bonuspointslog',
name='activity',
),
migrations.RemoveField(
model_name='pointslogdetails',
name='activity',
),
migrations.AddField(
model_name='bonuspointslog',
name='hannelpromotions',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='bonuspointslog_activity', to='sales.channelpromotions', verbose_name='所属渠道返利'),
),
migrations.AddField(
model_name='pointslogdetails',
name='channelpromotions',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='pointslogdetails_activity', to='sales.channelpromotions', verbose_name='所属渠道返利'),
),
migrations.AddField(
model_name='pointslogdetails',
name='err',
field=models.CharField(blank=True, max_length=100, null=True, verbose_name='错误信息'),
),
]
# Generated by Django 3.1.4 on 2022-11-28 10:37
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('company', '0309_auto_20221128_0901'),
]
operations = [
migrations.RenameField(
model_name='bonuspointslog',
old_name='hannelpromotions',
new_name='channelpromotions',
),
]
# Generated by Django 3.1.4 on 2022-11-30 10:36
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('company', '0310_auto_20221128_1037'),
]
operations = [
migrations.AddField(
model_name='pointslogdetails',
name='company_fr_id',
field=models.IntegerField(blank=True, null=True, verbose_name='顶级发货经销商'),
),
]
# Generated by Django 3.1.4 on 2022-12-01 09:14
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('company', '0311_pointslogdetails_company_fr_id'),
]
operations = [
migrations.AlterModelOptions(
name='bonuspoints',
options={'verbose_name': '渠道促销经销商积分', 'verbose_name_plural': '渠道促销经销商积分'},
),
migrations.RemoveField(
model_name='bonuspoints',
name='user',
),
migrations.AlterField(
model_name='bonuspoints',
name='company',
field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='bonuspoints_company', to='company.company', verbose_name='所属公司'),
),
]
# Generated by Django 3.1.4 on 2022-12-05 11:39
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('sales', '0306_auto_20221202_1122'),
('company', '0312_auto_20221201_0914'),
]
operations = [
migrations.RemoveField(
model_name='pointslogdetails',
name='points',
),
migrations.AddField(
model_name='bonuspoints',
name='channelpromotions',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='bonuspointslog_ChannelPromotions', to='sales.channelpromotions', verbose_name='所属渠道返利'),
),
migrations.AddField(
model_name='pointslogdetails',
name='parent_points',
field=models.DecimalField(blank=True, decimal_places=2, max_digits=12, null=True, verbose_name='顶级发货商积分值'),
),
migrations.AddField(
model_name='pointslogdetails',
name='self_points',
field=models.DecimalField(blank=True, decimal_places=2, max_digits=12, null=True, verbose_name='自身积分值'),
),
]
# Generated by Django 3.1.4 on 2022-12-05 11:41
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('company', '0313_auto_20221205_1139'),
]
operations = [
migrations.AlterField(
model_name='pointslogdetails',
name='self_points',
field=models.DecimalField(decimal_places=2, max_digits=12, verbose_name='自身积分值'),
),
]
# Generated by Django 3.1.4 on 2022-12-05 11:43
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('company', '0314_auto_20221205_1141'),
]
operations = [
migrations.AlterField(
model_name='pointslogdetails',
name='parent_points',
field=models.DecimalField(decimal_places=2, default=0, max_digits=12, verbose_name='顶级发货商积分值'),
),
migrations.AlterField(
model_name='pointslogdetails',
name='self_points',
field=models.DecimalField(decimal_places=2, default=0, max_digits=12, verbose_name='自身积分值'),
),
]
# Generated by Django 3.1.4 on 2022-12-07 10:41
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('company', '0315_auto_20221205_1143'),
]
operations = [
migrations.RemoveField(
model_name='bonuspointslog',
name='points',
),
migrations.AddField(
model_name='bonuspointslog',
name='parent_points',
field=models.JSONField(blank=True, default=list, null=True, verbose_name='经济发货方积分值'),
),
migrations.AddField(
model_name='bonuspointslog',
name='self_points',
field=models.DecimalField(blank=True, decimal_places=2, max_digits=12, null=True, verbose_name='确认收货方积分值'),
),
]
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
15:12:34:{"compid": "19257", "uid": "3886", "third_party_compid": "13", "labels": [{"label_type": "X", "label_code": ["103000192209,HTTPS://M.LZLJ.COM/R/172130123152321006,26901798104605", "103000192440,HTTPS://M.LZLJ.COM/R/172130112803945800,26901798104605", "103000192049,HTTPS://M.LZLJ.COM/R/172129693498726426,26901798104605", "103000192604,HTTPS://M.LZLJ.COM/R/172130101119955991,26901798104605", "103000192922,HTTPS://M.LZLJ.COM/R/172129915696711409,26901798104605", "103000191801,HTTPS://M.LZLJ.COM/R/172126154958473226,26901798104605", "103000191729,HTTPS://M.LZLJ.COM/R/172130105487947712,26901798104605", "103000191885,HTTPS://M.LZLJ.COM/R/172126108214822253,26901798104605", "103000192686,HTTPS://M.LZLJ.COM/R/172129570879588551,26901798104605", "103000192760,HTTPS://M.LZLJ.COM/R/172126040049473442,26901798104605", "103000192525,HTTPS://M.LZLJ.COM/R/172129864894296294,26901798104605", "103000191968,HTTPS://M.LZLJ.COM/R/172116477170812745,26901798104605", "103000192121,HTTPS://M.LZLJ.COM/R/172112056976498737,26901798104605", "103000192368,HTTPS://M.LZLJ.COM/R/172126038759427988,26901798104605", "103000192283,HTTPS://M.LZLJ.COM/R/172129386536380484,26901798104605"], "label_bind_rule": "1:1:1", "label_code_type": 2}], "remark": ""}
\ No newline at end of file
# Generated by Django 3.1.4 on 2022-11-29 10:40
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('contenttypes', '0002_remove_content_type_name'),
('sales', '0298_lotteryseeds_batch_id'),
]
operations = [
migrations.AddField(
model_name='channelpromotions',
name='points_ratio',
field=models.DecimalField(blank=True, decimal_places=4, max_digits=8, null=True, verbose_name='积分现金兑换比率'),
),
migrations.AddField(
model_name='channelpromotions',
name='trigger_action',
field=models.CharField(blank=True, default='post_save', max_length=50, null=True, verbose_name='触发动作'),
),
migrations.AddField(
model_name='channelpromotions',
name='triggers',
field=models.JSONField(blank=True, default=list, null=True, verbose_name='系统触发对像类'),
),
migrations.CreateModel(
name='ChannelPromotionTrigger',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('remark', models.CharField(blank=True, max_length=100, verbose_name='备注说明')),
('tm', models.DateTimeField(auto_now_add=True, verbose_name='生成时间')),
('contenttype', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='ChannelPromotionTrigger_contenttype', to='contenttypes.contenttype', verbose_name='对像/表名')),
],
options={
'verbose_name': '可触发渠道促销活动的对像类',
'verbose_name_plural': '可触发渠道促销活动的对像类',
},
),
]
# Generated by Django 3.1.4 on 2022-11-29 10:44
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sales', '0299_auto_20221129_1040'),
]
operations = [
migrations.AddField(
model_name='channelpromotiontrigger',
name='name',
field=models.CharField(default='', max_length=100, verbose_name='类名'),
preserve_default=False,
),
]
# Generated by Django 3.1.4 on 2022-11-29 11:23
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sales', '0300_channelpromotiontrigger_name'),
]
operations = [
migrations.AlterField(
model_name='channelpromotiontrigger',
name='remark',
field=models.CharField(blank=True, max_length=100, null=True, verbose_name='备注说明'),
),
]
# Generated by Django 3.1.4 on 2022-11-29 18:07
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sales', '0301_auto_20221129_1123'),
]
operations = [
#migrations.RemoveField(
# model_name='channelpromotions',
# name='end_level',
#),
#migrations.RemoveField(
# model_name='channelpromotions',
# name='rebates',
#),
#migrations.RemoveField(
# model_name='channelpromotions',
# name='terminal_qualified',
#),
migrations.AddField(
model_name='channelpromotions',
name='point_ratio',
field=models.DecimalField(blank=True, decimal_places=4, max_digits=8, null=True, verbose_name='积分现金兑换比率'),
),
migrations.AlterField(
model_name='channelpromotions',
name='scan_type',
field=models.SmallIntegerField(blank=True, choices=[(1, '层级扫码'), (2, '消费者扫码'), (3, '系统触发')], default=1, null=True, verbose_name='活动扫码类型'),
),
]
# Generated by Django 3.1.4 on 2022-11-29 18:12
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('company', '0310_auto_20221128_1037'),
('sales', '0302_auto_20221129_1807'),
]
operations = [
#migrations.RemoveField(
# model_name='channelpromotions',
# name='points_ratio',
#),
migrations.RemoveField(
model_name='channelpromotions',
name='trigger_action',
),
#migrations.RemoveField(
# model_name='channelpromotiontrigger',
# name='name',
#),
#migrations.AddField(
# model_name='channelpromotions',
# name='end_level',
# field=models.ForeignKey(blank=True, default=4, null=True, on_delete=django.db.models.deletion.CASCADE, to='company.level', verbose_name='终端层级'),
#),
#migrations.AddField(
# model_name='channelpromotions',
# name='rebates',
# field=models.JSONField(blank=True, default=list, null=True, verbose_name='层级返利'),
#),
#migrations.AddField(
# model_name='channelpromotions',
# name='terminal_qualified',
# field=models.BooleanField(blank=True, default=True, null=True, verbose_name='物流必经终店端扫码'),
#),
migrations.AlterField(
model_name='channelpromotions',
name='triggers',
field=models.JSONField(default=list, verbose_name='系统触发对像类'),
),
]
# Generated by Django 3.1.4 on 2022-11-29 18:17
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sales', '0303_auto_20221129_1812'),
]
operations = [
migrations.AlterField(
model_name='channelpromotiontrigger',
name='name',
field=models.CharField(blank=True, max_length=50, null=True, verbose_name='名称'),
),
]
# Generated by Django 3.1.4 on 2022-11-30 10:36
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('sales', '0304_channelpromotiontrigger_name'),
]
operations = [
migrations.RemoveField(
model_name='channelpromotions',
name='points_ratio',
),
]
# Generated by Django 3.1.4 on 2022-12-02 11:22
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sales', '0305_remove_channelpromotions_points_ratio'),
]
operations = [
migrations.AddField(
model_name='channelpromotiontrigger',
name='title',
field=models.CharField(blank=True, max_length=30, null=True, verbose_name='短标题显示'),
),
migrations.AlterField(
model_name='channelpromotions',
name='point_ratio',
field=models.DecimalField(blank=True, decimal_places=4, default=1.0, max_digits=8, null=True, verbose_name='积分现金兑换比率'),
),
]
{% load i18n %}
<style>
.box1{
display: flex;
flex-wrap: wrap;
height:600px;
text-align:center;
margin:auto;
}
.item{
width: 20%;
margin-top:0px;
margin-bottom:20px;
}
.box1 .item .title{
font-size:2.0em;
color:black;
}
.box1 .item img{
width:200px;
}
</style>
<script type="text/javascript">
$(document).ready(function(){
$('#obj_form .btn-qrcode').click(function(){
var codes=$('#codes').val();
if(codes.length<12){
toastr.error(
"请先输入破损标签物流码!",
"操作错误:",
{timeOut: 1000, positionClass: "toast-center-center"}
);
return;
}else{
$.ajax({
type:'GET',
url:'/inventory/label/tjqrcode/?codes='+codes,
success:function(data){
if(data.e==''){
var html='';
for (var i in data.images){
html=html+
'<div class="item">'+
'<div class="title">'+data.images[i].code+'</div>'+
'<img src="data:image/jpeg;base64,'+data.images[i].image+'" ></img>'+
'</div>';
};
$('#images').html(html);
if(data.msg==''){
toastr.success(
"二维码图像已生成!",
"操作成功:",
{timeOut: 1200, positionClass: "toast-center-center"}
);
}else{
toastr.warning(
data.msg,
"提示:",
{timeOut: 5000, positionClass: "toast-center-center"}
);
}
}else{
toastr.error(
data.e,
"系统提示:",
{timeOut: 5000, positionClass: "toast-center-center"}
);
};
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
$('#data-content .btn').show();
toastr.error(
"连接服务器失败!",
"网络错误:",
{timeOut: 1000, positionClass: "toast-center-center"}
);
}
});
};
});
});
</script>
<ol class="breadcrumb">
<li>{% trans "物流工具" %}</li>
<li>{% trans "破损标二维码生成" %}</li>
</ol>
<div class='x_panel'>
<br/>
<div class="x_content">
<div id="obj_form" >
<div class='input-group'>
<input type="text" class="form-control" id="codes" placeholder='{% trans "请输入破损标签物流码,一次最多10个中间用逗号分隔" %}'/>
<span class='input-group-btn'>
<button type="button" class='btn btn-primary btn-qrcode'>
<span class='glyphicon glyphicon-print' style='padding-right:5px;'></span>{% trans "生成二维码" %}
</button>
</span>
</div>
<div class="box1 " id='images'></div>
</div>
</div>
</div>
{% load i18n %}
<style>
#data-content .div_x .sn, #data-content .sn-s{
width:210px;
}
#data-content .div_detail .sn{
width:100px;
}
#label_info{
max-height: 500px;
overflow-y: auto;
}
.g{
color:green;
font-weight:bold;
}
.b{
color:black;
}
.r{
color:red;
font-weight:bold;
}
#stk_dev thead td{
color:black;
}
#qry_code{
padding-bottom:0px;
margin-bottom:0px;
}
#relations td .replace{
margin-left:10px;
font-style:italic;
color:red;
font-weight:bold;
}
#product{
margin-bottom:20px;
}
#div_cartons{
max-height:400px;
}
#div_boxes{
max-height:400px;
}
td.unprocessed .unprocessed div {
color:gray;
font-style:italic;
}
.tooltip-inner{
max-width: 600px;
}
#bg-modal{
z-index:10000;
}
</style>
<ol class="breadcrumb">
<li> {% trans "物流查询" %}</li>
<li> {% trans "标签查询" %}</li>
</ol>
<script type="text/javascript">
$(document).ready(function(){
$('#stk_dev').on('click','a',function(event){
event.preventDefault();
$.OpenDlg($(this).attr('href'),$(this).attr('v')+'-明细列表',1000,700);
});
$('#code').keydown(function (event) {
if (event.keyCode == 13) {
var code=$.trim($('#code').val());
if(code.length>=12){
refresh(code);
}
}
});
$('.btn-qry').click(function(){
var code=$.trim($('#code').val());
if(code.length<12){
toastr.error(
"{% trans '请先输入您要查询的标签号码!' %}",
"操作错误:",
{timeOut: 800, positionClass: "toast-center-center"}
);
return;
};
refresh(code);
});
function refresh(code){
//清空数据
$('#div_cartons tbody,#div_boxes tbody,#stk_dev tbody,#product').html('').hide();
$('#qry_code').html('');
$.ajax({
type:'GET',
url:'/inventory/get/label/infor/?code='+code,
dataType:'json',
success: function(d) {
if(d.e!=''){
toastr.error(
d.e,
"错误:",
{timeOut: 800, positionClass: "toast-center-center"}
);
return ;
};
var s='';
for (var i in d.product.property){
s=s+'<span style="margin-left:30px;">'+d.product.property[i].desc_cn+':<span class="g">'+
d.product.property[i].value+'</span>'+d.product.property[i].unit+'</span>';
};
$('#product').html(
'<div class="row">'+
'<div class="col-md-3"><span>{% trans "标签号码:" %}</span><span class="g">'+d.infor.code+'</span>'+
(d.infor.is_thirdparty?'<span style=\"margin-left:10px;font-style:italic\">第三方标签</span>':'')+
'</div>'+
'<div class="col-md-1"><span>{% trans "类型:" %}</span><span class="g">'+d.package.name+'</span></div>'+
{% ifequal user.company.id 19267 %}
'<div class="col-md-8"><span>{% trans "批次信息:" %}</span><span class="g">'+d.batch_no+'</span></div>'+
{% endifequal %}
'</div>' +
'<div class="row">'+
'<div class="col-md-12">'+
'<span>{% trans "产品名称:" %}</span><span class="g">'+d.product.name+'</span>'+
'<span style="margin-left:20px;">{% trans "价格:" %}</span><span class="g">'+d.product.price+'</span>'+s+
'</div>'+
'</div>'
);
var cartons='',boxes='',stk_dev='',r,s='',cls='',sFw='',stacks='';
var aLbls=[];
var cls='',lbl='';
var ct;
if (d.relations.level==2){
if(d.relations.cartons.length>0){
cartons='<tr style="color:black;"><td colspan=2>{{ package_3 }}</td></tr>';
}else{
cartons='';
};
if (d.infor.stack.details.length>0){
stacks=stacks+'<tr style="color:black;"><td colspan=2>垛</td></tr>';
for (var i in d.infor.stack.details){
stacks=stacks+'<tr>'+
'<td style="width:30%;">'+(1+parseInt(i))+'</td>'+
'<td> '+ d.infor.stack.details[i]+' </td></tr>';
}
}
for (var i in d.relations.cartons){
cls='';
lbl='';
ct=d.relations.cartons[i];
if (d.infor.ab_bindding==true){
if(ct.code_a==code || ct.code_b==code || ct.label==code || ct.code==code){
cls=' class="g"';
aLbls=aLbls.concat([ct.code_a,ct.code_b,ct.label,ct.code,ct.code0]);
};
if(ct.code_b!=''){
lbl=ct.code_b;
}else{
if(ct.code_a!=''){
lbl=ct.code_a;
}else{
lbl=ct.label;
}
}
}else{
if(ct.label==code || ct.code==code || ct.code0==code){
cls=' class="g"';
aLbls=aLbls.concat([ct.code_a,ct.code_b,ct.label,ct.code,ct.code0]);
};
lbl=ct.label;
};
cartons=cartons+'<tr>'+
'<td style="width:30%;">'+(1+parseInt(i))+'</td>'+
'<td><span '+cls+'>'+lbl+'</span>'+
(d.relations.cartons[i].dt_replace==''?'':'<span class="replace">此标签有替换记录'+
d.relations.cartons[i].dt_replace+" "+d.relations.cartons[i].code0+'->'+d.relations.cartons[i].code+'</span>')+
'</td></tr>';
};
r=d.relations.children;
if(r.length>0){
boxes=boxes+'<tr style="color:black;"><td colspan=2>{{ package_1 }}</td></tr>';
};
var cls_cur='';
for (var j in r){
s="";
cls_cur='';
lbl='';
ct=r[j];
if(r[j].is_bottlecap){
if(! r[j].complete){
cls='unprocessed';
};
}else{
if(! r[j].bottlecap.complete){
cls='unprocessed';
};
};
//if(ct.code_a==code || ct.code_b==code || ct.label==code || ct.code0==code || ct.code==code){
// 2022-08-29
if(ct.color=='red'){
cls_cur=' class="g"';
aLbls=aLbls.concat([ct.code_a,ct.code_b,ct.label,ct.code,ct.code0]);
};
if (d.infor.ab_bindding==true){
if(ct.code_b!=''){
lbl=ct.code_b;
}else{
if(ct.code_a!=''){
lbl=ct.code_a;
}else{
lbl=ct.label;
}
}
}else{
lbl=ct.label;
};
if(r[j].bottlecap.code!=''){
s='<span class="'+cls+'">'+
'<span title="瓶盖物流码:'+r[j].bottlecap.code+'" data-placement="left" data-toggle="tooltip"></span>'+
'</span>';
};
if(r[j].fw!=''){
sFw='<span>'+
'<span title="防伪码:'+r[j].fw+'" data-placement="left" data-toggle="tooltip"></span>'+
'</span>';
};
boxes=boxes+'<tr><td style="width:30%;">'+(1+parseInt(j))+'</td>'+'<td class="'+cls+'">'+
'<span>'+
s+sFw+
'<span '+cls_cur+'>'+lbl+'</span>'+
'</span>'+
(ct.dt_replace==''?'':'<span class="replace">此标签有替换记录 '+
ct.dt_replace+' '+ct.code0+' -> '+ct.code+'</span>')+
'</td></tr>';
};
} else {
for (var i in d.relations.cartons){
cls='';
lbl='';
ct=d.relations.cartons[i];
if(ct.code_a==code || ct.code_b==code || ct.label==code || ct.code0==code || ct.code==code){
cls_cur=' class="g"';
aLbls=aLbls.concat([ct.code_a,ct.code_b,ct.label,ct.code,ct.code0]);
};
if (d.infor.ab_bindding==true){
if(ct.code_b!=''){
lbl=ct.code_b;
}else{
if(ct.code_a!=''){
lbl=ct.code_a;
}else{
lbl=ct.label;
}
}
}else{
lbl=ct.label;
};
cartons=cartons+'<tr><td style="width:5%;">{{ package_3 }}</td>'+
'<td><span'+cls+'>'+lbl+'</span>'+
(d.relations.cartons[i].dt_replace==''?'':'<span class="replace">此标签有替换记录 '+
d.relations.cartons[i].dt_replace+" "+d.relations.cartons[i].code0+'->'+d.relations.cartons[i].code+'</span>')+
'</td></tr>';
};
for (var j in d.relations.children){
r=d.relations.children[j];
cls='';
lbl='';
ct=r;
//if(ct.code_a==code || ct.code_b==code || ct.label==code || ct.code0==code || ct.code==code){
// 2022-08-29
if(ct.color=='red'){
cls_cur=' class="g"';
aLbls=aLbls.concat([ct.code_a,ct.code_b,ct.label,ct.code,ct.code0]);
};
if (d.infor.ab_bindding==true){
if(ct.code_b!=''){
lbl=ct.code_b;
}else{
if(ct.code_a!=''){
lbl=ct.code_a;
}else{
lbl=ct.label;
}
}
}else{
lbl=ct.label;
};
boxes=boxes+'<tr><td style="width:5%;">'+(1+parseInt(j))+'</td><td style="width:5%;">{{ package_2 }}</td>'+
'<td colspan=2>'+
'<span '+((d.infor.ab_bindding?r.code_b:r.label)==code?' class="g"':'')+'>'+
(r.code_b?r.code_b:r.label)+'</span>'+
(r.dt_replace==''?'':'<span class="replace"> 此标签有替换记录 '+
r.dt_replace+' '+r.code0+'->'+r.code+'</span>')+
'</td></tr>';
for (var k in r.children){
cls='';
lbl='';
ct=r.children[k];
if(ct.code_a==code || ct.code_b==code || ct.label==code || ct.code0==code || ct.code==code){
cls_cur=' class="g"'
aLbls=aLbls.concat([ct.code_a,ct.code_b,ct.label,ct.code,ct.code0]);
};
if (d.infor.ab_bindding==true){
if(ct.code_b!=''){
lbl=ct.code_b;
}else{
if(ct.code_a!=''){
lbl=ct.code_a;
}else{
lbl=ct.label;
}
}
}else{
lbl=ct.label;
};
boxes=boxes+'<tr><td></td><td style="width:5%;">'+(1+parseInt(k))+
'</td><td colspan=2>{{ package_1 }} <span '+cls+'>'+lbl+'</span>'+
(ct.dt_replace==''?'':'<span class="replace">此标签有替换记录 '+
ct.dt_replace+' '+r.children.code0+'->'+r.children.code)+
'</span></td></tr>';
}
};
};
$('#div_stacks table tbody').html(stacks);
$('#div_cartons table tbody').append(cartons);
$('#div_boxes table tbody').html(boxes);
if (d.stock_development.length>0){
stk_dev='<tr style="color:black;"><td>时间</td><td>单据类型</td><td>单据编号</td><td>公司名称</td><td>操作员</td>'+
'<td>标签号码</td><td>类型</td><td>产品名称</td><td>仓库名称</td><td>客户名称</td><td>备注</td></tr>';
};
//取标签明细的地址
var url='';
var a='';
for(var i in d.stock_development){
cls='';
r=d.stock_development[i];
s=r.customer;
//if(r.vtype_id==3){
// store=r.store_to;
//}else{
// store=r.store;
//};
store=r.store;
if($.inArray(r.label_code, aLbls)>-1){
cls=' class="g"';
};
//2022-08-17 是否需要取本地表数据
if ($.isNumber(r.batch_id)){
url="/inventory/batch/details/"+r.batch_id+"/";
a='<a href="'+url+'">'+r.bill_no+'</a>';
}else{
if(r.vtype_id==2){
url="/inventory/batch/details/0/?code="+r.bill_no+"&vtype_id="+r.vtype_id+"&label_code="+r.label_code;
a='<a href="'+url+'" v="'+r.voucher+'">'+r.bill_no+'</a>';
}else{
a=r.bill_no;
};
};
stk_dev=stk_dev+'<tr><td>'+r.tm+'</td><td>'+r.voucher+'</td>'+
'<td>'+a+'</td>'+
'<td>'+r.company+'</td><td>'+r.user+'</td>'+
'<td '+cls+'>'+r.label_code+'</td><td>'+r.label_pkg+'</td><td>'+r.product+'</td><td>'+store+'</td><td>'+s+'</td><td>'+r.remark+'</td></tr>';
};
$('#stk_dev tbody').html(stk_dev);
$('#div_cartons tbody,#div_boxes tbody,#stk_dev tbody,#product').show();
$('#div_boxes [data-toggle="tooltip"]').tooltip('show');
$('#div_boxes [data-toggle="tooltip"]').unbind('mouseenter').unbind('mouseleave');
}
});
}
});
</script>
<div class='x_panel'>
<br/>
<div class='tt'>
<div class='input-group'>
<input id='code' class='datepicker form-control' placeholder="{% trans '请输入标签号码,点击查询按钮或按回车键查询' %}"/>
<span class='input-group-btn'>
<button type="button" class='btn btn-primary btn-qry'>
<span class='glyphicon glyphicon-search' style='padding-right:5px;'></span>{% trans "查询" %}
</button>
</span>
</div>
</div>
<div class='clearfix'></div>
<div id='qry_code'></div>
<div id='lbl_replace'></div>
<div id="product" style='display:none'></div>
<div id="relations" >
<div id='div_stacks' class='table-responsive'>
<table class='table table-bordered table-condensed table-hover'><tbody></tbody></table>
</div>
<div id='div_cartons' class='table-responsive'>
<table class='table table-bordered table-condensed table-hover'><tbody></tbody></table>
</div>
<div id='div_boxes' class='table-responsive'>
<table class='table table-bordered table-condensed table-hover'><tbody></tbody></table>
</div>
</div>
<div id="stk_dev" class="table-responsive">
<table class='table table-bordered table-condensed table-hover'>
<thead></thead>
<tbody></tbody>
</table>
</div>
</div>
<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0;"><link rel="icon" href="/favicon.ico"><link rel="stylesheet" href="https://res.wx.qq.com/open/libs/weui/2.4.0/weui.min.css"><title>炎帝老酒</title><script defer="defer" src="/static/95971/2/js/chunk-vendors.2379bd35.js"></script><script defer="defer" src="/static/95971/2/js/app.5262f218.js"></script><link href="/static/95971/2/css/app.489b2f15.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but yandi doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script><script src="https://res.wx.qq.com/open/libs/weuijs/1.2.1/weui.min.js"></script></body></html>
\ No newline at end of file
{% extends 'obj_form.html' %}
{% load i18n %}
{% load tj_filters %}
<style>
</style>
{% block js %}
{{ block.super }}
//2022-11-30
$('#sel-triggers').select2({ data:{{triggers|safe}}, multiple:true });
//select2 数据回显
var arr_triggers=[];
{% for t in form.instance.triggers %}
arr_triggers.push('{{t.id}}');
{% endfor %}
$('#sel-triggers').val(arr_triggers).trigger("change");
{% ifnotequal user.company.level_id 1%}
{% if not user.perms.company.sys_admin%}
$('#data-content input,#data-content .btn,#data-content select').attr("disabled",true);
{% endif %}
{% endifnotequal %}
{% if form.instance.company %}
$('#co').val('{{form.instance.company.id}}');
$('#id_channelrebate_promotion-__prefix__-company').val('{{form.instance.company}}');
{% else %}
$('#co').val('');
$('#product_label,#agent_label,#div_label,#subdiv_label').attr("disabled","disabled");
{% endif %}
$('#co').change(function(){
$('#id_company').val($(this).val());
var b;
if($('#co').val()==''){
b=true;
}else{
b=false;
}
$('#product_label,#agent_label,#div_label,#subdiv_label').attr("disabled",b)
});
$('.datepicker').datepicker({dateFormat: 'yy-mm-dd'});
//$('.datepicker').datepicker('setDate',new Date());
setDatePickerZh();
$.datetimepicker.setLocale('zh');
$('.datetimepicker').datetimepicker({
i18n:{
zh:{
months:['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月',],
dayOfWeek:["一", "二", "三", "四","五", "六", "日",]
}
},
//timepicker:true,
format:'Y-m-d H:i:s',
});
$('#product_label').autocomplete({
source: function(request, response) {
$.ajax({
url: '/obj/ajax/autocomplete/product/',
dataType: "json",
data: {
term: $("#product_label").val() ,//搜索栏里的内容
company_id: $('#co').val() ,//额外参数
},
success: function(data) {
response(data);
}
});
},
select: function (event, ui) {
$("#product_id").val(ui.item.value);
$("#product_label").val(ui.item.label);
return false;
}
});
$('#agent_label').autocomplete({
source: function(request, response) {
$.ajax({
url: '/obj/ajax/autocomplete/agent/',
dataType: "json",
data: {
term: $("#agent_label").val() ,//搜索栏里的内容
company_id: $('#co').val() ,//额外参数
},
success: function(data) {
response(data);
}
});
},
select: function (event, ui) {
$("#agent_id").val(ui.item.value);
$("#agent_label").val(ui.item.label);
return false;
}
});
$('#div_label').autocomplete({
source: function(request, response) {
$.ajax({
url: '/obj/ajax/autocomplete/saldiv/',
dataType: "json",
data: {
term: $("#div_label").val() ,//搜索栏里的内容
company_id: $('#co').val() ,//额外参数
},
success: function(data) {
response(data);
}
});
},
select: function (event, ui) {
$("#div_id").val(ui.item.value);
$("#div_label").val(ui.item.label);
//2020-10-19
get_subdivs(ui.item.value);
return false;
}
});
$('#div_id').change(function(){
var saldiv_id=$(this).val();
if (saldiv_id==''){
$('#subdiv_id').empty();
$('#subdiv_id').append('<option value="">所有片区</option>')
}else{
get_subdivs($(this).val());
}
});
function get_subdivs(saldiv_id){
var me=$('#subdiv_id');
$.ajax({
url: "/obj/ajax/subsaldiv/"+saldiv_id+"/",
success: function(data) {
$(me).empty();
$.each(data,function(i,d){$(me).append("<option value='"+d[0]+"'>"+d[1]+"</option>")});
},
dataType: 'json'
});
};
$('.add-product').click(function(){
var id=$('#product_id').val();
var label=$('#product_label').val();
if(id==''){
toastr.error("请先选择产品!", "操作错误:",
{timeOut: 800, positionClass: "toast-center-center"}
);
return;
}else{
var e=false;
$("#sel-product option").each(function(){
if($(this).val() == id){
e=true;
return false;
}
});
if(e){
toastr.error(label+"已在列表中!", "操作错误:",
{timeOut: 800, positionClass: "toast-center-center"}
);
return;
}else{
$('#sel-product').append("<option value='"+id+"'>"+label+"</option>");
}
};
});
$('.add-agent').click(function(){
var id=$('#agent_id').val();
var label=$('#agent_label').val();
if(id==''){
toastr.error("请先选择经销商!", "操作错误:",
{timeOut: 800, positionClass: "toast-center-center"}
);
return;
}else{
var e=false;
$("#sel-agent option").each(function(){
if($(this).val() == id){
e=true;
return false;
}
});
if(e){
toastr.error(label+"已在列表中!", "操作错误:",
{timeOut: 800, positionClass: "toast-center-center"}
);
return;
}else{
$('#sel-agent').append("<option value='"+id+"'>"+label+"</option>");
}
};
});
$('.add-div').click(function(){
var id=$('#div_id').val();
{% ifequal user.id 1 %}
var label=$('#div_label').val();
{% else %}
var label=$('#div_id').find("option:selected").text();
{% endifequal %}
if(id==''){
toastr.error("请先选择战区!", "操作错误:",
{timeOut: 800, positionClass: "toast-center-center"}
);
return;
}else{
var e=false;
$("#sel-div option").each(function(){
if($(this).val() == id){
e=true;
return false;
}
});
if(e){
toastr.error(label+"已在列表中!", "操作错误:",
{timeOut: 800, positionClass: "toast-center-center"}
);
return;
}else{
$('#sel-div').append("<option value='"+id+"'>"+label+"</option>");
}
};
});
$('.add-subdiv').click(function(){
var id=$('#subdiv_id').val();
{% ifequal user.id 1 %}
var label=$('#subdiv_label').val();
{% else %}
var label=$('#subdiv_id').find("option:selected").text();
{% endifequal %}
if(id==''){
toastr.error("请先选择分区!", "操作错误:",
{timeOut: 800, positionClass: "toast-center-center"}
);
return;
}else{
var e=false;
$("#sel-subdiv option").each(function(){
if($(this).val() == id){
e=true;
return false;
}
});
if(e){
toastr.error(label+"已在列表中!", "操作错误:",
{timeOut: 800, positionClass: "toast-center-center"}
);
return;
}else{
$('#sel-subdiv').append("<option value='"+id+"'>"+label+"</option>");
}
};
});
$('.add-rebate').click(function(){
var prefix='#id_channelrebate_promotion-';
var count = $('#formset').find('.rebate').length;
var tmplMarkup = $('#empty-form').html();
var compiledTmpl = tmplMarkup.replace(/__prefix__/g, count);
$('#formset').append(compiledTmpl);
$(prefix+'TOTAL_FORMS').attr('value', (count+1));
});
$('#obj_form').on('click','.add-pval',function(){
var div=$(this).closest('.rebate');
var sel=$(div).find('.sel-plv');
var id=sel.val();
var label=sel.find("option:selected").text();
var e=false;
var val=$(div).find('.pval').val();
if($.isEmpty(id)){
toastr.error("营销层级不能为空", "操作错误:",
{timeOut: 800, positionClass: "toast-center-center"}
);
return;
};
if(val==''){
toastr.error("未输入层级返利金额", "操作错误:",
{timeOut: 800, positionClass: "toast-center-center"}
);
return;
};
$(div).find(".sel-plvs option").each(function(){
if($(this).val() == id){
e=true;
return false;
}
});
if(e){
toastr.error(label+"已在列表中!", "操作错误:",
{timeOut: 800, positionClass: "toast-center-center"}
);
return;
}else{
$(div).find('.sel-plvs').append("<option value='"+id+"' o-vl='"+val+"' o-nm='"+label+"' o-rc='"+
$(sel).find("option:selected").attr("o-rec")+"'>"+label+":"+val+"</option>");
};
//2020-11-03
$('#formset .select2_multiple').on('dblclick','option',function(){
$(this).remove();
});
});
$('#obj_form').on('change','.sel-lv',function(){
var me=$(this);
$.ajax({
url: '/company/ajax/parent/level/'+$(this).val()+'/',
dataType: "json",
success: function(data) {
var div=$(me).closest('.rebate');
var html='';
var lv,b;
for(i in data.parents){
lv=data.parents[i];
html=html+"<option value='"+lv.id+"' o-rec='"+lv.rec+"'>"+lv.name+"</option>";
};
$(div).find('.sel-plv').html(html);
if(html==''){
b=true;
}else{
b=false
}
$(div).find('.add-pval').attr('disabled',b);
}
});
});
$('.btn-save').click(function(){
if($.isEmpty($('#id_company').val()) || $.isEmpty($('#id_tm_start').val()) || $.isEmpty($('#id_tm_end').val()) || $.isEmpty($('#id_name').val())){
toastr.error("公司名称,活动名称,开始时间,结束时间 不能为空", "操作错误:",
{timeOut: 1800, positionClass: "toast-center-center"}
);
return;
};
//2022-11-30
var ts=$('#sel-triggers').select2('data');
var a=[];
for(var k in ts ){
a.push({'id':ts[k].id, 'text':ts[k].text});
};
$('#id_triggers').val(JSON.stringify(a));
//2021-06-23
if($('#id_scan_type').val()==2){
var a=[];
var sa=[];
var customer_rebates='';
var lv_id;
$('#customer-rebates table tbody tr').each(function(){
if($.isEmpty($(this).find('.lv_val').val())){
$(this).find(".lv_del").attr("checked",true);
}else{
if($(this).find('.lv_del').attr('checked')!=true){
lv_id=$(this).find('.lv_lv').val();
if(a.indexOf(lv_id)==-1){
sa.push('{'+
'"id":'+lv_id+','+
'"name":"'+$(this).find('.lv_lv').find("option:selected").text()+'",'+
'"value":'+$(this).find('.lv_val').val()+
'}')
};
}
}
});
$('#id_rebates').val('['+sa.join(',')+']');
}else{
var a=[];
var s='';
$("#formset .rebate").each(function (){
a=[];
var me=$(this);
$(me).find('.sel-plvs option').each(function(){
s=$(this).val()+'|'+$(this).attr('o-rc')+'|'+$(this).attr('o-vl')+'|'+$(this).attr('o-nm');
a.push(s);
});
if(a.length>0){
$(me).find('.pvals').val(a.join('&'));
};
});
a=[];
$("#sel-product option").each(function (){
a.push($(this).val());
});
if(a.length>0){
$('#id_products').val(a.join(','));
}else{
$('#id_products').val('');
};
a=[];
$("#sel-agent option").each(function (){
a.push($(this).val());
});
if(a.length>0){
$('#id_agents').val(a.join(','));
}else{
$('#id_agents').val('');
};
a=[];
$("#sel-div option").each(function (){
a.push($(this).val());
});
if(a.length>0){
$('#id_div_ids').val(a.join(','));
}else{
$('#id_div_ids').val('');
};
a=[];
$("#sel-subdiv option").each(function (){
a.push($(this).val());
});
if(a.length>0){
$('#id_subdiv_ids').val(a.join(','));
}else{
$('#id_subdiv_ids').val('');
};
};
$.SubmitForm('#obj_form form','{{request.path}}');
});
{% for f in formset %}
var prefix='#id_channelrebate_promotion-';
var count = $('#formset').find('.rebate').length;
var tmplMarkup = $('#empty-form').html();
var compiledTmpl = tmplMarkup.replace(/__prefix__/g, count);
$('#formset').append(compiledTmpl);
$(prefix+count+'-id').val('{{f.instance.id}}');
$(prefix+count+'-level').val('{{f.instance.level.id}}');
$(prefix+count+'-vtype_id').val('{{f.instance.vtype_id}}');
$(prefix+count+'-val').val('{{f.instance.val}}');
$(prefix+count+'-distance').val('{{f.instance.distance}}');
if("{{f.instance.pvals|default_if_none:''}}".length>0){
var html='';
var aa='{{f.instance.pvals}}'.split('&');
for(i=0;i<aa.length;i++){
a=aa[0].split('|');
html=html+"<option value='"+a[0]+"' o-rc='"+a[1]+"' o-vl='"+a[2]+"' o-nm='"+a[3]+"'>"+a[3]+':'+a[2]+"</option>";
};
$(prefix+count).find('.sel-plvs').html(html);
};
$(prefix+'TOTAL_FORMS').attr('value', (count+1));
{% endfor %}
//2020-11-06
$('#data-content [data-toggle="tooltip"]').tooltip();
$('#id_scan_type').change(function(){
if($(this).val()==1){
$('#formset').show();
$('#formset-add').show();
$('#div-package').show();
$('#customer-rebates').hide();
$('#customer-rebate-add').hide();
$('#div-terminal-qualified').hide();
$('#div-end-level').hide();
}else{
$('#formset').hide();
$('#div-package').hide();
$('#formset-add').hide();
$('#customer-rebates').show();
$('#customer-rebate-add').show();
$('#div-terminal-qualified').show();
$('#div-end-level').show();
};
});
$('.customer-rebate-add').click(function(){
var html="<tr><td><input type='checkbox' class='form-control lv_del' /></td>"+
"<td><select class='lv_lv form-control'>"+
"<option value='2'>一级经销商</option>"+
"<option value='4'>二级经销商</option>"+
"<option value='5'>三级经销商</option>"+
"<option value='6'>四级经销商</option>"+
"<option value='7'>五级经销商</option>"+
"</select></td>"+
"<td><input class='form-control lv_val' /></td>"+
"</tr>";
$("#tb-customer-rebates").append(html);
});
{% endblock %}
{% block subtitle-1 %}
{% trans "营销活动" %}
{% endblock %}
{% block subtitle-2 %}
{% trans "返利方案" %}
{% endblock %}
<span style="margin-left:10px; color:green; ">
{% block subtitle-3 %}
{% if form.instance.id %}
{% trans "修改" %}
{% else %}
{% trans "新建" %}
{% endif %}
{% endblock %}
</span>
{% block form_content %}
{{ block.super }}
<div class="form-group ">
<!--
<label class="col-sm-1 control-label ">{% get_verbose_field_name form.instance 'company' %} </label>
<div class="col-sm-2">
<select id='co'>
{% for co in companys %}
<option value='{{co.0}}'>{{co.1}}</option>
{% endfor %}
</select>
</div>
-->
<label class="col-sm-1 control-label ">{% trans '扫码类型' %} </label>
<div class="col-sm-2">
{{form.scan_type}}
</div>
<label class="col-sm-1 control-label ">{% get_verbose_field_name form.instance 'name' %} </label>
<div class="col-sm-2">{{ form.name }}</div>
<label class="col-sm-1 control-label ">{% get_verbose_field_name form.instance 'awardcategory' %} </label>
<div class="col-sm-2">{{ form.awardcategory }}</div>
<label class="col-sm-1 control-label ">{% get_verbose_field_name form.instance 'priority' %} </label>
<div class="col-sm-2">{{ form.priority }}</div>
</div>
<div class="form-group " style="margin-bottom:0px;padding-bottom:0px;">
<label class="col-sm-1 control-label">{% get_verbose_field_name form.instance 'products' %}</label>
<div class='col-sm-2'>
<div class="input-group">
<input type="text" class="form-control" id="product_label" placeholder="所有产品">
<input type="hidden" id="product_id" />
<span class="input-group-btn"><button type="button" class="btn btn-success add-product">
<span class='glyphicon glyphicon-arrow-down'></span></button></span>
</div>
</div>
<label class="col-sm-1 control-label">{% get_verbose_field_name form.instance 'agents' %}</label>
<div class='col-sm-2'>
<div class="input-group">
<input class=' form-control' id="agent_label" placeholder='所有经销商'/>
<input type="hidden" id="agent_id" />
<span class="input-group-btn"><button type="button" class="btn btn-success add-agent">
<span class='glyphicon glyphicon-arrow-down'></span></button></span>
</div>
</div>
<label class="col-sm-1 control-label ">{% get_verbose_field_name form.instance 'div_ids' %} </label>
<div class='col-sm-2'>
<div class="input-group">
{% ifequal user.id 1 %}
<input type="text" class=' form-control' id="div_label" placeholder='所有战区'/>
<input type="hidden" id="div_id" />
{% else %}
<select id='div_id'>
<option value=''>所有战区</option>
{% for o in saldivision %}
<option value='{{o.0}}'>{{o.1}}</option>
{% endfor %}
</select>
{% endifequal %}
<span class="input-group-btn"><button type="button" class="btn btn-success add-div">
<span class='glyphicon glyphicon-arrow-down'></span></button></span>
</div>
</div>
<label class="col-sm-1 control-label ">{% get_verbose_field_name form.instance 'subdiv_ids' %} </label>
<div class='col-sm-2'>
<div class="input-group">
<!--
<input type="text" class=' form-control' id="subdiv_label" placeholder='所有分区'/>
<input type="hidden" id="subdiv_id" />
-->
<select id="subdiv_id"><option>所有分区</option></select>
<span class="input-group-btn"><button type="button" class="btn btn-success add-subdiv">
<span class='glyphicon glyphicon-arrow-down'></span></button></span>
</div>
</div>
</div>
<div class="form-group" style='padding-top:0px;margin-top:0px;'>
<div class='col-sm-2 col-md-offset-1' >
<select class="select2_multiple form-control" id="sel-product" multiple="multiple">
{% for o in products %}
<option value='{{o.0}}'>{{o.1}}</option>
{% endfor %}
</select>
</div>
<div class='col-sm-2 col-md-offset-1'>
<select class="select2_multiple form-control" id='sel-agent' multiple="multiple">
{% for o in agents %}
<option value='{{o.0}}'>{{o.1}}</option>
{% endfor %}
</select>
</div>
<div class='col-sm-2 col-md-offset-1'>
<select class="select2_multiple form-control" id="sel-div" multiple="multiple">
{% for o in div_ids %}
<option value='{{o.0}}'>{{o.1}}</option>
{% endfor %}
</select>
</div>
<div class='col-sm-2 col-md-offset-1'>
<select class="select2_multiple form-control" id="sel-subdiv" multiple="multiple">
{% for o in subdiv_ids %}
<option value='{{o.0}}'>{{o.1}}</option>
{% endfor %}
</select>
</div>
</div>
<div class="form-group ">
<label class="col-sm-1 control-label">
<span title="经销商扫码" data-placement="top" data-toggle="tooltip">活动开始时间</span>
</label>
<div class='col-sm-2'> {{ form.tm_start }}</div>
<label class="col-sm-1 control-label">
<span title="经销商扫码" data-placement="top" data-toggle="tooltip">活动结束时间</span>
</label>
<div class='col-sm-2'> {{ form.tm_end }}</div>
<label class="col-sm-1 control-label">
<span title="公司发货" data-placement="top" data-toggle="tooltip">最早发货日期</span>
</label>
<div class='col-sm-2'> {{ form.dt_delivery }}</div>
<label class="col-sm-1 control-label">{% get_verbose_field_name form.instance 'status' %}</label>
<div class='col-sm-2'> {{ form.status }}</div>
</div>
<div class="form-group ">
<label class="col-sm-1 control-label">
<span title="1积分=多少元" data-placement="top" data-toggle="tooltip">积分兑换比率</span>
</label>
<div class='col-sm-2'> {{ form.point_ratio }}</div>
<label class="col-sm-1 control-label">
<span title="系统触发事件" data-placement="top" data-toggle="tooltip">系统触发事件</span>
</label>
<div class='col-sm-8'>
<input type='hidden' id='id_triggers' name='triggers'/>
<select class="form-control js-example-basic-multiple" id='sel-triggers' multiple="multiple"></select>
</div>
</div>
<div class="form-group ">
<label class="col-sm-1 control-label">{% get_verbose_field_name form.instance 'digest' %}</label>
<div class='col-sm-11'> {{ form.digest }}</div>
</div>
{% endblock %}
{% block extra %}
<div class="form-group " style="padding:15px;">
<div id='div-package' {% ifequal form.instance.scan_type 2 %} style="display:none;"{% endifequal%} >
<label class="col-sm-1 control-label">{% get_verbose_field_name form.instance 'package_unit' %}</label>
<div class='col-sm-2'> {{ form.package_unit }}</div>
</div>
<div id='div-end-level' {% ifequal form.instance.scan_type 1 %} style="display:none;"{% endifequal%} >
<label class='col-sm-1 control-label'>渠道终端层级</label>
<div class='col-sm-1'>
{{form.end_level}}
</div>
</div>
<div id='div-terminal-qualified' {% ifequal form.instance.scan_type 1%} style="display:none;"{% endifequal%} >
<label class='col-sm-1 control-label'>必经终端店扫码</label>
<div class='col-sm-1'>
{{form.terminal_qualified}}
</div>
</div>
<span id='formset-add' {% ifequal form.instance.scan_type 2 %} style="display:none;" {% endifequal %}>
<a type="button" class='btn btn-success add-rebate'>
<span class='glyphicon glyphicon-plus' style='padding-right:5px;'></span>{% trans '添加扫码场景' %}
</a></span>
<span id='customer-rebate-add' {% ifequal form.instance.scan_type 1 %} style="display:none;" {% endifequal %}>
<a type="button" class='btn btn-success customer-rebate-add'>
<span class='glyphicon glyphicon-plus' style='padding-right:5px;'></span>{% trans '添加层级奖励' %}
</a></span>
<a class="btn btn-primary btn-save pull-right" type="button" >
{% trans '保存活动设置' %}
</a>
</div>
{% endblock %}
{% block fmset %}
<div id="empty-form" style="display:none;">
<div id="id_channelrebate_promotion-__prefix__" class="row x_panel rebate" style="margin-left:2px;">
<div class="col-sm-6 ">
<div class="form-group ">
<label class="col-sm-2 control-label">{% trans '扫码层级' %}</label>
<div class='col-sm-10'> {{ formset.empty_form.level }}</div>
</div>
<div class="form-group ">
{{formset.empty_form.id}}{{formset.empty_form.promotion}}{{formset.empty_form.pvals}}
<label class="col-sm-2 control-label">{% trans '扫码类型' %}</label>
<div class='col-sm-10'> {{ formset.empty_form.vtype_id }}</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label">{% trans '返利金额' %}</label>
<div class='col-sm-2'> {{ formset.empty_form.val }}</div>
<label class="col-sm-2 control-label">{% trans '距离限定' %}</label>
<div class='col-sm-2'> {{ formset.empty_form.distance }}</div>
<div class="col-sm-4">
<label class="control-label col-md-offset-2">{% trans '勾选删除当前扫码场景' %}</label>
<div class="pull-right"> {{ formset.empty_form.DELETE }}</div>
</div>
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<label class="col-sm-2 control-label">{% trans '经销商层级返利' %}</label>
<div class="col-sm-4"><select class="sel-plv"></select></div>
<div class="col-sm-5"><input placeholder="返利金额(点值)" class="pval"></div>
<span class="input-group-btn"><button type="button" class="btn btn-success add-pval pull-right">
<span class='glyphicon glyphicon-arrow-down'></span></button></span>
</div>
<div class="form-group">
<select class="select2_multiple form-control sel-plvs" multiple="multiple"></select>
</div>
</div>
</div>
</div>
<div id="formset">
{{ formset.management_form }}
</div>
<div id='customer-rebates' class='x_panel'
style="margin-top:-20px;{% ifequal form.instance.scan_type 1 %} display:none;{% endifequal %}" >
<table id='tb-customer-rebates' class="table table-striped table-bordered dt-responsive" width="100%">
<thead><tr>
<th>删除</th><th>经销商层级</th><th>返利金额(点值)</th>
</tr></thead>
<tbody>
{% for r in form.instance.rebates %}<tr>
<td><input type="checkbox" class="form-control lv_del" /></td>
<td><select class='lv_lv form-control'>
<option value='2' {% ifequal r.id 2%}selected="selected"{% endifequal %}>一级经销商</option>
<option value='4' {% ifequal r.id 4%}selected="selected"{% endifequal %}>二级经销商</option>
<option value='5' {% ifequal r.id 5%}selected="selected"{% endifequal %}>三级经销商</option>
<option value='6' {% ifequal r.id 5%}selected="selected"{% endifequal %}>四级经销商</option>
<option value='7' {% ifequal r.id 5%}selected="selected"{% endifequal %}>五级经销商</option>
</select></td>
<td><input class='form-control lv_val' value='{{r.value}}' /></td>
</tr>{% endfor %}
</tbody>
</table>
</div>
<script type="text/javascript">
$(document).ready(function(){
$('.select2_multiple').on('dblclick','option',function(){
$(this).remove();
});
});
</script>
{% endblock %}
-----BEGIN CERTIFICATE-----
MIID8zCCAtugAwIBAgIUXPQ9KsmJ1SqGJBRoMgr71ImN/MUwDQYJKoZIhvcNAQEL
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
Q0EwHhcNMjIwODE3MDI1NDUzWhcNMjcwODE2MDI1NDUzWjCBhDETMBEGA1UEAwwK
MTYyNDcwMDM5NDEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMTAwLgYDVQQL
DCflsbHopb/ngo7luJ3npZ7lhpzms4nphZLkuJrmnInpmZDlhazlj7gxCzAJBgNV
BAYMAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEBBQADggEP
ADCCAQoCggEBAN5RaNGp2+ohTr0S3JSGL82NZQfqQS7LUlhFgkxU87LNh5ZFSa2F
mf12XqK97qvxuU9B+Os61HtH3htXvoVO0UEOIRT1jlSQaeKg0LFyK/ouCWF+D+Jh
XO+esSqEGderQa/qeTExkKJKuCOE3b9AU8zkcO2fAU9c47+S75aOXw/Kl2J2j4Gs
cqlPRze33TpQQy/+UOzhLRv5EpfTugE6qCndGZ/86AKP0VFM60TZFZfM8QGzFIXd
9VsBjWUkWdnM45E3pbrsso+qrMwv51EnmljjGoQGV6MWODBLytOypLS+0pcUuCDq
4qlSS0DUKVDDrSBTYXr64mgXa41eAaxLQDMCAwEAAaOBgTB/MAkGA1UdEwQCMAAw
CwYDVR0PBAQDAgTwMGUGA1UdHwReMFwwWqBYoFaGVGh0dHA6Ly9ldmNhLml0cnVz
LmNvbS5jbi9wdWJsaWMvaXRydXNjcmw/Q0E9MUJENDIyMEU1MERCQzA0QjA2QUQz
OTc1NDk4NDZDMDFDM0U4RUJEMjANBgkqhkiG9w0BAQsFAAOCAQEAe/yOKA34QWJ9
dXnrMb61PyZjtJo7hr86hIqDgJXnDaAf+sqebCnx4OdTG8gyF8Pk99xJ7CKh7DWJ
kCbe0eb5OLomZct/QNIYrdBVt2zkAAvr7K7VyxJSpNMyxSpcRYnYyA9IQ9uQvP6n
ui0kDmRCdzldWORIqkJnAi0JEMggeS7R5FuLnySb1w0cJCQGG4u8LB34Ls04bBJs
qrlhSOaNWOvcpGcH3QzYazQvlzXk3DATh8EMDPef72UL1Vh3VxAv8ofMVLI01fRV
D807ShWGmuEf3eFij50BVlOLdjn+1ARniosGYCweqWx44YPJE2n8ZdHqIe8vQv8e
JxEGwaBy4A==
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDeUWjRqdvqIU69
EtyUhi/NjWUH6kEuy1JYRYJMVPOyzYeWRUmthZn9dl6ive6r8blPQfjrOtR7R94b
V76FTtFBDiEU9Y5UkGnioNCxciv6Lglhfg/iYVzvnrEqhBnXq0Gv6nkxMZCiSrgj
hN2/QFPM5HDtnwFPXOO/ku+Wjl8Pypdido+BrHKpT0c3t906UEMv/lDs4S0b+RKX
07oBOqgp3Rmf/OgCj9FRTOtE2RWXzPEBsxSF3fVbAY1lJFnZzOORN6W67LKPqqzM
L+dRJ5pY4xqEBlejFjgwS8rTsqS0vtKXFLgg6uKpUktA1ClQw60gU2F6+uJoF2uN
XgGsS0AzAgMBAAECggEBANBFTAE/M7p/QZh3lxW9MANNNxzXJAGGkLoJRCvmWfdj
/GWWu5NH2h9NSRMFBBco+QV7NIqKLozfov/Sj7WrRPXBGtTbxl8Ke2fIaDoUT4as
ojUnOBJITBxfenHuF5en5H29F5QybuDbRu5fhq2owdjtGa5Ci6Ohzeqm6LUO45eR
367PApz4ozNlcZBP/fZqABhaQmQUAHrmrki318tV8iHsDOxc07PTZj6FzP/9ON2F
hxJhVcHNi1OfxlsQh3yqz5eF8R+PEGFXgwhekSo1/j1hILwMFM1ITxdq+HlyPcEz
sCEKvPoIgbTiIn38NfZwZZoma75HdRw+0tPZ7sDrlKECgYEA/dVzT0/q8xvVPD5X
2/Z6r9W9ySzM9KYSrHqLkYZ64Bi0h+f1a9RXatksYXwmhhYgFzTZUs3VMZU5Izdy
w91OxwLI/27gam+Veu8Mgo25RQRT90sBo76UIETx8It7uKA38Jc2z4e8aJ/3o4qy
0S85GkMjCXMTzgmLkXQMoE15KI8CgYEA4DcbS56JcNNGJtY1w+TzJypO1D7PTV0J
Iq9te5Nkk6WOPzD97Y8cMCfaTnvqpa163M1/13zx4IFFWJIahF5i8OYSagfuhwCC
uL6Gvd+89FSDAOBmyTxMvKv69+9W7ojFUm1Mx5JNxFE5ESczMMqz3qheGiI1ScJA
Vca9KdGX2B0CgYEA+yFeBv7zXXiQ/BxWAmqWMTbPoKRxVi6kVP6c7OpW0TXADqHg
PsGDh1O7w+r3ljt3nl4MEQ9RuM+BCyWFpuBiWySXRZgl8UfaZRjykIu02+KPTB9q
TN11YYO0th7Z1ey1y5Nfh+0r63swnx3PEoSdAy2fEW9IDdWFvu9IuqRLlWMCgYAh
EN9son/AbNf+qD6bmislzn57nJuz3BGZ1Oc/fzgo8hRtS0tXenB8xZPTWUD8l/3z
jDbbT6jYJBhW/Iz+knDi9/slOfA6Zp/goPB8Ff/mxIPhYDaoXMUwWeiUIe7fFLqM
8mONVw0y84uH9RD+lBY8svXVws+7BfO48qs4/Jj5HQKBgQCwfyzAxCfKCZ9P07Bi
BGwOQN9opsdh48IG+00Zjv96DiDt9iNuAbux31mdRuXRP/zFFxe/Mf6DwORQ4bgH
H5jQIU/ME6jCQCgqfim2RbcEefbkMCoBSIa2auv6C5JtJjzY0p4YtFSzrq4KYeC0
x3TVUVYv+3XzF6YAy1ofFZvDWA==
-----END PRIVATE KEY-----
欢迎使用微信支付!
附件中的三份文件(证书pkcs12格式、证书pem格式、证书密钥pem格式),为接口中强制要求时需携带的证书文件。
证书属于敏感信息,请妥善保管不要泄露和被他人复制。
不同开发语言下的证书格式不同,以下为说明指引:
证书pkcs12格式(apiclient_cert.p12)
包含了私钥信息的证书文件,为p12(pfx)格式,由微信支付签发给您用来标识和界定您的身份
部分安全性要求较高的API需要使用该证书来确认您的调用身份
windows上可以直接双击导入系统,导入过程中会提示输入证书密码,证书密码默认为您的商户号(如:1900006031)
证书pem格式(apiclient_cert.pem)
从apiclient_cert.p12中导出证书部分的文件,为pem格式,请妥善保管不要泄漏和被他人复制
部分开发语言和环境,不能直接使用p12文件,而需要使用pem,所以为了方便您使用,已为您直接提供
您也可以使用openssl命令来自己导出:openssl pkcs12 -clcerts -nokeys -in apiclient_cert.p12 -out apiclient_cert.pem
证书密钥pem格式(apiclient_key.pem)
从apiclient_cert.p12中导出密钥部分的文件,为pem格式
部分开发语言和环境,不能直接使用p12文件,而需要使用pem,所以为了方便您使用,已为您直接提供
您也可以使用openssl命令来自己导出:openssl pkcs12 -nocerts -in apiclient_cert.p12 -out apiclient_key.pem
备注说明:
由于绝大部分操作系统已内置了微信支付服务器证书的根CA证书, 2018年3月6日后, 不再提供CA证书文件(rootca.pem)下载
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论