1
0
Fork 0

생산계획 작성

This commit is contained in:
WONKI LEE 2024-04-30 15:08:31 +09:00
parent ede7cad3b5
commit 09522528dd
46 changed files with 1990 additions and 1409 deletions

29
.idea/dataSources.xml Normal file
View File

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
<data-source source="LOCAL" name="@localhost" uuid="36a130ee-f2e6-4877-9e87-1c0b667f7302">
<driver-ref>sqlserver.ms</driver-ref>
<synchronize>true</synchronize>
<jdbc-driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</jdbc-driver>
<jdbc-url>jdbc:sqlserver://localhost:18222</jdbc-url>
<jdbc-additional-properties>
<property name="com.intellij.clouds.kubernetes.db.host.port" />
<property name="com.intellij.clouds.kubernetes.db.enabled" value="false" />
<property name="com.intellij.clouds.kubernetes.db.container.port" />
</jdbc-additional-properties>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
<data-source source="LOCAL" name="@localhost [2]" uuid="0305f8c8-e790-436d-a021-ff9ed3046662">
<driver-ref>sqlserver.ms</driver-ref>
<synchronize>true</synchronize>
<jdbc-driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</jdbc-driver>
<jdbc-url>jdbc:sqlserver://localhost:18211</jdbc-url>
<jdbc-additional-properties>
<property name="com.intellij.clouds.kubernetes.db.host.port" />
<property name="com.intellij.clouds.kubernetes.db.enabled" value="false" />
<property name="com.intellij.clouds.kubernetes.db.container.port" />
</jdbc-additional-properties>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
</component>
</project>

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="PublishConfigData" serverName="hypt.kuls.co.kr" remoteFilesAllowedToDisappearOnAutoupload="false"> <component name="PublishConfigData" autoUpload="Always" serverName="hypt.kuls.co.kr2" remoteFilesAllowedToDisappearOnAutoupload="false">
<serverData> <serverData>
<paths name="hypt.kuls.co.kr"> <paths name="hypt.kuls.co.kr2">
<serverdata> <serverdata>
<mappings> <mappings>
<mapping deploy="/" local="$PROJECT_DIR$" web="/" /> <mapping deploy="/" local="$PROJECT_DIR$" web="/" />
@ -13,5 +13,6 @@
</serverdata> </serverdata>
</paths> </paths>
</serverData> </serverData>
<option name="myAutoUpload" value="ALWAYS" />
</component> </component>
</project> </project>

View File

@ -0,0 +1,18 @@
javascript:S33589"DExtract this nested ternary operation into an independent statement.(±ƒ’’øÿÿÿÿ8šïÈñ1J$36448cf4-3753-4db4-8502-eb926ea9b3be
<EFBFBD>javascript:S3358:"DExtract this nested ternary operation into an independent statement.(꜄ƒ8šïÈñ1J$6a2ad498-5059-4626-8ca9-dfde14004235
zjavascript:S1854O"2Remove this useless assignment to variable "sord".(Ö³€O8ïÈñ1J$02695757-c7d8-463e-9f62-5486c038c7a1
javascript:S3358T"DExtract this nested ternary operation into an independent statement.(Âéµäÿÿÿÿÿ8ïÈñ1J$2848632c-6e6d-4de6-9c1d-3a03ecdd2955
javascript:S3358U"DExtract this nested ternary operation into an independent statement.(ÑÁ–Âøÿÿÿÿ8ïÈñ1J$d5c71e35-227d-4f0a-bf2e-7ae08c45a118
¢javascript:S101["URename class "Tb_basecode_class" to match the regular expression ^[A-Z][a-zA-Z0-9]*$.(µ¥‚òøÿÿÿÿ8œïÈñ1J$a37e67fc-0b70-4bc2-8e5f-e1151de0c94b
ljavascript:S125c"Remove this commented out code.(¯Ó¢‚þÿÿÿÿ8œïÈñ1J$71595783-11f4-4081-8bf9-9cbc1f48bcec
gjavascript:S125<18>"Remove this commented out code.(£³ù%8œïÈñ1J$61f39b27-4051-4466-a090-9c45367a0efc
mjavascript:S125"Remove this commented out code.(Ô¸àüýÿÿÿÿ8<>ïÈñ1J$742492b0-6961-445c-a796-59e9def13cb4
mjavascript:S125£"Remove this commented out code.(Ô†‹Üÿÿÿÿÿ8<>ïÈñ1J$bc0e46f1-4b19-4fb2-bcac-6001b864d795
njavascript:S1186®"$Unexpected empty method 'setFilter'.(˾„À8<>ïÈñ1J$34d76a2a-18e9-4b19-bf9a-945708f92cc8
mjavascript:S125ï"Remove this commented out code.(ߴ–ýÿÿÿÿ8<>ïÈñ1J$8b904345-14df-4f3c-90b5-1f4b218ce12a
mjavascript:S125ò"Remove this commented out code.(â§üóúÿÿÿÿ8žïÈñ1J$4643c2c6-76f6-46b1-83ca-93a7a400ed95
hjavascript:S125ü"Remove this commented out code.(§¨‡…8žïÈñ1J$dcd0badb-4c98-456c-b77a-c15d2a0b485f
hjavascript:S125©"Remove this commented out code.(<28>Œï¡8žïÈñ1J$1d0236e8-2fe4-4174-8108-f19d0a54d59a
hjavascript:S125«"Remove this commented out code.(Àá€ï8žïÈñ1J$f690d614-e496-4b8c-aaab-523e9a8c10b4
mjavascript:S125È"Remove this commented out code.(¬š™‡úÿÿÿÿ8žïÈñ1J$44dce024-b90f-4b8e-a12d-1b717e067391

View File

@ -1,21 +0,0 @@
žjavascript:S101"QRename class "Tb_oper_class" to match the regular expression ^[A-Z][a-zA-Z0-9]*$.(ö³ÜÔûÿÿÿÿ8‰<38>æÇñ1J$94226818-c44e-40a2-bd67-b031843406bb
jjavascript:S11863"!Unexpected empty method 'addRow'.(ÿƒÙ²8®„ãÇñ1J$ac7fc8b1-ef90-4972-94e6-6f3b3b217223
mjavascript:S1186<"$Unexpected empty method 'removeRow'.(ýÓ<C3BD>õ8®„ãÇñ1J$efec0fdf-d9c1-4d73-a6c0-a579012fff21
rjavascript:S1186P"$Unexpected empty method 'cellClick'.(¡À‰·úÿÿÿÿ8®„ãÇñ1J$f4d7f7ce-205c-40e6-8b77-a94bc6f9eabb
ljavascript:S125Y"Remove this commented out code.(²Ð•µýÿÿÿÿ8¯„ãÇñ1J$585c5593-7865-47a3-9e48-ba0a69b77e7c
gjavascript:S125q"Remove this commented out code.(Àá€ï8¯„ãÇñ1J$35c42a2a-b281-4594-b53a-2bc4e670a576
hjavascript:S125°"Remove this commented out code.(Ù³˜¦<38>æÇñ1J$0c9cb420-2131-462b-90a8-71c3d4e45c27
hjavascript:S125¹"Remove this commented out code.(ë–þ‚8¯„ãÇñ1J$8bdb0f8d-e72b-40af-b438-74ee201b826e
hjavascript:S125Í"Remove this commented out code.(¦Ùì©8¯„ãÇñ1J$88032d99-72c9-4375-a1a6-2ca103e996c0
javascript:S4138ð"LExpected a `for-of` loop instead of a `for` loop with this simple iteration.(Ʋ†î8<><38>æÇñ1J$f062605b-4b6b-46d1-8b46-f7b9b641bf72
¬javascript:S2703ò"cAdd the "let", "const" or "var" keyword to this declaration of "finalDataList" to make it explicit.(àî 88<38><38>æÇñ1J$99673c79-eaa4-4839-8625-9b2306c9427d
javascript:S101Ð"RRename class "Tb_order_class" to match the regular expression ^[A-Z][a-zA-Z0-9]*$.(¿‡Ô™8®„ãÇñ1J$98eaa811-4d12-457c-8fbe-41f508f7fa13
kjavascript:S1186ý"!Unexpected empty method 'addRow'.(ÿƒÙ²<38>æÇñ1J$67a4eb18-9c06-44b4-916d-b0869c79aa4a
njavascript:S1186"$Unexpected empty method 'removeRow'.(ýÓ<C3BD>õ<38>æÇñ1J$ce8927ef-89ec-4816-8738-b424c4925059
sjavascript:S1186"$Unexpected empty method 'cellClick'.(¡À‰·úÿÿÿÿ<38>æÇñ1J$90f4a8ad-3025-465f-8ddf-48ad145a4c94
mjavascript:S125"Remove this commented out code.(²Ð•µýÿÿÿÿ<38>æÇñ1J$169710e7-aa74-457b-8d6f-715fa7066a1d
hjavascript:S125¬"Remove this commented out code.(Àá€ï<38>æÇñ1J$12b340bc-8d65-44db-811e-8668e07f3d31
hjavascript:S125ð"Remove this commented out code.(õ«×š8¯„ãÇñ1J$af26df5f-fbc9-4971-a8dd-d6c8805b16fb
hjavascript:S125ý"Remove this commented out code.(ë–þ‚8<><38>æÇñ1J$ba3f2e6c-d0b5-4b4c-8f1b-766800e5b542
hjavascript:S125"Remove this commented out code.(¦Ùì©8<><38>æÇñ1J$3c153842-781b-4b8e-b9a2-519c6869096d

View File

@ -0,0 +1,21 @@
Œphp:S103P"KSplit this 132 characters long line (which is greater than 120 authorized).(š8šÙÑ»ò1J$533bd84a-1ff3-4fcd-9476-b2fae5860a23
php:S103Q"KSplit this 131 characters long line (which is greater than 120 authorized).(‹ìç¸üÿÿÿÿ8œÙÑ»ò1J$0abb4160-23ea-41e8-a6d6-b1d4d77e97c3
Œphp:S103R"KSplit this 126 characters long line (which is greater than 120 authorized).(¯äȳ8œÙÑ»ò1J$889f78ee-28e5-454c-8777-a092712193e2
p php:S1781@")Write this "Array" keyword in lower case.(<28>âúúÿÿÿÿ8œÙÑ»ò1J$ef7d5807-9615-4fb6-8a28-bc8c3f0a6843
p php:S1781X")Write this "Array" keyword in lower case.(‘©ò•ûÿÿÿÿ8œÙÑ»ò1J$e50e4d51-472c-4867-bf86-23c7d040a948
p php:S1781[")Write this "Array" keyword in lower case.(¡›Þçøÿÿÿÿ8œÙÑ»ò1J$033559f2-ed86-472e-8a3f-3858e72316f8
`php:S113"'Add a new line at the end of this file.8œÙÑ»ò1J$4d90c281-08ad-4a5f-b1f8-ad7f25d1acd7
  php:S1192'"_Define a constant instead of duplicating this literal "ì •ìƒ<C3AC> ë<>™ìž ë<>˜ì—ˆìеëˆë¤." 3 times.(¦£Ÿ8Ûþ<C39B>½ò1J$0917eb8c-3d97-4257-b18d-dbd6b068f9a3
c php:S1116$"Remove this empty statement.(ôŸŽìúÿÿÿÿ8<>ÙÑ»ò1J$6c0ad351-56e5-4faa-935e-a47e4caa96e6
d php:S1116"Remove this empty statement.(Åñ­õþÿÿÿÿ8<>ÙÑ»ò1J$026df755-4005-4eb5-ad64-34ca65d15443
d php:S1116"Remove this empty statement.(ôŸŽìúÿÿÿÿ8Ýþ<C39D>½ò1J$cf5226e9-7a3c-4b42-8435-8459c8d616fb
`php:S125%"Remove this commented out code.(<28>…Ð<E280A6>8<>ÙÑ»ò1J$f6446fca-1612-4687-b496-b933fc7fb41a
ephp:S125b"Remove this commented out code.(£×±Æúÿÿÿÿ8<>ÙÑ»ò1J$fb20b9eb-85d4-4b1b-82e1-c16f205fcefe
aphp:S125"Remove this commented out code.(<28>…Ð<E280A6>8Ýþ<C39D>½ò1J$9aa40446-7987-4310-bd44-849e701ccdc9
qphp:S121/"0Add curly braces around the nested statement(s).(ŸØ€¸8<>ÙÑ»ò1J$2b2cad74-b824-4c43-be11-5223f3f16c24
 php:S4833"QReplace "include_once" with namespace import mechanism through the "use" keyword.(Á<C381>8žÙÑ»ò1J$368db918-7438-4afb-a66b-bd494725223f
˜ php:S4833 "QReplace "include_once" with namespace import mechanism through the "use" keyword.(¬Üš‰üÿÿÿÿ8žÙÑ»ò1J$435276eb-a586-4dc5-a11c-f32060dfcedd
 php:S4833
"QReplace "include_once" with namespace import mechanism through the "use" keyword.(´çû¤8žÙÑ»ò1J$b0f7cd12-2a30-4924-a96c-616de45424e6
}php:S131"7Add a "case default" clause to this "switch" statement.(úÓÝõþÿÿÿÿ8ŸÙÑ»ò1J$d7cd6abb-1e35-470c-b769-26ff7da4c4e5

View File

@ -7,3 +7,97 @@ e
5home_dir/www/ksvc/site/sts_oper_prod/sts_oper_prod.js,9\c\9cca2a85b11261f43c80a89292c5b26472bcc459 5home_dir/www/ksvc/site/sts_oper_prod/sts_oper_prod.js,9\c\9cca2a85b11261f43c80a89292c5b26472bcc459
[ [
+home_dir/www/ksvc/base/basecode/basecode.js,1\1\110cb7aeee57421d3d58166bbab7f9486ae18297 +home_dir/www/ksvc/base/basecode/basecode.js,1\1\110cb7aeee57421d3d58166bbab7f9486ae18297
k
;home_dir/www/ksvc/prod/mng_order_result/mng_order_result.js,9\6\961998ca1a9275fd6584098a3ca77b3ba90394b3
q
Ahome_dir/www/ksvc/prod/mng_order_result/mng_order_result.ajax.php,7\3\734fc65029dc2ee7fd7d17a9fcfc22cee697523a
l
<home_dir/www/ksvc/prod/mng_order_result/mng_order_result.php,b\0\b0b8ae96467d7d64eea5edf506a2aa58a23660ef
c
3home_dir/www/ksvc/prod/sts_order/sts_order.ajax.php,a\4\a480034532743cdc394e77fef7cdd84c3b6e1e30
o
?home_dir/www/ksvc/prod/cnt_prod_worker/cnt_prod_worker.ajax.php,4\e\4e296c5af2eab950a0a1ef98b9876dcffcf32565
i
9home_dir/www/ksvc/prod/cnt_prod_worker/cnt_prod_worker.js,7\0\7052ff99f6b4fa258cffd03639627294c6a5474c
k
;home_dir/www/ksvc/prod/reg_order_result/reg_order_result.js,e\e\ee5f2c77a4c7f83915980c8bcf0db36b9143a0e8
q
Ahome_dir/www/ksvc/prod/reg_order_result/reg_order_result.ajax.php,6\3\637f70cc37baf89fcd6a56364d0404f00f664a7f
U
%home_dir/www/ksvc/base/plant/plant.js,f\5\f5f7bceee51cd27ef3c87d05c6e0b9daece99e54
Y
)home_dir/www/ksvc/base/bizarea/bizarea.js,4\2\424ac1d1d99bdcae3ebaa670633fb3e8db30265e
S
#home_dir/www/ksvc/base/dept/dept.js,0\5\05e2275d72ffa7c5e472e4df9745b29fdb25bcc5
S
#home_dir/www/ksvc/base/item/item.js,4\b\4b71d5f182d42f1dbc8755a0e34c35ae0a45a25b
]
-home_dir/www/ksvc/prod/sts_order/sts_order.js,8\f\8f924c64f382ae3e79ebf1e17fd8064647c24afd
^
.home_dir/www/ksvc/prod/sts_order/sts_order.php,0\9\097da5593e157dc138c1b0f832b08728515701ae
]
-home_dir/www/ksvc/prod/reg_order/reg_order.js,5\3\538f55a76e37f7c2aa222c6193201947bb77114b
_
/home_dir/www/ksvc/prod/reg_order/popItemOper.js,b\6\b6d924eadd43563a2e09171b578eec6919d4cb6e
Q
!home_dir/www/ksvc/inc/js/popup.js,c\6\c6f14a969958c7a2ea50dad0fc9debd7ef65e2c2
^
.home_dir/www/ksvc/prod/reg_order/reg_order.php,e\d\edd5289f1752ebdd90f1b34a854dddba5526220c
W
'home_dir/www/ksvc/inc/js/popItemOper.js,d\0\d0521196936822c31b5097a21602afe4cc6e49e4
c
3home_dir/www/ksvc/prod/reg_order/reg_order.ajax.php,5\1\511551275fbc396506b504a6206e578e548b5625
q
Ahome_dir/www/ksvc/prod/reg_faclt_result/reg_faclt_result.ajax.php,1\0\1095009eb9c3fd29f89ea504145b1a7cf3a3668a
o
?home_dir/www/ksvc/prod/reg_order_result/prod_result_pop.inc.php,4\9\499da1c4a2527a54682f4be0dcb0c20c89cb5be4
U
%home_dir/www/ksvc/inc/common.ajax.php,0\c\0c1a27bfffa4cb14497c4aee209ed72f49bb3875
[
+home_dir/www/ksvc/prod/reg_plan/reg_plan.js,7\d\7d56bc59bfcb55fbeadb53858e545843b5a06253
h
8home_dir/www/ksvc/site/sts_order_prod/sts_order_prod.php,c\d\cdaa167bac242b837f9c999bede6e14a85a86af6
i
9home_dir/www/ksvc/site/sts_order_prod/reg_prod_result.php,1\f\1f436c64b19d14fe15dc7140f781c3c7a96ffd6c
Y
)home_dir/www/ksvc/base/item/item.ajax.php,0\4\045883b4f5ac6b17d1a3ec1336a89225264923fc
m
=home_dir/www/ksvc/site/sts_order_prod/sts_order_prod.ajax.php,e\7\e73d1585f108592d7f1b07f39a192e019c59381a
a
1home_dir/www/ksvc/insp/reg_insp_qc/reg_insp_qc.js,6\9\69e88a450e2881e80b1dc69d2c6f58d94fd63e38
j
:home_dir/www/ksvc/insp/reg_insp_qc/reg_insp_qc_pop.inc.php,a\4\a4dcf46b6d87559e37eb765b1d459dc4163eae0a
f
6home_dir/www/ksvc/site/sts_oper_prod/sts_oper_prod.php,a\0\a02adff537860eb352fd6cb0393768be6d369cc5
}
Mhome_dir/www/ksvc/site/sts_order_prod/popComponent/sts_order_pop_util.inc.php,f\a\fa48dc62db7f51377363d747a87d1ef772ce2b85
T
$home_dir/www/ksvc/inc/js/customTb.js,8\6\86d2923a2ce1bf0f2776dff0484d1199909bf0fc
a
1home_dir/www/ksvc/prod/reg_plan/reg_plan.ajax.php,3\b\3be1926fb8207650536e01d3c431a43663505a64
S
#.idea/sonarlint/issuestore/index.pb,9\f\9fe84ebb15faf917b7def6236dba604453cc61e0
f
6home_dir/www/ksvc/insp/mng_insp_oper/mng_insp_oper.php,4\f\4fd5f8f3e7f2c28be1c6c70a19bbfbc949fb8805
l
<home_dir/www/ksvc/prod/reg_order_result/reg_order_result.php,c\3\c3c47b8ca2d27d2505a4b9ca015e55e9a9c0cb7c
]
-.idea/sonarlint/securityhotspotstore/index.pb,8\8\88a9255124c95bdc913197c120a8d560edc59c8e
S
#home_dir/www/ksvc/base/insp/insp.js,f\8\f85250f0c8b4242b604fddcd054686bab1bba009
T
$home_dir/www/ksvc/base/insp/insp.php,2\6\26541a82c31ab085e11960165767ebf6b8f80f3b
S
#home_dir/www/ksvc/inc/css/style.css,9\c\9cbe5ec4a1e5d8e256866a5d794282d4cdf86523
b
2home_dir/www/ksvc/inc/css/scss/common/_common.scss,c\0\c09a3da7e00c0483fb6987e5ee515d5fe4dc474f
<EFBFBD>
Q.idea/sonarlint/securityhotspotstore/7/3/734fc65029dc2ee7fd7d17a9fcfc22cee697523a,6\b\6b122708f6c726fcb1716c675c3323bb72e4d770
d
4home_dir/www/ksvc/inc/css/scss/component/_popup.scss,7\9\79348a1581b6542e601fd9512b4f44d6fb19dbe0
l
<home_dir/www/ksvc/faclt/reg_faclt_defect/reg_faclt_defect.js,0\a\0a6ec1ebb24ad92f01078e972dfd70ab13f5bf58
<EFBFBD>
Q.idea/sonarlint/securityhotspotstore/9/6/961998ca1a9275fd6584098a3ca77b3ba90394b3,3\e\3e4d73edffccbc4f02bb12696ceb4730d4675644
c
3home_dir/www/ksvc/inc/css/scss/component/_form.scss,0\a\0a400853adbf4e029ab2c2d410c62555546f10bc

View File

