Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
warehouse
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
胡懿
warehouse
Commits
c814b600
Commit
c814b600
authored
Feb 22, 2023
by
yyq1988
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
对接入库单表单,优化货品表单
parent
0ed291ec
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
1201 additions
and
67 deletions
+1201
-67
big.js
src/main/webapp/static/common/js/big.js
+1032
-0
jeeplus.js
src/main/webapp/static/common/js/jeeplus.js
+6
-12
goodsDetail.jsp
...in/webapp/webpage/modules/warehouse/goods/goodsDetail.jsp
+61
-7
goodsForm.jsp
...main/webapp/webpage/modules/warehouse/goods/goodsForm.jsp
+8
-1
goodsList.js
src/main/webapp/webpage/modules/warehouse/goods/goodsList.js
+4
-0
qrCodeList.js
...ain/webapp/webpage/modules/warehouse/qrcode/qrCodeList.js
+0
-22
storageDetail.jsp
...ebapp/webpage/modules/warehouse/storage/storageDetail.jsp
+90
-25
No files found.
src/main/webapp/static/common/js/big.js
0 → 100644
View file @
c814b600
/*
* big.js v6.1.1
* A small, fast, easy-to-use library for arbitrary-precision decimal arithmetic.
* Copyright (c) 2021 Michael Mclaughlin
* https://github.com/MikeMcl/big.js/LICENCE.md
*/
;(
function
(
GLOBAL
)
{
'use strict'
;
var
Big
,
/************************************** EDITABLE DEFAULTS *****************************************/
// The default values below must be integers within the stated ranges.
/*
* The maximum number of decimal places (DP) of the results of operations involving division:
* div and sqrt, and pow with negative exponents.
*/
DP
=
20
,
// 0 to MAX_DP
/*
* The rounding mode (RM) used when rounding to the above decimal places.
*
* 0 Towards zero (i.e. truncate, no rounding). (ROUND_DOWN)
* 1 To nearest neighbour. If equidistant, round up. (ROUND_HALF_UP)
* 2 To nearest neighbour. If equidistant, to even. (ROUND_HALF_EVEN)
* 3 Away from zero. (ROUND_UP)
*/
RM
=
1
,
// 0, 1, 2 or 3
// The maximum value of DP and Big.DP.
MAX_DP
=
1
E6
,
// 0 to 1000000
// The maximum magnitude of the exponent argument to the pow method.
MAX_POWER
=
1
E6
,
// 1 to 1000000
/*
* The negative exponent (NE) at and beneath which toString returns exponential notation.
* (JavaScript numbers: -7)
* -1000000 is the minimum recommended exponent value of a Big.
*/
NE
=
-
7
,
// 0 to -1000000
/*
* The positive exponent (PE) at and above which toString returns exponential notation.
* (JavaScript numbers: 21)
* 1000000 is the maximum recommended exponent value of a Big, but this limit is not enforced.
*/
PE
=
21
,
// 0 to 1000000
/*
* When true, an error will be thrown if a primitive number is passed to the Big constructor,
* or if valueOf is called, or if toNumber is called on a Big which cannot be converted to a
* primitive number without a loss of precision.
*/
STRICT
=
false
,
// true or false
/**************************************************************************************************/
// Error messages.
NAME
=
'[big.js] '
,
INVALID
=
NAME
+
'Invalid '
,
INVALID_DP
=
INVALID
+
'decimal places'
,
INVALID_RM
=
INVALID
+
'rounding mode'
,
DIV_BY_ZERO
=
NAME
+
'Division by zero'
,
// The shared prototype object.
P
=
{},
UNDEFINED
=
void
0
,
NUMERIC
=
/^-
?(\d
+
(\.\d
*
)?
|
\.\d
+
)(
e
[
+-
]?\d
+
)?
$/i
;
/*
* Create and return a Big constructor.
*/
function
_Big_
()
{
/*
* The Big constructor and exported function.
* Create and return a new instance of a Big number object.
*
* n {number|string|Big} A numeric value.
*/
function
Big
(
n
)
{
var
x
=
this
;
// Enable constructor usage without new.
if
(
!
(
x
instanceof
Big
))
return
n
===
UNDEFINED
?
_Big_
()
:
new
Big
(
n
);
// Duplicate.
if
(
n
instanceof
Big
)
{
x
.
s
=
n
.
s
;
x
.
e
=
n
.
e
;
x
.
c
=
n
.
c
.
slice
();
}
else
{
if
(
typeof
n
!==
'string'
)
{
if
(
Big
.
strict
===
true
)
{
throw
TypeError
(
INVALID
+
'number'
);
}
// Minus zero?
n
=
n
===
0
&&
1
/
n
<
0
?
'-0'
:
String
(
n
);
}
parse
(
x
,
n
);
}
// Retain a reference to this Big constructor.
// Shadow Big.prototype.constructor which points to Object.
x
.
constructor
=
Big
;
}
Big
.
prototype
=
P
;
Big
.
DP
=
DP
;
Big
.
RM
=
RM
;
Big
.
NE
=
NE
;
Big
.
PE
=
PE
;
Big
.
strict
=
STRICT
;
Big
.
roundDown
=
0
;
Big
.
roundHalfUp
=
1
;
Big
.
roundHalfEven
=
2
;
Big
.
roundUp
=
3
;
return
Big
;
}
/*
* Parse the number or string value passed to a Big constructor.
*
* x {Big} A Big number instance.
* n {number|string} A numeric value.
*/
function
parse
(
x
,
n
)
{
var
e
,
i
,
nl
;
if
(
!
NUMERIC
.
test
(
n
))
{
throw
Error
(
INVALID
+
'number'
);
}
// Determine sign.
x
.
s
=
n
.
charAt
(
0
)
==
'-'
?
(
n
=
n
.
slice
(
1
),
-
1
)
:
1
;
// Decimal point?
if
((
e
=
n
.
indexOf
(
'.'
))
>
-
1
)
n
=
n
.
replace
(
'.'
,
''
);
// Exponential form?
if
((
i
=
n
.
search
(
/e/i
))
>
0
)
{
// Determine exponent.
if
(
e
<
0
)
e
=
i
;
e
+=
+
n
.
slice
(
i
+
1
);
n
=
n
.
substring
(
0
,
i
);
}
else
if
(
e
<
0
)
{
// Integer.
e
=
n
.
length
;
}
nl
=
n
.
length
;
// Determine leading zeros.
for
(
i
=
0
;
i
<
nl
&&
n
.
charAt
(
i
)
==
'0'
;)
++
i
;
if
(
i
==
nl
)
{
// Zero.
x
.
c
=
[
x
.
e
=
0
];
}
else
{
// Determine trailing zeros.
for
(;
nl
>
0
&&
n
.
charAt
(
--
nl
)
==
'0'
;);
x
.
e
=
e
-
i
-
1
;
x
.
c
=
[];
// Convert string to array of digits without leading/trailing zeros.
for
(
e
=
0
;
i
<=
nl
;)
x
.
c
[
e
++
]
=
+
n
.
charAt
(
i
++
);
}
return
x
;
}
/*
* Round Big x to a maximum of sd significant digits using rounding mode rm.
*
* x {Big} The Big to round.
* sd {number} Significant digits: integer, 0 to MAX_DP inclusive.
* rm {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).
* [more] {boolean} Whether the result of division was truncated.
*/
function
round
(
x
,
sd
,
rm
,
more
)
{
var
xc
=
x
.
c
;
if
(
rm
===
UNDEFINED
)
rm
=
x
.
constructor
.
RM
;
if
(
rm
!==
0
&&
rm
!==
1
&&
rm
!==
2
&&
rm
!==
3
)
{
throw
Error
(
INVALID_RM
);
}
if
(
sd
<
1
)
{
more
=
rm
===
3
&&
(
more
||
!!
xc
[
0
])
||
sd
===
0
&&
(
rm
===
1
&&
xc
[
0
]
>=
5
||
rm
===
2
&&
(
xc
[
0
]
>
5
||
xc
[
0
]
===
5
&&
(
more
||
xc
[
1
]
!==
UNDEFINED
))
);
xc
.
length
=
1
;
if
(
more
)
{
// 1, 0.1, 0.01, 0.001, 0.0001 etc.
x
.
e
=
x
.
e
-
sd
+
1
;
xc
[
0
]
=
1
;
}
else
{
// Zero.
xc
[
0
]
=
x
.
e
=
0
;
}
}
else
if
(
sd
<
xc
.
length
)
{
// xc[sd] is the digit after the digit that may be rounded up.
more
=
rm
===
1
&&
xc
[
sd
]
>=
5
||
rm
===
2
&&
(
xc
[
sd
]
>
5
||
xc
[
sd
]
===
5
&&
(
more
||
xc
[
sd
+
1
]
!==
UNDEFINED
||
xc
[
sd
-
1
]
&
1
))
||
rm
===
3
&&
(
more
||
!!
xc
[
0
]);
// Remove any digits after the required precision.
xc
.
length
=
sd
--
;
// Round up?
if
(
more
)
{
// Rounding up may mean the previous digit has to be rounded up.
for
(;
++
xc
[
sd
]
>
9
;)
{
xc
[
sd
]
=
0
;
if
(
!
sd
--
)
{
++
x
.
e
;
xc
.
unshift
(
1
);
}
}
}
// Remove trailing zeros.
for
(
sd
=
xc
.
length
;
!
xc
[
--
sd
];)
xc
.
pop
();
}
return
x
;
}
/*
* Return a string representing the value of Big x in normal or exponential notation.
* Handles P.toExponential, P.toFixed, P.toJSON, P.toPrecision, P.toString and P.valueOf.
*/
function
stringify
(
x
,
doExponential
,
isNonzero
)
{
var
e
=
x
.
e
,
s
=
x
.
c
.
join
(
''
),
n
=
s
.
length
;
// Exponential notation?
if
(
doExponential
)
{
s
=
s
.
charAt
(
0
)
+
(
n
>
1
?
'.'
+
s
.
slice
(
1
)
:
''
)
+
(
e
<
0
?
'e'
:
'e+'
)
+
e
;
// Normal notation.
}
else
if
(
e
<
0
)
{
for
(;
++
e
;)
s
=
'0'
+
s
;
s
=
'0.'
+
s
;
}
else
if
(
e
>
0
)
{
if
(
++
e
>
n
)
{
for
(
e
-=
n
;
e
--
;)
s
+=
'0'
;
}
else
if
(
e
<
n
)
{
s
=
s
.
slice
(
0
,
e
)
+
'.'
+
s
.
slice
(
e
);
}
}
else
if
(
n
>
1
)
{
s
=
s
.
charAt
(
0
)
+
'.'
+
s
.
slice
(
1
);
}
return
x
.
s
<
0
&&
isNonzero
?
'-'
+
s
:
s
;
}
// Prototype/instance methods
/*
* Return a new Big whose value is the absolute value of this Big.
*/
P
.
abs
=
function
()
{
var
x
=
new
this
.
constructor
(
this
);
x
.
s
=
1
;
return
x
;
};
/*
* Return 1 if the value of this Big is greater than the value of Big y,
* -1 if the value of this Big is less than the value of Big y, or
* 0 if they have the same value.
*/
P
.
cmp
=
function
(
y
)
{
var
isneg
,
x
=
this
,
xc
=
x
.
c
,
yc
=
(
y
=
new
x
.
constructor
(
y
)).
c
,
i
=
x
.
s
,
j
=
y
.
s
,
k
=
x
.
e
,
l
=
y
.
e
;
// Either zero?
if
(
!
xc
[
0
]
||
!
yc
[
0
])
return
!
xc
[
0
]
?
!
yc
[
0
]
?
0
:
-
j
:
i
;
// Signs differ?
if
(
i
!=
j
)
return
i
;
isneg
=
i
<
0
;
// Compare exponents.
if
(
k
!=
l
)
return
k
>
l
^
isneg
?
1
:
-
1
;
j
=
(
k
=
xc
.
length
)
<
(
l
=
yc
.
length
)
?
k
:
l
;
// Compare digit by digit.
for
(
i
=
-
1
;
++
i
<
j
;)
{
if
(
xc
[
i
]
!=
yc
[
i
])
return
xc
[
i
]
>
yc
[
i
]
^
isneg
?
1
:
-
1
;
}
// Compare lengths.
return
k
==
l
?
0
:
k
>
l
^
isneg
?
1
:
-
1
;
};
/*
* Return a new Big whose value is the value of this Big divided by the value of Big y, rounded,
* if necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.
*/
P
.
div
=
function
(
y
)
{
var
x
=
this
,
Big
=
x
.
constructor
,
a
=
x
.
c
,
// dividend
b
=
(
y
=
new
Big
(
y
)).
c
,
// divisor
k
=
x
.
s
==
y
.
s
?
1
:
-
1
,
dp
=
Big
.
DP
;
if
(
dp
!==
~~
dp
||
dp
<
0
||
dp
>
MAX_DP
)
{
throw
Error
(
INVALID_DP
);
}
// Divisor is zero?
if
(
!
b
[
0
])
{
throw
Error
(
DIV_BY_ZERO
);
}
// Dividend is 0? Return +-0.
if
(
!
a
[
0
])
{
y
.
s
=
k
;
y
.
c
=
[
y
.
e
=
0
];
return
y
;
}
var
bl
,
bt
,
n
,
cmp
,
ri
,
bz
=
b
.
slice
(),
ai
=
bl
=
b
.
length
,
al
=
a
.
length
,
r
=
a
.
slice
(
0
,
bl
),
// remainder
rl
=
r
.
length
,
q
=
y
,
// quotient
qc
=
q
.
c
=
[],
qi
=
0
,
p
=
dp
+
(
q
.
e
=
x
.
e
-
y
.
e
)
+
1
;
// precision of the result
q
.
s
=
k
;
k
=
p
<
0
?
0
:
p
;
// Create version of divisor with leading zero.
bz
.
unshift
(
0
);
// Add zeros to make remainder as long as divisor.
for
(;
rl
++
<
bl
;)
r
.
push
(
0
);
do
{
// n is how many times the divisor goes into current remainder.
for
(
n
=
0
;
n
<
10
;
n
++
)
{
// Compare divisor and remainder.
if
(
bl
!=
(
rl
=
r
.
length
))
{
cmp
=
bl
>
rl
?
1
:
-
1
;
}
else
{
for
(
ri
=
-
1
,
cmp
=
0
;
++
ri
<
bl
;)
{
if
(
b
[
ri
]
!=
r
[
ri
])
{
cmp
=
b
[
ri
]
>
r
[
ri
]
?
1
:
-
1
;
break
;
}
}
}
// If divisor < remainder, subtract divisor from remainder.
if
(
cmp
<
0
)
{
// Remainder can't be more than 1 digit longer than divisor.
// Equalise lengths using divisor with extra leading zero?
for
(
bt
=
rl
==
bl
?
b
:
bz
;
rl
;)
{
if
(
r
[
--
rl
]
<
bt
[
rl
])
{
ri
=
rl
;
for
(;
ri
&&
!
r
[
--
ri
];)
r
[
ri
]
=
9
;
--
r
[
ri
];
r
[
rl
]
+=
10
;
}
r
[
rl
]
-=
bt
[
rl
];
}
for
(;
!
r
[
0
];)
r
.
shift
();
}
else
{
break
;
}
}
// Add the digit n to the result array.
qc
[
qi
++
]
=
cmp
?
n
:
++
n
;
// Update the remainder.
if
(
r
[
0
]
&&
cmp
)
r
[
rl
]
=
a
[
ai
]
||
0
;
else
r
=
[
a
[
ai
]];
}
while
((
ai
++
<
al
||
r
[
0
]
!==
UNDEFINED
)
&&
k
--
);
// Leading zero? Do not remove if result is simply zero (qi == 1).
if
(
!
qc
[
0
]
&&
qi
!=
1
)
{
// There can't be more than one zero.
qc
.
shift
();
q
.
e
--
;
p
--
;
}
// Round?
if
(
qi
>
p
)
round
(
q
,
p
,
Big
.
RM
,
r
[
0
]
!==
UNDEFINED
);
return
q
;
};
/*
* Return true if the value of this Big is equal to the value of Big y, otherwise return false.
*/
P
.
eq
=
function
(
y
)
{
return
this
.
cmp
(
y
)
===
0
;
};
/*
* Return true if the value of this Big is greater than the value of Big y, otherwise return
* false.
*/
P
.
gt
=
function
(
y
)
{
return
this
.
cmp
(
y
)
>
0
;
};
/*
* Return true if the value of this Big is greater than or equal to the value of Big y, otherwise
* return false.
*/
P
.
gte
=
function
(
y
)
{
return
this
.
cmp
(
y
)
>
-
1
;
};
/*
* Return true if the value of this Big is less than the value of Big y, otherwise return false.
*/
P
.
lt
=
function
(
y
)
{
return
this
.
cmp
(
y
)
<
0
;
};
/*
* Return true if the value of this Big is less than or equal to the value of Big y, otherwise
* return false.
*/
P
.
lte
=
function
(
y
)
{
return
this
.
cmp
(
y
)
<
1
;
};
/*
* Return a new Big whose value is the value of this Big minus the value of Big y.
*/
P
.
minus
=
P
.
sub
=
function
(
y
)
{
var
i
,
j
,
t
,
xlty
,
x
=
this
,
Big
=
x
.
constructor
,
a
=
x
.
s
,
b
=
(
y
=
new
Big
(
y
)).
s
;
// Signs differ?
if
(
a
!=
b
)
{
y
.
s
=
-
b
;
return
x
.
plus
(
y
);
}
var
xc
=
x
.
c
.
slice
(),
xe
=
x
.
e
,
yc
=
y
.
c
,
ye
=
y
.
e
;
// Either zero?
if
(
!
xc
[
0
]
||
!
yc
[
0
])
{
if
(
yc
[
0
])
{
y
.
s
=
-
b
;
}
else
if
(
xc
[
0
])
{
y
=
new
Big
(
x
);
}
else
{
y
.
s
=
1
;
}
return
y
;
}
// Determine which is the bigger number. Prepend zeros to equalise exponents.
if
(
a
=
xe
-
ye
)
{
if
(
xlty
=
a
<
0
)
{
a
=
-
a
;
t
=
xc
;
}
else
{
ye
=
xe
;
t
=
yc
;
}
t
.
reverse
();
for
(
b
=
a
;
b
--
;)
t
.
push
(
0
);
t
.
reverse
();
}
else
{
// Exponents equal. Check digit by digit.
j
=
((
xlty
=
xc
.
length
<
yc
.
length
)
?
xc
:
yc
).
length
;
for
(
a
=
b
=
0
;
b
<
j
;
b
++
)
{
if
(
xc
[
b
]
!=
yc
[
b
])
{
xlty
=
xc
[
b
]
<
yc
[
b
];
break
;
}
}
}
// x < y? Point xc to the array of the bigger number.
if
(
xlty
)
{
t
=
xc
;
xc
=
yc
;
yc
=
t
;
y
.
s
=
-
y
.
s
;
}
/*
* Append zeros to xc if shorter. No need to add zeros to yc if shorter as subtraction only
* needs to start at yc.length.
*/
if
((
b
=
(
j
=
yc
.
length
)
-
(
i
=
xc
.
length
))
>
0
)
for
(;
b
--
;)
xc
[
i
++
]
=
0
;
// Subtract yc from xc.
for
(
b
=
i
;
j
>
a
;)
{
if
(
xc
[
--
j
]
<
yc
[
j
])
{
for
(
i
=
j
;
i
&&
!
xc
[
--
i
];)
xc
[
i
]
=
9
;
--
xc
[
i
];
xc
[
j
]
+=
10
;
}
xc
[
j
]
-=
yc
[
j
];
}
// Remove trailing zeros.
for
(;
xc
[
--
b
]
===
0
;)
xc
.
pop
();
// Remove leading zeros and adjust exponent accordingly.
for
(;
xc
[
0
]
===
0
;)
{
xc
.
shift
();
--
ye
;
}
if
(
!
xc
[
0
])
{
// n - n = +0
y
.
s
=
1
;
// Result must be zero.
xc
=
[
ye
=
0
];
}
y
.
c
=
xc
;
y
.
e
=
ye
;
return
y
;
};
/*
* Return a new Big whose value is the value of this Big modulo the value of Big y.
*/
P
.
mod
=
function
(
y
)
{
var
ygtx
,
x
=
this
,
Big
=
x
.
constructor
,
a
=
x
.
s
,
b
=
(
y
=
new
Big
(
y
)).
s
;
if
(
!
y
.
c
[
0
])
{
throw
Error
(
DIV_BY_ZERO
);
}
x
.
s
=
y
.
s
=
1
;
ygtx
=
y
.
cmp
(
x
)
==
1
;
x
.
s
=
a
;
y
.
s
=
b
;
if
(
ygtx
)
return
new
Big
(
x
);
a
=
Big
.
DP
;
b
=
Big
.
RM
;
Big
.
DP
=
Big
.
RM
=
0
;
x
=
x
.
div
(
y
);
Big
.
DP
=
a
;
Big
.
RM
=
b
;
return
this
.
minus
(
x
.
times
(
y
));
};
/*
* Return a new Big whose value is the value of this Big plus the value of Big y.
*/
P
.
plus
=
P
.
add
=
function
(
y
)
{
var
e
,
k
,
t
,
x
=
this
,
Big
=
x
.
constructor
;
y
=
new
Big
(
y
);
// Signs differ?
if
(
x
.
s
!=
y
.
s
)
{
y
.
s
=
-
y
.
s
;
return
x
.
minus
(
y
);
}
var
xe
=
x
.
e
,
xc
=
x
.
c
,
ye
=
y
.
e
,
yc
=
y
.
c
;
// Either zero?
if
(
!
xc
[
0
]
||
!
yc
[
0
])
{
if
(
!
yc
[
0
])
{
if
(
xc
[
0
])
{
y
=
new
Big
(
x
);
}
else
{
y
.
s
=
x
.
s
;
}
}
return
y
;
}
xc
=
xc
.
slice
();
// Prepend zeros to equalise exponents.
// Note: reverse faster than unshifts.
if
(
e
=
xe
-
ye
)
{
if
(
e
>
0
)
{
ye
=
xe
;
t
=
yc
;
}
else
{
e
=
-
e
;
t
=
xc
;
}
t
.
reverse
();
for
(;
e
--
;)
t
.
push
(
0
);
t
.
reverse
();
}
// Point xc to the longer array.
if
(
xc
.
length
-
yc
.
length
<
0
)
{
t
=
yc
;
yc
=
xc
;
xc
=
t
;
}
e
=
yc
.
length
;
// Only start adding at yc.length - 1 as the further digits of xc can be left as they are.
for
(
k
=
0
;
e
;
xc
[
e
]
%=
10
)
k
=
(
xc
[
--
e
]
=
xc
[
e
]
+
yc
[
e
]
+
k
)
/
10
|
0
;
// No need to check for zero, as +x + +y != 0 && -x + -y != 0
if
(
k
)
{
xc
.
unshift
(
k
);
++
ye
;
}
// Remove trailing zeros.
for
(
e
=
xc
.
length
;
xc
[
--
e
]
===
0
;)
xc
.
pop
();
y
.
c
=
xc
;
y
.
e
=
ye
;
return
y
;
};
/*
* Return a Big whose value is the value of this Big raised to the power n.
* If n is negative, round to a maximum of Big.DP decimal places using rounding
* mode Big.RM.
*
* n {number} Integer, -MAX_POWER to MAX_POWER inclusive.
*/
P
.
pow
=
function
(
n
)
{
var
x
=
this
,
one
=
new
x
.
constructor
(
'1'
),
y
=
one
,
isneg
=
n
<
0
;
if
(
n
!==
~~
n
||
n
<
-
MAX_POWER
||
n
>
MAX_POWER
)
{
throw
Error
(
INVALID
+
'exponent'
);
}
if
(
isneg
)
n
=
-
n
;
for
(;;)
{
if
(
n
&
1
)
y
=
y
.
times
(
x
);
n
>>=
1
;
if
(
!
n
)
break
;
x
=
x
.
times
(
x
);
}
return
isneg
?
one
.
div
(
y
)
:
y
;
};
/*
* Return a new Big whose value is the value of this Big rounded to a maximum precision of sd
* significant digits using rounding mode rm, or Big.RM if rm is not specified.
*
* sd {number} Significant digits: integer, 1 to MAX_DP inclusive.
* rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).
*/
P
.
prec
=
function
(
sd
,
rm
)
{
if
(
sd
!==
~~
sd
||
sd
<
1
||
sd
>
MAX_DP
)
{
throw
Error
(
INVALID
+
'precision'
);
}
return
round
(
new
this
.
constructor
(
this
),
sd
,
rm
);
};
/*
* Return a new Big whose value is the value of this Big rounded to a maximum of dp decimal places
* using rounding mode rm, or Big.RM if rm is not specified.
* If dp is negative, round to an integer which is a multiple of 10**-dp.
* If dp is not specified, round to 0 decimal places.
*
* dp? {number} Integer, -MAX_DP to MAX_DP inclusive.
* rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).
*/
P
.
round
=
function
(
dp
,
rm
)
{
if
(
dp
===
UNDEFINED
)
dp
=
0
;
else
if
(
dp
!==
~~
dp
||
dp
<
-
MAX_DP
||
dp
>
MAX_DP
)
{
throw
Error
(
INVALID_DP
);
}
return
round
(
new
this
.
constructor
(
this
),
dp
+
this
.
e
+
1
,
rm
);
};
/*
* Return a new Big whose value is the square root of the value of this Big, rounded, if
* necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.
*/
P
.
sqrt
=
function
()
{
var
r
,
c
,
t
,
x
=
this
,
Big
=
x
.
constructor
,
s
=
x
.
s
,
e
=
x
.
e
,
half
=
new
Big
(
'0.5'
);
// Zero?
if
(
!
x
.
c
[
0
])
return
new
Big
(
x
);
// Negative?
if
(
s
<
0
)
{
throw
Error
(
NAME
+
'No square root'
);
}
// Estimate.
s
=
Math
.
sqrt
(
x
+
''
);
// Math.sqrt underflow/overflow?
// Re-estimate: pass x coefficient to Math.sqrt as integer, then adjust the result exponent.
if
(
s
===
0
||
s
===
1
/
0
)
{
c
=
x
.
c
.
join
(
''
);
if
(
!
(
c
.
length
+
e
&
1
))
c
+=
'0'
;
s
=
Math
.
sqrt
(
c
);
e
=
((
e
+
1
)
/
2
|
0
)
-
(
e
<
0
||
e
&
1
);
r
=
new
Big
((
s
==
1
/
0
?
'5e'
:
(
s
=
s
.
toExponential
()).
slice
(
0
,
s
.
indexOf
(
'e'
)
+
1
))
+
e
);
}
else
{
r
=
new
Big
(
s
+
''
);
}
e
=
r
.
e
+
(
Big
.
DP
+=
4
);
// Newton-Raphson iteration.
do
{
t
=
r
;
r
=
half
.
times
(
t
.
plus
(
x
.
div
(
t
)));
}
while
(
t
.
c
.
slice
(
0
,
e
).
join
(
''
)
!==
r
.
c
.
slice
(
0
,
e
).
join
(
''
));
return
round
(
r
,
(
Big
.
DP
-=
4
)
+
r
.
e
+
1
,
Big
.
RM
);
};
/*
* Return a new Big whose value is the value of this Big times the value of Big y.
*/
P
.
times
=
P
.
mul
=
function
(
y
)
{
var
c
,
x
=
this
,
Big
=
x
.
constructor
,
xc
=
x
.
c
,
yc
=
(
y
=
new
Big
(
y
)).
c
,
a
=
xc
.
length
,
b
=
yc
.
length
,
i
=
x
.
e
,
j
=
y
.
e
;
// Determine sign of result.
y
.
s
=
x
.
s
==
y
.
s
?
1
:
-
1
;
// Return signed 0 if either 0.
if
(
!
xc
[
0
]
||
!
yc
[
0
])
{
y
.
c
=
[
y
.
e
=
0
];
return
y
;
}
// Initialise exponent of result as x.e + y.e.
y
.
e
=
i
+
j
;
// If array xc has fewer digits than yc, swap xc and yc, and lengths.
if
(
a
<
b
)
{
c
=
xc
;
xc
=
yc
;
yc
=
c
;
j
=
a
;
a
=
b
;
b
=
j
;
}
// Initialise coefficient array of result with zeros.
for
(
c
=
new
Array
(
j
=
a
+
b
);
j
--
;)
c
[
j
]
=
0
;
// Multiply.
// i is initially xc.length.
for
(
i
=
b
;
i
--
;)
{
b
=
0
;
// a is yc.length.
for
(
j
=
a
+
i
;
j
>
i
;)
{
// Current sum of products at this digit position, plus carry.
b
=
c
[
j
]
+
yc
[
i
]
*
xc
[
j
-
i
-
1
]
+
b
;
c
[
j
--
]
=
b
%
10
;
// carry
b
=
b
/
10
|
0
;
}
c
[
j
]
=
b
;
}
// Increment result exponent if there is a final carry, otherwise remove leading zero.
if
(
b
)
++
y
.
e
;
else
c
.
shift
();
// Remove trailing zeros.
for
(
i
=
c
.
length
;
!
c
[
--
i
];)
c
.
pop
();
y
.
c
=
c
;
return
y
;
};
/*
* Return a string representing the value of this Big in exponential notation rounded to dp fixed
* decimal places using rounding mode rm, or Big.RM if rm is not specified.
*
* dp? {number} Decimal places: integer, 0 to MAX_DP inclusive.
* rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).
*/
P
.
toExponential
=
function
(
dp
,
rm
)
{
var
x
=
this
,
n
=
x
.
c
[
0
];
if
(
dp
!==
UNDEFINED
)
{
if
(
dp
!==
~~
dp
||
dp
<
0
||
dp
>
MAX_DP
)
{
throw
Error
(
INVALID_DP
);
}
x
=
round
(
new
x
.
constructor
(
x
),
++
dp
,
rm
);
for
(;
x
.
c
.
length
<
dp
;)
x
.
c
.
push
(
0
);
}
return
stringify
(
x
,
true
,
!!
n
);
};
/*
* Return a string representing the value of this Big in normal notation rounded to dp fixed
* decimal places using rounding mode rm, or Big.RM if rm is not specified.
*
* dp? {number} Decimal places: integer, 0 to MAX_DP inclusive.
* rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).
*
* (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.
* (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.
*/
P
.
toFixed
=
function
(
dp
,
rm
)
{
var
x
=
this
,
n
=
x
.
c
[
0
];
if
(
dp
!==
UNDEFINED
)
{
if
(
dp
!==
~~
dp
||
dp
<
0
||
dp
>
MAX_DP
)
{
throw
Error
(
INVALID_DP
);
}
x
=
round
(
new
x
.
constructor
(
x
),
dp
+
x
.
e
+
1
,
rm
);
// x.e may have changed if the value is rounded up.
for
(
dp
=
dp
+
x
.
e
+
1
;
x
.
c
.
length
<
dp
;)
x
.
c
.
push
(
0
);
}
return
stringify
(
x
,
false
,
!!
n
);
};
/*
* Return a string representing the value of this Big.
* Return exponential notation if this Big has a positive exponent equal to or greater than
* Big.PE, or a negative exponent equal to or less than Big.NE.
* Omit the sign for negative zero.
*/
P
.
toJSON
=
P
.
toString
=
function
()
{
var
x
=
this
,
Big
=
x
.
constructor
;
return
stringify
(
x
,
x
.
e
<=
Big
.
NE
||
x
.
e
>=
Big
.
PE
,
!!
x
.
c
[
0
]);
};
/*
* Return the value of this Big as a primitve number.
*/
P
.
toNumber
=
function
()
{
var
n
=
Number
(
stringify
(
this
,
true
,
true
));
if
(
this
.
constructor
.
strict
===
true
&&
!
this
.
eq
(
n
.
toString
()))
{
throw
Error
(
NAME
+
'Imprecise conversion'
);
}
return
n
;
};
/*
* Return a string representing the value of this Big rounded to sd significant digits using
* rounding mode rm, or Big.RM if rm is not specified.
* Use exponential notation if sd is less than the number of digits necessary to represent
* the integer part of the value in normal notation.
*
* sd {number} Significant digits: integer, 1 to MAX_DP inclusive.
* rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).
*/
P
.
toPrecision
=
function
(
sd
,
rm
)
{
var
x
=
this
,
Big
=
x
.
constructor
,
n
=
x
.
c
[
0
];
if
(
sd
!==
UNDEFINED
)
{
if
(
sd
!==
~~
sd
||
sd
<
1
||
sd
>
MAX_DP
)
{
throw
Error
(
INVALID
+
'precision'
);
}
x
=
round
(
new
Big
(
x
),
sd
,
rm
);
for
(;
x
.
c
.
length
<
sd
;)
x
.
c
.
push
(
0
);
}
return
stringify
(
x
,
sd
<=
x
.
e
||
x
.
e
<=
Big
.
NE
||
x
.
e
>=
Big
.
PE
,
!!
n
);
};
/*
* Return a string representing the value of this Big.
* Return exponential notation if this Big has a positive exponent equal to or greater than
* Big.PE, or a negative exponent equal to or less than Big.NE.
* Include the sign for negative zero.
*/
P
.
valueOf
=
function
()
{
var
x
=
this
,
Big
=
x
.
constructor
;
if
(
Big
.
strict
===
true
)
{
throw
Error
(
NAME
+
'valueOf disallowed'
);
}
return
stringify
(
x
,
x
.
e
<=
Big
.
NE
||
x
.
e
>=
Big
.
PE
,
true
);
};
// Export
Big
=
_Big_
();
Big
[
'default'
]
=
Big
.
Big
=
Big
;
//AMD.
if
(
typeof
define
===
'function'
&&
define
.
amd
)
{
define
(
function
()
{
return
Big
;
});
// Node and other CommonJS-like environments that support module.exports.
}
else
if
(
typeof
module
!==
'undefined'
&&
module
.
exports
)
{
module
.
exports
=
Big
;
//Browser.
}
else
{
GLOBAL
.
Big
=
Big
;
}
})(
this
);
src/main/webapp/static/common/js/jeeplus.js
View file @
c814b600
...
@@ -176,6 +176,7 @@ function delRow(obj, prefix){
...
@@ -176,6 +176,7 @@ function delRow(obj, prefix){
// if(width.indexOf("%")>=0 || height.indexOf("%")>=0 ){
// if(width.indexOf("%")>=0 || height.indexOf("%")>=0 ){
// auto =false;
// auto =false;
// }
// }
// }
// top.layer.open({
// top.layer.open({
// type: 2,
// type: 2,
// area: [width, height],
// area: [width, height],
...
@@ -325,10 +326,10 @@ function delRow(obj, prefix){
...
@@ -325,10 +326,10 @@ function delRow(obj, prefix){
},
},
openStorageSelectDialog
:
function
(
isMultiSelect
,
batchNum
,
yesFuc
){
openStorageSelectDialog
:
function
(
isMultiSelect
,
batchNum
,
yesFuc
){
var
url
=
ctx
+
"/warehouse/storage/storage/findByPcTypeModel?goodsInfo.goods.batchNum="
+
batchNum
;
var
url
=
ctx
+
"/warehouse/storage/storage/findByPcTypeModel?goodsInfo.goods.batchNum="
+
batchNum
;
var
fieldLabels
=
"
名称|类型
"
;
var
fieldLabels
=
"
物资编码|名称|类型|型号
"
;
var
fieldKeys
=
"
name|type.name
"
;
var
fieldKeys
=
"
qrCode.code|name|type.name|model
"
;
var
searchLabels
=
"
型号|类型
"
;
var
searchLabels
=
"
类型|型号
"
;
var
searchKeys
=
"goodsInfo.
model|goodsInfo.type
"
;
var
searchKeys
=
"goodsInfo.
type|goodsInfo.model
"
;
top
.
layer
.
open
({
top
.
layer
.
open
({
type
:
2
,
type
:
2
,
area
:
[
'800px'
,
'500px'
],
area
:
[
'800px'
,
'500px'
],
...
@@ -344,14 +345,7 @@ function delRow(obj, prefix){
...
@@ -344,14 +345,7 @@ function delRow(obj, prefix){
jp
.
warning
(
"必须选择一条数据!"
);
jp
.
warning
(
"必须选择一条数据!"
);
return
;
return
;
}
}
var
ids
=
[];
yesFuc
(
items
);
var
names
=
[];
for
(
var
i
=
0
;
i
<
items
.
length
;
i
++
){
var
item
=
items
[
i
];
ids
.
push
(
item
.
id
);
names
.
push
(
item
.
enname
)
}
yesFuc
(
ids
.
join
(
","
),
names
.
join
(
","
));
top
.
layer
.
close
(
index
);
//关闭对话框。
top
.
layer
.
close
(
index
);
//关闭对话框。
},
},
cancel
:
function
(
index
){
cancel
:
function
(
index
){
...
...
src/main/webapp/webpage/modules/warehouse/goods/goodsDetail.jsp
View file @
c814b600
...
@@ -74,6 +74,16 @@
...
@@ -74,6 +74,16 @@
}
}
},
},
{
{
field: 'amount',
title: '单价',
formatter: function (value,row,index){
return Mustache.render($("#amountTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g, ""),{
row: row,
idx: index
})
}
},
{
field: 'remarks',
field: 'remarks',
title: '备注',
title: '备注',
formatter: function (value,row,index){
formatter: function (value,row,index){
...
@@ -105,7 +115,8 @@
...
@@ -105,7 +115,8 @@
name: ''
name: ''
},
},
model: '',
model: '',
num: '',
num: null,
amount: null,
remarks: ''
remarks: ''
}
}
...
@@ -134,12 +145,50 @@
...
@@ -134,12 +145,50 @@
}
}
function onInputChange(rowIndex, elem , field){
function onInputChange(rowIndex, elem , field){
var obj = {};
var obj = {};
obj[field] = $(elem).val()
obj[field] = $(elem).val();
var timer = null;
updateRow(rowIndex, obj);
clearTimeout(timer);
// 校验数量与单价
timer = setTimeout(function (){
if(field === 'num' && obj[field]){
updateRow(rowIndex, obj)
}, 0)
// 正则表达式验证可以带小数点的数字
var reg = new RegExp("^[0-9]+(.[0-9]{1,2})?$");
// 不是数字
if(!reg.test(obj[field])){
jp.warning("必须是数字");
$(elem).val('')
return
}
if (Number(obj[field]) <= 0) {
jp.warning("数量不能小于等于0");
$(elem).val('');
return;
}
setSumPrice();
}
if(field === 'amount' && obj[field]) {
// 正则表达式验证可以带小数点的数字
// 不是数字
if(!/^(?:[1-9]\d*|0)(?:\.\d{1,2})?$/.test(obj[field])) {
jp.warning("输入正确的金额");
$(elem).val('')
return
}
setSumPrice();
}
}
function setSumPrice(){
var data = $(selector).bootstrapTable('getData');
var sum = data.reduce(function (sum, current){
if(current.delFlag != 1 && current.amount && current.num){
var total = new Big(current.amount).times(current.num).toNumber();
return new Big(sum).plus(total);
}
return new Big(sum);
},0)
$("#sum").val(sum);
}
}
function onSelectType(nodes, rowIndex){
function onSelectType(nodes, rowIndex){
...
@@ -178,6 +227,10 @@
...
@@ -178,6 +227,10 @@
<input id="goodsInfoList{{idx}}_num" name="goodsInfoList[{{idx}}].num" type="text" value="{{row.num}}" onchange="onInputChange('{{idx}}', this, 'num')" class="form-control "/>
<input id="goodsInfoList{{idx}}_num" name="goodsInfoList[{{idx}}].num" type="text" value="{{row.num}}" onchange="onInputChange('{{idx}}', this, 'num')" class="form-control "/>
</script>
</script>
<script id="amountTpl" type="text/html">
<input id="goodsInfoList{{idx}}_amount" name="goodsInfoList[{{idx}}].amount" type="text" value="{{row.amount}}" onchange="onInputChange('{{idx}}', this, 'amount')" class="form-control "/>
</script>
<script id="remarksTpl" type="text/html">
<script id="remarksTpl" type="text/html">
<textarea id="goodsInfoList{{idx}}_remarks" name="goodsInfoList[{{idx}}].remarks" rows="4" onchange="onInputChange('{{idx}}', this, 'remarks')" class="form-control ">{{row.remarks}}</textarea>
<textarea id="goodsInfoList{{idx}}_remarks" name="goodsInfoList[{{idx}}].remarks" rows="4" onchange="onInputChange('{{idx}}', this, 'remarks')" class="form-control ">{{row.remarks}}</textarea>
</script>
</script>
\ No newline at end of file
src/main/webapp/webpage/modules/warehouse/goods/goodsForm.jsp
View file @
c814b600
...
@@ -8,6 +8,7 @@
...
@@ -8,6 +8,7 @@
<link
rel=
"stylesheet"
href=
"${ctxStatic}/plugin/bootstrapTable/bootstrap-table.min.css"
>
<link
rel=
"stylesheet"
href=
"${ctxStatic}/plugin/bootstrapTable/bootstrap-table.min.css"
>
<script
type=
"text/javascript"
src=
"${ctxStatic}/plugin/bootstrapTable/bootstrap-table.min.js"
></script>
<script
type=
"text/javascript"
src=
"${ctxStatic}/plugin/bootstrapTable/bootstrap-table.min.js"
></script>
<script
type=
"text/javascript"
src=
"${ctxStatic}/plugin/bootstrapTable/bootstrap-table-zh-CN.js"
></script>
<script
type=
"text/javascript"
src=
"${ctxStatic}/plugin/bootstrapTable/bootstrap-table-zh-CN.js"
></script>
<script
type=
"text/javascript"
src=
"${ctxStatic}/common/js/big.js"
></script>
</head>
</head>
<body>
<body>
<div
class=
"wrapper wrapper-content"
>
<div
class=
"wrapper wrapper-content"
>
...
@@ -52,8 +53,14 @@
...
@@ -52,8 +53,14 @@
labelName=
"operator.name"
labelValue=
"${goods.operator.name}"
labelName=
"operator.name"
labelValue=
"${goods.operator.name}"
cssClass=
"form-control required"
disabled=
"disabled"
/>
cssClass=
"form-control required"
disabled=
"disabled"
/>
</td>
</td>
<td>
备注
</td>
<td>
总价
</td>
<td>
<td>
<form:input
path=
"sum"
htmlEscape=
"false"
readonly=
"true"
class=
"form-control "
/>
</td>
</tr>
<tr>
<td>
备注
</td>
<td
colspan=
"3"
>
<form:textarea
path=
"remarks"
htmlEscape=
"false"
rows=
"4"
class=
"form-control "
/>
<form:textarea
path=
"remarks"
htmlEscape=
"false"
rows=
"4"
class=
"form-control "
/>
</td>
</td>
</tr>
</tr>
...
...
src/main/webapp/webpage/modules/warehouse/goods/goodsList.js
View file @
c814b600
...
@@ -345,6 +345,7 @@ $(document).ready(function() {
...
@@ -345,6 +345,7 @@ $(document).ready(function() {
<
th
>
类型编码
<
/th
>
<
th
>
类型编码
<
/th
>
<
th
>
型号
<
/th
>
<
th
>
型号
<
/th
>
<
th
>
数量
<
/th
>
<
th
>
数量
<
/th
>
<
th
>
单价
<
/th
>
<
th
>
备注信息
<
/th
>
<
th
>
备注信息
<
/th
>
<
th
>
操作
<
/th
>
<
th
>
操作
<
/th
>
<
/tr
>
<
/tr
>
...
@@ -373,6 +374,9 @@ $(document).ready(function() {
...
@@ -373,6 +374,9 @@ $(document).ready(function() {
{{
row
.
num
}}
{{
row
.
num
}}
<
/td
>
<
/td
>
<
td
>
<
td
>
{{
row
.
amount
}}
<
/td
>
<
td
>
{{
row
.
remarks
}}
{{
row
.
remarks
}}
<
/td
>
<
/td
>
<
td
>
<
td
>
...
...
src/main/webapp/webpage/modules/warehouse/qrcode/qrCodeList.js
View file @
c814b600
...
@@ -85,32 +85,10 @@ $(document).ready(function() {
...
@@ -85,32 +85,10 @@ $(document).ready(function() {
}
}
,{
,{
field
:
'goodsInfo.id'
,
title
:
'货品明细外键'
,
sortable
:
true
,
sortName
:
'goodsInfo.id'
,
formatter
:
function
(
value
,
row
,
index
){
value
=
jp
.
unescapeHTML
(
value
);
<
c
:
choose
>
<
c
:
when
test
=
"${fns:hasPermission('warehouse:qrcode:qrCode:edit')}"
>
return
"<a href='javascript:edit(
\"
"
+
row
.
id
+
"
\"
)'>"
+
value
+
"</a>"
;
<
/c:when
>
<
c
:
when
test
=
"${fns:hasPermission('warehouse:qrcode:qrCode:view')}"
>
return
"<a href='javascript:view(
\"
"
+
row
.
id
+
"
\"
)'>"
+
value
+
"</a>"
;
<
/c:when
>
<
c
:
otherwise
>
return
value
;
<
/c:otherwise
>
<
/c:choose
>
}
}
,{
field
:
'code'
,
field
:
'code'
,
title
:
'物资编码'
,
title
:
'物资编码'
,
sortable
:
true
,
sortable
:
true
,
sortName
:
'code'
sortName
:
'code'
}
}
,{
,{
field
:
'url'
,
field
:
'url'
,
...
...
src/main/webapp/webpage/modules/warehouse/storage/storageDetail.jsp
View file @
c814b600
...
@@ -8,8 +8,9 @@
...
@@ -8,8 +8,9 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ include file="/webpage/include/taglib.jsp" %>
<%@ include file="/webpage/include/taglib.jsp" %>
<div id="toolbar" class="text-left">
<div id="toolbar" class="text-left">
<a class="btn btn-primary btn-sm" onclick="addDetail('#detail_table')" title="新增"><i class="fa fa-plus"></i> 新增</a>
<a class="btn btn-primary btn-sm" onclick="addDetail('#detail_table')" title="新增"><i class="fa fa-plus"></i> 手动添加</a>
<a class="btn btn-primary btn-sm" disabled="true" onclick="addShelve('#detail_table')" title="新增"><i class="fa fa-plus"></i> 批量编辑货架</a>
<a class="btn btn-primary btn-sm" onclick="addScan('#detail_table')" title="新增"><i class="fa fa-plus"></i> 扫码添加</a>
<a id="editAll" class="btn btn-primary btn-sm" onclick="addShelve('#detail_table')" title="新增"><i class="fa fa-plus"></i> 批量编辑货架</a>
</div>
</div>
<table id="detail_table" data-toolbar="#toolbar"></table>
<table id="detail_table" data-toolbar="#toolbar"></table>
<script>
<script>
...
@@ -94,7 +95,11 @@
...
@@ -94,7 +95,11 @@
}
}
}
}
]
]
})
});
$(selector).on('check.bs.table uncheck.bs.table load-success.bs.table ' +
'check-all.bs.table uncheck-all.bs.table', function () {
$('#editAll').prop('disabled', !getSelections().length);
});
}
}
function getSelections(){
function getSelections(){
...
@@ -108,26 +113,25 @@
...
@@ -108,26 +113,25 @@
return;
return;
}
}
jp.openStorageSelectDialog(true,$("#batchNum").val(),function (){
jp.openStorageSelectDialog(true,$("#batchNum").val(),function (items){
if(Array.isArray(items)){
var data = items.map(function (item){
if(item.goodsInfo && !item.goodsInfo.amount){
item.goodsInfo.amount = 0;
}
return {
id: '',
delFlag: 0,
remarks: '',
...item
}
})
debugger
$(selector).bootstrapTable('append', data)
}
})
})
// var row = {
// id: '',
// delFlag: 0,
// name: '',
// type: {
// id: '',
// name: ''
// },
// model: '',
// num: '',
// remarks: ''
// }
//
// $(selector).bootstrapTable('append', [
// row
// ])
}
}
function removeRow(index, rowId, rowDelFlag){
function removeRow(index, rowId, rowDelFlag){
if(rowId){
if(rowId){
...
@@ -172,10 +176,51 @@
...
@@ -172,10 +176,51 @@
}
}
function addShelve(){
function addShelve(){
jp.openShelvesSelectDialog(function (){
jp.openShelvesSelectDialog(function (id,name){
getSelections().forEach(function (item,index){
updateRow(index,{
shelves: {
id: id,
name: name
}
})
})
})
})
}
}
function addScan(){
layer.open({
type: 1,
title: '扫码',
auto: true,
area: ['500','300'],
content: $("#scanResultTpl").html(),
success: function (){
$("#scanResult").focus();
},
btn:['关闭']
})
}
/**
* 扫码
* 一、获取扫码结果
* 二、请求后台接口获取结果
* 三、增一条明细数据
* 四、清空扫码结果
* @param elem
*/
function onScanChange(elem){
try{
var json = JSON.parse($(elem).val());
var qrCodeId = json.code;
var goodsInfoId = json.infoId;
}catch (e){
console.log(e);
}
}
</script>
</script>
<script id="hideTpl" type="text/html">
<script id="hideTpl" type="text/html">
...
@@ -183,21 +228,24 @@
...
@@ -183,21 +228,24 @@
<input id="storageInfoList{{idx}}_delFlag" name="storageInfoList[{{idx}}].delFlag" type="hidden" value="{{row.delFlag}}"/>
<input id="storageInfoList{{idx}}_delFlag" name="storageInfoList[{{idx}}].delFlag" type="hidden" value="{{row.delFlag}}"/>
<input id="storageInfoList{{idx}}_goodsInfoId" name="storageInfoList[{{idx}}].goodsInfo.id" type="hidden" value="{{row.goodsInfo.id}}"/>
<input id="storageInfoList{{idx}}_goodsInfoId" name="storageInfoList[{{idx}}].goodsInfo.id" type="hidden" value="{{row.goodsInfo.id}}"/>
<input id="storageInfoList{{idx}}_goodsInfoName" name="storageInfoList[{{idx}}].goodsInfo.name" type="hidden" value="{{row.goodsInfo.name}}"/>
<input id="storageInfoList{{idx}}_goodsInfoName" name="storageInfoList[{{idx}}].goodsInfo.name" type="hidden" value="{{row.goodsInfo.name}}"/>
<input id="storageInfoList{{idx}}_goodsInfoAmount" name="storageInfoList[{{idx}}].goodsInfo.amount" type="hidden" value="{{row.goodsInfo.amount}}"/>
<input id="storageInfoList{{idx}}_shelvesId" name="storageInfoList[{{idx}}].shelves.id" type="hidden" value="{{row.shelves.id}}" readonly class="form-control" />
<input id="storageInfoList{{idx}}_shelvesId" name="storageInfoList[{{idx}}].shelves.id" type="hidden" value="{{row.shelves.id}}" readonly class="form-control" />
<input id="storageInfoList{{idx}}_amount" name="storageInfoList[{{idx}}].amount" type="hidden" value="{{row.amount}}" readonly class="form-control" />
<input id="storageInfoList{{idx}}_qrCodeId" name="storageInfoList[{{idx}}].qrCode.id" type="hidden" value="{{row.qrCode.id}}" readonly class="form-control" />
</script>
</script>
<script id="nameTpl" type="text/html">
<script id="nameTpl" type="text/html">
<input id="storageInfoList{{idx}}_name" name="storageInfoList[{{idx}}].name" type="text" value="{{row.name}}" onchange="onInputChange('{{idx}}', this, 'name')" class="form-control "/>
<input id="storageInfoList{{idx}}_name" name="storageInfoList[{{idx}}].name" type="text"
readonly
value="{{row.name}}" onchange="onInputChange('{{idx}}', this, 'name')" class="form-control "/>
</script>
</script>
<script id="typeTpl" type="text/html">//<!--
<script id="typeTpl" type="text/html">//<!--
<sys:treeselect id="storageInfoList{{idx}}_type" name="storageInfoList[{{idx}}].type.id" value="{{row.type.id}}" labelName="storageInfoList{{idx}}.type.name" labelValue="{{row.type.name}}"
<sys:treeselect id="storageInfoList{{idx}}_type" name="storageInfoList[{{idx}}].type.id" value="{{row.type.id}}" labelName="storageInfoList{{idx}}.type.name" labelValue="{{row.type.name}}"
title="类型" url="/warehouse/materialtype/materialType/treeData" cssClass="form-control " allowClear="true" allowSearch="true" callback="onSelectType" />//-->
title="类型" url="/warehouse/materialtype/materialType/treeData" cssClass="form-control "
disabled="disabled"
allowClear="true" allowSearch="true" callback="onSelectType" />//-->
</script>
</script>
<script id="modelTpl" type="text/html">
<script id="modelTpl" type="text/html">
<input id="storageInfoList{{idx}}_model" name="storageInfoList[{{idx}}].model" type="text" value="{{row.model}}" onchange="onInputChange('{{idx}}', this, 'model')" class="form-control "/>
<input id="storageInfoList{{idx}}_model" name="storageInfoList[{{idx}}].model" type="text" value="{{row.model}}"
readonly
onchange="onInputChange('{{idx}}', this, 'model')" class="form-control "/>
</script>
</script>
<script id="shelvesTpl" type="text/html">
<script id="shelvesTpl" type="text/html">
<input id="storageInfoList{{idx}}_shelvesName" name="storageInfoList[{{idx}}].shelves.name" type="text" value="{{row.shelves.name}}" readonly class="form-control" />
<input id="storageInfoList{{idx}}_shelvesName" name="storageInfoList[{{idx}}].shelves.name" type="text" value="{{row.shelves.name}}" readonly class="form-control" />
...
@@ -205,3 +253,19 @@
...
@@ -205,3 +253,19 @@
<script id="remarksTpl" type="text/html">
<script id="remarksTpl" type="text/html">
<textarea id="storageInfoList{{idx}}_remarks" name="storageInfoList[{{idx}}].remarks" rows="4" onchange="onInputChange('{{idx}}', this, 'remarks')" class="form-control ">{{row.remarks}}</textarea>
<textarea id="storageInfoList{{idx}}_remarks" name="storageInfoList[{{idx}}].remarks" rows="4" onchange="onInputChange('{{idx}}', this, 'remarks')" class="form-control ">{{row.remarks}}</textarea>
</script>
</script>
<script id="scanResultTpl" type="text/html">
<br>
<div class="container-fluid">
<div class="row">
<div class="col-xs-2 text-right">
<label>扫码结果:</label>
</div>
<div class="col-xs-10">
<input type="text" id="scanResult" class="form-control" onchange="onScanChange(this)">
<span class="text-danger">请切换英文输入法</span>
</div>
</div>
</div>
<br>
</script>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment