平台最近改版,库存修改极其难用,做一个趁手工具,当作练习。
Strawberry Perl 5.24
附加模块 IUP | | | | | | | | | | | | | use utf8; | | use Modern::Perl; | | use IUP ':all'; | | use Mojo::UserAgent; | | use Web; | | use Login; | | use Load; | | use List::Util qw/sum/; | | use Data::Dumper; | | $Data::Dumper::Indent = 1; | | STDOUT->autoflush(1); | | | | my $log = 0; | | my $ua = Mojo::UserAgent->new(); | | $ua->request_timeout(10); | | | | my $data; | | my $list; | | my $count; | | my $PID; | | | | my $prompt = IUP::Text->new( | | FONT => "Simsun, 10", | | MULTILINE => "YES", | | BORDER => "YES", | | SCROLLBAR => "YES", | | EXPAND=>"HORIZONTAL", | | | | BGCOLOR => "#000000", | | FGCOLOR => "#FFFFFF", | | SIZE => "0x60", | | ); | | | | my $bt_login = IUP::Button->new( | | TITLE => "Login", | | FONT => "Arial", FONTSIZE => 12, | | BORDER => "YES", | | ACTION => sub { | | $prompt->APPEND("Logging ... "); | | Login::init($ua); | | $prompt->APPENDNEWLINE("NO"); | | $prompt->APPEND("Done"); | | $prompt->APPENDNEWLINE("YES"); | | } | | ); | | | | my $bt_catch = IUP::Button->new( | | TITLE => "Catch", | | FONT => "Arial", FONTSIZE => 12, | | BORDER => "YES", | | ACTION => \&catch, | | ); | | | | my $bt_clean = IUP::Button->new( | | TITLE => "Clean", | | FONT => "Arial", FONTSIZE => 12, | | BORDER => "YES", | | ACTION => \&clean, | | ); | | | | | | my $bt_update = IUP::Button->new( | | TITLE => "Update", | | FONT => "Arial", FONTSIZE => 12, | | BORDER => "YES", | | PADDING => "8x0", | | ACTION => \&update | | ); | | | | my $label_id = IUP::Label->new( MARGIN => 5, TITLE => "ID:", FONT => "Arial", FONTSIZE => 12 ); | | my $text_id = IUP::Text->new( MARGIN => 5, SIZE => "80x", FONT => "Arial", FONTSIZE => 12, BORDER =>"NO" ); | | | | my $box_top = IUP::Hbox->new( | | MARGIN => 0, | | GAP => 8, | | ALIGNMENT => "ACENTER", | | child => [ | | $bt_login, $label_id, $text_id, $bt_catch, $bt_update, $bt_clean | | ], | | ); | | | | my $mat = IUP::Matrix->new( | | NUMCOL => 5, | | NUMLIN => 30, | | HEIGHTDEF => 12, | | PADDING => "0x0", | | MARGIN => "0x0", | | FONTSIZE => 10, | | | | | | EXPAND => "YES", | | BORDER => "NO", | | ); | | | | my $max_width = 260; | | my @title = qw/ID Country Model Count Update/; | | my @ratio = ( 0, 0.5, 1, 3, 1, 1 ); | | my @width = map { int($max_width * ($_/sum(@ratio)) ) } @ratio; | | print join(",", @width); | | | | for my $id ( 0 .. $#width ) { $mat->SetAttribute( "WIDTH".$id, $width[$id] ); } | | | | | | for my $id ( 0 .. $#title ) { | | $mat->MatCell( 0, $id+1, $title[$id] ); | | } | | | | my $main = IUP::Vbox->new( | | TABTITLE => "订单详情", | | name => "vbox_major", | | ALIGNMENT => "ALEFT", | | GAP => 8, | | child => [ | | $box_top, | | $mat, | | $prompt, | | ] | | ); | | | | my $dlg = IUP::Dialog->new( | | name => "major", | | child => $main, | | MARGIN => "10x10", | | TITLE => "Stock Manager V0.5", | | SIZE => "360x280", | | SHOW_CB => \&show_cb, | | | | ); | | | | $dlg->Show(); | | | | | | $dlg->TOPMOST("YES"); | | | | IUP->MainLoop; | | | | sub show_cb | | { | | if ( $log == 0 ) { | | $log++; | | $prompt->APPEND("Logging ... "); | | Login::init($ua); | | $prompt->APPENDNEWLINE("NO"); | | $prompt->APPEND("Done"); | | $prompt->APPENDNEWLINE("YES"); | | } | | } | | | | sub catch | | { | | my ($self) = @_; | | my $clip = IUP::Clipboard->new(); | | my $buff = $clip->TEXT(); | | if ($buff=~/\d{11,12}/) { | | $PID = $buff; | | } else { | | $prompt->APPEND("剪切板没有ID信息"); | | } | | $text_id->VALUE($PID); | | $clip->Destroy(); | | | | $data = Web::get_data($ua, $PID); | | $list = Load::data_to_list( $data ); | | for my $r ( 1 .. $#$list ) { | | for my $c ( 0 .. 3 ) { | | $mat->MatAttribute("BGCOLOR", $r, $c+1, "#F0F0D0") if ( $list->[$r][$c] eq "CN" ); | | $mat->MatAttribute("BGCOLOR", $r, $c+1, "#D0F0F0") if ( $list->[$r][$c] eq "RU" ); | | $mat->MatCell( $r, $c+1, $list->[$r][$c] ); | | } | | } | | $mat->ACTIVE("YES"); | | | | } | | | | sub update | | { | | my ($self) = @_; | | $prompt->APPEND("Update ... "); | | for my $row ( 1 .. $#$list ) | | { | | next unless $mat->MatCell($row, 5); | | next if $mat->MatCell($row, 5) eq ""; | | next if ($mat->MatCell($row, 5) =~ /[^\d]/ ); | | $list->[$row][4]->{totalStock} = $mat->MatCell($row, 5); | | } | | my $result = Web::post_data( $ua, $PID, $data ); | | | | | | | | for my $r ( 1 .. $#$list ) { $mat->MatCell( $r, 5, ""); } | | $data = Web::get_data($ua, $PID); | | $list = Load::data_to_list( $data ); | | for my $r ( 1 .. $#$list ) { | | for my $c ( 0 .. 3 ) { | | $mat->MatAttribute("BGCOLOR", $r, $c+1, "#F0F0D0") if ( $list->[$r][$c] eq "CN" ); | | $mat->MatAttribute("BGCOLOR", $r, $c+1, "#D0F0F0") if ( $list->[$r][$c] eq "RU" ); | | $mat->MatCell( $r, $c+1, $list->[$r][$c] ); | | } | | } | | $mat->ACTIVE("YES"); | | | | $prompt->APPENDNEWLINE("NO"); | | $prompt->APPEND("Done"); | | $prompt->APPEND( $result ); | | $prompt->APPENDNEWLINE("YES"); | | } | | | | sub clean { | | my ($self) = @_; | | $prompt->VALUE(""); | | for my $r ( 1 .. $#$list ) { | | for my $c ( 0 .. 4 ) { | | $mat->MatAttribute("BGCOLOR", $r, $c+1, "#FFFFFF"); | | $mat->MatCell( $r, $c+1, undef); | | } | | } | | $data = undef; | | $list = undef; | | $PID = undef; | | $mat->ACTIVE("YES"); | | }; | | | | sub in_range { | | my ($v, $a, $b) = @_; | | if ( $v >= $a and $v <= $b ) { return 1 } else { return 0 } | | }COPY |
|