@ -7,3 +7,97 @@ e
5home_dir/www/ksvc/site/sts_oper_prod/sts_oper_prod.js,9\c\9cca2a85b11261f43c80a89292c5b26472bcc459 5home_dir/www/ksvc/site/sts_oper_prod/sts_oper_prod.js,9\c\9cca2a85b11261f43c80a89292c5b26472bcc459
[ [
+home_dir/www/ksvc/base/basecode/basecode.js,1\1\110cb7aeee57421d3d58166bbab7f9486ae18297 +home_dir/www/ksvc/base/basecode/basecode.js,1\1\110cb7aeee57421d3d58166bbab7f9486ae18297
k
;home_dir/www/ksvc/prod/mng_order_result/mng_order_result.js,9\6\961998ca1a9275fd6584098a3ca77b3ba90394b3
q
Ahome_dir/www/ksvc/prod/mng_order_result/mng_order_result.ajax.php,7\3\734fc65029dc2ee7fd7d17a9fcfc22cee697523a
l
<home_dir/www/ksvc/prod/mng_order_result/mng_order_result.php,b\0\b0b8ae96467d7d64eea5edf506a2aa58a23660ef
c
3home_dir/www/ksvc/prod/sts_order/sts_order.ajax.php,a\4\a480034532743cdc394e77fef7cdd84c3b6e1e30
o
?home_dir/www/ksvc/prod/cnt_prod_worker/cnt_prod_worker.ajax.php,4\e\4e296c5af2eab950a0a1ef98b9876dcffcf32565
i
9home_dir/www/ksvc/prod/cnt_prod_worker/cnt_prod_worker.js,7\0\7052ff99f6b4fa258cffd03639627294c6a5474c
k
;home_dir/www/ksvc/prod/reg_order_result/reg_order_result.js,e\e\ee5f2c77a4c7f83915980c8bcf0db36b9143a0e8
q
Ahome_dir/www/ksvc/prod/reg_order_result/reg_order_result.ajax.php,6\3\637f70cc37baf89fcd6a56364d0404f00f664a7f
U
%home_dir/www/ksvc/base/plant/plant.js,f\5\f5f7bceee51cd27ef3c87d05c6e0b9daece99e54
Y
)home_dir/www/ksvc/base/bizarea/bizarea.js,4\2\424ac1d1d99bdcae3ebaa670633fb3e8db30265e
S
#home_dir/www/ksvc/base/dept/dept.js,0\5\05e2275d72ffa7c5e472e4df9745b29fdb25bcc5
S
#home_dir/www/ksvc/base/item/item.js,4\b\4b71d5f182d42f1dbc8755a0e34c35ae0a45a25b
]
-home_dir/www/ksvc/prod/sts_order/sts_order.js,8\f\8f924c64f382ae3e79ebf1e17fd8064647c24afd
^
.home_dir/www/ksvc/prod/sts_order/sts_order.php,0\9\097da5593e157dc138c1b0f832b08728515701ae
]
-home_dir/www/ksvc/prod/reg_order/reg_order.js,5\3\538f55a76e37f7c2aa222c6193201947bb77114b
_
/home_dir/www/ksvc/prod/reg_order/popItemOper.js,b\6\b6d924eadd43563a2e09171b578eec6919d4cb6e
Q
!home_dir/www/ksvc/inc/js/popup.js,c\6\c6f14a969958c7a2ea50dad0fc9debd7ef65e2c2
^
.home_dir/www/ksvc/prod/reg_order/reg_order.php,e\d\edd5289f1752ebdd90f1b34a854dddba5526220c
W
'home_dir/www/ksvc/inc/js/popItemOper.js,d\0\d0521196936822c31b5097a21602afe4cc6e49e4
c
3home_dir/www/ksvc/prod/reg_order/reg_order.ajax.php,5\1\511551275fbc396506b504a6206e578e548b5625
q
Ahome_dir/www/ksvc/prod/reg_faclt_result/reg_faclt_result.ajax.php,1\0\1095009eb9c3fd29f89ea504145b1a7cf3a3668a
o
?home_dir/www/ksvc/prod/reg_order_result/prod_result_pop.inc.php,4\9\499da1c4a2527a54682f4be0dcb0c20c89cb5be4
U
%home_dir/www/ksvc/inc/common.ajax.php,0\c\0c1a27bfffa4cb14497c4aee209ed72f49bb3875
[
+home_dir/www/ksvc/prod/reg_plan/reg_plan.js,7\d\7d56bc59bfcb55fbeadb53858e545843b5a06253
h
8home_dir/www/ksvc/site/sts_order_prod/sts_order_prod.php,c\d\cdaa167bac242b837f9c999bede6e14a85a86af6
i
9home_dir/www/ksvc/site/sts_order_prod/reg_prod_result.php,1\f\1f436c64b19d14fe15dc7140f781c3c7a96ffd6c
Y
)home_dir/www/ksvc/base/item/item.ajax.php,0\4\045883b4f5ac6b17d1a3ec1336a89225264923fc
m
=home_dir/www/ksvc/site/sts_order_prod/sts_order_prod.ajax.php,e\7\e73d1585f108592d7f1b07f39a192e019c59381a
a
1home_dir/www/ksvc/insp/reg_insp_qc/reg_insp_qc.js,6\9\69e88a450e2881e80b1dc69d2c6f58d94fd63e38
j
:home_dir/www/ksvc/insp/reg_insp_qc/reg_insp_qc_pop.inc.php,a\4\a4dcf46b6d87559e37eb765b1d459dc4163eae0a
f
6home_dir/www/ksvc/site/sts_oper_prod/sts_oper_prod.php,a\0\a02adff537860eb352fd6cb0393768be6d369cc5
}
Mhome_dir/www/ksvc/site/sts_order_prod/popComponent/sts_order_pop_util.inc.php,f\a\fa48dc62db7f51377363d747a87d1ef772ce2b85
T
$home_dir/www/ksvc/inc/js/customTb.js,8\6\86d2923a2ce1bf0f2776dff0484d1199909bf0fc
a
1home_dir/www/ksvc/prod/reg_plan/reg_plan.ajax.php,3\b\3be1926fb8207650536e01d3c431a43663505a64
S
#.idea/sonarlint/issuestore/index.pb,9\f\9fe84ebb15faf917b7def6236dba604453cc61e0
f
6home_dir/www/ksvc/insp/mng_insp_oper/mng_insp_oper.php,4\f\4fd5f8f3e7f2c28be1c6c70a19bbfbc949fb8805
l
<home_dir/www/ksvc/prod/reg_order_result/reg_order_result.php,c\3\c3c47b8ca2d27d2505a4b9ca015e55e9a9c0cb7c
]
-.idea/sonarlint/securityhotspotstore/index.pb,8\8\88a9255124c95bdc913197c120a8d560edc59c8e
S
#home_dir/www/ksvc/base/insp/insp.js,f\8\f85250f0c8b4242b604fddcd054686bab1bba009
T
$home_dir/www/ksvc/base/insp/insp.php,2\6\26541a82c31ab085e11960165767ebf6b8f80f3b
S
#home_dir/www/ksvc/inc/css/style.css,9\c\9cbe5ec4a1e5d8e256866a5d794282d4cdf86523
b
2home_dir/www/ksvc/inc/css/scss/common/_common.scss,c\0\c09a3da7e00c0483fb6987e5ee515d5fe4dc474f
<EFBFBD>
Q.idea/sonarlint/securityhotspotstore/7/3/734fc65029dc2ee7fd7d17a9fcfc22cee697523a,6\b\6b122708f6c726fcb1716c675c3323bb72e4d770
d
4home_dir/www/ksvc/inc/css/scss/component/_popup.scss,7\9\79348a1581b6542e601fd9512b4f44d6fb19dbe0
l
<home_dir/www/ksvc/faclt/reg_faclt_defect/reg_faclt_defect.js,0\a\0a6ec1ebb24ad92f01078e972dfd70ab13f5bf58
<EFBFBD>
Q.idea/sonarlint/securityhotspotstore/9/6/961998ca1a9275fd6584098a3ca77b3ba90394b3,3\e\3e4d73edffccbc4f02bb12696ceb4730d4675644
c
3home_dir/www/ksvc/inc/css/scss/component/_form.scss,0\a\0a400853adbf4e029ab2c2d410c62555546f10bc

8
.idea/sqlDataSources.xml Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DdlMappings">
<mapping uuid="179408e0-ea33-4e7e-87f9-7f9aad4abd93" name="@localhost Mapping">
<data-sources db="e9ee0d31-6ed0-462d-bf15-6a5a713bcb0e" ddl="7631f190-4bc5-4110-b097-dedfaf7d868d" />
</mapping>
</component>
</project>

View File

@ -2,7 +2,7 @@
<project version="4"> <project version="4">
<component name="WebServers"> <component name="WebServers">
<option name="servers"> <option name="servers">
<webServer id="e01a7650-6597-4b1e-b222-28456f928f3a" name="hypt.kuls.co.kr"> <webServer id="e01a7650-6597-4b1e-b222-28456f928f3a" name="hypt.kuls.co.kr2">
<fileTransfer accessType="SFTP" host="hypt.kuls.co.kr" port="990" sshConfigId="9d829eec-1bcf-43f1-aa25-b062797a0a79" sshConfig="hypt.kuls.co.kr@hypt.kuls.co.kr:990 agent" authAgent="true"> <fileTransfer accessType="SFTP" host="hypt.kuls.co.kr" port="990" sshConfigId="9d829eec-1bcf-43f1-aa25-b062797a0a79" sshConfig="hypt.kuls.co.kr@hypt.kuls.co.kr:990 agent" authAgent="true">
<advancedOptions> <advancedOptions>
<advancedOptions dataProtectionLevel="Private" keepAliveTimeout="0" passiveMode="true" shareSSLContext="true" /> <advancedOptions dataProtectionLevel="Private" keepAliveTimeout="0" passiveMode="true" shareSSLContext="true" />

View File

@ -375,6 +375,7 @@ class Tb_dept_class {
}, },
{ field: "DEPT_NM", title: "부서명", width: 150, { field: "DEPT_NM", title: "부서명", width: 150,
editor: tb_custom_editor.upper, editor: tb_custom_editor.upper,
hozAlign:"left",
validator:{ validator:{
type:tb_custom_validator.stringNumeric, type:tb_custom_validator.stringNumeric,
parameters: "특수문자를 입력할 수 없습니다." parameters: "특수문자를 입력할 수 없습니다."
@ -384,7 +385,7 @@ class Tb_dept_class {
{ field: "PAR_DEPT_NM", title: "상위부서명", width: 200, }, { field: "PAR_DEPT_NM", title: "상위부서명", width: 200, },
{ field: "BIZ_AREA_CD", title: "사업장코드", width: 150, cssClass:"editable-cell" }, { field: "BIZ_AREA_CD", title: "사업장코드", width: 150, cssClass:"editable-cell" },
{ field: "BIZ_AREA_NM", title: "사업장명", width: 200, }, { field: "BIZ_AREA_NM", title: "사업장명", width: 200, },
{ field: "EMP_NO", title: "관리자", width: 100, cssClass:"editable-cell" }, { field: "EMP_NO", title: "관리자", width: 100, cssClass:"editable-cell", },
{ field: "USE_FLG", title: "사용", width: 50, cssClass: "editable-cell", formatter: tb_common_funtions.formatterToggleboxGreenIcon, formatterParams: { checkval: "Y" }, }, { field: "USE_FLG", title: "사용", width: 50, cssClass: "editable-cell", formatter: tb_common_funtions.formatterToggleboxGreenIcon, formatterParams: { checkval: "Y" }, },
]; ];

View File

@ -297,12 +297,13 @@ class Tb_insp_class {
}, },
{ field: "INSP_NAME", title: "검사항목명", width: 500, { field: "INSP_NAME", title: "검사항목명", width: 500,
editor: "input", editor: "input",
hozAlign:"left",
validator:{ validator:{
type:tb_custom_validator.stringNumeric, type:tb_custom_validator.stringNumeric,
parameters: "특수문자를 입력할 수 없습니다." parameters: "특수문자를 입력할 수 없습니다."
}, },
}, },
{ field: "INSP_METH", title: "검사유형", width: 100, editor:"input"}, { field: "INSP_METH", title: "검사유형",hozAlign:"left", width: 100, editor:"input"},
{ field: "USEFLAG", title: "사용", width: 50, cssClass: "editable-cell", formatter: tb_common_funtions.formatterToggleboxGreenIcon, formatterParams: { checkval: "Y" }, }, { field: "USEFLAG", title: "사용", width: 50, cssClass: "editable-cell", formatter: tb_common_funtions.formatterToggleboxGreenIcon, formatterParams: { checkval: "Y" }, },
]; ];

View File

@ -98,5 +98,6 @@ include_once _SVC_INC_PATH_ . "/header.php";
<?php include_once _SVC_INC_PATH_ . "/footer_common.php"; ?> <?php include_once _SVC_INC_PATH_ . "/footer_common.php"; ?>
<script src="./insp.js"></script> <script src="./insp.js"></script>
<script src="./insp_excel.js"></script>
<?php <?php
include_once _SVC_INC_PATH_ . "/footer.php"; include_once _SVC_INC_PATH_ . "/footer.php";

View File

@ -13,13 +13,13 @@ class Tb_item_class {
let _this = this; let _this = this;
_this.tbList =""; _this.tbList ="";
_this.itemData = ""; _this.itemData = "";
_this.ITEM_CD = "";
this.ajaxUrl = "./item.ajax.php"; this.ajaxUrl = "./item.ajax.php";
this.container = document.querySelector(container); this.container = document.querySelector(container);
this.table = this.container.querySelector(".hy-table"); this.table = this.container.querySelector(".hy-table");
// this.upBtn = this.container.querySelector(".up-btn") || ""; // this.upBtn = this.container.querySelector(".up-btn") || "";
// this.downBtn = this.container.querySelector(".down-btn") || ""; // this.downBtn = this.container.querySelector(".down-btn") || "";
this.addBtn = this.container.querySelector(".add-btn"); this.addBtn = this.container.querySelector(".add-btn");
_this.ITEM_CD = "";
this.removeBtn = this.container.querySelector(".remove-btn"); this.removeBtn = this.container.querySelector(".remove-btn");
} }
@ -279,7 +279,7 @@ class Tb_item_class {
}, },
{ formatter: "rownum", title: "NO", width: 50 }, { formatter: "rownum", title: "NO", width: 50 },
{ field: "ITEM_CD", title: "품목", width: 150,editor:'input',editable:(cell)=>{ let val = cell.getData(); return val._STATUS_ === 'I' }, }, //품목 코드 { field: "ITEM_CD", title: "품목", width: 150,editor:'input',editable:(cell)=>{ let val = cell.getData(); return val._STATUS_ === 'I' }, }, //품목 코드
{ field: "ITEM_NM", title: "품명", width: 250,editor:'input', }, //품목 코드 { field: "ITEM_NM", title: "품명", width: 250,editor:'input', hozAlign:"left" }, //품목 코드
{ field: "DRAW_NO", title: "도면", width: 200,editor:'input' }, //도면 번호 - popup { field: "DRAW_NO", title: "도면", width: 200,editor:'input' }, //도면 번호 - popup
{ field: "ITEM_GRP", title: "품목 그룹", width: 80, { field: "ITEM_GRP", title: "품목 그룹", width: 80,
editor:"list", editor:"list",
@ -1365,8 +1365,8 @@ class Tb_pic_class {
let _this = this; let _this = this;
_this.file = ""; _this.file = "";
_this.itemData =""; _this.itemData ="";
this.ajaxUrl = "./item.ajax.php";
_this.download_url = "/include/getFile.php"; _this.download_url = "/include/getFile.php";
this.ajaxUrl = "./item.ajax.php";
this.container = document.querySelector(container); this.container = document.querySelector(container);
this.table = this.container.querySelector(".hy-table"); this.table = this.container.querySelector(".hy-table");
this.addBtn = this.container.querySelector(".add-btn"); this.addBtn = this.container.querySelector(".add-btn");

View File

@ -294,12 +294,13 @@ class Tb_facility_class {
{ formatter: "rownum", title: "NO", width: 50}, { formatter: "rownum", title: "NO", width: 50},
{ field: "FACLT_NM", title: "설비", width: 150, editor: "input" , editable:(cell)=>{ let val = cell.getData(); return val._STATUS_ === 'I' },}, { field: "FACLT_NM", title: "설비", width: 150, editor: "input" , editable:(cell)=>{ let val = cell.getData(); return val._STATUS_ === 'I' },},
{ field: "FACLT_CD", visible: false, width: 150}, { field: "FACLT_CD", visible: false, width: 150},
{ field: "DEFECT_DT", title: "고장일자", width: 150,editor:'date', editorParams:{ { field: "DEFECT_DT", title: "발생일", width: 150,editor:'date', editorParams:{
min:"01/01/2000", // the minimum allowed value for the date picker min:"01/01/2000", // the minimum allowed value for the date picker
max:"02/12/9999", // the maximum allowed value for the date picker max:"02/12/9999", // the maximum allowed value for the date picker
format:"yyyy-MM-dd", // the format of the date value stored in the cell format:"yyyy-MM-dd", // the format of the date value stored in the cell
verticalNavigation:"table"}}, verticalNavigation:"table"}},
{ field: "DEFECT_CONTENT", title: "고장내역", width: 150, editor: "input"}, { field: "DEF_TM", title: "발생시간", width: 150, editor: tb_custom_editor.time },
{ field: "DEFECT_CONTENT", title: "고장내역", width: 300, editor: "input"},
]; ];
const commonFieldData = { const commonFieldData = {
headerSort: true, headerSort: true,

View File

@ -51,6 +51,7 @@ button {
color: #828282; color: #828282;
background-color: rgba(255, 255, 255, 0.973); background-color: rgba(255, 255, 255, 0.973);
} }
.basic-btn { .basic-btn {
border: solid 2px transparent; border: solid 2px transparent;
border-radius: 5px; border-radius: 5px;
@ -78,6 +79,92 @@ button {
font-size: 13px; font-size: 13px;
} }
.btn-danger {
height: 100%;
border: solid 2px red;
border-radius: 3px;
color: red;
background-color: white;
&:hover {
background-color: red;
color: white;
}
}
.close-btn {
border: solid 2px #cf5b5b;
color: white;
background-color: #cf5b5b;
border-radius: 3px;
&:hover {
background-color: white;
color: #cf5b5b;
}
}
// .run-btn {
// border: solid 2px #5b73cf;
// color: white;
// background-color: #5b73cf;
// border-radius: 3px;
// &:hover {
// background-color: white;
// color: #5b73cf;
// }
// }
// .norun-btn {
// border: solid 2px #f3da8f;
// color: white;
// background-color: #f3da8f;
// border-radius: 3px;
// &:hover {
// background-color: white;
// color: #f3da8f;
// }
// }
.disabled-btn {
background-color: rgba(255, 255, 255, 0.973);
color: #dddddd;
border-color: #e9e9e9;
cursor: default;
&:hover {
background-color: rgba(255, 255, 255, 0.973);
color: #dddddd;
border-color: #e9e9e9;
}
}
.tab-btn {
background-color: white;
color: black;
border: solid 1px $gray-004;
height: 30px;
width: 25%;
border-right: none;
cursor: pointer;
&:hover {
background-color: $gray-004;
color: white;
}
}
.left-round{
border-radius: 50px 0px 0px 50px;
}
.right-round{
border-radius: 0px 50px 50px 0px;
border-right: solid 1px $gray-004;
}
// 전체 프레임 // 전체 프레임
.have-image { .have-image {
background-repeat: no-repeat; background-repeat: no-repeat;
@ -89,68 +176,154 @@ button {
height: calc(100vh - 48px); height: calc(100vh - 48px);
display: flex; display: flex;
justify-content: center; justify-content: center;
position: relative;
} }
.container .main-part { .container .main-part {
width: calc(100% - 280px); width: calc(100% - 280px);
height: 100%; height: 100%;
position: absolute; display: flex;
top: 0; flex-direction: column;
right: 0; }
.breadcrumb {
.inner-container {
padding: 20px 15px;
a, i {
font-size: 15px;
}
a:nth-of-type(3) {
font-size: 20px;
color: #1F2859;
font-weight: 700;
}
}
} }
// item 탭메뉴
.sub-container { .sub-container {
width: 49%; width: 49%;
height: calc(100% - 25px); height: calc(100% - 25px);
.tab-menu { .button-box {
gap: 5px; &.main-table {
margin-bottom: 10px; display: flex;
border-bottom: solid 2px $blue-005; }
li { &.sub-table {
border-left: solid 2px $blue-005;
border-right: solid 2px $blue-005;
border-top: solid 2px $blue-005;
border-radius: 5px 5px 0px 0px;
padding: 10px 12px;
color: black;
}
.first-tab {
background-color: $blue-005;
color: white;
}
}
.first-table-container {
display: flex;
height: calc(100% - 20px);
}
.second-table-container {
display: none;
height: calc(100% - 20px);
}
&.on {
.first-tab {
background-color: white;
color: black;
}
.second-tab {
background-color: $blue-005;
color: white;
}
.first-table-container {
display: none; display: none;
} }
.second-table-container { }
}
.tab-menu {
gap: 5px;
border-bottom: solid 2px #162788;
li {
border-left: solid 2px #162788;
border-right: solid 2px #162788;
border-top: solid 2px #162788;
border-radius: 5px 5px 0 0;
padding: 7px 12px;
background-color: white;
color: #162788;
min-width: 80px;
text-align: center;
font-size: 13px;
font-weight: 500;
&:hover{
background-color: #162788;
color: white;
}
&.on {
background-color: #162788;
color: white;
}
}
}
.tab-container {
height: 98%;
> div {
display: none;
height: calc(100vh - 320px);
.table-box:first-of-type, .tab-box:first-of-type {
width: 100%;
position: relative;
.table-title {
position: absolute;
top: -35px;
right: 0;
margin-bottom: 15px;
}
}
&.on {
display: flex; display: flex;
} }
} }
} }
// item 탭메뉴
// .sub-container {
// width: 49%;
// height: calc(100% - 25px);
// .tab-menu {
// gap: 5px;
// margin-bottom: 10px;
// border-bottom: solid 2px $blue-005;
// li {
// border-left: solid 2px $blue-005;
// border-right: solid 2px $blue-005;
// border-top: solid 2px $blue-005;
// border-radius: 5px 5px 0px 0px;
// padding: 10px 12px;
// color: black;
// }
// .first-tab {
// background-color: $blue-005;
// color: white;
// }
// }
// .first-table-container {
// display: flex;
// height: calc(100% - 20px);
// }
// .second-table-container {
// display: none;
// height: calc(100% - 20px);
// }
// &.on {
// .first-tab {
// background-color: white;
// color: black;
// }
// .second-tab {
// background-color: $blue-005;
// color: white;
// }
// .first-table-container {
// display: none;
// }
// .second-table-container {
// display: flex;
// }
// }
// }
// 메인 프레임 // 메인 프레임
.table-title { .table-title {
display: flex; display: flex;
@ -166,7 +339,7 @@ button {
} }
.contents-container { .contents-container {
height: calc(100vh - 140px); height: calc(100vh - 235px);
width: 100%; width: 100%;
&.full-height { &.full-height {
@ -175,7 +348,7 @@ button {
.table-container { .table-container {
width: 100%; width: 100%;
height: calc(100% - 40px); height: 98%;
margin: 10px 0 30px 0; margin: 10px 0 30px 0;
.inner-container { .inner-container {
@ -210,13 +383,16 @@ button {
width: 100%; width: 100%;
height: 98%; height: 98%;
} }
.flexrow { .sub-table, .inner-container{
width: 100%;
> .table-box { &.flexrow {
width: 49%; width: 100%;
} > .table-box {
> .flexcol { width: 49%;
width: 49%; }
> .flexcol {
width: 49%;
}
} }
} }
.flexcol { .flexcol {
@ -232,3 +408,46 @@ button {
} }
.tb-height-full {
height: calc(100vh - 320px);
}
.tb-height-half {
height: calc(50vh - 205px);
}
.tb-height-30 {
height: calc(100vh - 600px);
}
.label-tag{
display: flex;
justify-content: center;
align-items: center;
height: 25px;
width: 60px;
border-radius: 5px;
span{
width: 6px;
height: 100%;
margin-right: 9px;
}
}
.blue-back{
background-color: #d2e7ff;
}
.green-back{
background-color: #d2ffd5;
}
.orange-back{
background-color: #ffe0d2;
}
.gray-back{
background-color: #d9d9d9;
}
.min-width-572{
min-width: 572px;
}

View File

@ -1,92 +1,305 @@
// form 관련 css form {
// form.flexrow { height: 100%;
// .text-container {
// width: 100%;
// overflow-y: auto;
// .row-input-box { // 현장 작업자 실적등록 팝업
// width: fit-content; &[name=frmWorkData]{
width: 80vw;
// input { .input-box{
// height: 15px; position: relative;
// }
// .width-15 {
// width: 15%;
// min-width: 65px;
// }
// .width-30 {
// width: 30%;
// min-width: 140px;
// }
// label {
// min-width: 55px;
// width: 12%;
// display: block;
// padding: 5px;
// text-wrap: nowrap;
// text-align: end;
// }
// }
// }
// .img-container {
// width: 400px;
// border: solid 1px black;
// }
// } span{
position: absolute;
right: 15px;
top: 30%;
cursor: pointer;
i{
font-size: 1.2em;
color: $gray-004;
}
}
}
&>div{
width: 100%;
&.form-button-container{
height: fit-content;
padding: 10px 0px;
border-radius: 5px;
display: flex;
align-items: center;
width: 100%;
box-sizing: border-box;
.form-button-box{
// width: 50%;
button{
border-radius: 50px;
border: solid 2px $blue-001;
color: $blue-001;
font-size: 1.1em;
font-weight: 600;
background-color: white;
width: 140px;
padding: 10px 14px;
&:hover, &.on{
background-color: $blue-001;
color: white;
}
// width: fit-content;
// padding: 0px 10px;
// height: 32px;
// border: solid 2px $blue-005;
// border-bottom: none;
// border-radius: 5px 5px 0 0;
// background: white;
// color: $blue-005;
// font-size: 13px;
// font-weight: 600;
// &:hover, &.on{
// background: $blue-005;
// color: white;
// }
}
}
form{ }
.add-btn, .remove-btn{
&.form-contents{
.info-container{
min-height: 510px;
height: 80vh;
width: 50%;
}
.detail-container{
min-height: 510px;
height: 80vh;
width: 50%;
overflow: hidden;
.detail-contents{
width: 100%;
.form-header{
width: 100%;
textarea{
height: 100px;
resize: none;
}
.add-btn{
margin-right: 10px;
}
}
.table-box{
width: 100%;
height: calc(100% - 70px);
&>div{
width: 100%;
}
.tab-menu{
width: 100%;
// border: none;
li{
height: 34px;
box-sizing: border-box;
// border-radius: 50px;
// border: solid 2px $blue-001;
// &:hover{
// background-color: $blue-001;
// }
// &.on{
// background-color: $blue-001;
// }
}
}
.table-title{
width: 99%;
.button-box{
width: 100%;
margin-top: 10px;
}
}
.hy-table{
margin: 0;
}
}
}
.height-full{
height: 100% !important;
}
.height-93{
height: 93% !important;
}
.height-half{
height: calc(100% - 220px) !important;
}
.round-tab-box{
width: calc(100% - 120px);
}
}
}
}
}
// 설비관리 대장 팝업
&[name=frmFacility]{
width: 800px;
height: 525px;
}
// 거래처 등록 팝업
&[name=frmPartner]{
width: 800px;
min-height: 525px;
height: 70vh;
}
.add-btn, .remove-btn {
padding: 7px 12px; padding: 7px 12px;
cursor: pointer; cursor: pointer;
} }
.form-contents{ .form-contents {
padding-top: 20px; height: 70% !important;
height: auto !important; overflow: hidden;
.form-box{ .form-box {
padding-bottom: 20px; overflow: auto;
border-bottom: solid 1px; background: #F6F6FC;
height: 100%;
padding: 20px 0px;
.input-container{ .input-container {
width: 100%; width: calc(100% - 10px);
height: -moz-fit-content;
height: fit-content;
flex-wrap: wrap; flex-wrap: wrap;
.input-box{ .input-box {
width: 100%; width: 100%;
height: -moz-fit-content;
height: fit-content;
align-items: center; align-items: center;
label, .input-title{ label, .input-title {
display: inline-block; display: inline-block;
text-align: justify;
width: 100px; width: 100px;
padding-right: 10px; padding-right: 10px;
margin: 0; margin: 0;
text-align: end;
:after{
content: "";
width: 100%;
display: inline-block;
}
} }
.check-label{ input[type=button]{
width: 80px;
margin: 0 15px;
text-align: center;
}
label.form_toggle, .input-title.form_toggle {
text-align: start;
}
.check-label {
display: inline-flex; display: inline-flex;
width: 100px; width: 100px;
align-items: center; align-items: center;
label{ label {
width: auto; width: auto;
} }
} }
input[type="text"], select{
input[type=text], input[type=tel], input[type=datetime-local], select, textarea {
border: solid 1px #c7c7c7;
box-sizing: border-box; box-sizing: border-box;
height: 30px; height: 30px;
width: calc(100% - 120px); width: calc(100% - 120px);
min-width: 100px;
padding: 0px 10px; padding: 0px 10px;
&.sub-input{
width: calc(100% - 6px);
}
} }
.input-text{
width: calc(50% - 65px) !important;
text-align: center;
display: inline-block;
}
}
}
}
.img-container {
padding-right: 10px;
height: 100%;
gap: 5%;
.img-box {
height: 85%;
width: calc(100% - 2px);
border: solid 1px;
display: flex;
align-items: center;
justify-content: center;
position: relative;
background-color: white;
.img-cover {
display: none;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(8, 8, 8, 0.322);
justify-content: center;
align-items: center;
input {
width: 30%;
height: 10%;
text-align: center;
font-size: 1.2em;
}
}
&:hover .img-cover {
display: flex;
}
}
label {
height: 10%;
width: 100%;
box-sizing: border-box;
display: flex;
justify-content: center;
align-items: center;
font-size: 1.2em;
input {
display: none;
} }
} }
} }
@ -105,6 +318,7 @@ form{
&:hover{ &:hover{
background: white; background: white;
border: solid 2px #f38814 !important;
color: #f38814; color: #f38814;
} }
} }

View File

@ -1,85 +1,124 @@
#awn-popup-wrapper{ #awn-popup-wrapper {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
position: fixed; position: fixed;
top: 0; top: 0;
bottom: 0; bottom: 0;
left: 0; left: 0;
right: 0; right: 0;
background: rgba(0, 0, 0, 0.7); background: rgba(0, 0, 0, 0.7);
z-index: 10;
.awn-popup-body{ .awn-popup-body {
background: #fff; background: #fff;
box-shadow: 0px 0px 11px 0px rgba(0, 0, 0, 0.20); box-shadow: 0px 0px 11px 0px rgba(0, 0, 0, 0.2);
border-radius: 5px; border-radius: 5px;
font-size: 14px; font-size: 14px;
max-width: 833px; // max-width: 833px;
min-width: 500px; max-width: max-content;
height: 531px; // min-width: 500px;
// min-height: 531px;
// max-height: fit-content;
// height: 80vh;
padding: 24px; padding: 24px;
position: relative; position: relative;
word-break: break-word; word-break: break-word;
.awn-popup-confirm{ &>div{
height: 100%; height: 100%;
overflow-y: auto;
overflow-x: hidden;
.awn-popup-title{ .awn-form{
.awn-popup-search{
height: 100%;
}
.table-box{
padding: 0 10px;
width: calc(100% - 20px);
}
}
}
.awn-popup-confirm.custom-popup {
height: 500px;
min-width: 500px;
// overflow-y: auto;
// overflow-x: hidden;
overflow: hidden;
&.free-height{
height: auto;
}
// &.free-width{
// width: auto;
// }
.awn-popup-title {
font-size: 20px; font-size: 20px;
margin-bottom: 10px; margin-bottom: 10px;
i{
i {
font-size: 20px; font-size: 20px;
} }
} }
.awn-popup-search{
.s_exp{ .awn-popup-search {
.s_exp {
margin: 0 0 10px 0; margin: 0 0 10px 0;
color: $blue-004; color: #1F2859;
} }
.s_fld{
.s_fld {
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
gap: 6px; gap: 6px;
align-items: center; align-items: center;
height: 32px; height: 32px;
margin-bottom: 10px; margin-bottom: 10px;
select, input{ select, input {
box-sizing: border-box; box-sizing: border-box;
height: 100%; height: 100%;
padding: 0 10px; padding: 0 10px;
border-radius: 3px; border-radius: 3px;
border: 1px solid $gray-003; border: 1px solid #D9D9D9;
} }
.btn-danger{
height: 100%;
border: solid 2px red;
border-radius: 3px;
color: red;
background-color: white;
&:hover{
background-color: red;
color: white;
}
}
} }
} }
.awn-popup-content{
.title-container{
justify-content: space-between;
}
.awn-popup-content {
max-height: 430px; max-height: 430px;
height: 100%; height: 100%;
padding: 0 10px;
overflow: auto; overflow: auto;
.tabulator.hy-table{}
.tabulator.hy-table{
height: 85%;;
}
}
.form-contents{
height: 90% !important;
overflow: auto;
.form-box{
height: fit-content;
overflow: visible;
}
} }
} }
}
}
#awn-popup-wrapper .awn-popup-body.awn-popup-confirm{
height: auto;
}
@ -161,5 +200,5 @@
// } // }
// } // }
// } // }
} // }
} // }

View File

@ -102,28 +102,6 @@ button {
color: #cf5b5b; color: #cf5b5b;
} }
.run-btn {
border: solid 2px #5b73cf;
color: white;
background-color: #5b73cf;
border-radius: 3px;
}
.run-btn:hover {
background-color: white;
color: #5b73cf;
}
.norun-btn {
border: solid 2px #f3da8f;
color: white;
background-color: #f3da8f;
border-radius: 3px;
}
.norun-btn:hover {
background-color: white;
color: #f3da8f;
}
.disabled-btn { .disabled-btn {
background-color: rgba(255, 255, 255, 0.973); background-color: rgba(255, 255, 255, 0.973);
color: #dddddd; color: #dddddd;
@ -366,6 +344,10 @@ button {
background-color: #d9d9d9; background-color: #d9d9d9;
} }
.min-width-572 {
min-width: 572px;
}
header { header {
background: #1F2859; background: #1F2859;
display: flex; display: flex;
@ -937,31 +919,54 @@ form {
form[name=frmWorkData] { form[name=frmWorkData] {
width: 80vw; width: 80vw;
} }
form[name=frmWorkData] .input-box {
position: relative;
}
form[name=frmWorkData] .input-box span {
position: absolute;
right: 15px;
top: 30%;
cursor: pointer;
}
form[name=frmWorkData] .input-box span i {
font-size: 1.2em;
color: #c7c7c7;
}
form[name=frmWorkData] > div { form[name=frmWorkData] > div {
width: 100%; width: 100%;
} }
form[name=frmWorkData] > div.form-button-container { form[name=frmWorkData] > div.form-button-container {
height: 80px; height: -moz-fit-content;
height: fit-content;
padding: 10px 0px;
border-radius: 5px; border-radius: 5px;
border: 1px solid #e9e9e9;
background: #FAFAFA;
display: flex; display: flex;
align-items: center; align-items: center;
width: 100%; width: 100%;
padding: 0 20px;
box-sizing: border-box; box-sizing: border-box;
} }
form[name=frmWorkData] > div.form-button-container button { form[name=frmWorkData] > div.form-button-container .form-button-box button {
width: 150px; border-radius: 50px;
height: 40px; border: solid 2px #4A5ED2;
color: #4A5ED2;
font-size: 1.1em;
font-weight: 600;
background-color: white;
width: 140px;
padding: 10px 14px;
}
form[name=frmWorkData] > div.form-button-container .form-button-box button:hover, form[name=frmWorkData] > div.form-button-container .form-button-box button.on {
background-color: #4A5ED2;
color: white;
} }
form[name=frmWorkData] > div.form-contents .info-container { form[name=frmWorkData] > div.form-contents .info-container {
height: -moz-fit-content; min-height: 510px;
height: fit-content; height: 80vh;
width: 50%; width: 50%;
} }
form[name=frmWorkData] > div.form-contents .detail-container { form[name=frmWorkData] > div.form-contents .detail-container {
height: 510px; min-height: 510px;
height: 80vh;
width: 50%; width: 50%;
overflow: hidden; overflow: hidden;
} }
@ -973,6 +978,7 @@ form[name=frmWorkData] > div.form-contents .detail-container .detail-contents .f
} }
form[name=frmWorkData] > div.form-contents .detail-container .detail-contents .form-header textarea { form[name=frmWorkData] > div.form-contents .detail-container .detail-contents .form-header textarea {
height: 100px; height: 100px;
resize: none;
} }
form[name=frmWorkData] > div.form-contents .detail-container .detail-contents .form-header .add-btn { form[name=frmWorkData] > div.form-contents .detail-container .detail-contents .form-header .add-btn {
margin-right: 10px; margin-right: 10px;
@ -987,6 +993,10 @@ form[name=frmWorkData] > div.form-contents .detail-container .detail-contents .t
form[name=frmWorkData] > div.form-contents .detail-container .detail-contents .table-box .tab-menu { form[name=frmWorkData] > div.form-contents .detail-container .detail-contents .table-box .tab-menu {
width: 100%; width: 100%;
} }
form[name=frmWorkData] > div.form-contents .detail-container .detail-contents .table-box .tab-menu li {
height: 34px;
box-sizing: border-box;
}
form[name=frmWorkData] > div.form-contents .detail-container .detail-contents .table-box .table-title { form[name=frmWorkData] > div.form-contents .detail-container .detail-contents .table-box .table-title {
width: 99%; width: 99%;
} }
@ -1000,8 +1010,8 @@ form[name=frmWorkData] > div.form-contents .detail-container .detail-contents .t
form[name=frmWorkData] > div.form-contents .detail-container .height-full { form[name=frmWorkData] > div.form-contents .detail-container .height-full {
height: 100% !important; height: 100% !important;
} }
form[name=frmWorkData] > div.form-contents .detail-container .height-89 { form[name=frmWorkData] > div.form-contents .detail-container .height-93 {
height: 89% !important; height: 93% !important;
} }
form[name=frmWorkData] > div.form-contents .detail-container .height-half { form[name=frmWorkData] > div.form-contents .detail-container .height-half {
height: calc(100% - 220px) !important; height: calc(100% - 220px) !important;
@ -1165,8 +1175,6 @@ form .btnFindAddr:hover {
font-size: 14px; font-size: 14px;
max-width: -moz-max-content; max-width: -moz-max-content;
max-width: max-content; max-width: max-content;
min-width: 500px;
min-height: 531px;
padding: 24px; padding: 24px;
position: relative; position: relative;
word-break: break-word; word-break: break-word;
@ -1183,6 +1191,7 @@ form .btnFindAddr:hover {
} }
#awn-popup-wrapper .awn-popup-body .awn-popup-confirm.custom-popup { #awn-popup-wrapper .awn-popup-body .awn-popup-confirm.custom-popup {
height: 500px; height: 500px;
min-width: 500px;
overflow: hidden; overflow: hidden;
} }
#awn-popup-wrapper .awn-popup-body .awn-popup-confirm.custom-popup.free-height { #awn-popup-wrapper .awn-popup-body .awn-popup-confirm.custom-popup.free-height {

View File

@ -26,7 +26,7 @@ const tb_custom_editor = {
return editor; return editor;
}, },
upper: function(cell, onRendered, success, cancel) { upper: function (cell, onRendered, success, cancel) {
// input 요소 생성 // input 요소 생성
var input = document.createElement("input"); var input = document.createElement("input");
input.setAttribute("type", "text"); input.setAttribute("type", "text");
@ -68,87 +68,85 @@ const tb_custom_editor = {
return input; return input;
}, },
onlyNumber: function(cell, onRendered, success, cancel){ onlyNumber: function (cell, onRendered, success, cancel) {
// 입력 요소 생성 // 입력 요소 생성
const input = document.createElement("input"); const input = document.createElement("input");
input.setAttribute("type", "text"); input.setAttribute("type", "text");
input.style.width = "100%"; input.style.width = "100%";
input.value = cell.getValue() ? cell.getValue() : ""; input.value = cell.getValue() ? cell.getValue() : "";
onRendered(function(){ onRendered(function () {
input.focus(); input.focus();
input.style.height = "100%"; input.style.height = "100%";
}); });
function onChange(){ function onChange() {
if(input.value.match(/^\d*$/)){ // 숫자만 허용 if (input.value.match(/^\d*$/)) {
success(input.value); // 숫자만 허용
}else{ success(input.value);
input.value = input.value.replace(/[^0-9]/g, ''); } else {
} input.value = input.value.replace(/[^0-9]/g, "");
}
} }
input.addEventListener("blur", onChange); input.addEventListener("blur", onChange);
input.addEventListener("keydown", function(e){ input.addEventListener("keydown", function (e) {
if(e.keyCode == 13){ if (e.keyCode == 13) {
onChange(); onChange();
} }
if(e.keyCode == 27){ if (e.keyCode == 27) {
cancel(); cancel();
} }
}); });
return input; return input;
}, },
time: function(cell, onRendered, success, cancel){ time: function (cell, onRendered, success, cancel) {
// 입력 요소 생성 // 입력 요소 생성
const input = document.createElement("input"); const input = document.createElement("input");
input.setAttribute("type", "text"); input.setAttribute("type", "text");
input.style.width = "100%"; input.style.width = "100%";
input.value = cell.getValue() ? cell.getValue() : ""; input.value = cell.getValue() ? cell.getValue() : "";
onRendered(function(){ onRendered(function () {
input.focus(); input.focus();
input.select(); input.select();
input.style.height = "100%"; input.style.height = "100%";
}); });
// 변경사항이 완료되면 호출될 함수
// 변경사항이 완료되면 호출될 함수 function onChange() {
function onChange(){ if (input.value.length === 5) {
if (input.value.length === 5) { // 'HH:mm' 형식 확인 // 'HH:mm' 형식 확인
success(input.value); success(input.value);
console.log(cell.getValue()) console.log(cell.getValue());
} else { } else {
cancel(); cancel();
}
} }
}
// 입력 이벤트 처리 // 입력 이벤트 처리
input.addEventListener("input", function(){ input.addEventListener("input", function () {
var value = input.value.replace(/[^0-9]/g, ''); // 숫자만 입력 받음 var value = input.value.replace(/[^0-9]/g, ""); // 숫자만 입력 받음
if (value.length > 2){ if (value.length > 2) {
value = value.substring(0, 4); // 최대 4자리 value = value.substring(0, 4); // 최대 4자리
input.value = value.replace(/(\d{2})(\d{1})/, '$1:$2'); input.value = value.replace(/(\d{2})(\d{1})/, "$1:$2");
};
});
input.addEventListener("blur", onChange);
input.addEventListener("keydown", function(e){
if(e.keyCode == 13){
onChange();
} }
if(e.keyCode == 27){ });
cancel(); input.addEventListener("blur", onChange);
input.addEventListener("keydown", function (e) {
if (e.keyCode == 13) {
onChange();
} }
}); if (e.keyCode == 27) {
cancel();
return input; }
}, });
return input;
},
}; };
const tb_custom_formatter = { const tb_custom_formatter = {
@ -161,11 +159,14 @@ const tb_custom_formatter = {
return tgt.getValue(); return tgt.getValue();
}, },
time: function(cell, formatterParams, onRendered) { time: function (cell, formatterParams, onRendered) {
return cell.getValue().padStart(4, '0').replace(/(\d{2})(\d{2})/, '$1:$2'); return cell
.getValue()
.padStart(4, "0")
.replace(/(\d{2})(\d{2})/, "$1:$2");
}, },
diffTitme: function(cell, formatterParams, onRendered){ diffTitme: function (cell, formatterParams, onRendered) {
let startTime = cell.getRow().getCell("OPER_ST_TM").getValue(); let startTime = cell.getRow().getCell("OPER_ST_TM").getValue();
let endTime = cell.getRow().getCell("OPER_ED_TM").getValue(); let endTime = cell.getRow().getCell("OPER_ED_TM").getValue();
if (startTime && endTime) { if (startTime && endTime) {
@ -173,69 +174,74 @@ const tb_custom_formatter = {
let end = luxon.DateTime.fromFormat(endTime, "HH:mm"); let end = luxon.DateTime.fromFormat(endTime, "HH:mm");
// 날짜가 반전되는 경우를 처리 (예: 밤샘) // 날짜가 반전되는 경우를 처리 (예: 밤샘)
if (end < start) { if (end < start) {
end = end.plus({ days: 1 }); end = end.plus({ days: 1 });
} }
// 시간 차이 계산 // 시간 차이 계산
let duration = end.diff(start, 'minutes'); let duration = end.diff(start, "minutes");
return duration.minutes; // 분 단위로 반환 return duration.minutes; // 분 단위로 반환
} else { } else {
return ""; // Return empty string if either time is missing return ""; // Return empty string if either time is missing
} }
} },
}; };
const tb_custom_validator = { const tb_custom_validator = {
onlyString: function (cell, value, parameters) {
onlyString: function(cell, value, parameters){
const regex = /^[가-힣A-Za-z\s]+$/; const regex = /^[가-힣A-Za-z\s]+$/;
return regex.test(value); return regex.test(value);
}, },
onlyEnglish: function(cell, value, parameters){ onlyEnglish: function (cell, value, parameters) {
const regex = /^[A-Za-z\s]+$/; const regex = /^[A-Za-z\s]+$/;
return regex.test(value); return regex.test(value);
}, },
stringNumeric: function(cell, value, parameters){ stringNumeric: function (cell, value, parameters) {
const regex = /^[가-힣ㄱ-ㅎㅏ-ㅣA-Za-z0-9\/\-\_\s]+$/; const regex = /^[가-힣ㄱ-ㅎㅏ-ㅣA-Za-z0-9\/\-\_\s]+$/;
return regex.test(value); return regex.test(value);
} },
};
}
const formFormat = { const formFormat = {
telInput: function(input){ telInput: function (input) {
let formattedNumber = input.value.replace(/[^0-9]/g, ''); // 숫자만 추출 let formattedNumber = input.value.replace(/[^0-9]/g, ""); // 숫자만 추출
// 자동 포맷팅 로직 구현 예시: "123-456-7890" 형식 // 자동 포맷팅 로직 구현 예시: "123-456-7890" 형식
if(formattedNumber.length > 10) { if (formattedNumber.length > 10) {
formattedNumber = formattedNumber.slice(0, 3) + '-' + formattedNumber.slice(3, 7) + '-' + formattedNumber.slice(7); formattedNumber =
formattedNumber.slice(0, 3) +
"-" +
formattedNumber.slice(3, 7) +
"-" +
formattedNumber.slice(7);
} else { } else {
formattedNumber = formattedNumber.slice(0, 3) + '-' + formattedNumber.slice(3, 6) + '-' + formattedNumber.slice(6); formattedNumber =
formattedNumber.slice(0, 3) +
"-" +
formattedNumber.slice(3, 6) +
"-" +
formattedNumber.slice(6);
} }
input.value = formattedNumber; // 포맷팅된 번호를 입력 필드에 다시 설정 input.value = formattedNumber; // 포맷팅된 번호를 입력 필드에 다시 설정
}, },
inNumInput: function(input){ inNumInput: function (input) {
let formattedNumber = input.value.replace(/[^0-9]/g, ''); // 숫자만 추출 let formattedNumber = input.value.replace(/[^0-9]/g, ""); // 숫자만 추출
// 자동 포맷팅 로직 구현 예시: "123-456-7890" 형식 // 자동 포맷팅 로직 구현 예시: "123-456-7890" 형식
formattedNumber = formattedNumber.slice(0, 6) + '-' + formattedNumber.slice(6,13); formattedNumber =
formattedNumber.slice(0, 6) + "-" + formattedNumber.slice(6, 13);
input.value = formattedNumber; // 포맷팅된 번호를 입력 필드에 다시 설정 input.value = formattedNumber; // 포맷팅된 번호를 입력 필드에 다시 설정
}, },
alphanumeric:function(input){ alphanumeric: function (input) {
input.value = input.value.toUpperCase().replace(/[^A-Z0-9]/g, ''); input.value = input.value.toUpperCase().replace(/[^A-Z0-9]/g, "");
}, },
submitValidate: function(){ submitValidate: function () {
let isValid = true; let isValid = true;
return isValid; return isValid;
} },
};
}

View File

@ -151,6 +151,38 @@ class CreatePopup2 {
}, },
}); });
}; };
setData(e,tgt){
let row = tgt._row;
if( this.tabrow ){
let uptjson = {_STATUS_:this.tabrow.getData()['_STATUS_']||'U'};
Object.keys(this.columns).forEach( key => {
// if(!row.data[this.columns[key]]){
// row.data[this.columns[key]] = row.data[this.columns[key].replace(/[A-Z]+_/, "")]
// }
// uptjson[this.columns[key]] = row.data[this.columns[key]]; // 직접 할당
uptjson[key] = row.data[this.columns[key]]; // 직접 할당
// console.log(key)
} );
this.tabrow.update(uptjson);
}else{
Object.keys(this.columns).forEach( key => {
document.querySelector("#"+this.columns[key]).value = row.data[key];
})
}
};
/*
* @Overview 테이블 선택 함수
* @Parameter 이벤트, 타겟
*/
dbClick(e, tgt) {
let rowData = tgt._row.data
this.setData(e, tgt);
console.log(tgt);
this.modal.delete();
// this.tabrow.updateData({[this.columns.tgt_name]:row.data['BIZ_AREA_NM']});
// tabrow.updateData({[tgt_id]:row.data['BIZ_AREA_CD'],[tgt_name]:row.data['BIZ_AREA_NM'],_STATUS_:tabrow.getData()['_STATUS_']||'U'});
}
} }

View File

@ -262,8 +262,9 @@ class CreatePopup{
*/ */
dbClick(e, tgt) { dbClick(e, tgt) {
let rowData = tgt._row.data let rowData = tgt._row.data
this.setData(e, tgt); this.setData(e, tgt);
console.log(tgt);
this.modal.delete(); this.modal.delete();
// this.tabrow.updateData({[this.columns.tgt_name]:row.data['BIZ_AREA_NM']}); // this.tabrow.updateData({[this.columns.tgt_name]:row.data['BIZ_AREA_NM']});
// tabrow.updateData({[tgt_id]:row.data['BIZ_AREA_CD'],[tgt_name]:row.data['BIZ_AREA_NM'],_STATUS_:tabrow.getData()['_STATUS_']||'U'}); // tabrow.updateData({[tgt_id]:row.data['BIZ_AREA_CD'],[tgt_name]:row.data['BIZ_AREA_NM'],_STATUS_:tabrow.getData()['_STATUS_']||'U'});

View File

@ -70,7 +70,7 @@ include_once _SVC_INC_PATH_ . "/header.php";
<div class="table-container"> <div class="table-container">
<div class="inner-container flexcol gap20"> <div class="inner-container flexcol gap20">
<div class="flexrow flex-1 gap20"> <div class="sub-container flexrow flex-1 gap20">
<div class="table-box flex-1" id="main_tab"> <div class="table-box flex-1" id="main_tab">
<!-- 테이블 헤더 (제목, 추가, 삭제, 저장) --> <!-- 테이블 헤더 (제목, 추가, 삭제, 저장) -->
<div class="table-title"> <div class="table-title">

View File

@ -654,7 +654,8 @@ class Tb_insp_list_class {
formatter: tb_common_funtions.formatterCheckboxIcon, formatter: tb_common_funtions.formatterCheckboxIcon,
formatterParams: { checkval: "Y" }, formatterParams: { checkval: "Y" },
}, },
{ formatter: "rownum", title: "NO", width: 50 }, { field: 'OP_SEQ', formatter: "rownum", title: "NO", width: 50 },
{ field: 'OP_CD', title: "공정", width: 80 },
{ {
field: "INSP_ITEM", field: "INSP_ITEM",
title: "검사항목", title: "검사항목",
@ -803,15 +804,17 @@ class Tb_insp_list_class {
const selectData = Tb_insp_list.tbList.getSelectedData()[0]; const selectData = Tb_insp_list.tbList.getSelectedData()[0];
Tb_insp_reg.tbList.addRow( Tb_insp_reg.addRow(
{ {
OP_CD : selectData.OP_CD,
OP_SEQ : selectData.OP_SEQ,
INSP_ITEM : selectData.INSP_ITEM, INSP_ITEM : selectData.INSP_ITEM,
INSP_SEQ : selectData.INSP_SEQ, INSP_SEQ : selectData.INSP_SEQ,
SPEC_VAL : selectData.SPEC_VAL, SPEC_VAL : selectData.SPEC_VAL,
TOL_UPPER : selectData.TOL_UPPER, TOL_UPPER : selectData.TOL_UPPER,
TOL_LOWER : selectData.TOL_LOWER, TOL_LOWER : selectData.TOL_LOWER,
INSP_TOOL : selectData.INSP_TOOL, INSP_TOOL : selectData.INSP_TOOL,
} }, selectData.INSP_SAMPL_QTY
); );
}); });
}); });
@ -974,11 +977,13 @@ class Tb_insp_reg_class {
* @Parameter 없음 * @Parameter 없음
* @function 기본키, _STATUS_:I 값을 넣은 추가 * @function 기본키, _STATUS_:I 값을 넣은 추가
*/ */
addRow() { addRow(data, qty) {
this.qty = qty;
const rows = this.tbList.getRows();
this.tbList.addRow({ this.tbList.addRow({
_STATUS_: "I", ...data,
INSP_ITEM: this.code, INSP_SEQ : rows.length + 1
시료번호: this.시료번호,
}); });
} }
@ -1096,6 +1101,9 @@ class Tb_insp_reg_class {
title: i, title: i,
width: 80, width: 80,
editor:"input", editor:"input",
editable: (cell)=>{
return i<=this.qty
},
formatter: "money", formatter: "money",
formatterParams: { formatterParams: {
decimal: ".", decimal: ".",
@ -1122,14 +1130,32 @@ class Tb_insp_reg_class {
formatter: tb_common_funtions.formatterCheckboxIcon, formatter: tb_common_funtions.formatterCheckboxIcon,
formatterParams: { checkval: "Y" }, formatterParams: { checkval: "Y" },
}, },
{ formatter: "rownum", title: "NO", width: 50 }, { field: "OP_SEQ", title: "공순", width: 80 },
{ field: "OP_CD", title: "공정", width: 80 },
{ field: "INSP_ITEM", title: "검사항목", width: 100 }, { field: "INSP_ITEM", title: "검사항목", width: 100 },
{ field: "INSP_SEQ", title: "검사회차", width: 80 }, { field: "INSP_SEQ", title: "검사회차", width: 80 },
/* 추가할때마다 값이 입력된 행이 추가된다. */ /* 추가할때마다 값이 입력된 행이 추가된다? */
{ field: "SPEC_VAL", title: "기준값", width: 80 }, { field: "SPEC_VAL", title: "기준값", width: 80,
{ field: "TOL_UPPER", title: "상한치", width: 80 }, formatter: "money",
{ field: "TOL_LOWER", title: "하한치", width: 80 }, formatterParams: {
{ field: "INSP_TOOL", title: "측정기", width: 80, editor: "editor" }, decimal: ".",
precision: 0,
},
},
{ field: "TOL_UPPER", title: "상한치", width: 80,
formatter: "money",
formatterParams: {
decimal: ".",
precision: 0,
},
},
{ field: "TOL_LOWER", title: "하한치", width: 80, formatter: "money",
formatterParams: {
decimal: ".",
precision: 0,
},
},
{ field: "INSP_TOOL", title: "측정기", width: 80, editor: "list", cssClass:"user-list" },
{ {
field: "INSP_TOOL", field: "INSP_TOOL",
title: "측정치", title: "측정치",
@ -1206,12 +1232,7 @@ class Tb_insp_reg_class {
this.cellEdited && this.cellEdited(cell); this.cellEdited && this.cellEdited(cell);
}); });
// 추가
["click", "keypress"].forEach((evt) => {
this.addBtn.addEventListener(evt, () => {
this.addRow && this.addRow();
});
});
// 삭제 // 삭제
["click", "keypress"].forEach((evt) => { ["click", "keypress"].forEach((evt) => {
this.removeBtn.addEventListener(evt, () => { this.removeBtn.addEventListener(evt, () => {
@ -1223,7 +1244,7 @@ class Tb_insp_reg_class {
} }
/* /*
* @Overview 오더별 검사항목 * @Overview 파일 업로드
*/ */
class Tb_file_upload_class { class Tb_file_upload_class {
constructor(container) { constructor(container) {

View File

@ -218,9 +218,14 @@ setFilter() {
// console.log(avgValue); // console.log(avgValue);
// console.log(parseInt(realKeys.length)); // console.log(parseInt(realKeys.length));
let hap = Object.values(otherData).filter(v => {return v !== undefined && v !== null}); let hap = Object.values(otherData).filter(v => {return v !== undefined && v !== null});
let avgValue = hap.reduce((a, b) => parseInt(a) + parseInt(b), 0) / hap.length; let avgValue = hap.reduce((a, b) => parseInt(a) + parseInt(b), 0) / hap.length;
console.log(avgValue);
console.log(); console.log();
if(avgValue === NaN){
return false;
}
return avgValue; return avgValue;
} }
/* /*
@ -239,9 +244,9 @@ setFilter() {
{ field: "DEPT_NM", title: "소속", width: 100 }, { field: "DEPT_NM", title: "소속", width: 100 },
{ field: "EMP_NM", title: "작업자", width: 100,}, { field: "EMP_NM", title: "작업자", width: 100,},
{ field: "MONTH_AMOUNT", title: "월합계", width: 100, bottomCalc: "sum", formatter:"money", bottomCalcFormatter:"money", bottomCalcFormatterParams:{ precision:0 }, formatterParams:{ precision:0 }}, { field: "MONTH_AMOUNT", title: "월합계", width: 100, bottomCalc: "sum", formatter:"money", bottomCalcFormatter:"money", bottomCalcFormatterParams:{ precision:0 }, formatterParams:{ precision:0 }},
{ field: "DAY_AVG", title: "일평균", width: 100, bottomCalc: "sum", bottomCalcFormatter:"money", bottomCalcFormatterParams:{ precision:0 },formatter:function(cell){ { field: "DAY_AVG", title: "일평균", width: 100, bottomCalc: "sum",formatter:function(cell){
return _this.dayAvg(cell); return _this.dayAvg(cell) ? _this.dayAvg(cell): "";
}, }, bottomCalcFormatter:"money",formatterParams:{ precision:0 }, bottomCalcFormatterParams:{ precision:0 }
}, },
...this.getDate() ...this.getDate()
]; ];

View File

@ -90,7 +90,7 @@ if(!_notAuth("R")) {
$params = array_merge($params, Array( $params = array_merge($params, Array(
"WO_NO" => $data['WO_NO']?:"", "WO_NO" => $data['WO_NO']?:"",
"ORD_STATUS" => $data['ORD_STATUS'], "ORD_STATUS" => $data['ORD_STATUS'] == "Y"?"080":"",
)); ));
} }
@ -108,11 +108,36 @@ if(!_notAuth("R")) {
} }
break; break;
// 공정별 실적 조회 // 공정별 실적 조회
case 'getOrderList':
$sql = "USP_P_WO_S30"; case "getOpList":
$sql = "USP_P_WO_OPER_RSLT_S30";
$params = array( $params = array(
"order_pop" => $_REQUEST['order_pop'] ?: "", "WO_NO" => $_REQUEST["WO_NO"] ?: "",
"ITEM_CD" => $_REQUEST["ITEM_CD"] ?: "",
);
$rst = $baseObj->DB->exec($sql, $params);
$row = array();
if ($rst) {
$retval['code'] = true;
while ($row = $baseObj->DB->fetch_array($rst)) {
$rows[] = $row;
}
;
$retval['data'] = $rows;
$retval['mesg'] = '정상 동작 되었습니다.';
} else {
$retval['code'] = false;
}
break;
// 당일 오더완료내역 조회
case 'getOrderEndList':
$sql = "USP_P_WO_S40";
$params = array(
"date_st" => $_REQUEST['date_st'] ?: "",
); );
$rst = $baseObj->DB->exec($sql, $params); $rst = $baseObj->DB->exec($sql, $params);
@ -131,7 +156,6 @@ if(!_notAuth("R")) {
break; break;
} }
} }

View File

@ -39,7 +39,23 @@ class Tb_order_class {
success: (data) => { success: (data) => {
console.log(data.code); console.log(data.code);
if(data.code) { if(data.code) {
this.tbList.setData(data.data); let Data = data.data
for(let tempData in Data){
if(Data[tempData].ORD_STATUS === "080"){
Data[tempData].ORD_STATUS = "Y"
}
// Data[tempData].ORD_STATUS =
// console.log(Data[tempData]);
}
// if(Data.ORD_STATUS = "080"){
// tempData.ORD_STATUS = "Y"
// console.log(tempData);
// }
this.tbList.setData(Data);
}else{ }else{
kuls_alert(data.mesg); kuls_alert(data.mesg);
} }
@ -106,9 +122,17 @@ class Tb_order_class {
* @function 선택된 모든 변경 * @function 선택된 모든 변경
*/ */
rowClick(e, tgt) { rowClick(e, tgt) {
let _this = this;
console.log(tgt);
let clickRow = tgt._row;
let clickData = clickRow?.data;
Tb_report.rowData = clickData;
Tb_report.getMainList();
if (tgt.isSelected()) { if (tgt.isSelected()) {
tgt.deselect(); tgt.deselect();
// this.clearRemove(tgt); this.clearRemove(tgt);
} else { } else {
this.tbList.deselectRow(); this.tbList.deselectRow();
tgt.select(); tgt.select();
@ -123,7 +147,11 @@ class Tb_order_class {
*/ */
cellClick(e, tgt) { cellClick(e, tgt) {
switch (tgt.getField()) { switch (tgt.getField()) {
case "ORD_STATUS":
// console.log(tgt.getValue());
tgt.setValue(tgt.getValue() == "Y" ? "" : "Y");
// this.clearRemove(tgt.getRow())
break;
default: default:
this.rowClick && this.rowClick(e, tgt); this.rowClick && this.rowClick(e, tgt);
break; break;
@ -147,12 +175,9 @@ class Tb_order_class {
this.getMainList('getOrderList','order_pop','order_product_pop','order_bp_pop','date_st'); this.getMainList('getOrderList','order_pop','order_product_pop','order_bp_pop','date_st');
return false; return false;
} }
console.log(this.tbList.getData().filter(row=> row._STATUS_));
const blankObj = this.tbList.getRows().filter(row => { const blankObj = this.tbList.getRows().filter(row => {
return Object.keys(row._row.data).filter(key => key !== '_STATUS_' && key !== 'USE_FLG').every(key => { return Object.keys(row._row.data).filter(key => key !== '_STATUS_' && key !== 'USE_FLG').every(key => {
const value = row._row.data[key]; const value = row._row.data[key];
return (value === undefined || value === ''); return (value === undefined || value === '');
}); });
@ -212,7 +237,7 @@ class Tb_order_class {
// field 정의 // field 정의
const fields = [ const fields = [
{formatter:"rownum", title:"NO", width:50}, {formatter:"rownum", title:"NO", width:50},
{field:"ORD_STATUS", title:"완료", width:80, cssClass: "editable-cell", formatter: tb_common_funtions.formatterToggleboxGreenIcon, formatterParams: { checkval: "Y" },}, {field:"ORD_STATUS", title:"완료", width:80, cssClass: "editable-cell", formatter: tb_common_funtions.formatterToggleboxGreenIcon, formatterParams: { checkval : "Y" },},
{field:"WO_NO", title:"생산오더", width:100}, {field:"WO_NO", title:"생산오더", width:100},
{field:"ITEM_CD", title:"품목", width:100}, {field:"ITEM_CD", title:"품목", width:100},
{field:"DRAW_NO", title:"도면번호", width:200}, {field:"DRAW_NO", title:"도면번호", width:200},
@ -228,6 +253,13 @@ class Tb_order_class {
precision:0 precision:0
} }
}, },
{field:"PRD_QTY", title:"실적 수량", width:80,
formatter:"money",
formatterParams:{
decimal:".",
precision:0
}
},
{field:"UNIT", title:"단위", width:50}, {field:"UNIT", title:"단위", width:50},
{field:"", title:"", width:50}, {field:"", title:"", width:50},
{field:"", title:"비고", width: 300}, {field:"", title:"비고", width: 300},
@ -271,6 +303,7 @@ class Tb_order_class {
filterBtn.addEventListener(evt, () => { filterBtn.addEventListener(evt, () => {
// setFilter 또는 setData // setFilter 또는 setData
this.getMainList('getOrderList','order_pop','order_product_pop','order_bp_pop','date_st'); this.getMainList('getOrderList','order_pop','order_product_pop','order_bp_pop','date_st');
Tb_daily.getMainList('getOrderEndList','date_st');
}); });
}); });
// 저장 // 저장
@ -286,35 +319,44 @@ class Tb_order_class {
class Tb_report_class { class Tb_report_class {
constructor(container) { constructor(container) {
let _this = this;
this.ajaxUrl = "./mng_order_result.ajax.php"; this.ajaxUrl = "./mng_order_result.ajax.php";
this.code =""; // 품목 코드 this.code =""; // 품목 코드
this.container = document.querySelector(container); this.container = document.querySelector(container);
this.table = this.container.querySelector(".hy-table") this.table = this.container.querySelector(".hy-table")
// this.upBtn = this.container.querySelector(".up-btn") || "" // this.upBtn = this.container.querySelector(".up-btn") || ""
// this.downBtn = this.container.querySelector(".down-btn") || "" // this.downBtn = this.container.querySelector(".down-btn") || ""
// this.addBtn = this.container.querySelector(".add-btn") // this.addBtn = this.container.querySelector(".add-btn")
// this.removeBtn = this.container.querySelector(".remove-btn") // this.removeBtn = this.container.querySelector(".remove-btn")
_this.rowData ="";
// _this.itemcd ="";
} }
// tableBuild 되었을때 getManList // tableBuild 되었을때 getManList
getMainList(code) { getMainList() {
// let talert = window.setTimeout(()=> { this.tbList.alert("Loading ...") }, 1000); let _this = this;
// this.code = code; if(_this.rowData == undefined){
return false;
}
console.log(_this.rowData);
// console.log(Tb_item.tbList.getSelectedData()[0]);
let talert = window.setTimeout(()=> { this.tbList.alert("Loading ...") }, 1000);
ajax_json({
url: this.ajaxUrl,
data: { mode: "getOpList", WO_NO :_this.rowData?.WO_NO, ITEM_CD: _this.rowData?.ITEM_CD },
success: (data) => {
this.tbList.setData(data.data);
// ajax_json({ },
// url: this.ajaxUrl, error: (req, status, err) => {
// data: { mode: "", PR_CD: this.code}, kuls_alert(err.message);
// success: (data) => {}, },
// error: (req, status, err) => { complete: () => {
// kuls_alert(err.message); window.clearTimeout(talert);
// }, // this.tbList.clearAlert();
// complete: () => { // this.setFilter();
// // window.clearTimeout(talert); },
// // this.tbList.clearAlert(); });
// // this.setFilter();
// },
// });
} }
setFilter() {} setFilter() {}
@ -381,18 +423,18 @@ class Tb_report_class {
const fields = [ const fields = [
// 생산오더, 품목, 도면번호, 거래처, 납기일, 지시일, 지시구분, 지시 수량, 단위, 상태, 작업순서, 비고 // 생산오더, 품목, 도면번호, 거래처, 납기일, 지시일, 지시구분, 지시 수량, 단위, 상태, 작업순서, 비고
{formatter:"rownum", title:"NO", width:50}, {formatter:"rownum", title:"NO", width:50},
{field:"", title:"공순", width:80}, {field:"OP_SEQ", title:"공순", width:80},
{field:"", title:"공정", width:80}, {field:"OP_CD", title:"공정", width:80},
{title:"설비", cssClass:"width-150", {title:"설비", cssClass:"width-150",
columns:[ columns:[
{field:"", title:"", width:50}, {field:"FACLT_CD", title:"", width:50},
{field:"", title:"", width:100}, {field:"FACLT_NM", title:"", width:100},
] ]
}, },
{field:"", title:"작업자", width:100}, {field:"EMP_NM", title:"작업자", width:100},
{field:"", title:"지시수량", width:80}, // {field:"ORD_QTY", title:"지시수량", width:80},
{field:"", title:"실적수량", width:80}, {field:"PRD_QTY", title:"실적수량", width:80},
{field:"", title:"불량수량", width:80}, // {field:"DEF_QTY", title:"불량수량", width:80},
{field:"", title:"종료시간", width:150}, {field:"", title:"종료시간", width:150},
]; ];
@ -447,22 +489,69 @@ class Tb_daily_class {
// this.removeBtn = this.container.querySelector(".remove-btn") // this.removeBtn = this.container.querySelector(".remove-btn")
} }
// tableBuild 되었을때 getManList /*
getMainList(code) { * @Overview 데이터 조회 함수
// let talert = window.setTimeout(()=> { this.tbList.alert("Loading ...") }, 1000); * @Parameter mode : AJAX 비동깉 통신 사용할 STRING , ...test : 조회할 INPUT 태그의 ID
// ajax_json({ */
// url: this.ajaxUrl, getMainList(mode,...test) {
// data: { mode: "" , PROCESS: this.code}, // const talert= window.setTimeout(()=> { this.tbList.alert("Loading ...") }, 1000);
// success: (data) => {}, let arr = test;
// error: (req, status, err) => { // let testList = new Array();
// kuls_alert(err.message); let data = new Object();
// }, for(let i=0; i < arr.length; i++){
// complete: () => { let temp = [arr[i]]
// // window.clearTimeout(talert);
// // this.tbList.clearAlert(); if(document.getElementById(arr[i])?.type !== "checkbox"){
// // this.setFilter(); data[temp] = document.getElementById(temp)?.value
// }, }else{
// }); data[temp] = document.getElementById(temp)?.checked?"Y":"N";
}
}
data.mode = mode
// let USEFLAG = document.getElementById("USE_FLG").checked?"Y":"N"; //사용여부
ajax_json({
url: this.ajaxUrl,
data: data,
success: (data) => {
console.log(data.code);
if(data.code) {
let Data = data.data
for(let tempData in Data){
if(Data[tempData].ORD_STATUS === "080"){
Data[tempData].ORD_STATUS = "Y"
}
// Data[tempData].ORD_STATUS =
// console.log(Data[tempData]);
}
// if(Data.ORD_STATUS = "080"){
// tempData.ORD_STATUS = "Y"
// console.log(tempData);
// }
this.tbList.setData(Data);
}else{
kuls_alert(data.mesg);
}
},
error: (req, status, err) => {
kuls_alert(err.message);
},
complete: () => {
// window.clearTimeout(talert);
this.tbList.clearAlert();
// this.setFilter();
// this.tbList.getRows().forEach(row=>{
// row.getCell("WO_NO").getElement().addEventListener("click",(e)=>{
// this.rowClick(e,row);
// })
// });
},
});
return true;
} }
setFilter() {} setFilter() {}
@ -528,14 +617,14 @@ class Tb_daily_class {
// field 정의 // field 정의
const fields = [ const fields = [
{formatter:"rownum", title:"NO", width:50}, {formatter:"rownum", title:"NO", width:50},
{field:"", title:"생산오더", width:100}, {field:"WO_NO", title:"생산오더", width:100},
{field:"", title:"품목", width:100}, {field:"ITEM_CD", title:"품목", width:100},
{field:"", title:"오더번호", width:200}, // {field:"", title:"오더번호", width:200},
{field:"", title:"거래처", width:150}, {field:"BP_CD", title:"거래처", width:150},
{field:"", title:"납기일", width:100}, {field:"DLVY_REQ_DT", title:"납기일", width:100},
{field:"", title:"지시 구분", width:100}, {field:"ORD_TYPE", title:"지시 구분", width:100},
{field:"", title:"지시 수량", width:100}, {field:"ORD_QTY", title:"지시 수량", width:100},
{field:"", title:"물량 수량", width:100}, {field:"PRD_QTY", title:"물량 수량", width:100},
{field:"", title:"최종공정</br>완료시간", width:100}, {field:"", title:"최종공정</br>완료시간", width:100},
{field:"", title:"완료처리</br>시간", width:100}, {field:"", title:"완료처리</br>시간", width:100},
]; ];
@ -558,7 +647,7 @@ class Tb_daily_class {
// 데이터 불러오기 // 데이터 불러오기
this.tbList.on("tableBuilt", () => { this.tbList.on("tableBuilt", () => {
this.getMainList('getOrderList','order_pop','order_product_pop','order_bp_pop','date_st'); this.getMainList('getOrderEndList','date_st');
}); });
// row 클릭 시에 // row 클릭 시에
this.tbList.on("rowClick", (e, tgt) => { this.tbList.on("rowClick", (e, tgt) => {

View File

@ -33,7 +33,7 @@ include_once _SVC_INC_PATH_ . "/header.php";
<label for="order_product_pop">품목</label> <label for="order_product_pop">품목</label>
<div class="input-box"> <div class="input-box">
<input type="text" id="order_product_pop"> <input type="text" id="order_product_pop">
<?php include _SVC_INC_PATH_ . '/img/popupIcon.php' ?> <span onclick="popItem({'ITEM_CD':'order_product_pop'})"><?php include _SVC_INC_PATH_ . '/img/popupIcon.php' ?></span>
</div> </div>
</div> </div>
@ -41,7 +41,7 @@ include_once _SVC_INC_PATH_ . "/header.php";
<label for="order_bp_pop">고객사</label> <label for="order_bp_pop">고객사</label>
<div class="input-box"> <div class="input-box">
<input type="text" id="order_bp_pop"> <input type="text" id="order_bp_pop">
<?php include _SVC_INC_PATH_ . '/img/popupIcon.php' ?> <span onclick="popClient({'BP_CD':'order_bp_pop'})"><?php include _SVC_INC_PATH_ . '/img/popupIcon.php' ?></span>
</div> </div>
</div> </div>

View File

@ -118,7 +118,7 @@ class CreatePopup2 {
} }
// 데이터 렌더링 // 데이터 렌더링
getPopList(){ getPopList(){
console.log(this.columns); console.log("test");
ajax_json({ ajax_json({
url: "/ksvc/inc/common.ajax.php", url: "/ksvc/inc/common.ajax.php",
data: {mode: this.mode, columns : this.columns }, data: {mode: this.mode, columns : this.columns },
@ -137,6 +137,18 @@ class CreatePopup2 {
}, },
}); });
}; };
/*
* @Overview 테이블 선택 함수
* @Parameter 이벤트, 타겟
*/
dbClick(e, tgt) {
let rowData = tgt._row.data
this.setData(e, tgt);
console.log(tgt);
this.modal.delete();
// this.tabrow.updateData({[this.columns.tgt_name]:row.data['BIZ_AREA_NM']});
// tabrow.updateData({[tgt_id]:row.data['BIZ_AREA_CD'],[tgt_name]:row.data['BIZ_AREA_NM'],_STATUS_:tabrow.getData()['_STATUS_']||'U'});
}
} }
@ -168,5 +180,6 @@ const popItemOper = function( columns, tabrow ){
}); });
Tb_modal.init(); Tb_modal.init();
} }

View File

@ -109,6 +109,7 @@ class Tb_order_class {
let _this = this; let _this = this;
let clickRow = tgt._row; let clickRow = tgt._row;
let clickData = clickRow.data; let clickData = clickRow.data;
// Tb_process.prodData = clickData; // Tb_process.prodData = clickData;
// Tb_check.prodData = clickData; // Tb_check.prodData = clickData;
// Tb_check.getMainList(Tb_check.prodData); // Tb_check.getMainList(Tb_check.prodData);
@ -122,6 +123,9 @@ class Tb_order_class {
tgt.select(); tgt.select();
} }
if(document.getElementById("hidden_item_cd")?.value === clickData?.ITEM_CD){
return false;
}
Tb_process.getMainList(); Tb_process.getMainList();
} }
@ -349,6 +353,14 @@ class Tb_order_class {
this.getMainList("getOrderList","order_date_st", "order_date_ed", "ITEM_CD"," ITEM_NM", "BP_CD", "BP_NM"); this.getMainList("getOrderList","order_date_st", "order_date_ed", "ITEM_CD"," ITEM_NM", "BP_CD", "BP_NM");
}); });
}); });
// 조회
["click", "keypress"].forEach((evt) => {
const copyBtn = document.querySelector("#copy_btn");
copyBtn.addEventListener(evt, () => {
Tb_process.copyRow();
});
});
// 저장 // 저장
["click", "keypress"].forEach((evt) => { ["click", "keypress"].forEach((evt) => {
const putBtn = document.querySelector("#put_btn"); const putBtn = document.querySelector("#put_btn");
@ -417,7 +429,31 @@ class Tb_process_class {
this.lastNum += 10; this.lastNum += 10;
this.tbList.addRow({ OP_SEQ : this.lastNum, WO_NO : Tb_order.tbList.getSelectedData()[0].WO_NO, _STATUS_: "I" }); this.tbList.addRow({ OP_SEQ : this.lastNum, WO_NO : Tb_order.tbList.getSelectedData()[0].WO_NO, _STATUS_: "I" });
} }
copyRow(){
ajax_json({
url: "/ksvc/inc/common.ajax.php",
data: {mode: "getItemOperList", ITEM_CD: Tb_order.tbList.getSelectedData()[0].ITEM_CD },
success:( data ) => {
if( data.code ){
// console.log(data.data)
console.log(data.data);
let makingData =data.data
for(let temp in data.data){
this.lastNum += 10;
this.tbList.addRow({ OP_CD : makingData[temp].OP_CD,OP_SEQ : makingData[temp].OP_SEQ ,WO_NO : Tb_order.tbList.getSelectedData()[0].WO_NO, _STATUS_: "I" });
}
}
},
error: (request, status, error)=>{
kuls_alert(error.message);
},
});
document.getElementById("hidden_item_cd").value = Tb_order.tbList?.getSelectedData()[0]?.ITEM_CD;
}
sortingRouting(){ sortingRouting(){
let temArr = this.tbList.getData(); // 테이블 전체 데이터 let temArr = this.tbList.getData(); // 테이블 전체 데이터

View File

@ -57,6 +57,7 @@ include_once _SVC_INC_PATH_ . "/header.php";
<div class="input-box"> <div class="input-box">
<label for="BP_NM"></label> <label for="BP_NM"></label>
<input type="text" id="BP_NM" placeholder="거래처명"> <input type="text" id="BP_NM" placeholder="거래처명">
<input type="hidden" id="hidden_item_cd">
</div> </div>
</div> </div>
</div> </div>
@ -66,6 +67,7 @@ include_once _SVC_INC_PATH_ . "/header.php";
<!-- 조회 저장 버튼 --> <!-- 조회 저장 버튼 -->
<div class="button-container"> <div class="button-container">
<div class="button-box"> <div class="button-box">
<button class="point-btn" id="copy_btn">편성</button>
<button class="point-btn" id="">SAP 조회</button> <button class="point-btn" id="">SAP 조회</button>
<button class="point-btn" id="filter_btn">조회</button> <button class="point-btn" id="filter_btn">조회</button>
<button class="point-btn" id="put_btn">저장</button> <button class="point-btn" id="put_btn">저장</button>

View File

@ -15,7 +15,7 @@ if (!_notAuth("R")) {
$params = array( $params = array(
"date_st" => $_REQUEST["date_st"] ?: "", "date_st" => $_REQUEST["date_st"] ?: "",
"date_ed" => $_REQUEST["date_ed"] ?: "", "date_ed" => $_REQUEST["date_ed"] ?: "",
"WO_NO" => $_REQUEST["WO_NO_P"] ?: "", "WO_NO" => $_REQUEST["WO_NO_P"] ?: "",
"ITEM_CD" => $_REQUEST["ITEM_CD"] ?: "", "ITEM_CD" => $_REQUEST["ITEM_CD"] ?: "",
"OP_CD" => $_REQUEST["OP_CD"] ?: "", "OP_CD" => $_REQUEST["OP_CD"] ?: "",
"FACLT_CD " => $_REQUEST["FACLT_CD_P"] ?: "" "FACLT_CD " => $_REQUEST["FACLT_CD_P"] ?: ""

View File

@ -154,7 +154,6 @@ class Tb_order_class {
*/ */
addRow() { addRow() {
this.tbList.addRow({ _STATUS_: "I" }); this.tbList.addRow({ _STATUS_: "I" });
this.saveButtonActive(false);
// this.orderModal(); // this.orderModal();
} }
/* /*
@ -163,15 +162,7 @@ class Tb_order_class {
* @function 선택된 모든 삭제 * @function 선택된 모든 삭제
*/ */
saveButtonActive(boolean) {
if (boolean) {
document.getElementById("put_btn").classList.add("disabled-btn");
document.getElementById("put_btn").disabled = true;
} else {
document.getElementById("put_btn").classList.remove("disabled-btn");
document.getElementById("put_btn").disabled = false;
}
}
submitDateTime() { submitDateTime() {
let dateTimeValue = document.getElementById("MAKE_TM").value; let dateTimeValue = document.getElementById("MAKE_TM").value;
@ -179,41 +170,55 @@ class Tb_order_class {
console.log("서버로 보낼 날짜 및 시간: " + formattedDateTime); console.log("서버로 보낼 날짜 및 시간: " + formattedDateTime);
} }
removeRow() {
const selectedRows = this.tbList.getSelectedRows(); // 선택된 모든 행 가져오기
// 선택된 각 행 삭제
selectedRows.forEach((row) => {
// STAUS D로 바꾸기
row.getData()._STATUS_ = row.getData()._STATUS_ == "I" ? null : "D";
const rowElement = row.getElement();
rowElement.classList.add("remove-row"); removeRow() {
const selectedRows = this.tbList.getRows().filter(row=>{
return row.getData().check ==="Y"
}); });
this.saveButtonActive(false);
if(selectedRows.length > 0 ){
kuls_confirm("삭제","하시겠습니까?", ()=>{
// 선택된 각 행 삭제
selectedRows.forEach((row) => {
// STAUS D로 바꾸기
row.getData()._STATUS_ = row.getData()._STATUS_=="I"?null:"D";
const rowElement = row.getElement();
rowElement.classList.add("remove-row");
});
})
}else{
kuls_alert("삭제할 행을 선택해주세요.")
}
} }
// removeRow() { /*
// const selectedRows = this.tbList.getRows().filter(row=>{ * @Overview 삭제 취소 함수
// return row.getData().check ==="Y" * @Parameter 삭제
// }); * @function 클릭시 삭제 취소 & STATUS를 공란으로 변경
*/
clearRemove(tgt){
if(tgt._row.data._STATUS_ == "D"){
// console.log();
tgt._row.data._STATUS_ = "";
tgt._row.getElement().classList.remove("remove-row")
// const selectedRows = this.tbList.getSelectedRows(); // 선택된 모든 행 가져오기
}
}
// if(selectedRows.length > 0 ){
// kuls_confirm("삭제","하시겠습니까?", ()=>{ /*
// // 선택된 각 행 삭제 * @Overview 테이블 수정 함수
// selectedRows.forEach((row) => { * @Parameter
// // STAUS D로 바꾸기 * @function 편집이 이후 저장될수 있도록 _STATUS_:U로 데이터 업데이트
// row.getData()._STATUS_ = row.getData()._STATUS_=="I"?null:"D"; */
cellEdited(cell) {
cell.getData()._STATUS_ = cell.getData()._STATUS_ || "U";
// const rowElement = row.getElement(); }
// rowElement.classList.add("remove-row");
// });
// })
// }else{
// kuls_alert("삭제할 행을 선택해주세요.")
// }
// }
/* /*
* @Overview 테이블 선택 함수 * @Overview 테이블 선택 함수
@ -223,14 +228,10 @@ class Tb_order_class {
rowClick(e, tgt) { rowClick(e, tgt) {
if (tgt.isSelected()) { if (tgt.isSelected()) {
tgt.deselect(); tgt.deselect();
this.updateBtn.classList.add("disabled-btn"); this.clearRemove(tgt)
this.updateBtn.disabled = true;
//this.clearRemove(tgt)
} else { } else {
this.tbList.deselectRow(); this.tbList.deselectRow();
tgt.select(); tgt.select();
this.updateBtn.disabled = false;
this.updateBtn.classList.remove("disabled-btn");
} }
} }
@ -262,15 +263,18 @@ class Tb_order_class {
DRAW_NO: 'DRAW_NO', DRAW_NO: 'DRAW_NO',
PRV_OP_CD: 'PRV_OP_CD', PRV_OP_CD: 'PRV_OP_CD',
ORD_QTY: 'ORD_QTY', ORD_QTY: 'ORD_QTY',
OP_WRK_QTY: 'OP_WRK_QTY' OP_WRK_QTY: 'OP_WRK_QTY',
MAKE_TM: 'MAKE_TM',
FACLT_CD: 'FACLT_CD',
FACLT_NM: 'FACLT_NM'
},tgt.getRow()) },tgt.getRow())
break; break;
case "FACLT_CD": // case "FACLT_CD":
popRegFacility({ // popRegFacility({
FACLT_CD: 'FACLT_CD', // FACLT_CD: 'FACLT_CD',
FACLT_NM:'FACLT_NM' // FACLT_NM:'FACLT_NM'
},tgt.getRow()) // },tgt.getRow())
break; // break;
case "EMP_NM": case "EMP_NM":
popWorker({ popWorker({
EMP_NO:'EMP_NO', EMP_NO:'EMP_NO',
@ -289,11 +293,6 @@ class Tb_order_class {
// break; // break;
} }
} }
// 셀 수정
cellEdited(cell) {
cell.getData()._STATUS_ = cell.getData()._STATUS_ || "U";
}
putData() { putData() {
const _this = this; const _this = this;
// 기본키 중복 확인 및 방지 // 기본키 중복 확인 및 방지
@ -325,9 +324,8 @@ class Tb_order_class {
kuls_alert(error.message); kuls_alert(error.message);
}, },
complete: function () { complete: function () {
this.saveButtonActive(true); window.clearTimeout(talert);
this.updateBtn.disabled = false; this.tbList.clearAlert();
this.updateBtn.classList.remove("disabled-btn");
}, },
}); });
return true; return true;
@ -353,13 +351,16 @@ class Tb_order_class {
// 생산오더, 품목, 도면번호, 거래처, 납기일, 지시일, 지시구분, 지시 수량, 단위, 상태, 작업순서, 비고 // 생산오더, 품목, 도면번호, 거래처, 납기일, 지시일, 지시구분, 지시 수량, 단위, 상태, 작업순서, 비고
{ field:"check", title: "선택", width: 50, headerSort: false,formatter: tb_common_funtions.formatterCheckboxIcon,formatterParams: { checkval: "Y" },}, { field:"check", title: "선택", width: 50, headerSort: false,formatter: tb_common_funtions.formatterCheckboxIcon,formatterParams: { checkval: "Y" },},
{ formatter: "rownum", title: "NO", width: 50 }, { formatter: "rownum", title: "NO", width: 50 },
{ field: "WO_NO", title: "생산오더", width: 100,cssClass: "editable-cell" }, { field: "WO_NO", title: "생산오더", width: 100,editor:tb_custom_editor.upper,
editable: (cell) => {
const val = cell.getData();
return val._STATUS_ === "I";
}, },
{ field: "WO_SEQ", width: 50, visible: false }, { field: "WO_SEQ", width: 50, visible: false },
{ field: "RSLT_NO", width: 50, visible: false }, { field: "RSLT_NO", width: 50, visible: false },
{ field: "ITEM_CD", width: 50, visible: false }, { field: "ITEM_CD", width: 100, title: "품목"},
{ field: "DEF_NO", width: 50, visible: false },
{ field: "EMP_NO", width: 50, visible: false}, { field: "EMP_NO", width: 50, visible: false},
{ field: "ITEM_NM", visible: false }, { field: "ITEM_NM",title: "품목", width: 200,visible: false },
{ field: "DRAW_NO", title: "도면번호", width: 200, hozAlign: "start" }, { field: "DRAW_NO", title: "도면번호", width: 200, hozAlign: "start" },
{ field: "OP_CD", title: "공정", width: 50 }, { field: "OP_CD", title: "공정", width: 50 },
{ field: "OP_NM", title: "공정", width: 50, visible: false }, { field: "OP_NM", title: "공정", width: 50, visible: false },
@ -367,7 +368,7 @@ class Tb_order_class {
title: "설비", title: "설비",
cssClass: "width-200", cssClass: "width-200",
columns: [ columns: [
{ field: "FACLT_CD", width: 100 ,cssClass: "editable-cell" }, { field: "FACLT_CD", width: 100 , },
{ field: "FACLT_NM", width: 100 }, { field: "FACLT_NM", width: 100 },
]}, ]},
{ field: "ORD_QTY", { field: "ORD_QTY",
@ -394,48 +395,24 @@ class Tb_order_class {
title: "양품 수량", title: "양품 수량",
width: 80, width: 80,
formatter: "money", formatter: "money",
hozAlign:"left",
formatterParams: { decimal: ",", precision: 0 }, formatterParams: { decimal: ",", precision: 0 },
editor: "input" editor: "input"
}, },
{ {
field: "RSLT_GRP", field: "RSLT_GRP",
visible: false,
},
{
field: "CODE_VAL",
title: "실적 그룹", title: "실적 그룹",
width: 80, width: 80,
cssClass: "user-list editable-cell",
editor: "list",
editorParams: { values: varsRSLT_GRP },
formatter: tb_common_funtions.formatterSelect,
formatterParams:{ values : varsRSLT_GRP },
}, },
{ field: "EMP_NM", title: "작업자", width: 100 ,cssClass: "editable-cell"}, { field: "EMP_NM", title: "작업자", width: 100 ,cssClass: "editable-cell"},
{ field: "", title: "실적등록시간", width: 120,cssClass: "editable-cell" }, { field: "MAKE_TM", title: "실적등록시간", width: 120 },
{ field: "", title: "실적일자",width: 120,}, { field: "WRK_DT", title: "실적일자",width: 120,},
// {
// field: "DEF_QTY",
// width: 100,
// formatter: "money",
// formatterParams: { decimal: ",", precision: 0 },
// visible:false
// },
// { field: "WRK_DT", title: "작업 일자", width: 80 }, //formatter mm-dd로
// {
// field: "ST_TM",
// title: "시작 시간",
// width: 120,
// },
// {
// field: "ED_TM",
// title: "종료 시간",
// width: 120,
// },
// {
// field: "",
// title: "가동 시간</br>(분)",
// width: 100,
// formatter: this.runningTime,
// },
]; ];
const commonFieldData = { const commonFieldData = {
headerSort: false, headerSort: false,
@ -519,15 +496,6 @@ class Tb_order_class {
this.putData && this.putData(); this.putData && this.putData();
}); });
}); });
//수정
["click", "keypress"].forEach((evt) => {
this.updateBtn.addEventListener(evt, () => {
this.orderModal(this.tbList.getSelectedRows()[0]._row);
});
});
// FORM 제출 클릭시
// document.querySelector("form[name=frmPrslt]").addEventListener("submit", orderPop.putData);
} }
} }
@ -546,15 +514,15 @@ Tb_order_report.init();
* @Overview 모달 추가 함수 * @Overview 모달 추가 함수
*/ */
function addFormRow() { // function addFormRow() {
document.querySelector(".add-row-container").innerHTML += ` // document.querySelector(".add-row-container").innerHTML += `
<div class="input-container flexrow gap06"> // <div class="input-container flexrow gap06">
<div class="input-box flex-1"> // <div class="input-box flex-1">
<p class="input-title"></p> // <p class="input-title"></p>
<input type="text" id="addRow" name="" class="form-control form-control-sm input-text"></input> // <input type="text" id="addRow" name="" class="form-control form-control-sm input-text"></input>
<input type="text" id="addRow" name="" class="form-control form-control-sm input-text"></input> // <input type="text" id="addRow" name="" class="form-control form-control-sm input-text"></input>
</div> // </div>
</div>`; // </div>`;
} // }

View File

@ -89,7 +89,7 @@ include_once _SVC_INC_PATH_ . "/header.php";
<div class="button-container"> <div class="button-container">
<div class="button-box"> <div class="button-box">
<button class="point-btn" id="filter_btn">조회</button> <button class="point-btn" id="filter_btn">조회</button>
<button class="point-btn disabled-btn" id="put_btn">저장</button> <button class="point-btn" id="put_btn">저장</button>
</div> </div>
</div> </div>
<!-- 조회 저장 버튼 종료 // --> <!-- 조회 저장 버튼 종료 // -->
@ -113,7 +113,7 @@ include_once _SVC_INC_PATH_ . "/header.php";
<div class="table-title"> <div class="table-title">
<p class="title"> <p class="title">
생산 실적 생산 실적
<span> ※더블클릭하면 수정창이 열립니다.</span> <!-- <span> ※더블클릭하면 수정창이 열립니다.</span> -->
</p> </p>
<!-- 버튼 --> <!-- 버튼 -->
@ -126,10 +126,6 @@ include_once _SVC_INC_PATH_ . "/header.php";
<?php include _SVC_INC_PATH_ . '/img/delete.php' ?> <?php include _SVC_INC_PATH_ . '/img/delete.php' ?>
삭제 삭제
</button> </button>
<button class="update-btn reverse-btn disabled-btn" disabled>
<?php include _SVC_INC_PATH_ . '/img/update.php' ?>
수정
</button>
</div> </div>
<!-- 버튼 종료 // --> <!-- 버튼 종료 // -->

View File

@ -15,296 +15,98 @@ class Tb_main_class {
this.removeBtn = this.container.querySelector(".remove-btn"); this.removeBtn = this.container.querySelector(".remove-btn");
} }
manageData(data) { manageData(data) {
// let tempGRP = new Object(); // console.log(data);
// let tempQTY = new Object();
let tempArr = new Array();
// for(let key in result){ let arr = new Array();
//
// for (let i = 0; i <= result[key].length-1; i++) {
// let temp = result[key][i];
// let tempGRP = {};
// tempGRP['WRK_TEAM'] = temp.WRK_TEAM // 설비팀
// tempGRP['PLAN_FACLT_CD'] = temp.PLAN_FACLT_CD // 설비 코드
// tempGRP['PLAN_SEQ'] = temp.PLAN_SEQ // group id로 쓸 변수
// let date = temp.PLAN_DT.date.slice(0, 10);
// console.log(tempGRP['PLAN_SEQ']);
//
// if (temp?.AM_PLAN_QTY !== null) {
// tempGRP[`AM_PLAN_QTY_${date}`] = temp.ITEM_GRP
// }
// if (temp?.PM_PLAN_QTY !== null) {
// tempGRP[`PM_PLAN_QTY_${date}`] = temp.ITEM_GRP
// }
// if (temp?.NI_PLAN_QTY !== null) {
// tempGRP[`NI_PLAN_QTY_${date}`] = temp.ITEM_GRP
// }
// tempGRP['SEPER_ID'] = 'GRP';
// tempGRP['SEPER'] = '그룹';
// tempArr.push(tempGRP);
//
// }
//
//
// }
// const newObj2 = {}; const result = Object.groupBy(data.data, ({ SEQ_NO }) => SEQ_NO)
// for (let i = 0; i < data.data.length; i++) {
// let temp = data.data[i]
// // console.log(temp);
// let tempGRP = {};
// let num = 0;
// let date = temp.PLAN_DT.date.slice(0, 10);
// tempGRP['WRK_TEAM'] = temp.WRK_TEAM
// tempGRP['PLAN_FACLT_CD'] = temp.PLAN_FACLT_CD
// tempGRP['PLAN_SEQ'] = temp.PLAN_SEQ
// tempGRP['DATE'] = date
// // if (temp?.AM_PLAN_QTY !== null) {
// // tempQTY[`AM_PLAN_QTY_${date}`] = temp.AM_PLAN_QTY
// // }
// // if (temp?.PM_PLAN_QTY !== null) {
// // tempQTY[`PM_PLAN_QTY_${date}`] = temp.PM_PLAN_QTY
// // }
// // if (temp?.NI_PLAN_QTY !== null) {
// // tempQTY[`NI_PLAN_QTY_${date}`] = temp.NI_PLAN_QTY
// // }
// if (temp?.AM_PLAN_QTY !== null) {
// tempGRP[`AM_PLAN_QTY`] = temp.AM_PLAN_QTY
// }
// if (temp?.PM_PLAN_QTY !== null) {
// tempGRP[`PM_PLAN_QTY`] = temp.PM_PLAN_QTY
// }
// // if (temp?.NI_PLAN_QTY !== null) {
// tempGRP[`NI_PLAN_QTY`] = temp.NI_PLAN_QTY
// // }
// tempGRP['SEPER_ID'] = 'PLAN';
// tempGRP['SEPER'] = '계획';
// console.log(tempGRP);
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
// tempArr2.push(tempGRP);
// }
// console.log(mergeObj(tempArr[0], tempArr[1], tempArr[2]));
for (let i = 0; i < data.data.length; i++) {
let temp = data.data[i];
// console.log(temp);
let tempQTY = {};
let date = temp.PLAN_DT.date.slice(0, 10);
tempQTY["WRK_TEAM"] = temp.WRK_TEAM;
tempQTY["PLAN_FACLT_CD"] = temp.PLAN_FACLT_CD;
tempQTY["PLAN_SEQ"] = temp.PLAN_SEQ;
tempQTY["DATE"] = date;
// if (temp?.AM_PLAN_QTY !== null) {
// tempQTY[`AM_PLAN_QTY_${date}`] = temp.AM_PLAN_QTY
// }
// if (temp?.PM_PLAN_QTY !== null) {
// tempQTY[`PM_PLAN_QTY_${date}`] = temp.PM_PLAN_QTY
// }
// if (temp?.NI_PLAN_QTY !== null) {
// tempQTY[`NI_PLAN_QTY_${date}`] = temp.NI_PLAN_QTY
// }
if (temp?.AM_PLAN_QTY !== null) {
tempQTY[`AM_PLAN_QTY`] = temp.ITEM_GRP;
}
if (temp?.PM_PLAN_QTY !== null) {
tempQTY[`PM_PLAN_QTY`] = temp.ITEM_GRP;
}
if (temp?.NI_PLAN_QTY !== null) {
tempQTY[`NI_PLAN_QTY`] = temp.ITEM_GRP;
}
tempQTY["SEPER_ID"] = "GRP";
tempQTY["SEPER"] = "그룹";
// console.log(temp);
let tempGRP = {};
tempGRP["WRK_TEAM"] = temp.WRK_TEAM; for(let i=0; i<=Object.values(result).length; i++){
tempGRP["PLAN_FACLT_CD"] = temp.PLAN_FACLT_CD; // console.log(Object.values(result)[]);
tempGRP["PLAN_SEQ"] = temp.PLAN_SEQ; let makingITEM = Object.values(result)[i]?.map(function(rst){
tempGRP["DATE"] = date; let tempITEM ={};
// if (temp?.AM_PLAN_QTY !== null) { let date = rst.PLAN_DT.date.slice(0, 10);
// tempQTY[`AM_PLAN_QTY_${date}`] = temp.AM_PLAN_QTY let arr = new Array();
// } tempITEM['SEQ_NO'] = rst.SEQ_NO
// if (temp?.PM_PLAN_QTY !== null) { tempITEM['PLAN_FACLT_CD'] = rst.PLAN_FACLT_CD
// tempQTY[`PM_PLAN_QTY_${date}`] = temp.PM_PLAN_QTY tempITEM['WRK_TEAM'] = rst.WRK_TEAM
// } tempITEM['SEPER'] = "그룹"
// if (temp?.NI_PLAN_QTY !== null) { tempITEM[`AM_PLAN_QTY_${date}`] = rst.AMITEM
// tempQTY[`NI_PLAN_QTY_${date}`] = temp.NI_PLAN_QTY tempITEM[`PM_PLAN_QTY_${date}`] = rst.PMITEM
// } tempITEM[`NI_PLAN_QTY_${date}`] = rst.NIITEM
if (temp?.AM_PLAN_QTY !== null) { return tempITEM;
tempGRP[`AM_PLAN_QTY`] = temp.AM_PLAN_QTY; })
}
if (temp?.PM_PLAN_QTY !== null) { let makingQTY = Object.values(result)[i]?.map(function(rst){
tempGRP[`PM_PLAN_QTY`] = temp.PM_PLAN_QTY; let tempQTY ={};
} let date = rst.PLAN_DT.date.slice(0, 10);
if (temp?.NI_PLAN_QTY !== null) { let arr = new Array();
tempGRP[`NI_PLAN_QTY`] = temp.NI_PLAN_QTY; tempQTY['SEQ_NO'] = rst.SEQ_NO
} tempQTY['SEPER'] = "계획"
tempGRP["SEPER_ID"] = "PLAN"; tempQTY['PLAN_FACLT_CD'] = rst.PLAN_FACLT_CD
tempGRP["SEPER"] = "계획"; tempQTY['WRK_TEAM'] = rst.WRK_TEAM
// console.log(tempGRP); tempQTY[`AM_PLAN_QTY_${date}`] = rst.AMQTY
tempQTY[`PM_PLAN_QTY_${date}`] = rst.PMQTY
tempQTY[`NI_PLAN_QTY_${date}`] = rst.NIQTY
return tempQTY;
})
let makingPRD = Object.values(result)[i]?.map(function(rst){
let tempPRD ={};
let date = rst.PLAN_DT.date.slice(0, 10);
let arr = new Array();
tempPRD['SEQ_NO'] = rst.SEQ_NO
tempPRD['SEPER'] = "실적"
tempPRD['PLAN_FACLT_CD'] = rst.PLAN_FACLT_CD
tempPRD['WRK_TEAM'] = rst.WRK_TEAM
tempPRD[`AM_PLAN_QTY_${date}`] = rst.AMPRD
tempPRD[`PM_PLAN_QTY_${date}`] = rst.PMPRD
tempPRD[`NI_PLAN_QTY_${date}`] = rst.NIPRD
return tempPRD;
})
const sumObjItem = {};
const sumObjQty = {};
const sumObjPrd = {};
if(makingITEM !==undefined){
makingITEM.forEach(obj => {
Object.keys(obj).forEach(key => {
sumObjItem[key] = obj[key];
});
});
makingQTY.forEach(obj => {
Object.keys(obj).forEach(key => {
sumObjQty[key] = obj[key];
});
});
makingPRD.forEach(obj => {
Object.keys(obj).forEach(key => {
sumObjPrd[key] = obj[key];
});
});
arr.push(sumObjItem);
arr.push(sumObjQty);
arr.push(sumObjPrd);
}
tempArr.push(tempQTY);
tempArr.push(tempGRP);
} }
// console.log(tempArr);
let makingData = Object.groupBy(tempArr, ({ SEPER_ID }) => SEPER_ID);
const objects = [ return arr;
{ id: 1, value: 10 },
{ id: 2, value: 20 },
{ id: 1, value: 30 },
{ id: 3, value: 40 },
];
const mergedObjects3 = [];
makingData["PLAN"].map((obj) => {
const existingObjIndex = mergedObjects3.findIndex(
(item) => item.PLAN_SEQ === obj.PLAN_SEQ
);
if (existingObjIndex !== -1) {
if (obj.AM_PLAN_QTY !== undefined) {
mergedObjects3[existingObjIndex].AM_PLAN_QTY = obj.AM_PLAN_QTY;
}
if (obj.PM_PLAN_QTY !== undefined) {
mergedObjects3[existingObjIndex].PM_PLAN_QTY = obj.PM_PLAN_QTY;
}
if (obj.NI_PLAN_QTY !== undefined) {
mergedObjects3[existingObjIndex].NI_PLAN_QTY = obj.NI_PLAN_QTY;
}
// mergedObjects3[existingObjIndex].AM_PLAN_QTY += obj.AM_PLAN_QTY;
// mergedObjects3[existingObjIndex].PM_PLAN_QTY += obj.PM_PLAN_QTY;
// mergedObjects3[existingObjIndex].NI_PLAN_QTY += obj.NI_PLAN_QTY;
} else {
mergedObjects3.push({ ...obj });
}
console.log(obj);
});
console.log(mergedObjects3);
const mergedObjects4 = [];
makingData["GRP"].map((obj) => {
const existingObjIndex = mergedObjects4.findIndex(
(item) => item.PLAN_SEQ === obj.PLAN_SEQ
);
if (existingObjIndex !== -1) {
// let temp_PM = 'PM_PLAN_QTY_'+obj.DATE
// let temp_NI = 'NI_PLAN_QTY_'+obj.DATE
// let temp_AM = 'AM_PLAN_QTY_'+obj.DATE
if (obj.AM_PLAN_QTY !== undefined) {
mergedObjects4[existingObjIndex].AM_PLAN_QTY = obj.AM_PLAN_QTY;
}
if (obj.PM_PLAN_QTY !== undefined) {
mergedObjects4[existingObjIndex].PM_PLAN_QTY = obj.PM_PLAN_QTY;
}
if (obj.NI_PLAN_QTY !== undefined) {
mergedObjects4[existingObjIndex].NI_PLAN_QTY = obj.NI_PLAN_QTY;
}
// mergedObjects3[existingObjIndex].AM_PLAN_QTY += obj.AM_PLAN_QTY;
// mergedObjects3[existingObjIndex].PM_PLAN_QTY += obj.PM_PLAN_QTY;
// mergedObjects3[existingObjIndex].NI_PLAN_QTY += obj.NI_PLAN_QTY;
} else {
mergedObjects4.push({ ...obj });
}
});
console.log(mergedObjects4);
// const mergedObjects2 = makingData['GRP'].reduce((acc, obj) => {
// const existingObj = acc.find(item => item.PLAN_SEQ === obj.PLAN_SEQ);
// let temp_PM = 'PM_PLAN_QTY_'+obj.DATE
// let temp_NI = 'NI_PLAN_QTY_'+obj.DATE
// let temp_AM = 'AM_PLAN_QTY_'+obj.DATE
//
//
//
//
// if (existingObj!== undefined) {
//
// if(existingObj[temp_AM]!== undefined){
// existingObj[temp_AM] = obj.AM_PLAN_QTY;
// }
// if(obj.PM_PLAN_QTY !== undefined){
// existingObj[temp_PM]= obj.PM_PLAN_QTY;
//
// }
// if(obj.NI_PLAN_QTY !== undefined){
// existingObj[temp_NI]= obj.NI_PLAN_QTY;
// }
//
// } else {
// acc.push({ ...obj });
// }
// return acc;
// }, []);
//
// // console.log(mergedObjects2);
//
// const mergedObjects = makingData['PLAN'].reduce((acc, obj) => {
// const existingObj = acc.find(item => item.PLAN_SEQ === obj.PLAN_SEQ);
// let temp_AM = 'AM_PLAN_QTY_'+obj.DATE
// let temp_PM = 'PM_PLAN_QTY_'+obj.DATE
// let temp_NI = 'NI_PLAN_QTY_'+obj.DATE
// // existingObj[temp_AM] = 1;
// if(existingObj !== undefined ){
// // console.log(existingObj);
// if(obj.AM_PLAN_QTY !== undefined){
//
// // console.log(obj.AM_PLAN_QTY);
// }
//
// }
//
// // console.log(existingObj[temp_AM]);
// if (existingObj !== undefined ) {
//
// if(obj.AM_PLAN_QTY !== undefined){
// // console.log('asdf');
// existingObj[temp_AM]= obj.AM_PLAN_QTY;
//
// }
// if(obj.PM_PLAN_QTY !== undefined){
// existingObj[temp_PM]= obj.PM_PLAN_QTY;
//
// }
// if(obj.NI_PLAN_QTY !== undefined){
// existingObj[temp_NI]= obj.NI_PLAN_QTY;
// }
//
// } else {
// acc.push({ ...obj });
// }
// return acc;
// }, []);
//
// // doubleArr.push(mergedObjects, mergedObjects2);
//
let newArr = mergedObjects4.concat(mergedObjects3);
// let group = Object.groupBy(newArr,({PLAN_SEQ}) => PLAN_SEQ)
// console.log(Object.values(group));
return newArr;
} }
/* /*
@ -318,7 +120,7 @@ class Tb_main_class {
let data = new Object(); let data = new Object();
for (let i = 0; i < arr.length; i++) { for (let i = 0; i < arr.length; i++) {
let temp = [arr[i]]; let temp = [arr[i]];
console.log();
if (document.getElementById(arr[i]).type == "checkbox") { if (document.getElementById(arr[i]).type == "checkbox") {
data[temp] = document.getElementById(temp).checked ? "Y" : "N"; data[temp] = document.getElementById(temp).checked ? "Y" : "N";
} else { } else {
@ -332,8 +134,7 @@ class Tb_main_class {
data: data, data: data,
success: (data) => { success: (data) => {
console.log(data.code);
console.table(data.data);
if (data.code) { if (data.code) {
//DB에서 받아온 데이터 가공하는 manageData 함수 참조 //DB에서 받아온 데이터 가공하는 manageData 함수 참조
this.tbList.setData(this.manageData(data)); this.tbList.setData(this.manageData(data));
@ -487,7 +288,7 @@ class Tb_main_class {
* @function _STATUS_ 값이 있는 데이터만 추려서 없으면 생성, 있으면 수정하기 * @function _STATUS_ 값이 있는 데이터만 추려서 없으면 생성, 있으면 수정하기
*/ */
putData() { putData() {
console.log(this.tbList.getData());
// 기본키 중복 확인 및 방지 // 기본키 중복 확인 및 방지
// _STATUS_ 있는 데이터만 들고와서 PUT하기 // _STATUS_ 있는 데이터만 들고와서 PUT하기
} }
@ -510,7 +311,7 @@ class Tb_main_class {
let month = ("0" + (date.getMonth() + 1)).slice(-2); // Adding leading zero let month = ("0" + (date.getMonth() + 1)).slice(-2); // Adding leading zero
let day = ("0" + date.getDate()).slice(-2); // Adding leading zero let day = ("0" + date.getDate()).slice(-2); // Adding leading zero
let formattedDate = `${month}${day}`; let formattedDate = `${month}${day}`;
console.log(formattedDate);
columns.push({ columns.push({
title: formattedDate, title: formattedDate,
columns: [ columns: [
@ -541,6 +342,7 @@ class Tb_main_class {
width: 50, width: 50,
editor: "input", editor: "input",
editable: (cell) => { editable: (cell) => {
console.log(cell);
return cell.getRow().getPosition() / 3 !== 1; return cell.getRow().getPosition() / 3 !== 1;
}, },
}, },
@ -583,7 +385,7 @@ class Tb_main_class {
// { groupId: this.lastGroupId, SEPER: "실적" }, // { groupId: this.lastGroupId, SEPER: "실적" },
// ], //기본 데이터 // ], //기본 데이터
columns: fields, //컬럼 설정 columns: fields, //컬럼 설정
groupBy: "PLAN_SEQ", groupBy: "SEQ_NO",
columnDefaults: commonFieldData, columnDefaults: commonFieldData,
groupStartOpen: true, groupStartOpen: true,
}); });

View File

@ -1,2 +0,0 @@
<?php
$cate_id = "STS_ORDER";

View File

@ -19,7 +19,7 @@ const VueOperStatusCode = createApp({
} }
}, },
mounted(){ mounted(){
this.getCodeList(); this.getMainList("getStsList", "order_date_st", "order_date_ed");
}, },
// computed: { // computed: {
@ -28,62 +28,99 @@ const VueOperStatusCode = createApp({
// } // }
// }, // },
methods:{ methods:{
getCodeList() { // tableBuild 되었을때 getManList
getMainList(mode,...test) {
const talert= window.setTimeout(()=> { this.tbList.alert("Loading ...") }, 1000);
let arr = test;
// let testList = new Array();
let data = new Object();
for(let i=0; i < arr.length; i++){
let temp = [arr[i]]
console.log();
if(document.getElementById(arr[i])?.type !== "checkbox"){
data[temp] = document.getElementById(temp)?.value
}else{
data[temp] = document.getElementById(temp)?.checked?"Y":"N";
}
}
data.mode = mode
// let USEFLAG = document.getElementById("USE_FLG").checked?"Y":"N"; //사용여부
ajax_json({
url: this.ajaxUrl,
data: data,
success: (data) => {
if(data.code) {
console.log(data.data);
this.getCodeList(data.data)
}else{
kuls_alert(data.mesg);
}
},
error: (req, status, err) => {
kuls_alert(err.message);
},
complete: () => {
window.clearTimeout(talert);
// this.setFilter();
// this.tbList.getRows().forEach(row=>{
// row.getCell("WO_NO").getElement().addEventListener("click",(e)=>{
// this.rowClick(e,row);
// })
// });
},
});
return true;
},
getCodeList(temp) {
// 임의의 데이터 직접 입력 [데이터 이렇게 php로 전처리...] // 임의의 데이터 직접 입력 [데이터 이렇게 php로 전처리...]
console.log(temp);
// let temp = [
let temp = [ // {생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 1, 공정 : '소재', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 1, 공정 : '소재', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'} // ,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 2, 공정 : 'M', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 2, 공정 : 'M', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'} // ,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 4, 공정 : 'G', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 4, 공정 : 'G', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'} // ,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 3, 공정 : 'F', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 3, 공정 : 'F', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'} // ,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 5, 공정 : 'H', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 5, 공정 : 'H', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'} // ,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 5, 공정 : 'H', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 5, 공정 : 'H', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'} // ,{생산오더: 'P00000', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 1, 공정 : '소재', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 5, 공정 : 'H', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'} // ,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 5, 공정 : 'H', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 5, 공정 : 'H', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'} // ,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 5, 공정 : 'H', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
// ,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 5, 공정 : 'H', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'} // // ,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 5, 공정 : 'H', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
// ,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 5, 공정 : 'H', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'} // // ,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 5, 공정 : 'H', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
// ,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 6, 공정 : 'M', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'} // // ,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 6, 공정 : 'M', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
//
,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 1, 공정 : '소재', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'} // ,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 2, 공정 : 'M', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 2, 공정 : 'M', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'} // ,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 4, 공정 : 'G', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 4, 공정 : 'G', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'} // ,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 3, 공정 : 'F', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 3, 공정 : 'F', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'} // ,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 5, 공정 : 'H', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 5, 공정 : 'H', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'} // ,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 6, 공정 : 'M', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 6, 공정 : 'M', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'} // ,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 1, 공정 : '소재', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 1, 공정 : '소재', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'} // ,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 2, 공정 : 'M', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 2, 공정 : 'M', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'} // ,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 4, 공정 : 'G', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 4, 공정 : 'G', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'} // ,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 3, 공정 : 'F', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 3, 공정 : 'F', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'} //
//
// ];
];
let realTemp = []; let realTemp = [];
console.log(Object.values(Object.groupBy(temp,( {생산오더} )=>생산오더))); console.log(Object.values(Object.groupBy(temp,( {WO_NO} )=>WO_NO)));
let group = Object.values(Object.groupBy(temp,( {생산오더} )=>생산오더)); let group = Object.values(Object.groupBy(temp,( {WO_NO,WO_SEQ} )=>WO_NO && WO_SEQ));
for(let i = 0; i < group.length; i++){ for(let i = 0; i < group.length; i++){
// delete group[i][0].계획수량;
// delete group[i][0].실적수량;
// delete group[i][0].투입시간;
// delete group[i][0].종료시간;
// delete group[i][0].예상종료시간;
// delete group[i][0].설비;
// delete group[i][0].작업자;
group[i][0].공정 = group[i].map(function(element){ group[i][0].OP_CD = group[i].map(function(element){
return { return {
공정명: element.공정 , OP_CD: element?.OP_CD ,
계획수량: element.계획수량, 계획수량: element?.계획수량,
실적수량 : element.실적수량, PRD_QTY : element?.PRD_QTY,
투입시간:element.투입시간, ST_TM:element?.ST_TM,
종료시간 : element.종료시간, ED_TM : element?.ED_TM,
예상종료시간 : element.예상종료시간 , 예상종료시간 : element?.예상종료시간 ,
설비: element.설비, FACLT_CD: element?.FACLT_CD,
작업자: element.작업자 } EMP_NM: element?.EMP_NM }
}); });
console.log(group[i][0]); console.log(group[i][0]);

View File

@ -100,7 +100,7 @@ include_once _SVC_INC_PATH_ . "/header.php";
<!-- 조회 저장 버튼 --> <!-- 조회 저장 버튼 -->
<div class="button-container"> <div class="button-container">
<div class="button-box"> <div class="button-box">
<button class="point-btn" id="filter_btn" @click="getCodeList()">조회</button> <button class="point-btn" id="filter_btn" @click="this.getMainList('getStsList', 'order_date_st', 'order_date_ed')">조회</button>
<button class="point-btn disabled-btn" id="put_btn" disabled>저장</button> <button class="point-btn disabled-btn" id="put_btn" disabled>저장</button>
</div> </div>
</div> </div>
@ -156,29 +156,29 @@ include_once _SVC_INC_PATH_ . "/header.php";
<tbody> <tbody>
<template v-for="(code, idx) in codeList"> <template v-for="(code, idx) in codeList">
<tr> <tr>
<td rowspan="5">{{code.생산오더}}<br>{{code.등록일}}</td> <td rowspan="5">{{code?.WO_NO}}<br>{{code?.ORD_DT.date}}</td>
<td rowspan="5">{{code.품목}}<br>{{code.도면번호}}<br>{{code.업체명}}</td> <td rowspan="5">{{code?.ITEM_CD}}<br>{{code?.DRAW_NO}}<br>{{code?.BP_CD}}</td>
<td rowspan="5">{{code.납기일}}</td> <td rowspan="5">{{code?.DLVY_REQ_DT.date}}</td>
<td rowspan="5">{{code.작업순서}}</td> <td rowspan="5">{{code?.WO_SEQ}}</td>
<td rowspan="5">{{code.완료}}</td> <td rowspan="5">{{code.완료}}</td>
<td colspan="2" v-for="(process, index) in code.공정" :key="`process-${index}`">{{ process?.공정명 }}</td> <td colspan="2" v-for="(process, index) in code.OP_CD" :key="`process-${index}`">{{ process?.OP_CD }}</td>
</tr> </tr>
<tr> <tr>
<td v-for="n in 20" :key="`plan-${n}`"> <td v-for="n in 20" :key="`plan-${n}`">
{{ n % 2 === 0 ? code['공정'][n/2-1]?.실적수량 : code['공정'][(n-1)/2]?.계획수량 }} {{ n % 2 === 0 ? code['OP_CD'][n/2-1]?.PRD_QTY : code['OP_CD'][(n-1)/2]?.PLAN_QTY }}
</td> </td>
</tr> </tr>
<tr> <tr>
<td v-for="n in 20" :key="`tm-${n}`"> <td v-for="n in 20" :key="`tm-${n}`">
{{ n % 2 === 0 ? code['공정'][n/2-1]?.종료시간 : code['공정'][(n-1)/2]?.투입시간 }} {{ n % 2 === 0 ? code['OP_CD'][n/2-1]?.ED_TM : code['OP_CD'][(n-1)/2]?.ST_TM }}
</td> </td>
</tr> </tr>
<tr> <tr>
<td colspan="2" v-for="(process, index) in code.공정" :key="`pre-${index}`">{{ process?.예상종료시간 }}</td> <td colspan="2" v-for="(process, index) in code.OP_CD" :key="`pre-${index}`">{{ process?.예상종료시간 }}</td>
</tr> </tr>
<tr> <tr>
<td v-for="n in 20" :key="`fa-${n}`"> <td v-for="n in 20" :key="`fa-${n}`">
{{ n % 2 === 0 ? code['공정'][n/2-1]?.작업자 : code['공정'][(n-1)/2]?.설비 }} {{ n % 2 === 0 ? code['OP_CD'][n/2-1]?.EMP_NM : code['OP_CD'][(n-1)/2]?.FACLT_CD }}
</td> </td>
</tr> </tr>

View File

@ -0,0 +1,59 @@
<?php
include_once "{$_SERVER['DOCUMENT_ROOT']}/common.inc.php";
?>
<!-- file upload popup <첨부파일 등록> -->
<!-- 첨부파일 등록 팝업 -->
<div id="popup_file_upload">
<div class="awn-popup-confirm awn-partner custom-popup">
<div class="awn-popup-title"><i class="bi bi-card-heading"></i> 첨부파일 등록</div>
<div class="awn-popup-search mb-block btn-ksmain-inject-block">
<!-- <div class="s_exp"> 더블클릭으로 선택/반영 합니다.</div>-->
<div class="s_fld form-inline d-block">
<!-- <label for="sgrp">오더번호: </label>
<select id="sgrp" name="sgrp" class="form-control form-select w100">
</select> -->
<!-- <label for="stxt">오더번호: </label>-->
<!-- <input type="text" class="form-control d-inline w120 align-bottom">-->
<!-- <label for="stxt">공정: </label>-->
<!-- <input type="text" name="stxt" id="stxt" class="form-control d-inline w120 align-bottom">-->
<!-- |
<button type="button" id="ptReset" class="btn btn-danger">
<i class="fa-regular fa-window-restore"></i>
초기화
</button> -->
</div>
</div>
<div class="awn-popup-content" style="padding: 10px 10px;">
<div class="table-box flex-1" id="main_table">
<!-- 테이블 헤더 (제목, 추가, 삭제, 저장) -->
<div class="table-title">
<p class="tilte"></p>
<!-- 버튼 -->
<!-- <div class="button-box">-->
<!-- <button class="add-btn reverse-btn">-->
<!-- --><?php //include _SVC_INC_PATH_ . '/img/add.php' ?>
<!-- 추가-->
<!-- </button>-->
<!-- <button class="remove-btn reverse-btn">-->
<!-- --><?php //include _SVC_INC_PATH_ . '/img/delete.php' ?>
<!-- 삭제-->
<!-- </button>-->
<!-- </div>-->
<!-- 버튼 종료 // -->
</div>
<!-- 테이블 헤더 종료 // -->
<!-- 테이블 -->
<div class="hy-table"></div>
<!-- 테이블 종료 // -->
</div>
<!-- 테이블 박스 종료 // -->
</div>
</div>
</div>
<!-- file upload popup <첨부파일 등록> -->

View File

@ -1,15 +1,22 @@
class SimpleTable { class SimpleTable {
constructor(fields){ constructor(fields, getmode, putmode){
this.field = fields; this.field = fields;
this.ajaxUrl = './reg_prod_result.ajax.php'; this.ajaxUrl = './reg_prod_result.ajax.php';
this.getmode = getmode?getmode:'';
this.putmode = putmode?putmode:'';
this.container = document.querySelector(".detail-contents"); this.container = document.querySelector(".detail-contents");
console.log(this.container)
this.table = this.container?.querySelector(".hy-table"); this.table = this.container?.querySelector(".hy-table");
} }
getMainList(){} getMainList(){
// ajax_json({
// })
}
addRow(){} addRow(){}
putData(){} putData(){
// ajax_json({})
}
init(){ init(){
const commonFieldData = { const commonFieldData = {
headerSort: false, headerSort: false,
@ -90,6 +97,7 @@ class FieldPop {
}, },
isComponent : { isComponent : {
isDefHst : false,
isWorker : false, isWorker : false,
isFacility : false, isFacility : false,
isFacltBreak : false, isFacltBreak : false,
@ -105,7 +113,22 @@ class FieldPop {
isFile: false isFile: false
}, },
tabs1: [ '작업표준서 조회', '도면 조회' ], //popup 띄우기
tabs2: [{ isDefHst : '과거불량이력 조회' }, { isFacltBreak : '설비 고장등록' }, {isRun : '가동'}, {isNoRun : '비가동'} ],
activeTab : '',
tableField : { tableField : {
isDefHst : [
{ field: "DEF_NO", formatter:"rownum", title: "순번", width: 50},
{ field: "DEF_FACLT_CD", title: "설비", width: '23%'},
{ field: "DEF_CD", title: "불량원인", width: '23%'},
{ field: "DEF_QTY", title: "불량수량", width: '23%'},
{ field: "DEF_PRICE", title: "불량단가", width: '23%'},
],
isWorker : [ isWorker : [
{ field: "", formatter:"rownum", title: "순번", width: 50}, { field: "", formatter:"rownum", title: "순번", width: 50},
{ field: "", title: "실적 등록 시간", minWidth: 150, width:'26%'}, { field: "", title: "실적 등록 시간", minWidth: 150, width:'26%'},
@ -115,10 +138,10 @@ class FieldPop {
], ],
isFacility : [ isFacility : [
{ field: "", formatter:"rownum", title: "순번", width: 50}, { field: "", formatter:"rownum", title: "순번", width: 50},
{ field: "", title: "설비코드", minWidth: 100, width:'16%'}, { field: "", title: "설비코드", minWidth: 80, width:'14%'},
{ field: "", title: "설비명", minWidth: 150, width:'22%'}, { field: "", title: "설비명", minWidth: 150, width:'26%'},
{ field: "", title: "소속", minWidth: 80, width:'15%'}, { field: "", title: "소속", minWidth: 80, width:'14%'},
{ field: "", title: "상태", minWidth: 80, width:'15%'}, { field: "", title: "상태", minWidth: 80, width:'14%'},
{ field: "", title: "가동<br>시작시간", minWidth: 120, width:'23%'} { field: "", title: "가동<br>시작시간", minWidth: 120, width:'23%'}
], ],
isFacltBreak : [ isFacltBreak : [
@ -171,7 +194,13 @@ class FieldPop {
{ field: "", title: "1", width: 50}, { field: "", title: "1", width: 50},
{ field: "", title: "2", width: 50}, { field: "", title: "2", width: 50},
{ field: "", title: "3", width: 50}, { field: "", title: "3", width: 50},
{ field: "", title: "4", width: 50},
{ field: "", title: "5", width: 50},
{ field: "", title: "6", width: 50},
{ field: "", title: "7", width: 50},
{ field: "", title: "8", width: 50},
{ field: "", title: "9", width: 50},
{ field: "", title: "10", width: 50},
] ]
}, },
], ],
@ -188,6 +217,7 @@ class FieldPop {
}, },
mounted() { mounted() {
this.showComponent('isWorker');
}, },
computed: { computed: {
@ -208,21 +238,64 @@ class FieldPop {
callTable(com){ callTable(com){
this.$nextTick(()=>{ this.$nextTick(()=>{
console.log(com) // 여기서 mode 명 동적으로 정의할것 (com을 사용)
const getmode = '';
const putmode = '';
const table = new SimpleTable(this.tableField[com]); const table = new SimpleTable(this.tableField[com], getmode, putmode);
table.init(); table.init();
}) })
}, },
// openDrawPop(){
// const process = data['OP_CD'][idx]
// const bindingData = {
// WO_NO: data['WO_NO'],
// // 상태: data[상태],
// DRAW_NO: data['DRAW_NO'],
// ITEM_CD: data['ITEM_CD'],
// OP_CD: process['OP_CD'],
// EMP_NO: process['EMP_NO'],
// FACLT_CD: process['FACLT_CD'],
// ED_TM: process['ED_TM'],
// PRD_QTY: process['PRD_QTY'],
// }
// console.log(bindingData)
// const pop = new FieldPop(bindingData);
// pop.init();
// },
// openGuide(){
// const process = data['OP_CD'][idx]
// const bindingData = {
// WO_NO: data['WO_NO'],
// // 상태: data[상태],
// DRAW_NO: data['DRAW_NO'],
// ITEM_CD: data['ITEM_CD'],
// OP_CD: process['OP_CD'],
// EMP_NO: process['EMP_NO'],
// FACLT_CD: process['FACLT_CD'],
// ED_TM: process['ED_TM'],
// PRD_QTY: process['PRD_QTY'],
// }
// console.log(bindingData)
// const pop = new FieldPop(bindingData);
// pop.init();
// },
// 클릭시 컴포넌트 생성 및 삭제로 페이지 레이아웃 변경 // 클릭시 컴포넌트 생성 및 삭제로 페이지 레이아웃 변경
showComponent(com) { showComponent(com, tab) {
this.activeTab = tab;
Object.keys(this.isComponent).map((key)=>{ Object.keys(this.isComponent).map((key)=>{
this.isComponent[key] = com == key ? true : false; this.isComponent[key] = com == key ? true : false;
}); });
if(com=='isInsp'){
this.isTab = {
isInsp: true,
isFile: false
}
};
this.callTable(com); this.callTable(com);
}, },
@ -248,5 +321,5 @@ class FieldPop {
}).mount('#popup_field') }).mount('#popup_field')
} }
} }

View File

@ -13,25 +13,26 @@ include_once "{$_SERVER['DOCUMENT_ROOT']}/common.inc.php";
<!-- form 시작 --> <!-- form 시작 -->
<form name="frmWorkData" method="post" class="flexcol gap10"> <form name="frmWorkData" method="post" class="flexcol gap10">
<!-- form button-container --> <!-- form button-container -->
<div class="form-button-container flexrow flexbetween"> <div class="form-button-container flexrow flexbetween gap10">
<div class="form-button-box flexrow gap06"> <!-- <div class="form-button-box flexrow gap06 flex-3">
<button class="form-button close-btn" type="button" @click="close">닫기</button> </div>
<button class="form-button point-btn" type="button" @click="showDefect">과거불량이력 조회</button> <div class="form-button-box flexrow gap06 flex-5">
<button class="form-button point-btn" type="button" @click="showWrkDocs">작업표준서 조회</button> <button type="button" v-for="(tab, idx) in tabs2" :key="idx" :class="{ on : activeTab === tab }" @click="showComponent(com2[idx], tab)" >{{ tab }}</button>
<button class="form-button point-btn" type="button" @click="showDraw">도면 조회</button> </div> -->
<div class="form-button-box flexrow gap06 flex-3 min-width-572">
<button type="button" v-for="(tab, idx) in tabs1" :key="idx" :class="{ on : activeTab === tab}" @click="activeTab === tab" >{{ tab }}</button>
</div> </div>
<div class="form-button-box flexrow gap06"> <div class="form-button-box flexrow gap06 flex-5 flexend">
<button class="form-button point-btn" type="button" @click="showComponent('isFacltBreak')">설비 고장등록</button> <button type="button" v-for="(tab, idx) in tabs2" :key="idx" :class="{ on : activeTab === tab[Object.keys(tab)[0]] }" @click="showComponent(Object.keys(tab)[0], tab[Object.keys(tab)[0]])" >{{ tab[Object.keys(tab)[0]] }}</button>
<button class="form-button run-btn" type="button" @click="showComponent('isRun')">가동</button>
<button class="form-button norun-btn" type="button" @click="showComponent('isNoRun')">비가동</button>
</div> </div>
</div> </div>
<!-- form 내용 --> <!-- form 내용 -->
<div class="form-contents flexrow gap10"> <div class="form-contents flexrow gap10">
<div class="info-container flex-1 flexcol flexbetween gap10"> <div class="info-container flex-3 flexcol flexbetween gap10 min-width-572">
<div class="form-box flexcol gap10"> <div class="form-box flexcol gap10 flexcenter flex-4">
<div class="input-container flexrow gap06"> <div class="input-container flexrow gap06">
<div class="input-box flex-1"> <div class="input-box flex-1">
@ -67,23 +68,25 @@ include_once "{$_SERVER['DOCUMENT_ROOT']}/common.inc.php";
</div> </div>
<div class="input-container flexrow gap06"> <div class="input-container flexrow gap06">
<div class="input-box flex-1"> <div class="input-box flex-1" @click="showComponent('isWorker')">
<label for="EMP_NO">작업자</label> <label for="EMP_NM">작업자</label>
<input v-model="formData.EMP_NO" @click="showComponent('isWorker')" type="text" id="EMP_NO" name="EMP_NO" <input v-model="formData.EMP_NM" :class="{on : isComponent['isWorker']}" type="text" id="EMP_NM" name="EMP_NM"
class="form-control form-control-sm" readonly /> class="form-control form-control-sm" readonly />
<span><i class="fa-solid fa-arrow-pointer"></i></span>
</div> </div>
<div class="input-box flex-1"> <div class="input-box flex-1">
</div> </div>
</div> </div>
</div> </div>
<div class="form-box flexcol gap10"> <div class="form-box flexcol gap10 flexcenter flex-2">
<div class="input-container flexrow gap06"> <div class="input-container flexrow gap06">
<div class="input-box flex-1"> <div class="input-box flex-1">
<label for="WO_NO">설비</label> <label for="WO_NO">설비</label>
<input v-model="formData.FACLT_CD" @click="showComponent('isFacility')" type="text" id="WO_NO" name="WO_NO" <input v-model="formData.FACLT_CD" @click="showComponent('isFacility')" :class="{on : isComponent['isFacility']}" type="text" id="WO_NO" name="WO_NO"
class="form-control form-control-sm" readonly /> class="form-control form-control-sm" readonly />
<span><i class="fa-solid fa-arrow-pointer"></i></span>
</div> </div>
<div class="input-box flex-1"> <div class="input-box flex-1">
<label for="">비가동시간</label> <label for="">비가동시간</label>
@ -97,14 +100,14 @@ include_once "{$_SERVER['DOCUMENT_ROOT']}/common.inc.php";
<input type="text" id="WO_NO" name="WO_NO" class="form-control form-control-sm" readonly /> <input type="text" id="WO_NO" name="WO_NO" class="form-control form-control-sm" readonly />
</div> </div>
<div class="input-box flex-1"> <div class="input-box flex-1">
<label for="">작업완료</label> <label for="">작업완료시간</label>
<input type="text" id="" name="" class="form-control form-control-sm" readonly /> <input type="text" id="" name="" class="form-control form-control-sm" readonly />
</div> </div>
</div> </div>
</div> </div>
<div class="form-box flexcol gap10"> <div class="form-box flexcol gap10 flexcenter flex-2">
<div class="input-container flexrow gap06"> <div class="input-container flexrow gap06">
<div class="input-box flex-1"> <div class="input-box flex-1">
@ -120,19 +123,21 @@ include_once "{$_SERVER['DOCUMENT_ROOT']}/common.inc.php";
<div class="input-container flexrow gap06"> <div class="input-container flexrow gap06">
<div class="input-box flex-1"> <div class="input-box flex-1">
<label for="WO_NO">양품수량</label> <label for="WO_NO">양품수량</label>
<input @click="showComponent('isProd')" type="text" id="WO_NO" name="WO_NO" <input @click="showComponent('isProd')" :class="{on : isComponent['isProd']}" type="text" id="WO_NO" name="WO_NO"
class="form-control form-control-sm" readonly /> class="form-control form-control-sm" readonly />
<span><i class="fa-solid fa-arrow-pointer"></i></span>
</div> </div>
<div class="input-box flex-1"> <div class="input-box flex-1">
<label for="">불량수량</label> <label for="">불량수량</label>
<input @click="showComponent('isDef')" type="text" id="" name="" class="form-control form-control-sm" <input @click="showComponent('isDef')" :class="{on : isComponent['isDef']}" type="text" id="" name="" class="form-control form-control-sm"
readonly /> readonly />
<span><i class="fa-solid fa-arrow-pointer"></i></span>
</div> </div>
</div> </div>
</div> </div>
<div class="form-box flexcol gap10"> <div class="form-box flexcol gap10 flexcenter flex-1">
<div class="input-container flexrow gap06"> <div class="input-container flexrow gap06">
<div class="input-box flex-1"> <div class="input-box flex-1">
@ -143,6 +148,7 @@ include_once "{$_SERVER['DOCUMENT_ROOT']}/common.inc.php";
<label for="">검사등록</label> <label for="">검사등록</label>
<input @click="showComponent('isInsp')" type="text" id="" name="" class="form-control form-control-sm" <input @click="showComponent('isInsp')" type="text" id="" name="" class="form-control form-control-sm"
readonly /> readonly />
<span><i class="fa-solid fa-arrow-pointer"></i></span>
</div> </div>
</div> </div>
@ -151,452 +157,41 @@ include_once "{$_SERVER['DOCUMENT_ROOT']}/common.inc.php";
</div> </div>
<div class="detail-container flex-1 flexcol"> <div class="detail-container flex-5 flexcol">
<div class="detail-contents height-full flexcol flexbetween gap10" v-if="isComponent['isDefHst']">
<?php include _SVC_PATH_ . '/site/sts_order_prod/popComponent/isDefHst.php' ?>
</div>
<div class="detail-contents height-full flexcol flexbetween gap10" v-if="isComponent['isWorker']"> <div class="detail-contents height-full flexcol flexbetween gap10" v-if="isComponent['isWorker']">
<!-- 헤더 --> <?php include _SVC_PATH_ . '/site/sts_order_prod/popComponent/isWorker.php' ?>
<div class="form-header form-box">
<div class="input-container flexrow gap06">
<div class="input-box flex-1">
<label for="" style="width:80px;">소속</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
<div class="input-box flex-1">
<label for="">작업자</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
</div>
</div>
<!-- 헤더 종료 // -->
<!-- 테이블 박스 -->
<div class="table-box flexcol flexbetween" style="height: calc(100% - 80px);">
<div class="height-89">
<div class="hy-table" id="isWorker"></div>
</div>
<div class="table-title">
<div class="button-box flexend">
<div class="add-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/add.php' ?>
선택 확인
</div>
<div class="remove-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/delete.php' ?>
선택 취소
</div>
</div>
</div>
</div>
<!-- 테이블 박스 종료 // -->
</div> </div>
<div class="detail-contents flexcol gap10" v-if="isComponent['isFacility']"> <div class="detail-contents flexcol gap10" v-if="isComponent['isFacility']">
<!-- 테이블 박스 --> <?php include _SVC_PATH_ . '/site/sts_order_prod/popComponent/isFacility.php' ?>
<div class="table-box height-full flexcol flexbetween">
<div class="height-89">
<div class="hy-table" id="isFacility"></div>
</div>
<div class="table-title">
<div class="button-box flexend">
<div class="add-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/add.php' ?>
선택 확인
</div>
<div class="remove-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/delete.php' ?>
선택 취소
</div>
</div>
</div>
</div>
<!-- 테이블 박스 종료 // -->
</div> </div>
<div class="detail-contents flexcol gap10" v-if="isComponent['isFacltBreak']"> <div class="detail-contents flexcol gap10" v-if="isComponent['isFacltBreak']">
<?php include _SVC_PATH_ . '/site/sts_order_prod/popComponent/isFacltBreak.php' ?>
<!-- 테이블 박스 -->
<div class="table-box height-full flexcol flexbetween">
<div class="height-half">
<div class="hy-table" id="isFacility"></div>
</div>
<!-- 헤더 -->
<div class="form-header form-box">
<div class="input-container flexcol gap06">
<div class="input-box flexrow flexend flex-1">
<label for="" style="width:80px;">고장등록시간</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
<div class="input-box flexrow flexend flex-1 flexrow">
<label for="" style="width:80px;">고장신고사유</label>
<textarea id="" name="" class="form-control form-control-sm"></textarea>
</div>
</div>
<div class="table-title" style="margin-top:10px;">
<div class="button-box flexend">
<div class="add-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/add.php' ?>
선택 확인
</div>
<div class="remove-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/delete.php' ?>
선택 취소
</div>
</div>
</div>
</div>
<!-- 헤더 종료 // -->
</div>
<!-- 테이블 박스 종료 // -->
</div> </div>
<div class="detail-contents flexcol gap10" v-if="isComponent['isRun']"> <div class="detail-contents flexcol gap10" v-if="isComponent['isRun']">
<!-- 테이블 박스 --> <?php include _SVC_PATH_ . '/site/sts_order_prod/popComponent/isRun.php' ?>
<div class="table-box height-full flexcol flexbetween">
<div style="height:calc(100% - 112px);">
<div class="hy-table" id="isRun"></div>
</div>
<!-- 헤더 -->
<div class="form-header form-box">
<div class="input-container flexcol gap06">
<div class="input-box flexrow flexend flex-1">
<label for="" style="width:80px;">가동시작시간</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
</div>
<div class="table-title" style="margin-top:10px;">
<div class="button-box flexend">
<div class="add-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/add.php' ?>
선택 확인
</div>
<div class="remove-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/delete.php' ?>
선택 취소
</div>
</div>
</div>
</div>
<!-- 헤더 종료 // -->
</div>
<!-- 테이블 박스 종료 // -->
</div> </div>
<div class="detail-contents flexcol gap10" v-if="isComponent['isNoRun']"> <div class="detail-contents flexcol gap10" v-if="isComponent['isNoRun']">
<!-- 테이블 박스 --> <?php include _SVC_PATH_ . '/site/sts_order_prod/popComponent/isNoRun.php' ?>
<div class="table-box height-full flexcol flexbetween">
<div style="height:calc(100% - 148px);">
<div class="hy-table" id="isRun"></div>
</div>
<!-- 헤더 -->
<div class="form-header form-box">
<div class="input-container flexcol gap06">
<div class="input-box flexrow flexend flex-1">
<label for="" style="width:80px;">가동시작시간</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
<div class="input-box flexrow flexend flex-1">
<label for="" style="width:80px;">비가동사유</label>
<div class="round-tab-box">
<button type="button" class="tab-btn left-round">작업종료</button>
<button type="button" class="tab-btn">품목교체</button>
<button type="button" class="tab-btn">설비고장</button>
<button type="button" class="tab-btn right-round">자체결품</button>
</div>
</div>
</div>
<div class="table-title" style="margin-top:10px;">
<div class="button-box flexend">
<div class="add-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/add.php' ?>
선택 확인
</div>
<div class="remove-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/delete.php' ?>
선택 취소
</div>
</div>
</div>
</div>
<!-- 헤더 종료 // -->
</div>
<!-- 테이블 박스 종료 // -->
</div> </div>
<div class="detail-contents flexcol gap10" v-if="isComponent['isProd']"> <div class="detail-contents flexcol gap10" v-if="isComponent['isProd']">
<!-- 헤더 --> <?php include _SVC_PATH_ . '/site/sts_order_prod/popComponent/isProd.php' ?>
<div class="form-header flexrow form-box">
<div class="flexcol gap10">
<div class="input-container flexrow gap06">
<div class="input-box flex-1">
<label for="" style="width:80px;">작업일</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
<div class="input-box flex-1">
<label for="">시간</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
</div>
<div class="input-container flexrow gap06">
<div class="input-box flex-1 flexrow">
<label for="" style="width:80px;">이전공정<br>양품수량</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
<div class="input-box flex-1">
<label for="">수량</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
</div>
</div>
<button type="button" class="add-btn basic-btn">추가</button>
</div>
<!-- 헤더 종료 // -->
<!-- 테이블 박스 -->
<div class="table-box flexcol flexbetween" style="height:calc(100% - 120px);">
<div class="height-89">
<div class="hy-table" id="isProd"></div>
</div>
<div class="table-title">
<div class="button-box flexend">
<div class="add-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/add.php' ?>
선택 확인
</div>
<div class="remove-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/delete.php' ?>
선택 취소
</div>
</div>
</div>
</div>
<!-- 테이블 박스 종료 // -->
</div> </div>
<div class="detail-contents flexcol gap10" v-if="isComponent['isDef']"><!-- 테이블 박스 -->
<!-- 헤더 -->
<div class="form-header flexrow form-box">
<div class="flexcol gap10"> <div class="detail-contents flexcol gap10" v-if="isComponent['isDef']">
<div class="input-container flexrow gap06"> <?php include _SVC_PATH_ . '/site/sts_order_prod/popComponent/isDef.php' ?>
<div class="input-box flex-1">
<label for="" style="width:80px;">작업일</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
<div class="input-box flex-1">
<label for="">시간</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
</div>
<div class="input-container flexrow gap06">
<div class="input-box flex-1 flexrow">
<label for="" style="width:80px;">등록가능수량</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
<div class="input-box flex-1">
<label for="">수량</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
</div>
<div class="input-container flexrow flexend flex-1">
<div class="input-box flexrow flex-1">
<label for="" style="width:80px;">비가동사유</label>
<div class="round-tab-box" style="width:calc(100% - 100px);">
<button type="button" class="tab-btn left-round">작업종료</button>
<button type="button" class="tab-btn">품목교체</button>
<button type="button" class="tab-btn">설비고장</button>
<button type="button" class="tab-btn right-round">자체결품</button>
</div>
</div>
</div>
</div>
<button type="button" class="add-btn basic-btn">추가</button>
</div>
<!-- 헤더 종료 // -->
<!-- 테이블 박스 -->
<div class="table-box flexcol flexbetween" style="height:calc(100% - 160px);">
<div class="height-89">
<div class="hy-table" id="isDef"></div>
</div>
<div class="table-title">
<div class="button-box flexend">
<div class="add-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/add.php' ?>
선택 확인
</div>
<div class="remove-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/delete.php' ?>
선택 취소
</div>
</div>
</div>
</div>
<!-- 테이블 박스 종료 // -->
</div> </div>
<div class="detail-contents flexcol gap10" v-if="isComponent['isInsp']"> <div class="detail-contents flexcol gap10" v-if="isComponent['isInsp']">
<!-- 테이블 박스 --> <?php include _SVC_PATH_ . '/site/sts_order_prod/popComponent/isInsp.php' ?>
<div class="table-box height-full flexcol flexbetween gap10">
<ul class="flexrow tab-menu gap06">
<li id="first-tab" @click="isChangeTab('isInsp')" :class="{'on':isInspVal}">실적</li>
<li id="second-tab" @click="isChangeTab('isFile')" :class="{'on':isFileVal}">파일</li>
</ul>
<!-- tab container -->
<div v-if="isTab['isInsp']" class="table-box flexcol flexbetween" style="height:calc(100% - 43px);">
<div style="height:calc(100% - 112px);">
<div class="hy-table group-table groupby" id="isInsp"></div>
</div>
<!-- 헤더 -->
<div class="form-header form-box">
<div class="input-container flexrow gap06">
<div class="input-box flex-1 flexrow">
<label for="" style="width:80px;">등록가능수량</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
<div class="input-box flex-1 flexrow flexend">
<label for="">수량</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
</div>
<div class="table-title" style="margin-top:10px;">
<div class="button-box flexend">
<div class="add-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/add.php' ?>
선택 확인
</div>
<div class="remove-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/delete.php' ?>
선택 취소
</div>
</div>
</div>
</div>
<!-- 헤더 종료 // -->
</div>
<!-- tab container 종료 // -->
<!-- tab container -->
<div v-if="isTab['isFile']" class="table-box flexcol flexbetween" style="height:calc(100% - 43px);">
<div style="height:calc(100% - 112px);">
<div class="hy-table" id="isInsp"></div>
</div>
<!-- 헤더 -->
<div class="form-header form-box">
<div class="input-container flexrow gap06">
<div class="input-box flex-1 flexrow">
<label for="" style="width:80px;">등록가능수량</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
<div class="input-box flex-1 flexrow flexend">
<label for="">수량</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
</div>
<div class="table-title" style="margin-top:10px;">
<div class="button-box flexend">
<div class="add-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/add.php' ?>
선택 확인
</div>
<div class="remove-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/delete.php' ?>
선택 취소
</div>
</div>
</div>
</div>
<!-- 헤더 종료 // -->
</div>
<!-- tab container 종료 // -->
</div>
<!-- 테이블 박스 종료 // -->
</div> </div>
</div> </div>

View File

@ -31,30 +31,36 @@ if( !_notAuth("R") ){/************ 권한체크*/
$retval['code'] = false; $retval['code'] = false;
} }
break; break;
case "getOrderList": // 생산오더별 진행현황
$retval['code'] = true; case 'getStsList':
// $sql = "USP_B_OPERATION_S10";
// $params = array(
// "OP_NM" => "",
// "USE_FLG" => "Y"
// );
// $rst = $baseObj->DB->exec($sql,$params); $squl = "USP_P_WO_OPER_RSLT_S40";
// $rows = array(); $params = array(
// if( $rst ){ "date_st" => $_REQUEST["order_date_st"] ?: "2024-04-01",
// $retval['code'] = true; // "date_st" => "2024-04-16" ?: "",
// while( $row = $baseObj->DB->fetch_array($rst) ){ "date_ed" => $_REQUEST["order_date_ed"] ?: "2024-05-31",
// // $row['OP_CD_OLD'] = $row['OP_CD']; "WO_NO" => $_REQUEST["P_WO_NO"] ?: "",
"ITEM_CD" => $_REQUEST["ITEM_CD"] ?: "",
"OP_CD" => $_REQUEST["OP_CD"] ?: "",
"FACLT_CD " => $_REQUEST["FACLT_CD_P"] ?: "",
"EMP_NO" => $_REQUEST["EMP_NO"] ?: ""
);
$rst = $baseObj->DB->exec($squl, $params);
$rows = array();
if ($rst) {
$retval['code'] = true;
while ($row = $baseObj->DB->fetch_array($rst)) {
$rows[] = $row;
};
$retval['data'] = $rows;
$retval['mesg'] = '정상 동작 되었습니다.';
} else {
$retval['code'] = false;
}
// $rows[] = $row;
// }
// $retval['data'] = $rows;
// $retval['mesg'] = "정상적으로 작동하였습니다.";
// }else{
// $retval['code'] = false;
// }
break; break;
} }
} }

View File

@ -2,7 +2,7 @@
* @Overview 생산오더 진행 현황 * @Overview 생산오더 진행 현황
*/ */
console.log("hihihihihihihi this is hihi!!!");
class Tb_oper_class { class Tb_oper_class {
constructor(container){ constructor(container){
@ -221,13 +221,13 @@ class Tb_oper_class {
const VueOperStatusCode = createApp({ const VueOperStatusCode = createApp({
data(){ data(){
return { return {
ajaxUrl: './sts_oper_prod.ajax.php', ajaxUrl: './sts_order_prod.ajax.php',
codeList: [], codeList: [],
isHover: {} isHover: {}
} }
}, },
mounted(){ mounted(){
this.getCodeList(); this.getMainList("getStsList", "P_WO_NO");
}, },
// computed: { // computed: {
@ -246,14 +246,14 @@ const VueOperStatusCode = createApp({
if(operData){ if(operData){
finalDataList.push( finalDataList.push(
{ {
공정명: operData.공정 , OP_CD: operData.OP_CD ,
계획수량: operData.계획수량, PLAN_QTY: operData.PLAN_QTY,
실적수량 : operData.실적수량, PRD_QTY : operData.PRD_QTY,
투입시간:operData.투입시간, ST_TM:operData.ST_TM,
종료시간 : operData.종료시간, ED_TM : operData.ED_TM,
예상종료시간 : operData.예상종료시간 , 예상종료시간 : operData.예상종료시간 ,
설비: operData.설비, FACLT_CD: operData.FACLT_CD,
작업자: operData.작업자 EMP_NM: operData.EMP_NM
} }
) )
}else{ }else{
@ -271,25 +271,112 @@ const VueOperStatusCode = createApp({
} }
}, },
getCodeList() {
// 임의의 데이터 직접 입력 [데이터 이렇게 php로 전처리...]
let temp = [
{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 1, 공정 : '소재', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 2, 공정 : 'M', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 4, 공정 : 'G', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 3, 공정 : 'F', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 5, 공정 : 'H', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 6, 공정 : 'M', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 1, 공정 : '소재', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 2, 공정 : 'M', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 4, 공정 : 'G', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 3, 공정 : 'F', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 5, 공정 : 'H', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 6, 공정 : 'M', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
];
const group = Object.values(Object.groupBy(temp, ({생산오더}) => 생산오더))
console.log(group); // tableBuild 되었을때 getManList
getMainList(mode,...test) {
const talert= window.setTimeout(()=> { this.tbList.alert("Loading ...") }, 1000);
let arr = test;
// let testList = new Array();
let data = new Object();
for(let i=0; i < arr.length; i++){
let temp = [arr[i]]
console.log();
if(document.getElementById(arr[i])?.type !== "checkbox"){
data[temp] = document.getElementById(temp)?.value
}else{
data[temp] = document.getElementById(temp)?.checked?"Y":"N";
}
}
data.mode = mode
// let USEFLAG = document.getElementById("USE_FLG").checked?"Y":"N"; //사용여부
ajax_json({
url: this.ajaxUrl,
data: data,
success: (data) => {
if(data.code) {
console.log(data.data);
this.getCodeList(data.data)
}else{
kuls_alert(data.mesg);
}
},
error: (req, status, err) => {
kuls_alert(err.message);
},
complete: () => {
window.clearTimeout(talert);
// this.setFilter();
// this.tbList.getRows().forEach(row=>{
// row.getCell("WO_NO").getElement().addEventListener("click",(e)=>{
// this.rowClick(e,row);
// })
// });
},
});
return true;
},
getCodeList(temp) {
console.log(temp)
let realTemp = [];
console.log(Object.values(Object.groupBy(temp,( {WO_NO} )=>WO_NO)));
let group = Object.values(Object.groupBy(temp,( {WO_NO,WO_SEQ} )=>WO_NO && WO_SEQ));
for(let i = 0; i < group.length; i++) {
group[i][0].OP_CD = group[i].map(function (element) {
return {
OP_CD: element?.OP_CD,
계획수량: element?.계획수량,
PRD_QTY: element?.PRD_QTY,
ST_TM: element?.ST_TM,
ED_TM: element?.ED_TM,
예상종료시간: element?.예상종료시간,
FACLT_CD: element?.FACLT_CD,
EMP_NM: element?.EMP_NM
}
});
console.log(group[i][0]);
realTemp.push(group[i][0]);
}
// 임의의 데이터 직접 입력 [데이터 이렇게 php로 전처리...]
// let temp = [
// {생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 1, 공정 : '소재', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
// ,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 2, 공정 : 'M', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
// ,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 4, 공정 : 'G', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
// ,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 3, 공정 : 'F', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
// ,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 5, 공정 : 'H', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
// ,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 6, 공정 : 'M', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
// ,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 1, 공정 : '소재', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
// ,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 2, 공정 : 'M', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
// ,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 4, 공정 : 'G', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
// ,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 3, 공정 : 'F', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
// ,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 5, 공정 : 'H', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
// ,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 6, 공정 : 'M', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
// ];
// const group = Object.values(Object.groupBy(temp, ({WO_NO}) => WO_NO))
this.codeList = realTemp
this.initData(group); this.initData(group);
// 실제 데이터 입력함수 // 실제 데이터 입력함수
@ -307,24 +394,26 @@ const VueOperStatusCode = createApp({
// kuls_alert(err.message); // kuls_alert(err.message);
// } // }
// }) // })
return this.codeList;
}, },
openPop(data, idx) { openPop(data, idx) {
const process = data['공정'][idx] const process = data['OP_CD'][idx]
const bindingData = { const bindingData = {
WO_NO: data['생산오더'], WO_NO: data['WO_NO'],
// 상태: data[상태], // 상태: data[상태],
DRAW_NO: data['도면번호'], DRAW_NO: data['DRAW_NO'],
ITEM_CD: data['품목'], ITEM_CD: data['ITEM_CD'],
OP_CD: process['공정명'], OP_CD: process['OP_CD'],
EMP_NO: process['작업자'], EMP_NO: process['EMP_NO'],
FACLT_CD: process['설비'], FACLT_CD: process['FACLT_CD'],
종료시간: process['종료시간'], ED_TM: process['ED_TM'],
실적수량: process['실적수량'], PRD_QTY: process['PRD_QTY'],
} }
console.log(bindingData) console.log(bindingData)
const pop = new FieldPop(bindingData); const pop = new FieldPop(bindingData);
pop.init(); pop.init();
} }
}, },
@ -491,7 +580,7 @@ class Tb_order_class {
// 데이터 불러오기 // 데이터 불러오기
this.tbList.on("tableBuilt", () => { this.tbList.on("tableBuilt", () => {
this.getMainList(); // this.getMainList();
}); });
// // row 클릭 시에 // // row 클릭 시에
// this.tbList.on("rowClick", (e, tgt) => { // this.tbList.on("rowClick", (e, tgt) => {
@ -523,7 +612,7 @@ class Tb_order_class {
["click", "keypress"].forEach((evt) => { ["click", "keypress"].forEach((evt) => {
const filterBtn = document.querySelector("#filter_btn"); const filterBtn = document.querySelector("#filter_btn");
filterBtn.addEventListener(evt, () => { filterBtn.addEventListener(evt, () => {
this.getMainList(); // this.getMainList();
}); });
}); });
// // 저장 // // 저장

View File

@ -43,7 +43,7 @@ include_once _SVC_INC_PATH_ . "/header.php";
<label for="">생산오더</label> <label for="">생산오더</label>
<div> <div>
<div class="input-box"> <div class="input-box">
<input type="text" id=""> <input type="text" id="P_WO_NO">
<?php // include _SVC_INC_PATH_ . '/img/popupIcon.php' ?> <?php // include _SVC_INC_PATH_ . '/img/popupIcon.php' ?>
</div> </div>
@ -61,7 +61,7 @@ include_once _SVC_INC_PATH_ . "/header.php";
<!-- 조회 저장 버튼 --> <!-- 조회 저장 버튼 -->
<div class="button-container"> <div class="button-container">
<div class="button-box"> <div class="button-box">
<button class="point-btn" id="filter_btn" @click="getCodeList()">조회</button> <button class="point-btn" id="filter_btn" @click="getMainList('getStsList', 'P_WO_NO')">조회</button>
<button class="point-btn disabled-btn" id="put_btn" disabled>저장</button> <button class="point-btn disabled-btn" id="put_btn" disabled>저장</button>
</div> </div>
</div> </div>
@ -143,33 +143,33 @@ include_once _SVC_INC_PATH_ . "/header.php";
<tbody> <tbody>
<template v-for="(code, idx) in codeList"> <template v-for="(code, idx) in codeList">
<tr> <tr>
<td rowspan="5">{{code.생산오더}}<br>{{code.등록일}}</td> <td rowspan="5">{{code?.WO_NO}}<br>{{code?.등록일}}</td>
<td rowspan="5">{{code.품목}}<br>{{code.도면번호}}<br>{{code.업체명}}</td> <td rowspan="5">{{code?.ITEM_CD}}<br>{{code?.DRAW_NO}}<br>{{code?.BP_CD}}</td>
<td rowspan="5">{{code.판매오더수량}}</td> <td rowspan="5">{{code?.판매오더수량}}</td>
<td rowspan="5">{{code.납기일}}</td> <td rowspan="5">{{code?.DLVY_REQ_DT}}</td>
<td rowspan="5">{{code.작업순서}}</td> <td rowspan="5">{{code?.WO_SEQ}}</td>
<td rowspan="5">{{code.완료}}</td> <td rowspan="5">{{code?.완료}}</td>
<td colspan="2" v-for="(process, index) in code.공정" :key="`process-${index}`" @click="openPop(code, index)" @mouseenter="isHover[idx][index] = true" @mouseleave="isHover[idx][index] = false" :class="{'on':isHover[idx][index]}"> <td colspan="2" v-for="(process, index) in code?.OP_CD" :key="`process-${index}`" @click="openPop(code, index)" @mouseenter="isHover[idx][index] = true" @mouseleave="isHover[idx][index] = false" :class="{'on':isHover[idx][index], 'blue-back':process.stats=='P', 'green-back':process.stats=='C', 'orange-back':process.stats=='D', 'gray-back':process.stats=='W' }">
{{ process.공정명 }} {{ process.OP_CD }}
</td> </td>
</tr> </tr>
<tr> <tr>
<td v-for="n in 20" :key="`plan-${n}`" @click="openPop(code['공정'][Math.round(n / 2)-1])" @mouseenter="isHover[idx][Math.round(n / 2)-1] = true" @mouseleave="isHover[idx][Math.round(n / 2)-1] = false" :class="{'on':isHover[idx][Math.round(n / 2)-1]}"> <td v-for="n in 20" :key="`plan-${n}`" @click="openPop(code, Math.round(n / 2)-1)" @mouseenter="isHover[idx][Math.round(n / 2)-1] = true" @mouseleave="isHover[idx][Math.round(n / 2)-1] = false" :class="{'on':isHover[idx][Math.round(n / 2)-1]}">
{{ n % 2 === 0 ? code['공정'][n/2-1].실적수량 : code['공정'][(n-1)/2].계획수량 }} {{ n % 2 === 0 ? code['OP_CD'][n/2-1]?.PRD_QTY : code['OP_CD'][(n-1)/2]?.PLAN_QTY }}
</td> </td>
</tr> </tr>
<tr> <tr>
<td v-for="n in 20" :key="`tm-${n}`" @click="openPop(code['공정'][Math.round(n / 2)-1])" @mouseenter="isHover[idx][Math.round(n / 2)-1] = true" @mouseleave="isHover[idx][Math.round(n / 2)-1] = false" :class="{'on':isHover[idx][Math.round(n / 2)-1]}"> <td v-for="n in 20" :key="`tm-${n}`" @click="openPop(code, Math.round(n / 2)-1)" @mouseenter="isHover[idx][Math.round(n / 2)-1] = true" @mouseleave="isHover[idx][Math.round(n / 2)-1] = false" :class="{'on':isHover[idx][Math.round(n / 2)-1]}">
{{ n % 2 === 0 ? code['공정'][n/2-1].종료시간 : code['공정'][(n-1)/2].투입시간 }} {{ n % 2 === 0 ? code['OP_CD'][n/2-1]?.ED_TM : code['OP_CD'][(n-1)/2]?.ST_TM }}
</td> </td>
</tr> </tr>
<tr> <tr>
<td colspan="2" v-for="(process, index) in code.공정" :key="`pre-${index}`" @click="openPop(process)" @mouseenter="isHover[idx][index] = true" @mouseleave="isHover[idx][index] = false" :class="{'on':isHover[idx][index]}">{{ process.예상종료시간 }} <td colspan="2" v-for="(process, index) in code?.OP_CD" :key="`pre-${index}`" @click="openPop(process)" @mouseenter="isHover[idx][index] = true" @mouseleave="isHover[idx][index] = false" :class="{'on':isHover[idx][index]}">{{ process?.예상종료시간 }}
</td> </td>
</tr> </tr>
<tr> <tr>
<td v-for="n in 20" :key="`fa-${n}`" @click="openPop(code['공정'][Math.round(n / 2)-1])" @mouseenter="isHover[idx][Math.round(n / 2)-1] = true" @mouseleave="isHover[idx][Math.round(n / 2)-1] = false" :class="{'on':isHover[idx][Math.round(n / 2)-1]}"> <td v-for="n in 20" :key="`fa-${n}`" @click="openPop(code, Math.round(n / 2)-1)" @mouseenter="isHover[idx][Math.round(n / 2)-1] = true" @mouseleave="isHover[idx][Math.round(n / 2)-1] = false" :class="{'on':isHover[idx][Math.round(n / 2)-1]}">
{{ n % 2 === 0 ? code['공정'][n/2-1].작업자 : code['공정'][(n-1)/2].설비 }} {{ n % 2 === 0 ? code['OP_CD'][n/2-1]?.EMP_NM : code['OP_CD'][(n-1)/2]?.FACLT_CD }}
</td> </td>
</tr> </tr>