gaoluyang
2025-02-11 29b413387460cd532f6d9f045c82faad9a2c1e85
原材料下单页面迁移
已修改4个文件
已添加16个文件
4588 ■■■■■ 文件已修改
package.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/index_image/index-0.svg 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/index_image/index-1.svg 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/index_image/index-2.svg 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/index_image/index-3.svg 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/index_image/index-img1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/index_image/index-tip.svg 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/materialOrder/dataLookVisible.vue 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/materialOrder/downFileDialog.vue 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/materialOrder/filesLookVisible.vue 224 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/materialOrder/printDialog.vue 342 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/materialOrder/showInfo.vue 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/materialOrder/unPassRetestResult.vue 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/index.js 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/date.js 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/file.js 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/materialOrder/customsInspection.vue 2055 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/materialOrder/index.vue 1318 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/rawMaterialInspection/index.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json
@@ -48,7 +48,9 @@
    "js-beautify": "1.13.0",
    "js-cookie": "3.0.1",
    "jsencrypt": "3.0.0-rc.1",
    "mammoth": "^1.9.0",
    "nprogress": "0.2.0",
    "print-js": "^1.6.0",
    "quill": "2.0.2",
    "screenfull": "5.0.2",
    "sortablejs": "1.10.2",
@@ -73,6 +75,8 @@
    "eslint": "7.15.0",
    "eslint-plugin-vue": "7.2.0",
    "lint-staged": "10.5.3",
    "postcss": "^8.5.2",
    "postcss-loader": "^8.1.1",
    "runjs": "4.4.2",
    "sass": "1.32.13",
    "sass-loader": "10.1.1",
src/assets/index_image/index-0.svg
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
<svg width="56" height="56" viewBox="0 0 56 56" fill="none" xmlns="http://www.w3.org/2000/svg">
<g filter="url(#filter0_d_2005_2)">
<rect x="4.12708" y="0.143372" width="47.8167" height="47.5224" rx="12" fill="white"/>
</g>
<rect x="5.67254" y="1.97473" width="46.4545" height="46.1686" rx="12" fill="url(#paint0_linear_2005_2)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M35.7324 24.2329C35.9755 24.259 36.2165 24.2981 36.4553 24.3503C36.6942 24.4024 36.9295 24.4673 37.1614 24.5449C37.3933 24.6225 37.6202 24.7124 37.8424 24.8146C38.0646 24.9167 38.2806 25.0306 38.4905 25.1561C38.7003 25.2816 38.9029 25.4181 39.098 25.5655C39.2932 25.7129 39.4798 25.8704 39.658 26.038C39.8362 26.2056 40.0048 26.3823 40.1639 26.5681V14.9371C40.1639 14.8435 40.1593 14.7501 40.1502 14.6569C40.141 14.5638 40.1273 14.4713 40.1091 14.3795C40.0909 14.2877 40.0682 14.197 40.041 14.1074C40.0139 14.0178 39.9824 13.9298 39.9467 13.8433C39.9109 13.7568 39.871 13.6723 39.8269 13.5897C39.7828 13.5072 39.7348 13.427 39.6829 13.3491C39.6309 13.2713 39.5753 13.1962 39.516 13.1238C39.4567 13.0515 39.394 12.9822 39.3278 12.916C39.2617 12.8498 39.1925 12.787 39.1203 12.7276C39.048 12.6682 38.973 12.6125 38.8952 12.5605C38.8175 12.5085 38.7374 12.4605 38.6549 12.4163C38.5725 12.3722 38.488 12.3322 38.4017 12.2964C38.3153 12.2606 38.2273 12.229 38.1379 12.2019C38.0484 12.1747 37.9578 12.152 37.8661 12.1337C37.7744 12.1154 37.682 12.1017 37.589 12.0926C37.4959 12.0834 37.4026 12.0788 37.3091 12.0788H18.9172C18.8237 12.0788 18.7304 12.0834 18.6373 12.0926C18.5442 12.1017 18.4518 12.1154 18.36 12.1337C18.2683 12.152 18.1777 12.1747 18.0882 12.2019C17.9987 12.2291 17.9107 12.2606 17.8243 12.2964C17.7379 12.3323 17.6534 12.3723 17.571 12.4164C17.4885 12.4606 17.4083 12.5087 17.3306 12.5607C17.2528 12.6128 17.1778 12.6685 17.1055 12.7279C17.0332 12.7873 16.964 12.8501 16.8978 12.9164C16.8317 12.9826 16.769 13.0519 16.7097 13.1243C16.6504 13.1967 16.5947 13.2719 16.5428 13.3498C16.4909 13.4276 16.4428 13.5079 16.3988 13.5905C16.3547 13.6731 16.3148 13.7576 16.2791 13.8442C16.2433 13.9307 16.2119 14.0188 16.1847 14.1084C16.1576 14.198 16.135 14.2888 16.1168 14.3806C16.0986 14.4725 16.0849 14.565 16.0758 14.6582C16.0667 14.7514 16.0621 14.8448 16.0622 14.9385V33.3501C16.0622 33.4438 16.0668 33.5372 16.0759 33.6304C16.0851 33.7235 16.0988 33.8161 16.1171 33.9079C16.1353 33.9997 16.158 34.0905 16.1852 34.1801C16.2124 34.2697 16.2438 34.3577 16.2797 34.4442C16.3154 34.5307 16.3554 34.6153 16.3995 34.6978C16.4436 34.7804 16.4917 34.8606 16.5436 34.9385C16.5956 35.0163 16.6513 35.0914 16.7106 35.1638C16.77 35.2362 16.8327 35.3054 16.8989 35.3716C16.9651 35.4378 17.0343 35.5006 17.1066 35.56C17.1789 35.6194 17.254 35.6751 17.3318 35.7271C17.4096 35.7791 17.4897 35.8271 17.5722 35.8712C17.6547 35.9153 17.7392 35.9553 17.8256 35.9911C17.912 36.0269 18 36.0583 18.0895 36.0855C18.179 36.1126 18.2697 36.1353 18.3614 36.1535C18.4532 36.1718 18.5456 36.1854 18.6386 36.1946C18.7317 36.2037 18.825 36.2082 18.9186 36.2082H30.6025C30.4142 36.0489 30.2351 35.8798 30.0652 35.701C29.8953 35.5221 29.7356 35.3346 29.5861 35.1384C29.4365 34.9421 29.2981 34.7383 29.1708 34.527C29.0434 34.3157 28.9279 34.098 28.8242 33.8741C28.7205 33.6502 28.6293 33.4213 28.5505 33.1874C28.4717 32.9535 28.4058 32.7161 28.3529 32.475C28.2999 32.234 28.2602 31.9908 28.2337 31.7454C28.2071 31.5 28.194 31.2539 28.1943 31.0071C28.1943 27.2426 31.2417 24.1941 35.0011 24.1941C35.2456 24.1938 35.4894 24.2067 35.7324 24.2329Z" fill="url(#paint1_linear_2005_2)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M20.9402 16.7728C20.9605 16.7237 20.9854 16.677 21.0149 16.6328C21.0444 16.5886 21.0779 16.5478 21.1155 16.5102C21.153 16.4726 21.1938 16.4391 21.238 16.4095C21.2821 16.38 21.3287 16.3551 21.3777 16.3347C21.4268 16.3144 21.4773 16.2991 21.5294 16.2887C21.5815 16.2783 21.634 16.2731 21.6871 16.2731H34.5408C34.5939 16.2731 34.6465 16.2783 34.6985 16.2887C34.7506 16.2991 34.8012 16.3144 34.8502 16.3347C34.8992 16.3551 34.9458 16.38 34.99 16.4095C35.0341 16.4391 35.0749 16.4726 35.1125 16.5102C35.15 16.5478 35.1835 16.5886 35.213 16.6328C35.2425 16.677 35.2674 16.7237 35.2877 16.7727C35.308 16.8218 35.3234 16.8725 35.3337 16.9246C35.3441 16.9767 35.3493 17.0293 35.3493 17.0825C35.3493 17.1356 35.3441 17.1882 35.3337 17.2404C35.3234 17.2925 35.308 17.3431 35.2877 17.3922C35.2674 17.4413 35.2425 17.4879 35.213 17.5321C35.1835 17.5763 35.15 17.6172 35.1125 17.6548C35.0749 17.6923 35.0341 17.7259 34.99 17.7554C34.9458 17.7849 34.8992 17.8099 34.8502 17.8302C34.8012 17.8505 34.7506 17.8659 34.6985 17.8763C34.6465 17.8866 34.5939 17.8918 34.5408 17.8918H21.6871C21.634 17.8918 21.5815 17.8866 21.5294 17.8763C21.4773 17.8659 21.4268 17.8505 21.3777 17.8302C21.3287 17.8099 21.2821 17.7849 21.238 17.7554C21.1938 17.7259 21.153 17.6923 21.1155 17.6548C21.0779 17.6172 21.0444 17.5763 21.0149 17.5321C20.9854 17.4879 20.9605 17.4413 20.9402 17.3922C20.9199 17.3431 20.9046 17.2925 20.8942 17.2404C20.8839 17.1882 20.8787 17.1356 20.8787 17.0825C20.8787 17.0293 20.8839 16.9767 20.8942 16.9246C20.9046 16.8725 20.9199 16.8218 20.9402 16.7728Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M28.039 21.9784C28.0186 22.0275 27.9937 22.0742 27.9643 22.1184C27.9348 22.1625 27.9013 22.2034 27.8637 22.241C27.8262 22.2786 27.7854 22.3121 27.7412 22.3417C27.6971 22.3712 27.6505 22.3961 27.6014 22.4164C27.5524 22.4368 27.5019 22.4521 27.4498 22.4625C27.3977 22.4729 27.3452 22.4781 27.2921 22.4781H21.6871C21.634 22.4781 21.5815 22.4729 21.5294 22.4625C21.4773 22.4521 21.4268 22.4368 21.3777 22.4164C21.3287 22.3961 21.2821 22.3712 21.238 22.3417C21.1938 22.3121 21.153 22.2786 21.1155 22.241C21.0779 22.2034 21.0444 22.1625 21.0149 22.1184C20.9854 22.0742 20.9605 22.0275 20.9402 21.9784C20.9199 21.9293 20.9046 21.8787 20.8942 21.8266C20.8839 21.7745 20.8787 21.7219 20.8787 21.6687C20.8787 21.6156 20.8839 21.5629 20.8942 21.5108C20.9046 21.4587 20.9199 21.4081 20.9402 21.359C20.9605 21.3099 20.9854 21.2633 21.0149 21.2191C21.0444 21.1749 21.0779 21.134 21.1155 21.0964C21.153 21.0588 21.1938 21.0253 21.238 20.9958C21.2821 20.9662 21.3287 20.9413 21.3777 20.921C21.4268 20.9006 21.4773 20.8853 21.5294 20.8749C21.5815 20.8646 21.634 20.8594 21.6871 20.8594H27.2921C27.3452 20.8594 27.3977 20.8646 27.4498 20.8749C27.5019 20.8853 27.5524 20.9006 27.6014 20.921C27.6505 20.9413 27.6971 20.9662 27.7412 20.9958C27.7854 21.0253 27.8262 21.0588 27.8637 21.0964C27.9013 21.134 27.9348 21.1749 27.9643 21.2191C27.9937 21.2633 28.0186 21.3099 28.039 21.359C28.0593 21.4081 28.0746 21.4587 28.085 21.5108C28.0953 21.5629 28.1005 21.6156 28.1005 21.6687C28.1005 21.7219 28.0953 21.7745 28.085 21.8266C28.0746 21.8787 28.0593 21.9293 28.039 21.9784Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M35.0013 36.2034C37.868 36.2034 40.1916 33.8768 40.1916 31.0069C40.1916 28.1369 37.868 25.8104 35.0013 25.8104C32.1347 25.8104 29.8108 28.137 29.8108 31.0069C29.8108 33.8768 32.1347 36.2034 35.0013 36.2034Z" fill="url(#paint2_linear_2005_2)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M37.1379 33.4866C37.097 33.5035 37.0549 33.5163 37.0116 33.5249C36.9682 33.5335 36.9244 33.5378 36.8802 33.5378C36.836 33.5378 36.7922 33.5335 36.7489 33.5249C36.7055 33.5163 36.6634 33.5035 36.6225 33.4866C36.5817 33.4698 36.5428 33.4491 36.506 33.4245C36.4692 33.4 36.4351 33.3722 36.4038 33.341L34.5234 31.4592C34.4564 31.3921 34.4059 31.3142 34.3718 31.2256C34.3377 31.137 34.3231 31.0453 34.3278 30.9504V28.2597C34.3278 28.2154 34.3321 28.1715 34.3407 28.1281C34.3494 28.0846 34.3621 28.0425 34.3791 28.0016C34.396 27.9606 34.4167 27.9218 34.4413 27.8849C34.4659 27.8481 34.4938 27.8141 34.5251 27.7827C34.5564 27.7514 34.5904 27.7235 34.6272 27.6989C34.664 27.6743 34.7028 27.6535 34.7437 27.6365C34.7845 27.6196 34.8267 27.6068 34.87 27.5982C34.9134 27.5895 34.9572 27.5852 35.0015 27.5852C35.0457 27.5852 35.0895 27.5895 35.1329 27.5982C35.1763 27.6068 35.2184 27.6196 35.2593 27.6365C35.3001 27.6535 35.339 27.6743 35.3757 27.6989C35.4125 27.7235 35.4465 27.7514 35.4778 27.7827C35.5091 27.8141 35.537 27.8481 35.5616 27.8849C35.5862 27.9218 35.6069 27.9606 35.6239 28.0016C35.6408 28.0425 35.6536 28.0846 35.6622 28.1281C35.6708 28.1715 35.6751 28.2154 35.6751 28.2597V30.7039L37.3566 32.3873C37.3878 32.4187 37.4156 32.4528 37.4401 32.4896C37.4645 32.5264 37.4852 32.5653 37.5021 32.6062C37.5189 32.6471 37.5316 32.6893 37.5402 32.7327C37.5488 32.7761 37.5531 32.8199 37.5531 32.8641C37.5531 32.9084 37.5488 32.9522 37.5402 32.9956C37.5316 33.039 37.5189 33.0811 37.5021 33.122C37.4852 33.1629 37.4645 33.2018 37.4401 33.2386C37.4156 33.2755 37.3878 33.3096 37.3566 33.341C37.3253 33.3722 37.2912 33.4 37.2544 33.4245C37.2176 33.4491 37.1788 33.4698 37.1379 33.4866Z" fill="white"/>
<defs>
<filter id="filter0_d_2005_2" x="0.127075" y="0.143372" width="55.8167" height="55.5223" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="4"/>
<feGaussianBlur stdDeviation="2"/>
<feComposite in2="hardAlpha" operator="out"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.862745 0 0 0 0 0.870588 0 0 0 0 0.929412 0 0 0 1 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_2005_2"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_2005_2" result="shape"/>
</filter>
<linearGradient id="paint0_linear_2005_2" x1="8.21777" y1="5.01184" x2="47.9203" y2="46.5991" gradientUnits="userSpaceOnUse">
<stop stop-color="#6C9BFF" stop-opacity="0.2"/>
<stop offset="0.925" stop-color="#6C9BFF" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint1_linear_2005_2" x1="28.1131" y1="12.0788" x2="28.1131" y2="36.2082" gradientUnits="userSpaceOnUse">
<stop stop-color="#FD5F1C"/>
<stop offset="1" stop-color="#F3A00D"/>
</linearGradient>
<linearGradient id="paint2_linear_2005_2" x1="35.0012" y1="25.8104" x2="35.0012" y2="36.2034" gradientUnits="userSpaceOnUse">
<stop stop-color="#FD5F1C"/>
<stop offset="1" stop-color="#F3A00D"/>
</linearGradient>
</defs>
</svg>
src/assets/index_image/index-1.svg
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
<svg width="57" height="56" viewBox="0 0 57 56" fill="none" xmlns="http://www.w3.org/2000/svg">
<g filter="url(#filter0_d_1975_1517)">
<rect x="4.97668" y="0.143372" width="47.8167" height="47.5223" rx="12" fill="white"/>
</g>
<rect x="6.52209" y="1.97479" width="46.4546" height="46.1686" rx="12" fill="url(#paint0_linear_1975_1517)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M39.8137 27.6419V13.3541C39.8137 12.6282 39.2775 12.1434 38.4689 12.1434H18.3214C17.5158 12.1434 16.9767 12.6282 16.9767 13.3541V33.9366C16.9767 34.6625 17.5128 35.1473 18.3214 35.1473H31.3527C30.6818 34.3009 30.2775 33.2107 30.2775 32.1205C30.2775 29.0937 32.964 26.6722 36.3215 26.6722C37.5314 26.6722 38.7385 27.0365 39.6789 27.6419H39.8137Z" fill="url(#paint1_linear_1975_1517)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M35.6506 17.5917C35.6506 17.956 35.381 18.1971 34.9797 18.1971H21.5441C21.1398 18.1971 20.8732 17.956 20.8732 17.5917C20.8732 17.2274 21.1427 16.9863 21.5441 16.9863H34.9797C35.384 16.9863 35.6506 17.2274 35.6506 17.5917Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M35.6506 23.6453C35.6506 24.0096 35.381 24.2507 34.9797 24.2507H21.5441C21.1398 24.2507 20.8732 24.0096 20.8732 23.6453C20.8732 23.2837 21.1427 23.04 21.5441 23.04H34.9797C35.384 23.04 35.6506 23.2811 35.6506 23.6453Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M20.8761 29.699C20.8761 29.3347 21.1456 29.0936 21.4122 29.0936H28.5313C28.8009 29.0936 29.0675 29.3347 29.0675 29.699C29.0675 30.0633 28.7979 30.3044 28.5313 30.3044H21.4122C21.1427 30.3044 20.8761 30.0633 20.8761 29.699Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M36.3068 36.1411C38.9523 36.2188 40.9767 34.2741 40.9767 32.0294C40.9621 29.7285 38.967 27.99 36.6613 27.9177C33.966 27.8347 32.0529 29.7847 31.9796 31.8606C31.8888 34.3223 34.0246 36.0741 36.3068 36.1411Z" fill="url(#paint2_linear_1975_1517)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M35.1495 34.0036L33.503 32.4982C33.503 32.4982 33.2218 32.1205 33.5616 31.8446C33.9044 31.566 34.2413 31.8446 34.2413 31.8446L35.4776 32.9776L38.7062 30.0178C38.7062 30.0178 39.0284 29.7446 39.3859 30.0499C39.7462 30.358 39.4298 30.6928 39.4298 30.6928L35.8204 33.9928C35.5743 34.2178 35.3575 34.1937 35.1495 34.0036Z" fill="white"/>
<defs>
<filter id="filter0_d_1975_1517" x="0.976685" y="0.143372" width="55.8167" height="55.5223" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="4"/>
<feGaussianBlur stdDeviation="2"/>
<feComposite in2="hardAlpha" operator="out"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.862745 0 0 0 0 0.870588 0 0 0 0 0.929412 0 0 0 1 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_1975_1517"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_1975_1517" result="shape"/>
</filter>
<linearGradient id="paint0_linear_1975_1517" x1="9.06733" y1="5.0119" x2="48.7698" y2="46.5993" gradientUnits="userSpaceOnUse">
<stop stop-color="#6C9BFF" stop-opacity="0.2"/>
<stop offset="0.925" stop-color="#6C9BFF" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint1_linear_1975_1517" x1="28.3952" y1="12.1434" x2="28.3952" y2="35.1473" gradientUnits="userSpaceOnUse">
<stop stop-color="#FD5F1C"/>
<stop offset="1" stop-color="#F3A00D"/>
</linearGradient>
<linearGradient id="paint2_linear_1975_1517" x1="36.4768" y1="27.9152" x2="36.4768" y2="36.1433" gradientUnits="userSpaceOnUse">
<stop stop-color="#FD5F1C"/>
<stop offset="1" stop-color="#F3A00D"/>
</linearGradient>
</defs>
</svg>
src/assets/index_image/index-2.svg
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
<svg width="57" height="56" viewBox="0 0 57 56" fill="none" xmlns="http://www.w3.org/2000/svg">
<g filter="url(#filter0_d_2005_3)">
<rect x="4.82629" y="0.143372" width="47.8167" height="47.5223" rx="12" fill="white"/>
</g>
<rect x="6.3717" y="1.97479" width="46.4546" height="46.1686" rx="12" fill="url(#paint0_linear_2005_3)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M28.8263 36.1434C35.459 36.1434 40.8263 30.7761 40.8263 24.1434C40.8263 17.5106 35.459 12.1434 28.8263 12.1434C22.1936 12.1434 16.8263 17.5106 16.8263 24.1434C16.8263 30.7761 22.1936 36.1434 28.8263 36.1434Z" fill="url(#paint1_linear_2005_3)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M28.8917 27.8961C29.6772 27.8961 30.3317 28.5288 30.3317 29.2925C30.3317 30.0779 29.6772 30.6888 28.8917 30.6888C28.1063 30.6888 27.4517 30.0561 27.4517 29.2925C27.4517 28.5288 28.0844 27.8961 28.8917 27.8961Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M28.87 26.7615C28.6736 26.7615 28.5209 26.6306 28.4773 26.4561C28.15 25.9106 27.7573 24.3179 27.5173 22.4197C27.3427 21.0888 27.2991 19.867 27.3427 19.0597C27.3427 18.9942 27.3209 18.907 27.3209 18.8415C27.3209 18.0124 28.0191 17.3361 28.87 17.3361C29.4154 17.3361 29.8954 17.6197 30.1791 18.0342C30.2445 18.0779 30.2882 18.1652 30.3318 18.3179C30.3973 18.4924 30.4191 18.667 30.4191 18.8415V18.9506C30.5063 19.7797 30.4409 21.0233 30.2663 22.4197C30.0263 24.3615 29.6118 25.9761 29.2627 26.4997C29.1973 26.6524 29.0445 26.7615 28.87 26.7615Z" fill="white"/>
<defs>
<filter id="filter0_d_2005_3" x="0.826294" y="0.143372" width="55.8167" height="55.5223" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="4"/>
<feGaussianBlur stdDeviation="2"/>
<feComposite in2="hardAlpha" operator="out"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.862745 0 0 0 0 0.870588 0 0 0 0 0.929412 0 0 0 1 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_2005_3"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_2005_3" result="shape"/>
</filter>
<linearGradient id="paint0_linear_2005_3" x1="8.91693" y1="5.0119" x2="48.6194" y2="46.5993" gradientUnits="userSpaceOnUse">
<stop stop-color="#6C9BFF" stop-opacity="0.2"/>
<stop offset="0.925" stop-color="#6C9BFF" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint1_linear_2005_3" x1="28.8263" y1="12.1434" x2="28.8263" y2="36.1434" gradientUnits="userSpaceOnUse">
<stop stop-color="#FD5F1C"/>
<stop offset="1" stop-color="#F3A00D"/>
</linearGradient>
</defs>
</svg>
src/assets/index_image/index-3.svg
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
<svg width="57" height="56" viewBox="0 0 57 56" fill="none" xmlns="http://www.w3.org/2000/svg">
<g filter="url(#filter0_d_2005_4)">
<rect x="4.6759" y="0.143372" width="47.8167" height="47.5223" rx="12" fill="white"/>
</g>
<rect x="6.22131" y="1.97479" width="46.4546" height="46.1686" rx="12" fill="url(#paint0_linear_2005_4)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M18.2898 36.1024C18.1608 36.0752 18.0355 36.0351 17.9139 35.982C17.7924 35.9289 17.6769 35.8639 17.5675 35.7869C17.4581 35.7099 17.3569 35.6225 17.2639 35.5245C17.1708 35.4266 17.0877 35.32 17.0145 35.2049C16.9414 35.0897 16.8796 34.9682 16.8292 34.8402C16.7787 34.7123 16.7406 34.5804 16.7148 34.4446C16.6891 34.3087 16.6761 34.1715 16.6759 34.033V16.7809C16.6759 16.6424 16.6887 16.5051 16.7144 16.3692C16.7401 16.2333 16.7781 16.1014 16.8285 15.9733C16.8789 15.8453 16.9406 15.7237 17.0138 15.6085C17.0869 15.4933 17.17 15.3867 17.2631 15.2887C17.3562 15.1907 17.4575 15.1032 17.5669 15.0262C17.6764 14.9493 17.7919 14.8843 17.9136 14.8312C18.0352 14.7782 18.1605 14.7382 18.2897 14.7111C18.4188 14.6841 18.5492 14.6706 18.6808 14.6706H22.675V17.1967H25.0749V14.6711H32.2754V17.1972H34.6763V14.6716H38.671C38.8026 14.6716 38.933 14.6852 39.0621 14.7122C39.1912 14.7392 39.3166 14.7793 39.4382 14.8323C39.5599 14.8853 39.6754 14.9503 39.7849 15.0273C39.8943 15.1043 39.9956 15.1918 40.0887 15.2898C40.1817 15.3877 40.2649 15.4943 40.338 15.6096C40.4111 15.7248 40.4729 15.8464 40.5233 15.9744C40.5736 16.1024 40.6117 16.2344 40.6374 16.3703C40.663 16.5062 40.6759 16.6434 40.6759 16.782V34.0341C40.6756 34.1726 40.6626 34.3097 40.6368 34.4455C40.6109 34.5812 40.5728 34.7131 40.5223 34.841C40.4719 34.9688 40.41 35.0903 40.3369 35.2054C40.2637 35.3205 40.1806 35.427 40.0876 35.5249C39.9945 35.6228 39.8933 35.7102 39.7839 35.7871C39.6746 35.8641 39.5591 35.9291 39.4376 35.9821C39.3161 36.0352 39.1908 36.0753 39.0618 36.1024C38.9328 36.1296 38.8026 36.1432 38.671 36.1434H18.6808C18.5492 36.1432 18.4189 36.1295 18.2898 36.1024Z" fill="url(#paint1_linear_2005_4)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M32.1848 31.5297V28.8917H20.6567V31.5297H32.1848Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M36.6958 27.309V24.671H20.6567V27.309H36.6958Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M33.6884 23.0882V20.4503H20.6567V23.0882H33.6884Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M25.0753 12.1434V14.6695H22.6755V12.1434H25.0753Z" fill="url(#paint2_linear_2005_4)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M34.6757 12.1434V14.6695H32.2759V12.1434H34.6757Z" fill="url(#paint3_linear_2005_4)"/>
<defs>
<filter id="filter0_d_2005_4" x="0.675903" y="0.143372" width="55.8167" height="55.5223" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="4"/>
<feGaussianBlur stdDeviation="2"/>
<feComposite in2="hardAlpha" operator="out"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.862745 0 0 0 0 0.870588 0 0 0 0 0.929412 0 0 0 1 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_2005_4"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_2005_4" result="shape"/>
</filter>
<linearGradient id="paint0_linear_2005_4" x1="8.76654" y1="5.0119" x2="48.469" y2="46.5993" gradientUnits="userSpaceOnUse">
<stop stop-color="#6C9BFF" stop-opacity="0.2"/>
<stop offset="0.925" stop-color="#6C9BFF" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint1_linear_2005_4" x1="28.6759" y1="14.6706" x2="28.6759" y2="36.1434" gradientUnits="userSpaceOnUse">
<stop stop-color="#FD5F1C"/>
<stop offset="1" stop-color="#F3A00D"/>
</linearGradient>
<linearGradient id="paint2_linear_2005_4" x1="23.8754" y1="12.1434" x2="23.8754" y2="14.6695" gradientUnits="userSpaceOnUse">
<stop stop-color="#FD5F1C"/>
<stop offset="1" stop-color="#F3A00D"/>
</linearGradient>
<linearGradient id="paint3_linear_2005_4" x1="33.4758" y1="12.1434" x2="33.4758" y2="14.6695" gradientUnits="userSpaceOnUse">
<stop stop-color="#FD5F1C"/>
<stop offset="1" stop-color="#F3A00D"/>
</linearGradient>
</defs>
</svg>
src/assets/index_image/index-img1.png
src/assets/index_image/index-tip.svg
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,5 @@
<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10.2789 3.62915C11.0487 2.29582 12.9732 2.29582 13.743 3.62915L20.6712 15.6292C21.441 16.9625 20.4788 18.6292 18.9392 18.6292H5.08278C3.54318 18.6292 2.58093 16.9625 3.35073 15.6292L10.2789 3.62915Z" fill="#FF3838"/>
<rect x="11.011" y="5.88599" width="2" height="6.9216" rx="1" fill="white"/>
<circle cx="12.011" cy="14.5852" r="1" fill="white"/>
</svg>
src/components/materialOrder/dataLookVisible.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,162 @@
<template>
  <div>
    <el-dialog title="数据查看" :visible.sync="isShow" width="80%" @closed="$emit('closeDataLook')">
      <ul class="tab">
        <li v-for="(m,i) in dataVisibleTitle" :key="i" :class="{active:i===dataVisibleIndex}" @click="handleDataVisibleTab(m,i)">{{m.label}}</li>
      </ul>
      <div style="height: 70vh;overflow-y: auto;">
        <ValueTable ref="ValueTableDataLook" :url="$api.insOrder.selectSampleAndProductByOrderId"
                    :key="upIndex"
                    :componentData="componentDataDataLook"/>
      </div>
    </el-dialog>
    <un-pass-retest-result :retestVisible="retestVisible" :retestInfo="retestInfo" @closeRetestLook="closeRetestLook" v-if="retestVisible"></un-pass-retest-result>
  </div>
</template>
<script>
import ValueTable from "@/components/Table/value-table.vue";
import UnPassRetestResult from "./unPassRetestResult.vue";
export default {
  name: "dataLookVisible",
  // import å¼•入的组件需要注入到对象中才能使用
  components: {UnPassRetestResult, ValueTable},
  props: {
    dataDialogVisible: {
      type: Boolean,
      default: () => false
    },
    dataLookInfo: {
      type: Object,
      default: () => {}
    },
  },
  data() {
    // è¿™é‡Œå­˜æ”¾æ•°æ®
    return {
      upIndex: 0,
      isShow: this.dataDialogVisible,
      dataVisibleTitle: [
        {
          label: '进厂检验',
          value: 0
        },
        {
          label: '季度检验',
          value: 1
        },
      ],
      dataVisibleIndex: 0, // æ•°æ®æŸ¥çœ‹tab栏选择值
      // è¡¨æ ¼æ•°æ®
      componentDataDataLook: { // æ•°ç»„查看的table数据
        entity: {
          id: null,
        },
        isIndex: false,
        showSelect: false,
        select: false,
        do: [
          {
            id: '',
            font: '不合格复测查看',
            type: 'text',
            method: 'getRetestResult',
            disabFun: (row, index) =>  {
              return row.insResult!=0
            }
          }
        ],
        tagField: {
          insState: {
            select: []
          },
          insResult: {
            select: [{
              value: 1,
              label: '合格',
              type: 'success'
            },{
              value: 0,
              label: '不合格',
              type: 'danger'
            },{
              value: 3,
              label: '不判定',
              type: ''
            }]
          }
        },
        selectField: {},
        requiredAdd: [],
        requiredUp: []
      },
      retestVisible: false,
      retestInfo: []
    }
  },
  mounted() {
    this.refreshTable()
  },
  // æ–¹æ³•集合
  methods: {
    // åˆ‡æ¢æ•°æ®æŸ¥çœ‹tab栏
    handleDataVisibleTab (m, i) {
      this.dataVisibleIndex = i
      this.refreshTable()
    },
    // æŸ¥è¯¢å›žè°ƒ
    refreshTable(e) {
      if (this.dataVisibleIndex === 0) {
        this.componentDataDataLook.entity.id = this.dataLookInfo.enterOrderId
      } else {
        this.componentDataDataLook.entity.id = this.dataLookInfo.quarterOrderId
      }
      this.$nextTick(() => {
        this.$refs['ValueTableDataLook'].selectList(e)
      })
    },
    // æŸ¥çœ‹ä¸åˆæ ¼å¤æµ‹ç»“æžœ
    getRetestResult (row) {
      this.$axios.get(this.$api.insOrder.getRetestResult+'?insProductId='+row.insProductId).then(res => {
        if (res.code == 201) return
        this.retestVisible = true
        this.retestInfo = res.data
      })
    },
    closeRetestLook () {
      this.retestVisible = false
    },
  },
}
</script>
<style scoped>
.tab {
  list-style-type: none;
  display: flex;
  margin-bottom: 12px;
}
.tab li {
  line-height: 24px;
  padding: 6px 14px;
  font-size: 14px;
  color: #333333;
  border: 1px solid #EEEEEE;
  cursor: pointer;
}
.tab li:nth-child(1) {
  border-radius: 8px 0 0 8px;
}
.tab li:nth-child(2) {
  border-radius: 0 8px 8px 0;
}
.tab li.active {
  border-color: #3A7BFA;
  color: #3A7BFA;
}
</style>
src/components/materialOrder/downFileDialog.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,79 @@
<template>
  <div>
    <el-dialog title="报告查看下载" :visible.sync="isShow" width="500px" @closed="$emit('closeDownFileDialog')">
      <div style="margin-bottom: 18px">
        <span style="font-size: 16px;">进厂检验报告下载</span>
        <i class="el-icon-paperclip" style="color:#409EFF;margin-left: 6px"></i>
        <el-link :underline="false" style="vertical-align: bottom;font-size: 16px;"
                 :disabled="!downLoadInfo.enterUrls && !downLoadInfo.enterUrl"
                 type="primary" @click="downLoad0">查看</el-link>
      </div>
      <div>
        <span  style="font-size: 16px;">季度检验报告下载</span>
        <i class="el-icon-paperclip" style="color:#409EFF;margin-left: 6px"></i>
        <el-link :underline="false" style="vertical-align: bottom;font-size: 16px;"
                 :disabled="!downLoadInfo.quarterUrls && !downLoadInfo.quarterUrl"
                 type="primary" @click="downLoad1">查看</el-link>
      </div>
    </el-dialog>
  </div>
</template>
<script>
import ValueTable from "@/components/Table/value-table.vue";
export default {
  name: "downFileDialog",
  // import å¼•入的组件需要注入到对象中才能使用
  components: {ValueTable},
  props: {
    downFileDialogVisible: {
      type: Boolean,
      default: () => false
    },
    downLoadInfo: {
      type: Object,
      default: () => {}
    },
  },
  data() {
    // è¿™é‡Œå­˜æ”¾æ•°æ®
    return {
      isShow: this.downFileDialogVisible,
    }
  },
  // æ–¹æ³•集合
  methods: {
    // è¿›åŽ‚æ£€éªŒæŠ¥å‘Šä¸‹è½½
    downLoad0 () {
      let url = this.downLoadInfo.enterUrlS ? this.downLoadInfo.enterUrlS : this.downLoadInfo.enterUrl
      if(url){
        url = url.split('.')[0]+'.pdf'
        const link = document.createElement('a');
        link.href = this.javaApi + url;
        link.target = '_blank';
        document.body.appendChild(link);
        link.click();
      }
    },
    // å­£åº¦æ£€éªŒæŠ¥å‘Šä¸‹è½½
    downLoad1 () {
      let url = this.downLoadInfo.quarterUrlS ? this.downLoadInfo.quarterUrlS : this.downLoadInfo.quarterUrl
      if(url){
        url = url.split('.')[0]+'.pdf'
        const link = document.createElement('a');
        link.href = this.javaApi + url;
        link.target = '_blank';
        document.body.appendChild(link);
        link.click();
      }
    }
  },
}
</script>
<style scoped>
>>> .el-dialog {
  height: 160px;
}
</style>
src/components/materialOrder/filesLookVisible.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,224 @@
<template>
  <div>
    <el-dialog title="附件查看" :visible.sync="isShow" width="80%" @closed="$emit('closeFilesLook')">
      <div style="display: flex;justify-content: space-between;">
        <ul class="tab">
          <li v-for="(m,i) in dataVisibleTitle" :key="i" :class="{active:i===dataVisibleIndex}" @click="handleDataVisibleTab(m,i)">{{m.label}}</li>
        </ul>
        <el-upload :action="action"
                   :auto-upload="true"
                   :data="{orderId: dataVisibleIndex === 0 ? filesLookInfo.enterOrderId : filesLookInfo.quarterOrderId}"
                   :on-success="handleSuccessUp" :show-file-list="false"
                   accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar' :headers="headers"
                   :before-upload="beforeUpload"
                   style="width: 80px !important;"
                   :on-error="onError" ref='upload'>
          <el-button size="small" type="primary" style="height: 38px">附件上传</el-button>
        </el-upload>
      </div>
      <div style="height: 70vh;overflow-y: auto;" v-if="filesDialogVisible">
        <ValueTable ref="fileList"
                    :url="$api.insOrderPlan.getFileList"
                    :delUrl="$api.insOrderPlan.delfile"
                    class="value-table"
                    :key="upIndex"
                    :componentData="componentData"/>
      </div>
    </el-dialog>
  </div>
</template>
<script>
import ValueTable from "@/components/Table/value-table.vue";
import file from "@/utils/file";
export default {
  name: "filesLookVisible",
  // import å¼•入的组件需要注入到对象中才能使用
  components: {ValueTable},
  props: {
    filesDialogVisible: {
      type: Boolean,
      default: () => false
    },
    filesLookInfo: {
      type: Object,
      default: () => {}
    },
  },
  data() {
    // è¿™é‡Œå­˜æ”¾æ•°æ®
    return {
      upIndex: 0,
      isShow: this.filesDialogVisible,
      dataVisibleTitle: [
        {
          label: '进厂检验',
          value: 0
        },
        {
          label: '季度检验',
          value: 1
        },
      ],
      dataVisibleIndex: 0, // tab栏选择值
      componentData: {
        entity: {
          insOrderId:''
        },
        isIndex: true,
        showSelect: false,
        select: false,
        sort: false,
        init:false,
        do: [
          {
            id: 'parent',
            font: '下载',
            type: 'text',
            method: 'handleDown'
          },{
            id: 'delete',
            font: '删除',
            type: 'text',
            method: 'doDiy',
          }
        ],
        isPage: false,
        linkEvent: {},
        tagField: {
          type:{
            select:[
              {
                value: 1,
                label: '图片'
              },
              {
                value: 2,
                label: '文件'
              }
            ]
          }
        },
        currentId: '',
        selectField: {},
        requiredAdd: [],
        requiredUp: []
      },
    }
  },
  mounted() {
    this.refreshTable()
  },
  // æ–¹æ³•集合
  methods: {
    // åˆ‡æ¢æ•°æ®æŸ¥çœ‹tab栏
    handleDataVisibleTab (m, i) {
      this.dataVisibleIndex = i
      this.refreshTable()
    },
    // æŸ¥è¯¢å›žè°ƒ
    refreshTable(e) {
      if (this.dataVisibleIndex === 0) {
        this.componentData.entity.insOrderId = this.filesLookInfo.enterOrderId
      } else {
        this.componentData.entity.insOrderId = this.filesLookInfo.quarterOrderId
      }
      this.$nextTick(() => {
        this.$refs['fileList'].selectList(e)
      })
    },
    handleDown(row){
      this.$axios.post(this.$api.insOrderPlan.downFile, {
        id: row.id,
      }).then(res => {
        if (res.code === 200) {
          let url = '';
          if(res.data.type==1){
            url = this.javaApi+'/img/'+res.data.fileUrl
            file.downloadIamge(url,row.fileName)
          }else{
            url = this.javaApi+'/word/'+res.data.fileUrl
            const link = document.createElement('a');
            link.href = url;
            link.download = row.fileName;
            link.click();
          }
        }
      }).catch(error => {
      })
    },
    handleSuccessUp(response, ) {
      this.upLoading = false;
      if (response.code == 200) {
        this.$message.success('上传成功');
        this.$refs.fileList.selectList()
      }
    },
    beforeUpload(file) {
      let flag = true
      if (this.dataVisibleIndex === 0 && !this.filesLookInfo.enterOrderId) {
        this.$message.warning('没有相应的检验任务')
        return
      } else if (this.dataVisibleIndex === 1 && !this.filesLookInfo.quarterOrderId) {
        this.$message.warning('没有相应的检验任务')
        return
      }
      if (file.size > 1024 * 1024 * 10) {
        this.$message.error('上传文件不超过10M');
        this.$refs.upload.clearFiles()
        flag = false
      }
      if (!flag) {
        return Promise.reject(flag); //正确的终止
      }
    },
    onError(err, file, fileList) {
      this.$message.error('上传失败')
      this.$refs.upload.clearFiles()
    },
  },
  computed: {
    headers() {
      return {
        'token': sessionStorage.getItem('token')
      }
    },
    action() {
      return this.javaApi + this.$api.insOrderPlan.uploadFile
    }
  },
}
</script>
<style scoped>
.tab {
  list-style-type: none;
  display: flex;
  margin-bottom: 12px;
}
.tab li {
  line-height: 24px;
  padding: 6px 14px;
  font-size: 14px;
  color: #333333;
  border: 1px solid #EEEEEE;
  cursor: pointer;
}
.tab li:nth-child(1) {
  border-radius: 8px 0 0 8px;
}
.tab li:nth-child(2) {
  border-radius: 0 8px 8px 0;
}
.tab li.active {
  border-color: #3A7BFA;
  color: #3A7BFA;
}
</style>
src/components/materialOrder/printDialog.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,342 @@
<template>
  <div>
    <el-dialog title="标签打印" :visible.sync="isShow" width="600px" top="5vh" @close="$emit('closePrintDialog')">
      <div style="width:100%;height: 400px;overflow-y: auto;text-align: left">
        <div class="dia_body">
          <el-checkbox
            style="margin: 10px 5px;"
            :indeterminate="isIndeterminate"
            v-model="checkAll"
            @change="handleCheckAllChange">全选</el-checkbox>
          <el-checkbox-group @change="changePrintCode()" v-model="checkIndexList">
            <el-card class="box-card" v-for="(item, i) in barcodeData" :key="i" style="margin-bottom: 15px; font-size: 16px !important;">
              <el-checkbox :label="i" :key="i" style="position: relative;top:0;left:10px"><br></el-checkbox>
              <div>
                <div class="titleH1" style="text-align: center; margin-bottom: 2px;font-size: 16px">检测中心样品标识卡</div>
                <div style="text-align: center;">
                  <barcode :value="item.barcode" :height="34" :width="2" :displayValue="false"></barcode>
                </div>
                <div style="margin-left: 20px;text-align: left">
                  <div class="item">
                    <span class="full-title">材料名称</span>:
                    <span class="info">{{ item.sampleName }}</span>
                  </div>
                  <div class="item">
                    <span class="full-title">材料厂家</span>:
                    <span class="info">{{ item.supplierName }}</span>
                  </div>
                  <div class="item2">
                    <span class="full-title">规格型号</span>:
                    <span class="info">{{ item.partDesc }}</span>
                  </div>
                  <div class="item">
                    <span class="full-title">委托日期</span>:
                    <span class="info">{{ item.sendTime }}</span>
                  </div>
                  <div class="item">
                    <span class="full-title">委托人</span>:
                    <span class="info2">{{ item.prepareUser }}</span>
                    <span class="full-title">检测编号</span>:
                    <span class="info">{{ item.entrustCode }}</span>
                  </div>
                  <div class="item">
                    <span class="full-title">样品数量</span>:
                    <span class="info2">{{ item.sampleNumber }}</span>
                    <span class="full-title">样品标识</span>:
                    <span class="info">{{ item.color }}</span>
                  </div>
                  <div style="font-weight: bold;display: flex;align-items: center;">
                    <span class="full-title">样品状态</span>:
                    <el-radio-group v-model="item.labelStatus" style="margin-top: 7px;margin-left: 4px;" v-removeAriaHidden>
                      <el-radio label="0" style="font-weight: bold;margin-right: 7px;">待检</el-radio>
                      <el-radio label="1" style="font-weight: bold;margin-right: 7px;">在检</el-radio>
                      <el-radio label="2" style="font-weight: bold;margin-right: 7px;">已检</el-radio>
                    </el-radio-group>
                    <span>
                      <el-radio style="margin-left: 14px;margin-top: 3px;"
                                @click.native.prevent="changeIsLeave(item)"
                                :label="true" size="small" v-model="item.isLeave">留样</el-radio>
                    </span>
                  </div>
                </div>
              </div>
            </el-card>
          </el-checkbox-group>
        </div>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-row>
          <el-button @click="$emit('closePrintDialog')">取 æ¶ˆ</el-button>
          <el-button type="primary" @click="submitPrint">打 å°</el-button>
        </el-row>
      </span>
    </el-dialog>
    <div class="el-dialog-body" style="overflow-y: auto;margin-top: 0;position: fixed;top: 20px;right: 10px;z-index: 99999;">
      <div id="printOrder" class="printOrder" ref="printOrder">
        <el-card class="box-card" v-for="(item, i) in checkDataList" :key="i" style="font-size: 0.29cm !important;font-weight: 700;page-break-after: always;color: #000;box-shadow: none;margin: 0 !important;padding: 0 !important;">
          <div>
            <div class="titleH1" style="text-align: center;margin-bottom: 1px">检测中心样品标识卡</div>
            <div style="text-align: center;">
              <barcode :value="item.barcode" :height="22" :width="1.6" :displayValue="false"></barcode>
            </div>
            <div style="margin-left: 12px;text-align: left">
              <div class="item">
                <span class="full-title4">材料名称:</span>
                <span class="info4">{{ item.sampleName }}</span>
              </div>
              <div class="item">
                <span class="full-title2">材料厂家</span>:
                <span class="info">{{ item.supplierName }}</span>
              </div>
              <div class="item2">
                <span class="full-title4">规格型号:</span>
                <span class="info4">{{ item.partDesc }}</span>
              </div>
              <div class="item">
                <span class="full-title2">委托日期</span>:
                <span class="info">{{ item.sendTime }}</span>
              </div>
              <div class="item">
                <span class="full-title2">委托人</span>:
                <span class="info3">{{ item.prepareUser }}</span>
                <span class="full-title2">检测编号</span>:
                <span class="info">{{ item.entrustCode }}</span>
              </div>
              <div class="item">
                <span class="full-title2">样品数量</span>:
                <span class="info3">{{ item.sampleNumber }}</span>
                <span class="full-title2">样品标识</span>:
                <span class="info">{{ item.color }}</span>
              </div>
              <div>
                <span class="full-title2">样品状态</span>:
                <span style="white-space: nowrap;margin-left: 2px">
                  å¾…检<span class="scor" v-if="item.labelStatus!='0'"></span><span class="checked" v-if="item.labelStatus=='0'">√</span>
                  åœ¨æ£€<span class="scor" v-if="item.labelStatus!='1'"></span><span class="checked" v-if="item.labelStatus=='1'">√</span>
                  å·²æ£€<span class="scor" v-if="item.labelStatus!='2'"></span><span class="checked" v-if="item.labelStatus=='2'">√</span>
                  ç•™æ ·<span class="scor" v-if="!item.isLeave"></span><span class="checked" v-if="item.isLeave">√</span>
                </span>
              </div>
            </div>
          </div>
        </el-card>
      </div>
    </div>
  </div>
</template>
<script>
import PrintJS from "print-js";
export default {
  name: "printDialog",
  // import å¼•入的组件需要注入到对象中才能使用
  components: {},
  props: {
    printDialog: {
      type: Boolean,
      default: () => false
    },
  },
  data() {
    // è¿™é‡Œå­˜æ”¾æ•°æ®
    return {
      isShow: this.printDialog,
      loadPint:false,
      isIndeterminate:false, // å¤šé€‰æ¡†æ ·å¼
      checkAll: false,
      checkIndexList:[], // é€‰æ‹©è¦æ‰“印的数据
      barcodeData: [],
      printLoading: false,
      checkDataList: []
    }
  },
  // æ–¹æ³•集合
  methods: {
    // èŽ·å–è¦æ‰“å°çš„æ•°æ®
    getLabelPrinting(selection){
      try {
        this.loadPint = true;
        let ids = []
        selection.map(m=> {
          ids.push(m.id)
        })
        this.$axios.post(this.$api.materialInspection.printLabel,{
          ids: ids
        },{
          headers: {
            'Content-Type': 'application/json'
          },
          noQs:true
        }).then(res => {
          if (res.code === 200 && res.data.length > 0) {
            res.data.forEach(item => {
              console.log('item---', item)
              item.sendTime = item.sendTime && item.sendTime.substring(0, 10)
              item.sampleNumber = item.qtyArrived + item.buyUnitMeas
              this.$set(item, 'barcode', item.entrustCode)
              this.$set(item, 'isLeave', item.labelStatus === '2')
            })
            this.barcodeData = res.data
          }
        })
      } catch (e) {
        console.log('获取要打印的数据---', e)
      }
    },
    changeIsLeave (item) {
      const index = this.barcodeData.findIndex(val => val.entrustCode === item.entrustCode)
      if (index > -1) {
        this.barcodeData[index].isLeave = !this.barcodeData[index].isLeave
      }
    },
    // å…¨é€‰å¤šé€‰æ¡†å›žè°ƒ
    handleCheckAllChange(val) {
      if(val){
        for(var i=0;i<this.barcodeData.length;i++){
          this.checkIndexList.push(i)
        }
        this.checkDataList = this.barcodeData
      }else{
        this.checkIndexList = []
        this.checkDataList = []
      }
      this.isIndeterminate = false;
    },
    changeType (type) {
      type = type === '1' ? '0' : '1'
    },
    //选择要打印的二维码
    changePrintCode(){
      let indexList = this.checkIndexList
      let arr = []
      indexList.forEach(i=>{
        if (i !== undefined) {
          arr.push(this.barcodeData[i])
        }
      })
      console.log('arr---', arr)
      this.checkDataList = arr
    },
    // æäº¤æ‰“印
    submitPrint(){
      if(this.checkDataList.length < 1){
        this.$message.warning("请选择要打印的条形码")
        return
      }
      this.printDialogVisible = false;
      PrintJS({
        targetStyles: ["*"], // ä½¿ç”¨dom的所有样式,很重要
        printable: 'printOrder',//页面
        type: "html",//文档类型
        maxWidth:360,
        header: '',
        style:
          `@page {
            margin: 0.4cm;
            margin-right: 0.4cm;
            margin-top: 0.4cm;
            margin-bottom: 0.4cm;
            padding-bottom: 0px;
            size: 400px 75px collapse;
          }
          html{
            zoom:100%;
          }
          @media print{
            width: 400px;
            height: 75px;
            margin:0;
          }`,
        onPrintDialogClose: this.erexcel=false,
        font_size: '0.29cm',
      });
    },
  },
  watch:{
    printDialog(newVal){
      if(!newVal){
        this.barcodeData = []
        this.checkIndexList = []
        this.checkDataList = []
        this.isIndeterminate = true;
      }
    }
  },
}
</script>
<style scoped>
.item {
  margin-bottom: 4px;
}
.item2 {
  margin-bottom: 8px;
  vertical-align: top;
}
.full-title {
  display: inline-block;
  width: 80px;
  text-align-last: justify;
}
.full-title2 {
  display: inline-block;
  width: 50px;
  text-align-last: justify;
}
.full-title4 {
  display: inline-block;
  width: 53px;
  text-align-last: justify;
  vertical-align: top;
}
.info {
  margin-left: 2px;
}
.info2 {
  margin-left: 2px;
  margin-right: 30px;
  width: 80px;
  display: inline-block;
}
.info3 {
  margin-left: 2px;
  margin-right: 30px;
  width: 50px;
  display: inline-block;
}
.info4 {
  display: inline-block;
  margin-left: 2px;
  white-space: normal;
  width: 260px;
}
.checkboxInfo {
  display: inline-block;
  margin-left: 10px;
}
.scor{
  width: 0.06cm;
  height: 0.06cm;
  border-radius: 1px;
  border: 1px solid #000;
  display: inline-block;
  margin-right: 14px;
  margin-left: 4px;
}
.checked {
  margin-right: 14px;
  margin-left: 4px;
}
>>> .el-checkbox {
  margin-right: 10px;
}
>>> .el-card {
  border: none;
}
>>>.el-card__body {
  padding: 4px 2px 6px 14px;
}
</style>
src/components/materialOrder/showInfo.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
<template>
  <div>
    <el-dialog title="产业链信息" :visible.sync="isShow" width="600px" @close="$parent.showInfoDialog = false">
      <div class="info" v-for="item in infoLIst" :key="item.fieldNameCn">
        <span class="title">{{item.fieldNameCn}}</span>:
        <span class="information">{{item.fieldNameValue}}</span>
      </div>
      <div class="info" v-if="infoLIst.length === 0">
        <span>暂无产业链数据</span>
      </div>
    </el-dialog>
  </div>
</template>
<script>
export default {
  name: "showInfo",
  // import å¼•入的组件需要注入到对象中才能使用
  components: {},
  props: {
    showInfoDialog: {
      type: Boolean,
      default: () => false
    },
  },
  data() {
    // è¿™é‡Œå­˜æ”¾æ•°æ®
    return {
      isShow: this.showInfoDialog,
      infoLIst: []
    }
  },
  // æ–¹æ³•集合
  methods: {
    getInfo (id) {
      console.log('id----', id)
      this.$axios.get(this.$api.rawMaterialOrder.getIndustryChain + '?id=' + id).then(res => {
        if (res.code === 200 && res.data !== null) {
          this.infoLIst = JSON.parse(res.data)
          console.log('this.infoLIst----', this.infoLIst)
        }
      })
    }
  },
}
</script>
<style scoped>
.info {
  margin: 6px 0;
}
.title {
  display: inline-block;
  width: 100px;
  text-align-last: justify;
  font-size: 16px;
  font-weight: 600;
}
.information {
  font-size: 16px;
}
</style>
src/components/materialOrder/unPassRetestResult.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,57 @@
<template>
  <div>
    <el-dialog
      title="不合格复测查看"
      :visible.sync="isShow"
      @closed="$emit('closeRetestLook')"
      width="40%">
      <el-table
        :data="retestInfo"
        border
        style="width: 100%">
        <el-table-column type="index" label="复测次数" align="center" width="100">
        </el-table-column>
        <el-table-column prop="tell" label="试验要求" width="120">
        </el-table-column>
        <el-table-column prop="lastValue" label="检验结果" width="120">
        </el-table-column>
        <el-table-column prop="insResult" label="结果判定">
          <template slot-scope="scope">
            <el-tag type="danger" v-if="scope.row.insResult === 0" disable-transitions>不合格</el-tag>
            <el-tag type="success" v-if="scope.row.insResult === 1" disable-transitions>合格</el-tag>
            <el-tag v-if="scope.row.insResult === 3" disable-transitions>不判定</el-tag>
          </template>
        </el-table-column>
      </el-table>
    </el-dialog>
  </div>
</template>
<script>
export default {
  name: "unPassRetestResult",
  // import å¼•入的组件需要注入到对象中才能使用
  components: {},
  props: {
    retestVisible: {
      type: Boolean,
      default: () => false
    },
    retestInfo: {
      type: Array,
      default: () => []
    }
  },
  data() {
    // è¿™é‡Œå­˜æ”¾æ•°æ®
    return {
      isShow: this.retestVisible,
    }
  },
  // æ–¹æ³•集合
  methods: {},
}
</script>
<style scoped>
</style>
src/router/index.js
@@ -93,9 +93,24 @@
// åŠ¨æ€è·¯ç”±ï¼ŒåŸºäºŽç”¨æˆ·æƒé™åŠ¨æ€åŽ»åŠ è½½
export const dynamicRoutes = [
  {
    // åŽŸææ–™æŠ¥æ£€
    path: '/business/rawMaterialInspection',
    component: Layout,
  },
  {
    // åŽŸææ–™æ£€éªŒä¸‹å•
    path: '/business/materialOrder',
    component: Layout,
    hidden: true,
    children: [
      {
        // é“œå•丝下单
        path: '/customsInspection',
        component: () => import('@/views/business/materialOrder/customsInspection'),
        name: '铜单丝下单',
        meta: { title: '铜单丝下单', activeMenu: '/business/materialOrder' }
      }
    ]
  },
  {
    path: '/system/user-auth',
src/utils/date.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,54 @@
/**
 * èŽ·å–å¹´æœˆæ—¥
 */
export function getYearAndMonthAndDays(date=new Date()) {
  let year = date.getFullYear()
  let month = date.getMonth() + 1
  if (month < 10) {
    month = '0' + month + '-'
  } else {
    month = month + '-'
  }
  year = year + '-'
  let days = date.getDate()
  if (days < 10) {
    days = '0' + days
  } else {
    days = days
  }
  return (year + month + days)
}
/**
 * æ—¥æœŸæ ¼å¼åŒ–
 */
export function dateFormat(date, format = 'yyyy-MM-dd hh:mm:ss') {
  if (date !== 'Invalid Date') {
    var o = {
      'M+': date.getMonth() + 1, // month
      'd+': date.getDate(), // day
      'h+': date.getHours(), // hour
      'm+': date.getMinutes(), // minute
      's+': date.getSeconds(), // second
      'q+': Math.floor((date.getMonth() + 3) / 3), // quarter
      S: date.getMilliseconds() // millisecond
    }
    if (/(y+)/.test(format)) {
      format = format.replace(
        RegExp.$1,
        (date.getFullYear() + '').substr(4 - RegExp.$1.length)
      )
    }
    for (var k in o) {
      if (new RegExp('(' + k + ')').test(format)) {
        format = format.replace(
          RegExp.$1,
          RegExp.$1.length === 1
            ? o[k]
            : ('00' + o[k]).substr(('' + o[k]).length)
        )
      }
    }
    return format
  }
  return ''
}
src/utils/file.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
import { convertToHtml } from 'mammoth';
import Vue from 'vue'
export default {
  async convertFileToHtml(url) {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', Vue.prototype.javaApi+url, true);//获取文件流的接口
    xhr.send();
    xhr.responseType = "blob";//不能漏
    let xhrPromise = new Promise((resolve, reject) => {
      xhr.onload = async function () {
        if (this.status === 200) {
          // è¿”回的文件流,转换成blob对象
          var blob = new Blob([this.response],{ type:'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });
          // ä½¿ç”¨mammoth将Word转换为HTML
          let reader = new FileReader();
          reader.readAsArrayBuffer(blob);
          let htmlContentPromise = new Promise((resolve, reject) => {
            reader.onload = async function () {
              var arrayBuffer = xhr.response; //arrayBuffer
              const result = await convertToHtml({ arrayBuffer: arrayBuffer })
              let html = result.value.replace(//g, '')
              .replace('<h1>', '<h1 style="text-align: center;">')
              .replace(/<table>/g, '<table style="border-collapse: collapse;border: 1px solid #000;">')
              .replace(/<tr>/g, '<tr style="height: 30px;">')
              .replace(/<td>/g, '<td style="border: 1px solid #000;">')
              .replace(/<p>/g, '<p style="text-indent: 2em;">')
              .replace(/<a [^>]*>/g, "")
              .replace(/<\/a>/g, "")
              // .replace(/em/g, "cm");
              resolve(html)
            };
          })
          resolve(await htmlContentPromise)
        }
      }
    })
    return await xhrPromise
  },
  downloadIamge(imgsrc, name) {//下载图片地址和图片名
    var image = new Image();
    // è§£å†³è·¨åŸŸ Canvas æ±¡æŸ“问题
    image.setAttribute("crossOrigin", "anonymous");
    image.onload = function() {
      var canvas = document.createElement("canvas");
      canvas.width = image.width;
      canvas.height = image.height;
      var context = canvas.getContext("2d");
      context.drawImage(image, 0, 0, image.width, image.height);
      var url = canvas.toDataURL("image/png"); //得到图片的base64编码数据
      var a = document.createElement("a"); // ç”Ÿæˆä¸€ä¸ªa元素
      var event = new MouseEvent("click"); // åˆ›å»ºä¸€ä¸ªå•击事件
      a.download = name || "photo"; // è®¾ç½®å›¾ç‰‡åç§°
      a.href = url; // å°†ç”Ÿæˆçš„URL设置为a.href属性
      a.dispatchEvent(event); // è§¦å‘a的单击事件
    };
    image.src = imgsrc;
  }
};
src/views/business/materialOrder/customsInspection.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2055 @@
<template>
  <div class="ins_order_add">
    <div>
      <el-row class="title">
        <el-col :span="active > 1 && isShowTab ? 5 : 6" style="padding-left: 20px;text-align: left;">采购订单信息</el-col>
        <el-col v-if="active > 1 && isShowTab" :span="4" style="text-align: left;margin-top: 12px">
          <ul class="tab">
            <li v-for="(m,i) in dataTitle" :key="i" :class="{active:i===dataIndex}" @click="handleDataTab(m,i)">{{m.label}}</li>
          </ul>
        </el-col>
        <el-col :span="active > 1  && isShowTab ? 15 : 18" style="text-align: right;">
          <el-select v-show="active==1" v-model="template" placeholder="下单模板" size="medium" style="margin-right: 10px;"
                     @change="selectInsOrderTemplateById">
            <el-option v-for="(a, ai) in templates" :key="ai" :label="a.name" :value="a.id">
              <span style="float: left">{{ a.name }}</span>
              <i class="el-icon-delete" style="float: right; color: #66b1ff; font-size: 16px"
                 @click.stop="handleDelete(a)"></i>
            </el-option>
          </el-select>
          <el-button v-show="active==1" size="medium" @click="templateDia=true">
            <span style="color: #3A7BFA;">保存模板</span>
          </el-button>
          <el-button v-show="active==1 && addObj.orderType === '进厂检验'" :loading="noNeedCheckLoad" size="medium" type="primary" @click="noNeedCheck">免检</el-button>
          <el-button v-show="active==1" :loading="saveLoad" size="medium" type="primary" @click="save">提交</el-button>
          <el-button size="medium" @click="$parent.playOrder(0)">
            <span style="color: #3A7BFA;">返回</span>
          </el-button>
        </el-col>
      </el-row>
    </div>
    <div class="search">
      <el-form ref="addObj" :inline="true" :model="addObj" :rules="addObjRules" label-width="120px">
        <el-row>
          <el-col :span="6">
            <el-form-item class="addObj-form-item" label="采购订单号:">
              <el-input v-model="addObj.orderNo" class="addObj-info" clearable disabled placeholder="" size="small"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item class="addObj-form-item" label="委托单位:">
              <el-input v-model="addObj.company" class="addObj-info" clearable disabled placeholder="" size="small"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item class="addObj-form-item" label="接收时间:">
              <el-date-picker
                v-model="addObj.receiverDate"
                disabled
                placeholder="选择日期"
                size="small"
                style="width: 100%;"
                type="date"
                value-format="yyyy-MM-dd">
              </el-date-picker>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item class="addObj-form-item" label="零件号:">
              <el-input v-model="addObj.partNo" class="addObj-info" clearable disabled placeholder="" size="small"></el-input>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="6">
            <el-form-item class="addObj-form-item" label="样品名称:">
              <el-input v-model="addObj.sample" class="addObj-info" clearable disabled placeholder="" size="small"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item class="addObj-form-item" label="样品总数:">
              <el-input v-model="addObj.qtyArrived" class="addObj-info" clearable disabled placeholder="" size="small"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item class="addObj-form-item" label="报检人:">
              <el-input v-model="addObj.declareUser" class="addObj-info" clearable disabled size="small"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item class="addObj-form-item" label="批次号:">
              <el-input v-model="addObj.updateBatchNo" class="addObj-info" clearable disabled size="small"></el-input>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="6">
            <el-form-item class="addObj-form-item" label="单位:" prop="buyUnitMeas">
              <el-input v-model="addObj.buyUnitMeas" class="addObj-info" disabled size="small"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item class="addObj-form-item" label="抽检数量:" prop="testQuantity">
              <el-input v-model="addObj.testQuantity" :disabled="active > 1" class="addObj-info"
                        clearable
                        placeholder="请填写抽检数量" size="small"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item class="addObj-form-item" label="检验类别:" prop="orderType">
              <el-select v-model="addObj.orderType" :disabled="active>1 || orderType===1" clearable size="small" style="width: 100%">
                <el-option v-for="(a, ai) in checkType" :key="ai" :label="a.label" :value="a.value"></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item class="addObj-form-item" label="规格型号:" placeholder="请填写" prop="partDetail">
              <el-tooltip :content="addObj.partDetail" :disabled="!addObj.partDetail">
                <el-input v-model="addObj.partDetail" :disabled="active > 1" class="addObj-info" size="small"></el-input>
              </el-tooltip>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="6">
            <el-form-item class="addObj-form-item" label="紧急程度:" placeholder="请选择" prop="type">
              <el-select v-model="addObj.type" :disabled="active>1" class="addObj-info" clearable size="small" style="width: 100%">
                <el-option v-for="(a, ai) in types" :key="ai" :label="a.label" :value="a.value"></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item class="addObj-form-item" label="约定时间:" prop="appointed">
              <el-date-picker
                v-model="addObj.appointed"
                :disabled="active > 1"
                format="yyyy-MM-dd"
                placeholder="选择日期"
                size="small"
                style="width: 100%"
                type="date"
                value-format="yyyy-MM-dd">
              </el-date-picker>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item class="addObj-form-item" label="备注:">
              <el-input v-model="addObj.remark" :autosize="{ minRows: 2, maxRows: 2}" :disabled="active>1" :placeholder="active>1 ? '' : '请输入'" clearable
                        size="small" type="textarea"></el-input>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
    </div>
    <div>
      <div style="display: flex;flex-direction: row;justify-content: space-between;padding: 5px 0;">
        <div v-if="active==1" style="display: flex;background: transparent;">
          <div class="search_thing">
            <div class="search_label">样品型号:</div>
            <div class="search_input">
              <el-select v-model="model" :placeholder="active>1 ? '' : '请输入'"
                         allow-create clearable default-first-option filterable
                         size="small"
                         @change="changeModel">
                <el-option v-for="item in models" :key="item.value" :label="item.label" :value="item.value">
                </el-option>
              </el-select>
            </div>
          </div>
          <div class="search_thing">
            <div class="search_label">检验标准:</div>
            <div class="search_input">
              <el-select v-model="standardMethodListId" :loading="methodLoad"
                         :placeholder="active>1 ? '' : '请输入'" clearable size="small"
                         @change="changeStandardMethodListId" @focus="methodFocus">
                <el-option v-for="item in methods" :key="item.id" :label="item.code" :value="item.id">
                </el-option>
              </el-select>
            </div>
          </div>
        </div>
        <div class="search_thing">
          <el-button v-show="active==1" :disabled="sampleList.length === 2" size="medium" type="primary" @click="handleSplitCountNum">拆分</el-button>
        </div>
      </div>
      <el-table ref="sampleTable" :data="sampleList"
                border class="el-table sampleTable"
                highlight-current-row
                max-height="400px" style="margin-top: 10px;"
                tooltip-effect="dark"
                @selection-change="selectSample" @row-click="rowClick">
        <el-table-column v-if="active==1" :selectable="selectable" type="selection" width="65"></el-table-column>
        <el-table-column align="center" label="序号" prop="index" type="index" width="65"></el-table-column>
        <el-table-column align="center" label="样品名称" min-width="100" prop="sample">
          <template slot-scope="scope">
            <el-input v-model="scope.row.sample" :disabled="active>1 || scope.$index !== 0" size="small" @change="(val)=>changeValue(val, 'sample')"></el-input>
          </template>
        </el-table-column>
        <el-table-column align="center" label="样品编号" min-width="140" prop="sampleCode">
          <template slot-scope="scope">
            <el-input v-model="scope.row.sampleCode" :disabled="active>1 || scope.$index !== 0" clearable placeholder="不填写则系统自动生成"
                      size="small"
                      @change="(val)=>changeValue(val, 'sampleCode')"></el-input>
          </template>
        </el-table-column>
        <el-table-column align="center" label="样品型号" min-width="100" prop="model">
          <template slot-scope="scope">
            <el-select v-model="scope.row.model" :disabled="active>1 || scope.$index !== 0" allow-create default-first-option filterable
                       placeholder="样品型号" size="small" style="width: 100%;" @change="handleChangeModel">
              <el-option v-for="item in models" :key="item.value" :label="item.label" :value="item.value">
              </el-option>
            </el-select>
          </template>
        </el-table-column>
        <el-table-column v-if="!(active>1)" align="center" label="型号参数" prop="modelNum" width="130">
          <template slot-scope="scope">
            <el-input v-model="scope.row.modelNum" :disabled="active>1|| scope.$index !== 0" clearable placeholder="非必填"
                      size="small"
                      @input="methodChange(scope.row.standardMethodListId, scope.row)"></el-input>
          </template>
        </el-table-column>
        <el-table-column align="center" label="检验标准" min-width="100" prop="standardMethodListId">
          <template slot-scope="scope">
            <el-select v-model="scope.row.standardMethodListId" :disabled="scope.row.model==null||active>1|| scope.$index !== 0"
                       :loading="methodLoad" clearable placeholder="检验标准" size="small"
                       style="width: 100%;" @change="(value)=>methodChange(value, scope.row)" @clear="productList = []" @focus="methodFocus">
              <el-option v-for="item in methods" :key="item.id" :label="item.code" :value="item.id">
              </el-option>
            </el-select>
          </template>
        </el-table-column>
        <el-table-column v-if="addObj.mating==1" align="center" label="配套样品名称" prop="joinName" width="140">
          <template slot-scope="scope">
            <el-input v-model="scope.row.joinName" :autosize="{ minRows: 1, maxRows: 1}" size="small"
                      type="textarea"></el-input>
          </template>
        </el-table-column>
        <el-table-column v-if="addObj.mating==1" align="center" label="配套样品型号" prop="joinModel" width="140">
          <template slot-scope="scope">
            <el-input v-model="scope.row.joinModel" :autosize="{ minRows: 1, maxRows: 1}" size="small"
                      type="textarea"></el-input>
          </template>
        </el-table-column>
        <el-table-column v-if="addObj.mating==1" align="center" label="配套样品数量" prop="joinNum" width="140">
          <template slot-scope="scope">
            <el-input-number v-model="scope.row.joinNum" :controls="false" :max="100" :min="1" :precision="0"
                             size="small" style="width: 80%;"></el-input-number>
          </template>
        </el-table-column>
        <el-table-column align="center" label="待检项数量" prop="quantity" width="105">
          <template slot-scope="scope">
            <el-select v-model="scope.row.quantity" :disabled="active>1|| scope.$index !== 0 || sampleList.length > 1" clearable
                       size="small">
              <el-option v-for="item in quantityList" :key="item.value" :label="item.label" :value="item.value"></el-option>
            </el-select>
          </template>
        </el-table-column>
      </el-table>
      <el-table ref="productTable" v-loading="getProductLoad" :data="productList"
                :row-class-name="tableRowClassName" border
                class="el-table"
                max-height="400px"
                style="margin-bottom: 10px;"
                tooltip-effect="dark"
                @select="selectOne"
                @selection-change="selectProduct"
                @select-all="handleAll">
        <el-table-column v-if="active==1" :selectable="selectable" type="selection" width="65"></el-table-column>
        <el-table-column label="检验项" min-width="140" prop="inspectionItem" show-overflow-tooltip>
          <template slot="header" slot-scope="scope">
            <div style="display: flex;align-items: center;flex-direction: column;font-size: 14px">
              <span>检验项</span>
              <el-input
                v-if="active==1"
                v-model="inspectionItem"
                placeholder="请输入"
                size="mini"
                @input="searchFilterList"/>
            </div>
          </template>
        </el-table-column>
        <el-table-column label="检验项子项" min-width="140" prop="inspectionItemSubclass"
                         show-overflow-tooltip>
          <template slot="header" slot-scope="scope">
            <div style="display: flex;align-items: center;flex-direction: column;font-size: 14px">
              <span>检验项子项</span>
              <el-input
                v-if="active==1"
                v-model="inspectionItemSubclass"
                placeholder="请输入"
                size="mini"
                @input="searchFilterList"/>
            </div>
          </template>
        </el-table-column>
        <el-table-column label="要求值" min-width="220px" prop="ask">
          <template slot-scope="scope">
            <el-input v-if="active==1&&isAskOnlyRead" v-model="scope.row.ask" :autosize="{ minRows: 1, maxRows: 3}" clearable placeholder="要求值"
                      size="small" type="textarea"
                      @change="e=>requestChange(e,scope.row)"></el-input>
            <span v-else>
              <template >{{ scope.row.ask }}</template>
            </span>
          </template>
        </el-table-column>
        <el-table-column label="要求描述" min-width="220px" prop="tell">
          <template slot-scope="scope">
            <el-input v-if="active==1&&isAskOnlyRead" v-model="scope.row.tell" :autosize="{ minRows: 1, maxRows: 3}" clearable placeholder="要求描述"
                      size="small" type="textarea"
                      @change="e=>requestChange(e,scope.row,'tell')"></el-input>
            <span v-else>
                <template >{{ scope.row.tell }}</template>
              </span>
          </template>
        </el-table-column>
        <el-table-column label="条件" min-width="140" prop="radius" show-overflow-tooltip></el-table-column>
        <el-table-column label="试验方法" min-width="120" prop="methodS" show-overflow-tooltip>
          <template slot="header" slot-scope="scope">
            <div style="display: flex;align-items: center;flex-direction: column;font-size: 14px">
              <span>试验方法</span>
              <el-input
                v-if="active==1"
                v-model="methodS"
                placeholder="请输入"
                size="mini"
                @input="searchFilterList"/>
            </div>
          </template>
        </el-table-column>
        <el-table-column label="计量单位" prop="unit" show-overflow-tooltip width="100"></el-table-column>
        <el-table-column label="单价" prop="price" show-overflow-tooltip width="100"></el-table-column>
        <el-table-column label="区间" min-width="120" prop="section" show-overflow-tooltip></el-table-column>
        <el-table-column :filter-method="filterHandler" :filters="filters" label="子实验室" min-width="130" prop="sonLaboratory"
                         show-overflow-tooltip></el-table-column>
      </el-table>
    </div>
    <!--特殊值处理框-->
    <el-dialog :before-close="beforeClose" :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false"
               :visible.sync="bsm1DiaAll"
               min-width="400px"
               title="检测到特殊项,请作出以下选择">
      <div v-for="(item, index) in bsm1DiaList" :key="item.id" class="body" style="max-height: 60vh;">
        <span>{{item.inspectionItem}}</span>
        <el-row v-if="item.bsm1">
          <el-col :span="24" class="search_thing" style="height: initial;margin: 5px 0;">
            <div class="search_label" style="width: 80px;"><span class="required-span">* </span>选项:</div>
            <div class="search_input">
              <el-radio-group v-model="item.bsm1Val" v-removeAriaHidden @input="upBsmAll(item)">
                <el-radio v-for="(a, ai) in JSON.parse(item.bsmRow.sectionCopy)" :key="ai" :label="a" style="margin-bottom: 2px;margin-top: 2px;"></el-radio>
              </el-radio-group>
            </div>
          </el-col>
          <el-col :span="24" class="search_thing" style="height: initial;margin: 5px 0;">
            <div class="search_label" style="width: 80px;">要求值:</div>
            <div class="search_input">
              <el-radio-group v-model="item.bsm1Val" v-removeAriaHidden @input="upBsmAll(item)">
                <el-radio v-for="(a, ai) in JSON.parse(item.bsmRow.sectionCopy)" :key="ai"
                          :label="a">{{JSON.parse(item.bsmRow.askCopy)[ai]}}</el-radio>
              </el-radio-group>
            </div>
          </el-col>
        </el-row>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-row>
          <el-button :loading="saveLoad" type="primary" @click="save1">ç¡® å®š</el-button>
        </el-row>
      </span>
    </el-dialog>
    <el-dialog :close-on-click-modal="false" :close-on-press-escape="false"
               :show-close="false" :visible.sync="bsm3Dia"
               title="区间值填写" width="800px">
      <el-table :data="editTable" height="80vh" style="width: 100%">
        <!-- inspectionItemList -->
        <el-table-column label="检验项" prop="inspectionItemList" width="180">
        </el-table-column>
        <el-table-column label="样品编号" prop="sampleCode" width="180">
        </el-table-column>
        <el-table-column label="样品型号" prop="model" width="180">
        </el-table-column>
        <el-table-column label="识别符号" prop="symbolItem">
        </el-table-column>
        <el-table-column label="识别符值" prop="value">
          <template slot-scope="scope">
            <el-input v-model="scope.row.value" placeholder="请输入" size="small" @input="inputValueHandler(scope.row,scope.$index)"></el-input>
          </template>
        </el-table-column>
      </el-table>
      <span slot="footer" class="dialog-footer">
        <el-row>
          <el-button @click="bsm3Dia=false">取 æ¶ˆ</el-button>
          <el-button :loading="saveLoad" type="primary" @click="save0">ç¡® å®š</el-button>
        </el-row>
      </span>
    </el-dialog>
    <el-dialog
      :close-on-click-modal="false"
      :close-on-press-escape="false"
      :show-close="false"
      :visible.sync="dialogVisible"
      title="提示"
      width="32%">
      <span>{{ dialogMessage }}</span>
      <span slot="footer" class="dialog-footer">
        <el-button type="primary" @click="$parent.playOrder(0)">ç¡® å®š</el-button>
      </span>
    </el-dialog>
    <el-dialog
      :close-on-click-modal="false"
      :close-on-press-escape="false"
      :show-close="false"
      :visible.sync="dialogVisible2"
      title="提示"
      width="32%">
      <span>{{ dialogMessage2 }}</span>
      <span slot="footer" class="dialog-footer">
        <el-button type="primary" @click="dialogVisible2 = false">ç¡® å®š</el-button>
      </span>
    </el-dialog>
    <el-dialog :visible.sync="templateDia" title="保存模板" width="400px">
      <div v-if="templateDia" class="body" style="display: flex;align-items: center;">
        <div class="search_label" style="width: 90px;"><span class="required-span">* </span>模板名称:</div>
        <div class="search_input">
          <el-input v-model="templateName" clearable size="small"></el-input>
        </div>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="templateDia = false">取 æ¶ˆ</el-button>
        <el-button :loading="templateLoading" type="primary" @click="addTemplateDia">ç¡® å®š</el-button>
      </span>
    </el-dialog>
    <el-dialog
      :close-on-click-modal="false"
      :close-on-press-escape="false"
      :show-close="false"
      :visible.sync="noNeedCheckDia"
      title="免检提示"
      width="32%">
      <span>确认免检当前检验单?</span>
      <span slot="footer" class="dialog-footer">
        <el-button :loading="noNeedCheckLoad" type="primary" @click="handleNoNeedCheck">ç¡® å®š</el-button>
      </span>
    </el-dialog>
  </div>
</template>
<script>
import ValueTable from "@/components/Table/value-table.vue";
export default {
  name: "CustomsInspection",
  components: {
    ValueTable,
  },
  props: {
    active: {
      type: Number,
      default: () => 0
    },
    customsInspection: {
      type: Object,
      default: () => {}
    },
    currentId: {
      type: Number,
      default: () => 0
    },
    orderType: {
      type: Number,
      default: () => 0
    },
    isReport: {
      type: Number,
      default: () => null
    }
  },
  data() {
    return {
      editTable:[], // åŒºé—´ç‰¹æ®Šå€¼å¡«å†™
      template: null,
      saveLoad: false, // ä¿å­˜æŒ‰é’®loading
      noNeedCheckLoad: false, // å…æ£€æŒ‰é’®loading
      addObj: {
        orderNo: null, // é‡‡è´­è®¢å•号
        declareUser: null, // æŠ¥æ£€äºº
        userId: null,
        type: '0', // ç´§æ€¥ç¨‹åº¦
        code: null,
        remark: null,
        otcCode: null,
        mating: 0,
        updateBatchNo: '', // æ‰¹å·
        partNo: '', // é›¶ä»¶å·
        sample: null, // æ ·å“åç§°
        qtyArrived: '', // æ ·å“æ€»æ•°
        testQuantity: '', // æŠ½æ£€æ•°é‡
        company: '中天科技装备电缆有限公司', // å§”托单位
        companyId: '1233268751', // å§”托单位id
        receiverDate: '', // æŽ¥æ”¶æ—¶é—´
        appointed: '', // çº¦å®šæ—¶é—´
        buyUnitMeas: '', // å•位
        partDetail: '', // è§„格型号
        formType: 'Inspection application', // æ¥æ ·æ–¹å¼
        laboratory: null,
        sampleType: null,
        unit: null,
        model: null,
        method: null,
        processing: 1,
        isLeave: 0,
        orderType: null, // æ£€éªŒç±»åž‹
        send: 1,
        engineering: null,
        engineeringEn: null,
        production: null,
        productionEn: null,
        typeSource: 1,
        ifsInventoryId: '',
        sampleStatus: 'In good condition',
      },
      addObjRules: { // è¡¨å•校验规则
        testQuantity: [
          { required: true, message: '请填写抽检数量', trigger: 'blur' }
        ],
        partDetail: [
          { required: true, message: '请填写零件描述', trigger: 'blur' }
        ],
        orderType: [
          { required: true, message: '请选择检验类别', trigger: 'change' }
        ],
        type: [
          { required: true, message: '请选择紧急程度', trigger: 'change' }
        ],
        appointed: [
          { required: true, message: '请选择约定时间', trigger: 'change' }
        ]
      },
      sample: {
        sampleCode: null,
        laboratory: null,
        sampleType: null,
        sample: null,
        model: null,
        modelNum: null,
        quantity: null,
        isLeave: 0,
        unit: null
      },
      type: [],
      list: [],
      selectTree: null,
      sampleList: [], // æ ·å“è¡¨æ ¼æ•°æ®
      sampleIds: [],
      count: 1,
      productList: [], // æ£€éªŒé¡¹è¡¨æ ¼æ•°æ®
      productList0: [],
      productIds: [],
      productListSelected: [],
      getProductLoad: false,
      models: [],
      methods: [],
      methodLoad: false,
      filters: [],
      currentMethod: null,
      isAskOnlyRead: false,
      sampleId: null,
      // total: 0,
      totalArr: [],
      model: null,
      standardMethodListId: null,
      inspectionItem:null,
      inspectionItemSubclass:null,
      methodS:null,
      codeLevel: '', // æ ·å“æ‰€åœ¨çº§åˆ«
      selectTreeTem: '', // æ ·å“çˆ¶çº§
      checkType: [], // æ£€éªŒç±»åž‹é€‰é¡¹æ•°æ®
      dialogVisible: false,
      dialogVisible2: false,
      dialogMessage: '',
      dialogMessage2: '',
      templateDia: false, // ä¿å­˜æ¨¡ç‰ˆå¼¹æ¡†
      templateLoading: false, // ä¿å­˜æ¨¡ç‰ˆå¼¹æ¡†ç¡®è®¤æŒ‰é’®loading
      templateName: '', // ä¿å­˜æ¨¡ç‰ˆåç§°
      templates: [], // æ¨¡ç‰ˆä¸‹æ‹‰æ¡†æ•°æ®
      quantityList: [
        { label: 1, value: 1},
        { label: 2, value: 2},
        { label: 3, value: 3},
        { label: 4, value: 4},
        { label: 5, value: 5},
        { label: 6, value: 6},
        { label: 7, value: 7},
        { label: 8, value: 8},
      ],
      types: [], // ç´§æ€¥ç¨‹åº¦ä¸‹æ‹‰æ¡†
      dataTitle: [
        {
          label: '进厂检验',
          value: 0
        },
        {
          label: '季度检验',
          value: 1
        },
      ],
      dataIndex: 0,
      isShowTab: false,
      symbolList:['RTS'],
      bsm3Dia: false, // åŒºé—´å€¼å¡«å†™å¼¹æ¡†
      bsmRow: {},
      bsm1: false,
      bsm1Val: null,
      bsm1DiaAll: false,
      bsm1DiaList: [],
      bsm2Val: null,
      bsm2Dia: false,
      bsm2Val2: [],
      bsm2Val3: [],
      noNeedCheckDia: false,
    }
  },
  watch: {
    sampleList() {
      this.addObj.method = null
      // this.productList = []
    },
    productList: {
      deep: true,
      handler(val) {
        if (val && val.length > 0) {
          let arr = [];
          val.forEach(item => {
            if (item.sonLaboratory && !arr.find(a => a.value == item.sonLaboratory)) {
              arr.push({
                text: item.sonLaboratory,
                value: item.sonLaboratory
              })
            }
          })
          this.filters = arr
        }
      }
    },
    'addObj.sample'(val) {
      this.model = null
      this.standardMethodListId = null
    },
    'addObj.qtyArrived'(val) {
      this.model = null
      this.standardMethodListId = null
    }
  },
  mounted() {
    this.getUserNow() // èŽ·å–å½“å‰ç”¨æˆ·ä¿¡æ¯
    this.selectCheckType() // æŸ¥è¯¢æ£€éªŒç±»åž‹
    this.selectStandardMethods() // èŽ·å–æ£€éªŒæ ‡å‡†ä¸‹æ‹‰æ¡†æ•°æ®
    this.selectEnumByCategoryForType() // èŽ·å–ç´§æ€¥ç¨‹åº¦ä¸‹æ‹‰æ¡†
    this.getInfo() // èŽ·å–æ•°æ®
  },
  methods: {
    save1 () {
      if (this.bsm1DiaList.length > 0) {
        this.bsm1DiaList.forEach(item => {
          if (!item.bsm1Val) {
            throw this.$message.error('特殊项目必须处理')
          }
        })
      }
      this.bsm1DiaAll = false
    },
    beforeClose(done) {
      if (this.bsm1DiaList.length > 0) {
        this.bsm1DiaList.forEach(item => {
          if (!item.bsm1Val) {
            throw this.$message.error('特殊项目必须处理')
          }
        })
      }
      done()
    },
    //特殊值填写处理
    inputValueHandler(row,index){
      if(row){
        const nextIndex = index+1
        for (let i = nextIndex; i < this.editTable.length; i++) {
          const element = this.editTable[i];
          if(element.model==row.model&&row.symbolItem==element.symbolItem){
            this.editTable[i].value = row.value
          }
        }
      }
    },
    // æŸ¥çœ‹æ—¶åˆ‡æ¢tab栏
    handleDataTab (m, i) {
      this.dataIndex = i
      this.getInfo()
    },
    // èŽ·å–æ•°æ®
    getInfo () {
      if (this.active === 2) {
        let orderId = ''
        if (!this.customsInspection.enterOrderId && this.customsInspection.quarterOrderId) {
          this.isShowTab = false
          orderId = this.customsInspection.quarterOrderId
        } else if (!this.customsInspection.quarterOrderId && this.customsInspection.enterOrderId) {
          this.isShowTab = false
          orderId = this.customsInspection.enterOrderId
        } else if (this.customsInspection.enterOrderId && this.customsInspection.quarterOrderId) {
          this.isShowTab = true
          orderId = this.dataIndex === 0 ? this.customsInspection.enterOrderId : this.customsInspection.quarterOrderId
        } else if (!this.customsInspection.enterOrderId && !this.customsInspection.quarterOrderId) {
          this.isShowTab = false
          orderId = this.isReport === 1 ? this.customsInspection.insOrderId : this.customsInspection.id
        }
        // æŸ¥çœ‹
        // è¯·æ±‚接口,回显数据
        this.$axios.post(this.$api.insOrder.getInsOrder, {
          orderId: orderId
        }).then(res => {
          if (res.code === 200) {
            this.addObj = {
              ...res.data.insOrder
            }
            this.addObj.orderNo = res.data.insOrderTemplate.orderNo
            this.addObj.partNo = res.data.insOrderTemplate.partNo
            this.addObj.partDetail = res.data.insOrder.partDetail
            this.addObj.qtyArrived = res.data.insOrderTemplate.qtyArrived
            this.addObj.receiverDate = res.data.insOrderTemplate.receiverDate
            this.addObj.declareUser = res.data.insOrderTemplate.declareUser
            this.addObj.testQuantity = res.data.insOrderTemplate.testQuantity
            this.addObj.buyUnitMeas = res.data.insOrderTemplate.buyUnitMeas
            this.addObj.updateBatchNo = res.data.insOrderTemplate.updateBatchNo
            this.addObj.type = String(this.addObj.type)
            this.sampleList = this.HaveJson(res.data.sampleProduct)
            this.getProNum()
            this.$nextTick(() => {
              this.$refs.sampleTable.doLayout()
              if (this.sampleList.length > 0) { // æŸ¥çœ‹æ—¶å¦‚果有样品默认选中第一条
                this.productList = this.sampleList[0].insProduct
                this.$refs.sampleTable.setCurrentRow(this.sampleList[0], true)
                this.rowClick(this.sampleList[0])
              }
            })
          }
        })
      } else {
        this.$axios.get(this.$api.rawMaterialOrder.notificationRawOrder+'?ifsInventoryId='+this.customsInspection.id).then(res => {
          if (res.code === 200) {
            if (res.data === 1) {
              this.dialogVisible2 = true
              this.dialogMessage2 = '当前批次的样品已检验过, å¯ä»¥å…æ£€'
            } else if (res.data === 2) {
              this.dialogVisible2 = true
              this.dialogMessage2 = '当前批次的样品已超20吨, éœ€è¦å¤šçº§å¤šæ¬¡æ£€éªŒ'
            }
          }
        })
        // æŠ¥æ£€æµç¨‹
        this.$axios.get(this.$api.materialInspection.selectStandardTreeListByPartNo+'?partNo='+this.customsInspection.partNo).then(res => {
          if (res.code === 200) {
            this.addObj.sample = res.data.label
            this.codeLevel = res.data.code
            this.addObj.qtyArrived = this.customsInspection.qtyArrived
            this.addObj.partNo = this.customsInspection.partNo
            this.addObj.partDetail = this.customsInspection.partDesc
            this.addObj.receiverDate = this.customsInspection.receiverDate
            this.addObj.orderNo = this.customsInspection.orderNo
            this.addObj.declareUser = this.customsInspection.declareUser
            this.addObj.testQuantity = this.customsInspection.testQuantity
            this.addObj.buyUnitMeas = this.customsInspection.buyUnitMeas
            this.addObj.updateBatchNo = this.customsInspection.updateBatchNo
            if (this.orderType === 1) {
              this.addObj.orderType = 'Quarterly inspection'
            }
            const str = res.data.treeName.split('-')
            this.selectTreeTem = str.join(' - ')
            this.selectTree = str.join(' - ')
            this.addListInfo(this.codeLevel, res.data) // åŽŸææ–™æ ·å“æ˜¯å›ºå®šçš„ï¼Œå°±é»˜è®¤èµ‹å€¼ä¸€æ¡æ•°æ®ï¼Œå¯æ‹†åˆ†
            this.selectInsOrderTemplate() // åŽŸææ–™æ¨¡æ¿åˆ—è¡¨æŸ¥è¯¢
          } else {
            this.dialogVisible = true
            this.dialogMessage = res.message
          }
        }).catch(err => {
          console.log('err---', err)
        })
      }
    },
    // æŸ¥è¯¢æ¨¡æ¿-反显模板
    selectInsOrderTemplateById(e) {
      this.$axios.get(this.$api.materialInspection.selectRawMaterOrderTemplateById + '?id=' + e).then(res => {
        if (res.code == 201) return
        let obj = JSON.parse(res.data)
        this.sampleList = obj.sampleList;
        this.productList = obj.sampleList[0].insProduct
        this.selectTree = obj.selectTree
        this.rowClick(this.sampleList[0])
      })
    },
    // ä¿å­˜æ¨¡æ¿
    addTemplateDia() {
      if (this.templateName) {
        const sampleList = this.HaveJson(this.sampleList)
        sampleList.forEach(item => {
          item.insProduct = this.productList
        })
        this.templateLoading = true;
        this.$axios.post(this.$api.materialInspection.addRawMaterOrderTemplate, {
          partNo: this.addObj.partNo,
          name: this.templateName,
          thing: JSON.stringify({
            // addObj: this.addObj,
            sampleList: sampleList,
            selectTree:this.selectTree
          })
        }, {
          headers: {
            'Content-Type': 'application/json'
          }
        }).then(res => {
          if (res.code == 201) return
          this.templateLoading = false;
          this.templateDia = false;
          this.$message.success('保存成功')
          this.selectInsOrderTemplate()
          this.templateName = ''
        })
      } else {
        this.$message.error('请填写模板名称')
      }
    },
    // åˆ é™¤æ¨¡æ¿--调用接口
    handleDelete(row) {
      this.$confirm('是否删除当前数据?', "警告", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      }).then(() => {
        this.$axios.post(this.$api.materialInspection.delRawMaterOrderTemplate, {
          id: row.id
        }).then(res => {
          if (res.code === 201) {
            return
          }
          this.$message.success('删除成功')
          this.selectInsOrderTemplate()
        }).catch(e => {
          this.$message.error('删除失败')
        })
      }).catch(() => {})
    },
    // æŸ¥è¯¢æ¨¡æ¿åˆ—表
    selectInsOrderTemplate() {
      this.$axios.get(this.$api.materialInspection.selectRawMaterOrderTemplate+'?partNo='+this.addObj.partNo).then(res => {
        if (res.code == 201) return
        this.templates = res.data
      })
    },
    // æ‹†åˆ†
    handleSplitCountNum () {
      this.sample.joinName = null
      this.sample.joinModel = null
      this.sample.joinNum = 1
      // ä¸¤æ¡æ•°æ®ä¿æŒä¸€è‡´
      this.sample.sample = this.sampleList[0].sample
      this.sample.model = this.sampleList[0].model
      this.sample.unit = this.sampleList[0].unit
      this.sample.modelNum = this.sampleList[0].modelNum
      this.sample.standardMethodListId = this.sampleList[0].standardMethodListId
      this.sample.insProduct = []
      this.sample.id = this.count
      this.sample.childSampleList = []
      this.sample.insulating = null
      this.sample.sheath = null
      this.sampleList.push(this.HaveJson(this.sample))
      this.sampleList.forEach(item => {
        item.quantity = 1
      })
      this.count++
      this.computationalPairing(this.sampleList.length)
    },
    // æ£€éªŒé¡¹åˆ—表筛选
    searchFilterList () {
      const vtw = {
        inspectionItem: this.inspectionItem, // æ£€éªŒé¡¹
        inspectionItemSubclass: this.inspectionItemSubclass, // æ£€éªŒé¡¹å­é¡¹
        methodS: this.methodS, // è¯•验方法
      }
      const isHaveValue = Object.values(vtw).some(item => {
        return item
      })
      this.changeProductList0()
      if (isHaveValue) {
        for(let i in vtw) {
          if (vtw[i]) {
            this.productList = this.productList0.filter((item) => {
              return item[i] && item[i].includes(vtw[i])
            })
          }
        }
      } else {
        // æ²¡æœ‰æŸ¥è¯¢æ¡ä»¶æ—¶æ¸²æŸ“所有数据
        this.productList = this.productList0
      }
    },
    containsValue(str) {
      if(str){
        let symbolItem = ''
        this.symbolList.some(value =>{
          if(str.includes(value)){
            symbolItem  = value
            return true
          }
        })
        return symbolItem
      }
    },
    // æäº¤æŠ¥æ£€å›žè°ƒ
    save() {
      this.$refs['addObj'].validate((valid) => {
        if (valid) {
          if (!this.sampleList.every(m => m.standardMethodListId)) {
            this.$message.error('请选择检验标准')
            return
          }
          if (!this.sampleList.every(m => m.quantity)) {
            this.$message.error('请选择待检项数量')
            return
          }
          const sampleList = this.HaveJson(this.sampleList)
          sampleList.forEach(item => {
            item.insProduct = this.productList
          })
          this.getTotal(sampleList)
          let projectNum = this.totalArr.filter(a => a.state == 1).length
          if(projectNum==0){
            this.$confirm('检验项目为空,是否确认提交?', "提示", {
              confirmButtonText: "确定",
              cancelButtonText: "取消",
              type: "warning"
            }).then(() => {
              this.saveMethod(sampleList)
            }).catch(() => {})
          }else{
            let isRTS = this.totalArr.find(a => a.ask != null && this.symbolList.find(b=>a.ask.includes(b)) && a.state == 1)
            if (isRTS) {
              this.editTable = this.handleData(sampleList,this.containsValue, 0)
              this.editTable.forEach(item => {
                item.value = item.modelNum
              })
              this.bsm3Dia = true;
              return
            }
            this.saveMethod(sampleList)
          }
        } else {
          console.log('error submit!!');
          return false;
        }
      });
    },
    // æäº¤åŒºé—´å€¼
    save0(){
      if(this.editTable.every(m=>m.value)){
        this.sampleList.forEach(item => {
          item.insProduct = this.productList
        })
        let sampleList = this.handleData(this.HaveJson(this.sampleList),this.handleAsk,1)
        sampleList.forEach(a => {
          a.insProduct = a.insProduct.filter(b=>b.state === 1)
        })
        this.saveMethod(sampleList)
      }else{
        this.$message.error('请填写识别符值')
      }
    },
    noNeedCheck () {
      this.$refs['addObj'].validate((valid) => {
        if (valid) {
          if (!this.sampleList.every(m => m.standardMethodListId)) {
            this.$message.error('请选择检验标准')
            return
          }
          // æ£€éªŒç±»åž‹ä¸ºè¿›åŽ‚æ£€éªŒæ—¶å¯é€‰æ‹©å…æ£€ï¼Œä½†ä¸èƒ½é€‰æ‹©æ£€éªŒé¡¹
          const sampleList = this.HaveJson(this.sampleList)
          sampleList.forEach(item => {
            item.insProduct = this.productList
          })
          this.getTotal(sampleList)
          let projectNum = this.totalArr.filter(a => a.state == 1).length
          if (projectNum!=0){
            this.$message.error('免检不可选择检验项')
            return
          }
          this.noNeedCheckDia = true
        } else {
          console.log('error submit!!');
          return false;
        }
      });
    },
    handleNoNeedCheck () {
      // æ£€éªŒç±»åž‹ä¸ºè¿›åŽ‚æ£€éªŒæ—¶å¯é€‰æ‹©å…æ£€ï¼Œä½†ä¸èƒ½é€‰æ‹©æ£€éªŒé¡¹
      const sampleList = this.HaveJson(this.sampleList)
      sampleList.forEach(item => {
        item.insProduct = this.productList
      })
      this.getTotal(sampleList)
      const pairing = []
      let trees = this.selectTree.split(" - ")
      if (trees.length < 3) {
        this.$message.error('未选择对象')
        return
      }
      this.addObj.factory = trees[0]
      this.addObj.laboratory = trees[1]
      this.addObj.sampleType = trees[2]
      if ((trees[3] === undefined || trees[3] === '') || trees.length === 4) {
        this.addObj.sample = trees[2]
      } else {
        this.addObj.sample = trees[3]
      }
      this.addObj.model = (trees[4] == undefined ? null : trees[4])
      this.addObj.ifsInventoryId = this.customsInspection.id
      this.noNeedCheckLoad = true
      this.$axios.post(this.$api.rawMaterialOrder.addExemptionOrder, {
        str: JSON.stringify({
          insOrder: this.addObj,
          list: JSON.stringify(sampleList.map(a => {
            if (a.modelNum) {
              // æ ¹æ®x号判断型号参数与样品型号的拼接位置
              // ä¾‹å¦‚×4,就为500ML×4;4×,就为4×500ML
              const index = a.modelNum.indexOf('×')
              if (index === 0) {
                a.model = a.model + a.modelNum
              } else if (index === -1) {
                a.model = a.model + '-' + a.modelNum
              } else {
                a.model = a.modelNum + a.model
              }
            } else {
              a.model = a.model + ((a.modelNum == null || a.modelNum == '' || a.modelNum == 'null') ? '' : ('-' + a.modelNum))
            }
            a.insProduct = a.insProduct.filter(b=>b.state === 1)
            return a
          })),
          pairing: JSON.stringify(pairing)
        })
      }).then(res => {
        this.noNeedCheckLoad = false
        if (res.code == 201) return
        this.noNeedCheckDia = false
        this.$message.success('已提交')
        this.$parent.playOrder(0)
      }).catch(e=>{
        this.noNeedCheckLoad = false
      })
    },
    saveMethod(sampleList){
      const pairing = []
      let trees = this.selectTree.split(" - ")
      if (trees.length < 3) {
        this.$message.error('未选择对象')
        return
      }
      this.addObj.factory = trees[0]
      this.addObj.laboratory = trees[1]
      this.addObj.sampleType = trees[2]
      if ((trees[3] === undefined || trees[3] === '') || trees.length === 4) {
        this.addObj.sample = trees[2]
      } else {
        this.addObj.sample = trees[3]
      }
      this.addObj.model = (trees[4] == undefined ? null : trees[4])
      this.addObj.ifsInventoryId = this.customsInspection.id
      this.saveLoad = true
      this.$axios.post(this.$api.insOrder.addInsOrder, {
        str: JSON.stringify({
          insOrder: this.addObj,
          list: JSON.stringify(sampleList.map(a => {
            if (a.modelNum) {
              // æ ¹æ®x号判断型号参数与样品型号的拼接位置
              // ä¾‹å¦‚×4,就为500ML×4;4×,就为4×500ML
              const index = a.modelNum.indexOf('×')
              if (index === 0) {
                a.model = a.model + a.modelNum
              } else if (index === -1) {
                a.model = a.model + '-' + a.modelNum
              } else {
                a.model = a.modelNum + a.model
              }
            } else {
              a.model = a.model + ((a.modelNum == null || a.modelNum == '' || a.modelNum == 'null') ? '' : ('-' + a.modelNum))
            }
            a.insProduct = a.insProduct.filter(b=>b.state === 1)
            return a
          })),
          pairing: JSON.stringify(pairing)
        })
      }).then(res => {
        this.saveLoad = false
        if (res.code == 201) return
        this.$message.success('已提交')
        this.bsm3Dia = false;
        this.$parent.playOrder(0)
      }).catch(e=>{
        this.saveLoad = false
      })
    },
    handleAsk(ask,symbolItem, value) {
      try{
        let code = [">", "<", "=", ">", "<", "≥", "≤", "±", "*", "/"];
        let code2 = ['+', '*', '/', '-']
        if (ask.includes('&')) {
          // å¤šä¸ªæ¡ä»¶
          let arr0 = ask.split('&')
          let arr1 = []
          arr0.forEach(m => {
            let index = code.findIndex(b => m.includes(b))
            if (index > -1) {
              let arr = m.split(code[index]).filter(b => !!b)
              let num = eval(this.replaceAll(arr[0], symbolItem, value))
              m = code[index] + '' + num
              arr1.push(m)
            }
          })
          return arr1.join('&')
        } else if (ask.includes('~') || ask.includes('~')) {
          let arr0 = []
          if (ask.includes('~')) {
            arr0 = ask.split('~')
          } else {
            arr0 = ask.split('~')
          }
          // å¤šä¸ªæ¡ä»¶
          let arr1 = []
          arr0.forEach(m => {
            m = m.replace(symbolItem, value)
            const index = code2.findIndex(b => m.includes(b))
            if (index > -1) {
              m = eval(m)
            }
            arr1.push(m)
          })
          return arr1.join('~')
        } else {
          // å•个条件
          let index = code.findIndex(b => ask.includes(b))
          if (index > -1) {
            let arr = ask.split(code[index]).filter(b => !!b)
            let num = eval(this.replaceAll(arr[0], symbolItem, value))
            return code[index] + '' + num
          }
        }
      }catch(e){}
    },
    handleData(sampleList,calBack,type){
      let editTable = []
      sampleList.forEach(item => {
        let obj = {
          sampleCode:item.sampleCode,
          model:item.model,
          symbolList:[],
          sampleId:item.id,
          modelNum:item.modelNum,
        }
        if (item.insProduct && item.insProduct.length > 0) {
          item.insProduct.forEach(a => {
            if (a.state == 1) {
              if(type==0){
                let str = calBack(a.ask)
                str&&obj.symbolList.push({
                  symbolItem:str,
                  inspectionItem:a.inspectionItem,
                })
              }else if(type==1){
                let arr = this.editTable.filter(b => b.sampleId == item.id)
                for (var i=0;i<arr.length;i++){
                  if(a.ask){
                    if(a.ask.includes(arr[i].symbolItem)){
                      let ask = calBack(a.ask, arr[i].symbolItem,arr[i].value)
                      if (ask) {
                        a.ask = ask
                      }
                      let tell = this.handleAsk(a.tell, arr[i].symbolItem,arr[i].value)
                      if (tell) {
                        a.tell = tell
                      }
                    }
                  }else{
                    this.$message.error('要求值为空,需要去标准库维护!')
                  }
                }
              }
            }
          })
        }
        // å…‰çº¤å¸¦é¡¹ç›®
        if (item.bushing && item.bushing.length > 0) {
          item.bushing.forEach(a => {
            if (a.fiber && a.fiber.length > 0) {
              a.fiber.forEach(b => {
                if (b.productList && b.productList.length > 0) {
                  b.productList.forEach(c => {
                    if (c.state == 1) {
                      if(type==0){
                        let str = calBack(c.ask)
                        str&&obj.symbolList.push({
                          symbolItem:str,
                          inspectionItem:c.inspectionItem,
                        })
                      }else if(type==1){
                        let arr = this.editTable.filter(b => b.sampleId == item.id)
                        arr.forEach(f => {
                          if(c.ask.includes(f.symbolItem)){
                            let ask = calBack(c.ask, f.symbolItem,f.value)
                            if (ask) {
                              c.ask = ask
                            }
                            let tell = this.handleTell(c.tell, f.symbolItem,f.value)
                            if (tell) {
                              c.tell = tell
                            }
                          }
                        })
                      }
                    }
                  })
                }
              })
            }
            if (a.fibers && a.fibers.length > 0) {
              a.fibers.forEach(b => {
                if (b.productList && b.productList.length > 0) {
                  b.productList.forEach(c => {
                    if (c.state == 1) {
                      if(type==0){
                        let str = calBack(c.ask)
                        str&&obj.symbolList.push({
                          symbolItem:str,
                          inspectionItem:c.inspectionItem,
                        })
                      }else if(type==1){
                        // let ask = calBack(c.ask, c.rts)
                        // if (ask && c.state == 1) {
                        //   c.ask = csk
                        // }
                        let arr = this.editTable.filter(b => b.sampleId == item.id)
                        arr.forEach(f => {
                          if(c.ask.includes(f.symbolItem)){
                            let ask = calBack(c.ask, f.symbolItem,f.value)
                            if (ask) {
                              c.ask = ask
                            }
                            let tell = this.handleTell(c.tell, f.symbolItem,f.value)
                            if (tell) {
                              c.tell = tell
                            }
                          }
                        })
                      }
                    }
                  })
                }
                if (b.fiber && b.fiber.length > 0) {
                  b.fiber.forEach(c => {
                    if (c.productList && c.productList.length > 0) {
                      c.productList.forEach(d => {
                        if (d.state == 1) {
                          if(type==0){
                            let str = calBack(d.ask)
                            str&&obj.symbolList.push({
                              symbolItem:str,
                              inspectionItem:d.inspectionItem,
                            })
                          }else if(type==1){
                            // let ask = calBack(d.ask, d.rts)
                            // if (ask && d.state == 1) {
                            //   d.ask = ask
                            // }
                            let arr = this.editTable.filter(b => b.sampleId == item.id)
                            arr.forEach(f => {
                              if(d.ask.includes(f.symbolItem)){
                                let ask = calBack(d.ask, f.symbolItem,f.value)
                                if (ask) {
                                  d.ask = ask
                                }
                                let tell = this.handleTell(d.tell, f.symbolItem,f.value)
                                if (tell) {
                                  d.tell = tell
                                }
                              }
                            })
                          }
                        }
                      })
                    }
                  })
                }
              })
            }
          })
        }
        if(type==0){
          editTable.push(obj)
        }
      })
      if(type==0){
        editTable.forEach(a => {
          a.symbolList.forEach(b => {
            let arr = a.symbolList.filter(c => c.symbolItem == b.symbolItem);
            b.inspectionItemList = arr.map(c => c.inspectionItem).join(',')
          })
        })
        editTable.forEach(a => {
          let mySet = new Set();
          a.symbolList = a.symbolList.filter(b =>{
            let num0 = mySet.size;
            mySet.add(b.symbolItem);
            let num1 = mySet.size;
            if(num0!=num1){
              return true;
            }else{
              return false
            }
          })
        })
        let editTableNew = []
        editTable.forEach(a => {
          a.symbolList.forEach(b => {
            let obj = {
              sampleCode:a.sampleCode,
              model:a.model,
              symbolItem:b.symbolItem,
              sampleId:a.sampleId,
              value:null,
              inspectionItemList:b.inspectionItemList,
              modelNum:a.modelNum,
            }
            editTableNew.push(obj)
          })
        })
        return editTableNew
      }else{
        return sampleList
      }
    },
    handleTell(tell, symbolItem, value) {
      try {
        return this.replaceAll(tell, symbolItem, value)
      } catch (e) {
      }
    },
    replaceAll(str,find,value) {
      if (str === undefined) {
        return str
      }
      return str.replaceAll(find, value);
    },
    // å¤„理所选择的检验项,在提交时判断有没有选择检验项
    getTotal(sampleList) {
      this.totalArr = []
      // this.total = 0;
      this.productList.forEach(item => {
      })
      sampleList.forEach(item => {
        if (item.insProduct && item.insProduct.length > 0) {
          item.insProduct.forEach(a => {
            this.totalArr.push(a)
          })
        }
        if (item.bushing && item.bushing.length > 0) {
          item.bushing.forEach(a => {
            if (a.fiber && a.fiber.length > 0) {
              a.fiber.forEach(b => {
                if (b.productList && b.productList.length > 0) {
                  b.productList.forEach(c => {
                    this.totalArr.push(c)
                  })
                }
              })
            }
            if (a.fibers && a.fibers.length > 0) {
              a.fibers.forEach(b => {
                if (b.productList && b.productList.length > 0) {
                  b.productList.forEach(c => {
                    this.totalArr.push(c)
                  })
                }
                if (b.fiber && b.fiber.length > 0) {
                  b.fiber.forEach(c => {
                    if (c.productList && c.productList.length > 0) {
                      c.productList.forEach(d => {
                        this.totalArr.push(d)
                      })
                    }
                  })
                }
              })
            }
          })
        }
      })
      let mySet = new Set();
      let arr0 = this.totalArr.filter(item => {
        if (item.state == 1) {
          let num1 = mySet.size
          if (item.manHourGroup === '' || !item.manHourGroup) {
            return true
          } else {
            mySet.add(item.manHourGroup)
            let num2 = mySet.size
            if (num2 > num1) {
              return true
            } else {
              return false
            }
          }
        }
      })
      // arr0.forEach(item => {
      //   this.total += Number(item.price)
      // })
      let arr1 = this.totalArr.filter(item => item.state == 1)
      let mySet0 = new Set();
      this.sonLaboratoryList = []
      arr1.forEach(item => {
        let num1 = mySet0.size
        mySet0.add(item.sonLaboratory)
        let num2 = mySet0.size
        if(num2>num1){
          this.sonLaboratoryList.push({
            label:item.sonLaboratory,
            value:item.sonLaboratory,
          })
        }
      })
    },
    selectCheckType() {
      this.$axios.post(this.$api.enums.selectEnumByCategory, {
        category: "检验类型"
      }).then(res => {
        this.checkType = res.data
      })
    },
    // èŽ·å–å½“å‰ç”¨æˆ·ä¿¡æ¯
    getUserNow() {
      this.$axios.get(this.$api.user.getUserNow).then(res => {
        let selects = res.data
        if (selects == null) return
        this.addObj.userId = selects.id
        this.addObj.code = selects.code
        this.addObj.production = '/'
        this.addObj.productionEn = '/'
      })
    },
    // èŽ·å–æ£€éªŒæ ‡å‡†ä¸‹æ‹‰æ¡†æ•°æ®
    selectStandardMethods() {
      this.$axios.get(this.$api.standardTree.selectStandardMethodEnum).then(res => {
        this.methods = res.data
      })
    },
    getProNum() {
      this.$refs.sampleTable.doLayout()
    },
    methodFocus() {
      // èšç„¦æ£€éªŒæ ‡å‡†é€‰æ‹©æ¡†ï¼ŒèŽ·å–æ£€éªŒæ ‡å‡†æ•°æ®
      this.selectsStandardMethodByFLSSM()
    },
    selectsStandardMethodByFLSSM() {
      this.methodLoad = true
      this.$axios.post(this.$api.standardTree.selectsStandardMethodByFLSSM, {
        tree: this.selectTree
      }).then(res => {
        this.methodLoad = false
        try {
          if (res.data.standardMethodList.length == 0 && this.selectTree.split('-').length == 5) {
            let arr = this.selectTree.split('-')
            let arr0 = arr.slice(0, arr.length - 1)
            let selectTree = arr0.join('-').substring(0, arr0.join('-').length - 1)
            this.$axios.post(this.$api.standardTree.selectsStandardMethodByFLSSM, {
              tree: selectTree
            }).then(ress => {
              this.methods = ress.data.standardMethodList
            })
          } else {
            this.methods = res.data.standardMethodList
          }
        } catch (e) {}
      })
    },
    // èµ‹å€¼ç¬¬ä¸€æ¡é»˜è®¤æ•°æ®
    addListInfo (codeLevel, data) {
      this.sampleList = []
      this.productList = []
      this.sample.model = this.addObj.model
      this.sample.joinName = null
      this.sample.joinModel = null
      this.sample.joinNum = 1
      this.sample.sample = this.addObj.sample
      this.sample.unit = this.addObj.unit
      this.sample.standardMethodListId = null
      this.sample.insProduct = []
      this.sample.id = this.count
      this.sample.childSampleList = []
      this.sample.insulating = null
      this.sample.sheath = null
      this.sample.quantity = 1
      if (codeLevel === '[5]') {
        this.sample.model = this.addObj.sample
      } else if (codeLevel === '[4]') {
        this.models = data.children2
      } else if (codeLevel === '[3]') {
        this.models = data.children1
      }
      this.sampleList.push(this.HaveJson(this.sample))
      this.computationalPairing(this.sampleList.length)
      this.count++
    },
    // é€‰æ‹©æ£€éªŒé¡¹çš„回调
    selectProduct(val) {
      this.productListSelected = val
      this.productIds = []
      val.forEach(a => {
        this.productIds.push(a.id)
      })
    },
    selectSample(val) {
      this.sampleIds = []
      val.forEach(a => {
        this.sampleIds.push(a.id)
      })
    },
    // é€‰ä¸­è¡¨æ ¼è¡Œçš„回调
    rowClick(row, column, event) {
      this.currentMethod = row
      let obj = this.methods.find(a => a.id == this.currentMethod.standardMethodListId)
      if (obj && obj.code == '技术要求') {
        this.isAskOnlyRead = true
      } else {
        this.isAskOnlyRead = false
      }
      this.sampleId = row.id
      if (this.active !== 1) {
        this.sampleIds = []
        this.sampleIds.push(row.id)
      }
      // this.productList = row.insProduct
      if (this.productList !== null) {
        setTimeout(() => {
          this.productList.forEach(a => {
            if (a.state == 1) this.toggleSelection(a)
          })
        }, 200)
      }
    },
    toggleSelection(row) {
      this.$refs.productTable.toggleRowSelection(row, true);
    },
    permute(nums) {
      const result = [];
      function backtrack(temp, nums) {
        if (temp.length === 2) {
          result.push([...temp]);
          return;
        }
        for (let i = 0; i < nums.length; i++) {
          if (temp.includes(nums[i])) continue;
          // é¿å…é‡å¤æ•°å­—
          if (temp.length > 0 && nums[i] < temp[temp.length - 1]) continue; // è§„定顺序,避免重复组合
          temp.push(nums[i]);
          backtrack(temp, nums);
          temp.pop();
        }
      }
      backtrack([], nums);
      return result;
    },
    computationalPairing(n) {
      const nums = [];
      for (let i = 1; i <= n; i++) {
        nums.push(i);
      }
      this.bsm2Val3 = this.HaveJson(this.permute(nums))
    },
    tableRowClassName({row, rowIndex}) {
      if (row.state === 0) {
        return '';
      }
      return 'warning-row';
    },
    // ä¿®æ”¹æ ·å“åç§°
    changeValue (val, string) {
      if (this.sampleList.length > 1) {
        // æœ‰ä¸¤æ¡æ ·å“æ—¶ï¼Œç¬¬äºŒæ¡æ ·å“ä¿¡æ¯å’Œç¬¬ä¸€æ¡ä¿æŒä¸€è‡´
        this.sampleList.forEach(item => {
          item[string] = val
        })
      }
    },
    // é€‰æ‹©æ£€éªŒæ ‡å‡†å›žè°ƒ
    methodChange(val, row) {
      if (val === null || val === '') return
      if (this.sampleList.length > 1) {
        // æœ‰ä¸¤æ¡æ ·å“æ—¶ï¼Œç¬¬äºŒæ¡æ ·å“ä¿¡æ¯å’Œç¬¬ä¸€æ¡ä¿æŒä¸€è‡´
        this.sampleList.forEach(item => {
          item.standardMethodListId = val
          item.modelNum = row.modelNum
        })
      }
      this.currentMethod = row
      let obj = this.methods.find(a => a.id == this.currentMethod.standardMethodListId)
      if (obj && obj.code == '技术要求') {
        this.isAskOnlyRead = true
      } else {
        this.isAskOnlyRead = false
      }
      this.getProductLoad = true
      let selectTreeList = this.selectTree.split(" - ")
      this.addObj.model&&(selectTreeList[selectTreeList.length - 1] = this.addObj.model)
      this.$axios.post(this.$api.standardTree.selectStandardProductList, {
        model: this.addObj.model?this.addObj.model:row.model,
        modelNum: row.modelNum,
        standardMethodListId: val,
        factory: selectTreeList.join(" - "),
        partNo: this.addObj.partNo,
        ifsInventoryId: this.customsInspection.id
      }, {
        headers: {
          'Content-Type': 'application/json'
        }
      }).then(res => {
        this.getProductLoad = false
        if (res.code === 200) {
          res.data.forEach(a => {
            a.state = 0
          })
          this.productList = this.HaveJson(res.data)
          this.productList0 = JSON.parse(JSON.stringify(this.productList))
          this.$refs.sampleTable.setCurrentRow(row)
          setTimeout(() => {
            this.productList.forEach(a => {
              if (a.state == 1) this.toggleSelection(a)
            })
          }, 200)
        }
      }).catch(err => {
        console.log('err-',err)
      })
    },
    // é€‰æ‹©æ ·å“åž‹å·çš„回调
    changeModel() {
      this.sampleList.forEach(a => {
        let obj = this.sampleIds.find(b => b == a.id)
        if (obj) {
          a.model = this.model
        }
      })
    },
    // é€‰æ‹©æ£€éªŒæ ‡å‡†çš„回调
    changeStandardMethodListId() {
      this.sampleList.forEach(a => {
        let obj = this.sampleIds.find(b => b == a.id)
        if (obj) {
          a.standardMethodListId = this.standardMethodListId
          this.methodChange(this.standardMethodListId, a)
        }
      })
    },
    // æ‹¼æŽ¥æ ·å“æ ‘的字符串
    handleChangeModel(e) {
      if (this.sampleList.length > 1) {
        this.sampleList.forEach(item => {
          item.model = e
        })
      }
      this.productList = []
      let num = this.selectTreeTem.split('-').length;
      if (num != 5) {
        this.selectTree = this.selectTreeTem + ' - ' + e
      } else {
        let arr = this.selectTreeTem.split(' - ')
        let arr0 = arr.slice(0, arr.length - 1)
        this.selectTree = arr0.join(' - ') + '- ' + e
      }
    },
    selectEnumByCategoryForType() {
      this.$axios.post(this.$api.enums.selectEnumByCategory, {
        category: "紧急程度"
      }).then(res => {
        this.types = res.data
      })
    },
    // è¦æ±‚值变化时
    requestChange(e, row) {
      this.sampleList.map(item => {
        if (this.sampleIds.indexOf(item.id) > -1) {
          item.insProduct.map(m => {
            if (m.id == row.id) {
              m.ask = e;
            }
            return m;
          })
        }
        return item
      })
    },
    selectable() {
      if (this.active > 1) {
        return false
      } else {
        return true
      }
    },
    // å…¨é€‰ç‰¹æ®Šå€¼å¤„理框选择要求值的回调
    upBsmAll (item) {
      const i = this.bsm1DiaList.findIndex(obj => obj.id === item.id)
      if (i > -1) {
        // æ‰¾åˆ°ç›¸åº”的检验项赋值
        this.bsm1DiaList[i].bsm1Val = item.bsm1Val
        let sections = this.bsm1DiaList[i].bsmRow.sectionCopy && JSON.parse(this.bsm1DiaList[i].bsmRow.sectionCopy);
        let asks = this.bsm1DiaList[i].bsmRow.askCopy && JSON.parse(this.bsm1DiaList[i].bsmRow.askCopy);
        let tells = this.bsm1DiaList[i].bsmRow.tellCopy && JSON.parse(this.bsm1DiaList[i].bsmRow.tellCopy);
        // let manHours = this.bsm1DiaList[i].bsmRow.manHourCopy && JSON.parse(this.bsm1DiaList[i].bsmRow.manHourCopy);
        // let prices = this.bsm1DiaList[i].bsmRow.priceCopy && JSON.parse(this.bsm1DiaList[i].bsmRow.priceCopy);
        for (var a in sections) {
          if (this.bsm1DiaList[i].bsm1Val === sections[a]) {
            this.productList.forEach(p => {
              // å°†é€‰æ‹©å¥½çš„要求值赋值到列表里
              if (p.id === this.bsm1DiaList[i].bsmRow.id) {
                p.section = sections[a]
                p.ask = asks[a]
                p.tell = tells[a]
                // p.manHour = manHours[a]
                // p.price = prices[a]
              }
            })
            break
          }
        }
      }
      this.changeProductList0()
      this.currentMethod.insProduct = this.productList0
    },
    // å•选选择检验项的回调
    selectOne(selection, row) {
      this.bsm1DiaList = []
      row.state = row.state == 1 ? 0 : 1
      if(row.section === null) {
        row.section = ""
      }
      if (row.sectionCopy === undefined && row.section) {
        if (row.section.indexOf('[') > -1) {
          this.$set(row, 'sectionCopy', row.section)
        }
      }
      if (row.ask.includes('[')) {
        this.$set(row, 'askCopy', row.ask)
      }
      if (row.tell.includes('[')) {
        this.$set(row, 'tellCopy', row.tell)
      }
      // if (row.manHour.includes('[')) {
      //   this.$set(row, 'manHourCopy', row.manHour)
      // }
      // if (row.price.includes('[')) {
      //   this.$set(row, 'priceCopy', row.price)
      // }
      let arr = this.productList.filter(m=>m.state==1&&row.sectionCopy&&row.sectionCopy.includes(m.sectionCopy)&&m.ask&&m.sectionCopy.indexOf('[')==-1)
      if (row.bsm === '1' && row.sectionCopy !== '' && row.sectionCopy !== null && row.sectionCopy !== undefined && row.state === 1&&arr.length==0) {
        if (row.sectionCopy.indexOf('[') > -1) {
          row.bsmRow = this.HaveJson(row)
        }
        row.bsm1 = true
        this.bsm1DiaList.push(row)
        this.bsm1DiaAll = true
      } else if (row.bsm === '1' && row.sectionCopy !== '' && row.sectionCopy !== null && row.state === 0&&arr.length==0) {
        row.bsm1 = false
      }else if(arr.length>0){
        try{
          row.bsmRow = this.HaveJson(row)
          let section = arr[0].section
          let arr0 = JSON.parse(row.section)
          let arr1 = JSON.parse(row.ask)
          // let arr2 = JSON.parse(row.manHour)
          // let arr3 = JSON.parse(row.price)
          let arr4 = JSON.parse(row.tell)
          let index = arr0.indexOf(section)
          row.section = section
          row.ask = arr1[index]
          // row.manHour = arr2[index]
          // row.price = arr3[index]
          row.tell = arr4[index]
        } catch(e) {}
      }
      this.sampleList.map(item => {
        if (this.sampleIds.indexOf(item.id) > -1) {
          item.insProduct.map(m => {
            if (m.id == row.id) {
              m.state = row.state;
            }
            return m;
          })
        }
        return item
      })
      this.changeProductList0()
      this.currentMethod.insProduct = this.productList0
      this.getProNum()
    },
    handleAll(e) {
      if (e.length > 0) {
        this.productList.map(m => {
          if(e.find(a=>a.id == m.id)){
            m.state = 1
          }
          return m
        })
      } else {
        this.productList.map(m => {
          m.state = 0
          return m
        })
      }
      this.bsmRow3 = [];
      this.bsm1DiaList = []
      this.productList.forEach(p => {
        if (p.sectionCopy === undefined && p.section) {
          if (p.section.indexOf('[') > -1) {
            this.$set(p, 'sectionCopy', p.section)
          }
        }
        if (p.ask.includes('[')) {
          this.$set(p, 'askCopy', p.ask)
        }
        if (p.tell.includes('[')) {
          this.$set(p, 'tellCopy', p.tell)
        }
        // if (p.manHour.includes('[')) {
        //   this.$set(p, 'manHourCopy', p.manHour)
        // }
        // if (p.price.includes('[')) {
        //   this.$set(p, 'priceCopy', p.price)
        // }
        if (p.bsm === '1' && p.sectionCopy !== '' && p.sectionCopy !== null && p.sectionCopy !== undefined && p.state === 1) {
          if (p.sectionCopy.indexOf('[') > -1) {
            p.bsmRow = this.HaveJson(p)
          }
          p.bsm1 = true
          this.bsm1DiaList.push(p)
          this.bsm1DiaAll = true
        } else if (p.bsm === '1' && p.sectionCopy !== '' && p.sectionCopy !== null && p.state === 0) {
          p.bsm1 = false
        }
      })
      if (e.length > 0) {
        this.sampleList.map(item => {
          if (this.sampleIds.indexOf(item.id) > -1) {
            item.insProduct.map(m => {
              m.state = 1
              return m;
            })
          }
          return item
        })
      } else {
        this.sampleList.map(item => {
          if (this.sampleIds.indexOf(item.id) > -1) {
            item.insProduct.map(m => {
              m.state = 0
              return m;
            })
          }
          return item
        })
      }
      this.changeProductList0()
      this.currentMethod.insProduct = this.productList0
      this.getProNum()
      this.$nextTick(() => {
        this.$refs.productTable.doLayout()
      })
    },
    changeProductList0(){
      this.productList0.forEach(a=>{
        let obj = this.productList.find(m => m.id == a.id)
        if(obj){
          a.state = obj.state
          a.section = obj.section
          a.ask = obj.ask
          // a.manHour = obj.manHour
          // a.price = obj.price
          a.tell = obj.tell
        }
        if(a.state == 0&&a.bsmRow){
          a = this.HaveJson(a.bsmRow)
        }
      })
    },
    filterHandler(value, row, column) {
      const property = column['property'];
      return row[property] === value;
    },
  }
}
</script>
<style scoped>
.addObj-form-item {
  width: 100%;
}
.ins_order_add {
  width: 100%;
  height: 100%;
  overflow-y: auto;
  overflow-x: hidden;
}
.ins_order_add::-webkit-scrollbar {
  width: 0;
}
.title {
  height: 60px;
  line-height: 60px;
}
.search {
  width: calc(100% - 40px);
  background-color: #fff;
  padding: 5px 40px 5px 0;
}
.search_thing {
  display: flex;
  align-items: center;
  height: 50px;
}
.search_label {
  width: 120px;
  font-size: 14px;
  text-align: right;
}
.search_input {
  width: calc(100% - 120px);
}
.node_i {
  color: orange;
  font-size: 18px;
}
.el-select-dropdown__item {
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.pairing {
  text-align: center;
  line-height: 36px;
  margin: 3px 0;
  border: 1px solid rgba(0, 0, 0, 0.1);
  border-radius: 4px;
}
.askRts {
  width: 100px;
  font-size: 12px;
  border-top: 0;
  border-left: 0;
  border-right: 0;
  border-bottom: 2px solid rgba(0, 0, 0, 0.3);
  text-align: center;
  background-color: rgba(0, 0, 0, 0.1);
  outline: none;
  border-radius: 2px;
  line-height: 24px;
  margin-top: 5px;
}
.circulateTable {
  display: flex;
  flex-direction: row;
  justify-content: space-between;
}
.opticalProject {
  width: 38%;
}
.temperatureList {
  width: 60%;
}
.temperatureListTitle {
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  line-height: 30px;
}
>>> .el-form-item__content {
  text-align: left;
  width: 65%;
}
.ins_order_add .el-input-group__append,
.el-input-group__prepend {
  padding: 0 10px;
}
.ins_order_add .el-tree-node__content {
  height: 32px;
  font-size: 14px;
  border-radius: 2px;
}
.ins_order_add .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content {
  color: #3A7BFA;
}
.ins_order_add .has-gutter .el-table__cell .cell {
  line-height: 30px;
  background-color: #fafafa;
}
.ins_order_add .has-gutter .el-table__cell {
  background-color: #fafafa !important;
}
.ins_order_add .el-table__row .cell {
  font-size: 12px;
}
.ins_order_add .el-table .warning-row .cell {
  color: #3A7BFA;
}
.tab {
  list-style-type: none;
  display: flex;
}
.tab li {
  line-height: 24px;
  padding: 6px 14px;
  font-size: 14px;
  color: #333333;
  border: 1px solid #EEEEEE;
  cursor: pointer;
}
.tab li:nth-child(1) {
  border-radius: 8px 0 0 8px;
}
.tab li:nth-child(2) {
  border-radius: 0 8px 8px 0;
}
.tab li.active {
  border-color: #3A7BFA;
  color: #3A7BFA;
  background-color: #ffffff;
}
</style>
src/views/business/materialOrder/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,1318 @@
<template>
  <div class="app-container">
    <div style="width: 100%;height: 100%;">
      <div>
        <el-row class="title">
          <el-col :span="12" style="text-align: left;">原材料检验下单</el-col>
          <el-col :span="12" style="text-align: right;">
            <el-button v-show="tabIndex === 3 || tabIndex === 2" :loading="outLoading" size="small" type="primary" @click="handleOut">导出</el-button>
            <el-button v-if="tabIndex === 0" size="small" type="primary" @click="copper">铜材料下单</el-button>
            <el-button v-if="tabIndex !== 0" size="small" type="primary" @click="openPrint">标签打印</el-button>
          </el-col>
        </el-row>
      </div>
      <div class="search">
        <el-form :model="entity" ref="entity" size="small" :inline="true">
          <el-row>
            <el-form-item label="批号" prop="menuName">
              <el-input v-model="entity.updateBatchNo" clearable placeholder="请输入"
                        size="small"
                        @keyup.enter.native="refreshTable">
              </el-input>
            </el-form-item>
            <el-form-item label="委托编号" prop="menuName">
              <el-input v-model="entity.entrustCode" clearable placeholder="请输入"
                        size="small"
                        @keyup.enter.native="refreshTable">
              </el-input>
            </el-form-item>
            <el-form-item label="零件号" prop="menuName">
              <el-input v-model="entity.partNo" clearable placeholder="请输入"
                        size="small"
                        @keyup.enter.native="refreshTable">
              </el-input>
            </el-form-item>
            <el-form-item label="零件描述" prop="menuName">
              <el-input v-model="entity.partDesc" clearable placeholder="请输入"
                        size="small"
                        @keyup.enter.native="refreshTable">
              </el-input>
            </el-form-item>
            <el-button v-if="tabIndex === 2 || tabIndex === 3 || tabIndex === 4" :icon="!more?'el-icon-arrow-down':'el-icon-arrow-up'" style="color: #3A7BFA;" type="text" @click="more=!more">{{!more?'更多':'收起'}}</el-button>
            <el-button icon="el-icon-search" size="small" type="primary" @click="refreshTable()">查 è¯¢</el-button>
            <el-button icon="el-icon-refresh" size="small" @click="refresh()">重 ç½®</el-button>
          </el-row>
          <el-row>
            <el-form-item label="供应商名称" prop="menuName" v-if="(tabIndex === 2 || tabIndex === 3 || tabIndex === 4) && more">
              <el-input v-model="entity.supplierName" clearable placeholder="请输入"
                        size="small"
                        @keyup.enter.native="refreshTable">
              </el-input>
            </el-form-item>
            <el-form-item label="样品型号" prop="menuName" v-if="(tabIndex === 2 || tabIndex === 3 || tabIndex === 4) && more">
              <el-input v-model="entity.sampleModel" clearable placeholder="请输入"
                        size="small"
                        @keyup.enter.native="refreshTable">
              </el-input>
            </el-form-item>
            <el-form-item label="检验状态" prop="menuName" v-if="(tabIndex === 2 || tabIndex === 3 || tabIndex === 4) && more">
              <el-select v-model="entity.inspectStatus" clearable
                         size="small" style="width: 100%;" @change="refreshTable()">
                <el-option v-for="(a, i) in inspectStatusList" :key="i" :label="a.label" :value="a.value"></el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="下发时间" prop="menuName" v-if="(tabIndex === 2 || tabIndex === 3 || tabIndex === 4) && more">
              <el-date-picker
                v-model="entity.date"
                end-placeholder="结束日期"
                format="yyyy-MM-dd"
                placeholder="选择日期"
                range-separator="至"
                size="small"
                start-placeholder="开始日期"
                style="width: 100%;"
                type="daterange"
                value-format="yyyy-MM-dd">
              </el-date-picker>
            </el-form-item>
          </el-row>
        </el-form>
      </div>
      <div class="table">
        <ul class="tab">
          <li v-for="(m,i) in tabList" :key="m.value" :class="{active:m.value===tabIndex}" @click="handleTab(m)">{{m.label}}</li>
        </ul>
        <!--待下单-->
<!--        <ValueTable v-show="tabIndex === 0" :key="'a'+ upIndex"-->
<!--                    ref="ValueTable"-->
<!--                    :componentData="componentData"-->
<!--                    :style="getStyle()"-->
<!--                    :tableRowClassName="changeRowClass"-->
<!--                    :url="$api.materialInspection.getPurchaseOrder" />-->
        <!--检验中-->
<!--        <ValueTable v-show="tabIndex === 1" :key="'b'+ upIndex"-->
<!--                    ref="ValueTable1"-->
<!--                    :componentData="componentData1"-->
<!--                    :style="getStyle()"-->
<!--                    :tableRowClassName="changeRowClass"-->
<!--                    :url="$api.materialInspection.getIfsByStateOne" />-->
<!--        &lt;!&ndash;已检验&ndash;&gt;-->
<!--        <ValueTable v-show="tabIndex === 2" :key="'c'+ upIndex"-->
<!--                    ref="ValueTable2"-->
<!--                    :componentData="componentData2"-->
<!--                    :style="getStyle()"-->
<!--                    :tableRowClassName="changeRowClass"-->
<!--                    :url="$api.materialInspection.getIfsByOver" />-->
<!--        &lt;!&ndash;全部&ndash;&gt;-->
<!--        <ValueTable v-if="tabIndex === 3" :key="'d'+ upIndex"-->
<!--                    ref="ValueTable3"-->
<!--                    :componentData="componentData3"-->
<!--                    :style="getStyle()"-->
<!--                    :url="$api.materialInspection.getIfsByAll" />-->
<!--        &lt;!&ndash;季度检验&ndash;&gt;-->
<!--        <ValueTable v-show="tabIndex === 4" :key="'e'+ upIndex"-->
<!--                    ref="ValueTable4"-->
<!--                    :componentData="componentData4"-->
<!--                    :style="getStyle()"-->
<!--                    :tableRowClassName="changeRowClass"-->
<!--                    :url="$api.materialInspection.getIfsByQuarter" />-->
      </div>
    </div>
<!--    <div v-if="active >0 && isCopper == 0" style="width: 100%;height: 100%;">-->
<!--      <CustomsInspection v-if="active >0&& isCopper == 0" :active="active"-->
<!--                         :currentId="currentId"-->
<!--                         :customsInspection="customsInspection" :orderType="orderType" />-->
<!--    </div>-->
<!--    <div v-if="active >0 && isCopper == 1" style="width: 100%;height: 100%;">-->
<!--      <CopperOrder v-if="active >0 && isCopper == 1" :active="active" :currentId="currentId"></CopperOrder>-->
<!--    </div>-->
    <!-- ç¡®è®¤å…æ£€å¼¹æ¡† -->
    <el-dialog :visible.sync="exemptionVisible" title="确认免检" width="42%">
      <div style="display: flex">
        <span style="width: 90px; line-height: 32px">规格型号:</span>
        <el-input v-model="exemptionInfo.partDetail" clearable placeholder="请输入"
                  size="small"
                  @keyup.enter.native="refreshTable"></el-input>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-row>
          <el-button @click="exemptionVisible = false">取 æ¶ˆ</el-button>
          <el-button :loading="exemptionLoading" type="primary" @click="submitExemption">ç¡® å®š</el-button>
        </el-row>
      </span>
    </el-dialog>
    <!-- æ’¤é”€æŠ¥æ£€ -->
    <el-dialog :visible.sync="declareDialogVisible" title="报检撤销" width="30%">
      <p style="font-size:16px;color:#333333">批号<span
        style="color:#34BD66">{{this.insOrderRow.updateBatchNo}}</span>的信息是否<span style="color: #FF4902">撤销报检</span></p>
      <span slot="footer" class="dialog-footer">
                    <el-row>
                        <el-button @click="declareDialogVisible = false">取 æ¶ˆ</el-button>
                        <el-button :loading="upLoad" type="primary" @click="submitDeclare">ç¡® å®š</el-button>
                    </el-row>
                </span>
    </el-dialog>
    <!-- æ’¤é”€ä¸‹å• -->
    <el-dialog :visible.sync="quashDialogVisible" title="下单撤销" width="30%">
      <el-button size="small" type="primary" @click="cancelQuashOrder('enterOrderId')">撤销进厂检验下单</el-button>
      <el-button size="small" type="primary" @click="cancelQuashOrder('quarterOrderId')">撤销季度检验下单</el-button>
      <span slot="footer" class="dialog-footer">
        <el-row>
          <el-button @click="quashDialogVisible = false">取 æ¶ˆ</el-button>
        </el-row>
      </span>
    </el-dialog>
    <!-- ä¿®æ”¹å§”托编号弹框 -->
    <el-dialog :visible.sync="entrustCodeVisible" title="提示" width="30%">
      <el-input v-model="entrustCodeInfo.entrustCode"></el-input>
      <span slot="footer" class="dialog-footer">
        <el-button @click="entrustCodeVisible = false">取 æ¶ˆ</el-button>
        <el-button :loading="submitCodeLoading" type="primary" @click="submitCode">ç¡® å®š</el-button>
      </span>
    </el-dialog>
    <!--标签打印弹框-->
    <print-dialog v-if="printDialog" ref="printDialog"
                  :printDialog="printDialog"
                  @closePrintDialog="closePrintDialog"></print-dialog>
    <!--数据查看弹框-->
    <data-look-visible v-if="dataDialogVisible" ref="dataDialogVisible"
                       :dataDialogVisible="dataDialogVisible"
                       :dataLookInfo="dataLookInfo" @closeDataLook="closeDataLook"></data-look-visible>
    <!--附件查看弹框-->
    <files-look-visible v-if="filesDialogVisible" ref="filesDialogVisible"
                        :filesDialogVisible="filesDialogVisible"
                        :filesLookInfo="filesLookInfo" @closeFilesLook="closeFilesLook"></files-look-visible>
    <!--报告下载弹框-->
    <down-file-dialog v-if="downFileDialogVisible" ref="downFileDialogVisible"
                      :downFileDialogVisible="downFileDialogVisible"
                      :downLoadInfo="downLoadInfo" @closeDownFileDialog="closeDownFileDialog"></down-file-dialog>
    <!--产业链信息查看-->
    <ShowInfo v-if="showInfoDialog" ref="showInfoDialog" :showInfoDialog="showInfoDialog"></ShowInfo>
    <!--检验任务信息查看-->
    <el-dialog :visible.sync="InspectInfoDialog" title="数据查看" width="400px" @closed="closeInsInfoDialog">
      <div style="margin-bottom: 8px">
        <span style="font-size: 16px;">进厂检验原始数据</span>
        <el-link :disabled="!insInfo.enterOrderId" :underline="false"
                 style="vertical-align: bottom;margin-left: 6px"
                 type="primary" @click="viewInsInfo0">查看</el-link>
      </div>
      <div>
        <span  style="font-size: 16px;">季度检验原始数据</span>
        <el-link :disabled="!insInfo.quarterOrderId" :underline="false"
                 style="vertical-align: bottom;margin-left: 6px"
                 type="primary" @click="viewInsInfo1">查看</el-link>
      </div>
    </el-dialog>
<!--    <Inspection v-if="state>0" :key="InspectionKey" :inspectorList="inspectorList" :orderId="orderId"-->
<!--                :sonLaboratory="'原材料'" :state="state"-->
<!--                :typeSource="typeSource"-->
<!--                @goback="goback" @refreshView="refreshView"/>-->
  </div>
</template>
<script>
import ValueTable from "@/components/Table/value-table.vue";
import CustomsInspection from "./customsInspection.vue";
import PrintDialog from "@/components/materialOrder/printDialog.vue";
import ShowInfo from "@/components/materialOrder/showInfo.vue";
import DataLookVisible from "@/components/materialOrder/dataLookVisible.vue";
import FilesLookVisible from "@/components/materialOrder/filesLookVisible.vue";
import DownFileDialog from "@/components/materialOrder/downFileDialog.vue";
// import CopperOrder from "@/components/materialOrder/copper-order.vue";
// import Inspection from "../do/b1-inspect-order-plan/Inspection.vue";
export default {
  name: "b1-material-inspection-order",
  // import å¼•入的组件需要注入到对象中才能使用
  components: {
    // Inspection,
    // CopperOrder,
    DownFileDialog, FilesLookVisible, DataLookVisible, ShowInfo, PrintDialog, CustomsInspection, ValueTable},
  data() {
    // è¿™é‡Œå­˜æ”¾æ•°æ®
    return {
      isShowIFS: false,
      entityEmpty: {},
      entity: {
        updateBatchNo: null,
        entrustCode: null,
        partDesc: null,
        supplierName: null,
        sampleModel: null,
        partNo: null,
        inspectStatus: null,
        date: null,
        beginDeclareDate: null,
        endDeclareDate: null,
      },
      componentData: { // è¡¨æ ¼æ•°æ®
        entity: {
          updateBatchNo: null,
          partDesc: null,
          state: 0,
          isInspect: 1,
          partNo: null
        },
        isIndex: true,
        showSelect: false,
        select: false,
        selectMethod:'selectMethod',
        do: [
          {
            font: '下单',
            type: 'text',
            method: 'playOrder',
          },
          {
            font: '免检',
            type: 'text',
            method: 'exemption',
          },
          {
            font: '撤销报检',
            type: 'text',
            method: 'cancelDeclare',
          },
          // {
          //   font: '产业链',
          //   type: 'text',
          //   method: 'openInfoDialog',
          // }
        ],
        tagField: {
          isExpire: {
            select: [{
              value: 1,
              label: '过期物料',
              type: 'warning'
            }]
          },
        },
        selectField: {},
        requiredAdd: [],
        requiredUp: []
      },
      componentData1: {
        entity: {
          orderBy: {
            field: 'entrustCode',
            order: 'desc'
          },
          updateBatchNo: null,
          entrustCode: null,
          partDesc: null,
          state: 1,
          orderState: 1,
          partNo: null
        },
        isIndex: true,
        showSelect: true,
        select: true,
        selectMethod:'selectMethod',
        do: [
          // {
          //   font: '季度检验',
          //   type: 'text',
          //   method: 'playOrderSec',
          //   disabFun: (row, index) => {
          //     return row.isQuarter == 0
          //   }
          // },
          {
            id: 'dataLook',
            font: '数据查看',
            type: 'text',
            method: 'handleDataLook',
          },
          {
            font: '附件查看',
            type: 'text',
            method: 'handleFileLook',
          },
          {
            font: '撤销下单',
            type: 'text',
            method: 'cancelOrder',
          },
          // {
          //   font: '产业链',
          //   type: 'text',
          //   method: 'openInfoDialog',
          // }
        ],
        linkEvent: {
          sampleName: {
            method: 'selectAllByOne'
          },
          entrustCode: {
            method: 'changeEntrustCode'
          }
        },
        tagField: {
          inspectStatus: {
            select: [{
              value: 0,
              label: '检验中',
              type: 'warning'
            },{
              value: 1,
              label: '合格',
              type: 'success'
            },{
              value: 2,
              label: '不合格',
              type: 'danger'
            },{
              value: 3,
              label: '未下单',
              type: 'info'
            }]
          },
          isExpire: {
            select: [{
              value: 1,
              label: '过期物料',
              type: 'warning'
            }]
          },
        },
        selectField: {},
        requiredAdd: [],
        requiredUp: []
      },
      componentData2: {
        entity: {
          orderBy: {
            field: 'entrustCode',
            order: 'desc'
          },
          updateBatchNo: null,
          entrustCode: null,
          partDesc: null,
          sampleModel: null,
          state: 2,
          orderState: 4,
          supplierName: '',
          partNo: null,
          beginDeclareDate: null,
          endDeclareDate: null,
        },
        isIndex: true,
        showSelect: true,
        select: true,
        selectMethod:'selectMethod',
        do: [
          {
            font: '季度检验',
            type: 'text',
            method: 'playOrderSec',
            disabFun: (row, index) => {
              return row.isQuarter == 0
            }
          },
          {
            id: 'dataLook',
            font: '数据查看',
            type: 'text',
            method: 'handleDataLook',
          },
          {
            font: '附件查看',
            type: 'text',
            method: 'handleFileLook',
          },{
            id: 'download',
            font: '报告下载',
            type: 'text',
            method: 'download',
          },
          // {
          //   font: '产业链',
          //   type: 'text',
          //   method: 'openInfoDialog',
          // },
          {
            id: '',
            font: '原始记录',
            type: 'text',
            method: 'viewInspectInfo',
            disabFun: (row, index) => {
              return row.sampleName === null
            }
          },
          {
            id: '',
            font: '放行',
            type: 'text',
            method: 'goPass',
            disabFun: (row, index) => {
              return row.inspectStatus != 2
            }
          },
          {
            id: '',
            font: '季度撤销',
            type: 'text',
            method: 'repealQuarter',
            disabFun: (row, index) => {
              return row.quarterOrderId == null || row.quarterReportId != null
            }
          }
        ],
        linkEvent: {
          sampleName: {
            method: 'selectAllByOne'
          },
          entrustCode: {
            method: 'changeEntrustCode'
          }
        },
        tagField: {
          inspectStatus: {
            select: [{
              value: 0,
              label: '检验中',
              type: 'warning'
            },{
              value: 1,
              label: '合格',
              type: 'success'
            },{
              value: 2,
              label: '不合格',
              type: 'danger'
            },{
              value: 3,
              label: '未下单',
              type: 'info'
            },{
              value: 4,
              label: '让步放行',
              type: 'info'
            }]
          },
          isExemption: {
            select: [{
              value: 1,
              label: '免检',
              type: 'success'
            }]
          },
          isExpire: {
            select: [{
              value: 1,
              label: '过期物料',
              type: 'warning'
            }]
          },
        },
        selectField: {},
        requiredAdd: [],
        requiredUp: []
      },
      componentData4: {
        entity: {
          orderBy: {
            field: 'entrustCode',
            order: 'desc'
          },
          updateBatchNo: null,
          entrustCode: null,
          partDesc: null,
          sampleModel: null,
          supplierName: '',
          partNo: null,
          beginDeclareDate: null,
          endDeclareDate: null,
        },
        isIndex: true,
        showSelect: true,
        select: true,
        selectMethod:'selectMethod',
        do: [
          {
            font: '季度检验',
            type: 'text',
            method: 'playOrderSec',
            disabFun: (row, index) => {
              return row.isQuarter == 0
            }
          },
          {
            id: 'dataLook',
            font: '数据查看',
            type: 'text',
            method: 'handleDataLook',
          },
          {
            font: '附件查看',
            type: 'text',
            method: 'handleFileLook',
          },{
            id: 'download',
            font: '报告下载',
            type: 'text',
            method: 'download',
          },
          // {
          //   font: '产业链',
          //   type: 'text',
          //   method: 'openInfoDialog',
          // },
          {
            id: '',
            font: '原始记录',
            type: 'text',
            method: 'viewInspectInfo',
            disabFun: (row, index) => {
              return row.sampleName === null
            }
          },
          // {
          //   id: '',
          //   font: '放行',
          //   type: 'text',
          //   method: 'goPass',
          //   disabFun: (row, index) => {
          //     return row.inspectStatus != 2
          //   }
          // },
          {
            id: '',
            font: '季度撤销',
            type: 'text',
            method: 'repealQuarter',
            disabFun: (row, index) => {
              return row.quarterOrderId == null || row.quarterReportId != null
            }
          }
        ],
        linkEvent: {
          sampleName: {
            method: 'selectAllByOne'
          },
          entrustCode: {
            method: 'changeEntrustCode'
          }
        },
        tagField: {
          inspectStatus: {
            select: [{
              value: 0,
              label: '检验中',
              type: 'warning'
            },{
              value: 1,
              label: '合格',
              type: 'success'
            },{
              value: 2,
              label: '不合格',
              type: 'danger'
            },{
              value: 3,
              label: '未下单',
              type: 'info'
            },{
              value: 4,
              label: '让步放行',
              type: 'info'
            }]
          },
          isExemption: {
            select: [{
              value: 1,
              label: '免检',
              type: 'success'
            }]
          },
          isExpire: {
            select: [{
              value: 1,
              label: '过期物料',
              type: 'warning'
            }]
          },
        },
        selectField: {},
        requiredAdd: [],
        requiredUp: []
      },
      componentData3: {
        entity: {
          orderBy: {
            field: 'entrustCode',
            order: 'desc'
          },
          updateBatchNo: null,
          entrustCode: null,
          partDesc: null,
          sampleModel: null,
          isInspect: 1,
          supplierName: '',
          partNo: null,
          beginDeclareDate: null,
          endDeclareDate: null,
        },
        isIndex: true,
        showSelect: true,
        select: true,
        selectMethod:'selectMethod',
        do: [
          {
            id: 'dataLook',
            font: '数据查看',
            type: 'text',
            method: 'handleDataLook',
          },
          {
            font: '附件查看',
            type: 'text',
            method: 'handleFileLook',
          },
          // {
          //   font: '产业链',
          //   type: 'text',
          //   method: 'openInfoDialog',
          // }
        ],
        linkEvent: {
          sampleName: {
            method: 'selectAllByOne'
          },
          entrustCode: {
            method: 'changeEntrustCode'
          }
        },
        tagField: {
          inspectStatus: {
            select: [{
              value: 0,
              label: '检验中',
              type: 'warning'
            },{
              value: 1,
              label: '合格',
              type: 'success'
            },{
              value: 2,
              label: '不合格',
              type: 'danger'
            },{
              value: 3,
              label: '未下单',
              type: 'info'
            },{
              value: 4,
              label: '让步放行',
              type: ''
            }]
          },
          isExemption: {
            select: [{
              value: 1,
              label: '免检',
              type: 'success'
            }]
          },
          isExpire: {
            select: [{
              value: 1,
              label: '过期物料',
              type: 'warning'
            }]
          },
        },
        selectField: {},
        requiredAdd: [],
        requiredUp: []
      },
      tabList: [
        {
          label: '待下单',
          value: 0
        },
        {
          label: '检验中',
          value: 1
        },
        {
          label: '已检验',
          value: 2
        },
        {
          label: '季度检验',
          value: 4
        },
        {
          label: '全部',
          value: 3
        }
      ],
      more:false,
      upIndex: 0,
      tabIndex: 0,
      multipleSelection:[],
      entityCopy: {},
      entityCopy1: {},
      entityCopy2: {},
      entityCopy3: {},
      entityCopy4: {},
      active: 0, //1:下单,2:查看
      orderType: 0, //0:原材料下单,1:季度检验下单
      currentId: null,
      customsInspection: {},
      btnLoading: false,
      quashDialogVisible: false, // æ’¤é”€ä¸‹å•提醒弹框
      declareDialogVisible: false, // æ’¤é”€æŠ¥æ£€æé†’弹框
      insOrderRow:{},
      upLoad: false,
      filesDialogVisible: false, // é™„件查看弹框
      printDialog: false, // æ ‡ç­¾æ‰“印弹框
      showInfoDialog: false, // äº§ä¸šé“¾ä¿¡æ¯æŸ¥çœ‹
      dataDialogVisible: false, // æ•°æ®æŸ¥çœ‹å¼¹æ¡†
      dataLookInfo: {}, // æ•°æ®æŸ¥çœ‹å¼¹æ¡†æ•°æ®
      filesLookInfo: {}, // é™„件查看弹框数据
      downFileDialogVisible: false, // æŠ¥å‘Šä¸‹è½½å¼¹æ¡†
      downLoadInfo: {}, // æŠ¥å‘Šä¸‹è½½å¼¹æ¡†
      entrustCodeVisible: false, // ä¿®æ”¹å§”托编号弹框
      entrustCodeInfo: {},
      submitCodeLoading: false,
      exemptionVisible: false, // å…æ£€ç¡®è®¤å¼¹æ¡†
      exemptionLoading: false,
      exemptionInfo: {},
      inspectStatusList: [
        {label: '检验中', value: 0},
        {label: '合格', value: 1},
        {label: '不合格', value: 2},
        {label: '未下单', value: 3},
        {label: '让步放行', value: 4},
      ],
      state: 0,
      orderId: 0,
      inspectorList: [],//检验人员列表
      InspectionKey: 1,
      typeSource: null,// 0:成品下单,1:原材料下单, 2: é“œå•丝下单
      InspectInfoDialog: false, // æ•°æ®æŸ¥çœ‹å¼¹æ¡†
      insInfo: {},
      isCopper: null,
      outLoading:false
    }
  },
  mounted () {
    this.entityEmpty = this.HaveJson(this.entity)
    this.entityCopy = this.HaveJson(this.componentData.entity)
    this.entityCopy1 = this.HaveJson(this.componentData1.entity)
    this.entityCopy2 = this.HaveJson(this.componentData2.entity)
    this.entityCopy3 = this.HaveJson(this.componentData3.entity)
    this.getPower()
  },
  // æ–¹æ³•集合
  methods: {
    // èŽ·å–æƒé™
    getPower(){
      let power = JSON.parse(sessionStorage.getItem('power'))
      let getIFS = false
      for (var i = 0; i < power.length; i++) {
        if (power[i].menuMethod == 'getIfsByAll') { // èŽ·å–IFS的权限
          getIFS = true
        }
      }
      if (!getIFS) {
        this.tabList.splice(-1, 1)
      }
    },
    // æŸ¥çœ‹æ£€éªŒæ•°æ®
    viewInspectInfo (row) {
      //当前检验任务的检验人列表
      let inspectorList = []
      if(row.userName){
        inspectorList = row.userName.split(',')
      }
      let user = JSON.parse(localStorage.getItem('user'))
      if(user){
        inspectorList.push(user.name)
      }
      this.inspectorList = inspectorList
      this.insInfo = row
      this.InspectInfoDialog = true
    },
    closeInsInfoDialog () {
      this.InspectInfoDialog = false
    },
    // ç›´æŽ¥æ”¾è¡Œ
    goPass (row) {
      this.$confirm('是否放行当前数据?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.$axios.post(this.$api.materialInspection.concessionRelease+'?ifsInventoryId='+row.id).then(res => {
          if (res.code === 200) {
            this.$message({
              type: 'success',
              message: '放行成功!'
            });
            this.refresh()
          }
        })
      }).catch(() => {
        this.$message({
          type: 'error',
          message: '放行失败'
        });
      });
    },
    // å­£åº¦æ’¤é”€
    repealQuarter(row) {
      this.$confirm('是否撤销季度下单?', "警告", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      }).then(() => {
        this.$axios.post(this.$api.rawMaterialOrder.repealQuarterRawOrder + '?quarterOrderId=' + row.quarterOrderId).then(res => {
          if (res.code === 200) {
            this.$message.success('撤销成功')
            this.refreshTable('page')
          }
        })
      }).catch(() => {})
    },
    viewInsInfo0 () {
      this.state = 3;
      this.typeSource = this.insInfo.typeSource
      this.orderId = this.insInfo.enterOrderId
      this.InspectInfoDialog = false
    },
    viewInsInfo1 () {
      this.state = 3;
      this.typeSource = this.insInfo.typeSource
      this.orderId = this.insInfo.quarterOrderId
      this.InspectInfoDialog = false
    },
    goback() {
      this.state = 0
      this.refreshTable('page')
    },
    // åˆ·æ–°é¡µé¢
    refreshView () {
      this.InspectionKey++
    },
    // é“œææ–™ä¸‹å•
    copper () {
      this.$router.push({ path: "/business/materialOrder/customsInspection" });
    },
    // æ‰“开标签打印弹框
    openPrint () {
      if (this.multipleSelection.length > 0) {
        this.printDialog = true
        this.$nextTick(() => {
          let selection = this.multipleSelection
          this.$refs.printDialog.getLabelPrinting(selection)
        })
      } else {
        this.$message.error('请选择需要打印的数据')
      }
    },
    // å…³é—­æ ‡ç­¾æ‰“印弹框
    closePrintDialog () {
      this.printDialog = false
    },
    // æŸ¥è¯¢å›žè°ƒ
    refreshTable(e) {
      if (this.tabIndex === 0) {
        this.componentData.entity.updateBatchNo = this.entity.updateBatchNo
        this.componentData.entity.partDesc = this.entity.partDesc
        this.componentData.entity.partNo = this.entity.partNo
        this.$refs['ValueTable'].selectList(e)
      } else if (this.tabIndex === 1) {
        this.componentData1.entity.updateBatchNo = this.entity.updateBatchNo
        this.componentData1.entity.entrustCode = this.entity.entrustCode
        this.componentData1.entity.partDesc = this.entity.partDesc
        this.componentData1.entity.partNo = this.entity.partNo
        this.$refs['ValueTable1'].selectList(e)
      }  else if (this.tabIndex === 2) {
        this.componentData2.entity.updateBatchNo = this.entity.updateBatchNo
        this.componentData2.entity.entrustCode = this.entity.entrustCode
        this.componentData2.entity.partDesc = this.entity.partDesc
        this.componentData2.entity.supplierName = this.entity.supplierName
        this.componentData2.entity.sampleModel = this.entity.sampleModel
        this.componentData2.entity.partNo = this.entity.partNo
        this.componentData2.entity.inspectStatus = this.entity.inspectStatus
        if (this.entity.date!==null) {
          this.componentData2.entity.beginDeclareDate = this.entity.date[0] + ' 00:00:00'
          this.componentData2.entity.endDeclareDate = this.entity.date[1] + ' 23:59:59'
        } else {
          this.componentData2.entity.beginDeclareDate = ''
          this.componentData2.entity.endDeclareDate = ''
        }
        this.$refs['ValueTable2'].selectList(e)
      }  else if (this.tabIndex === 4) {
        this.componentData4.entity.updateBatchNo = this.entity.updateBatchNo
        this.componentData4.entity.entrustCode = this.entity.entrustCode
        this.componentData4.entity.partDesc = this.entity.partDesc
        this.componentData4.entity.supplierName = this.entity.supplierName
        this.componentData4.entity.sampleModel = this.entity.sampleModel
        this.componentData4.entity.partNo = this.entity.partNo
        this.componentData4.entity.inspectStatus = this.entity.inspectStatus
        if (this.entity.date!==null) {
          this.componentData4.entity.beginDeclareDate = this.entity.date[0] + ' 00:00:00'
          this.componentData4.entity.endDeclareDate = this.entity.date[1] + ' 23:59:59'
        } else {
          this.componentData4.entity.beginDeclareDate = ''
          this.componentData4.entity.endDeclareDate = ''
        }
        this.$refs['ValueTable4'].selectList(e)
      } else {
        this.componentData3.entity.updateBatchNo = this.entity.updateBatchNo
        this.componentData3.entity.entrustCode = this.entity.entrustCode
        this.componentData3.entity.partDesc = this.entity.partDesc
        this.componentData3.entity.supplierName = this.entity.supplierName
        this.componentData3.entity.sampleModel = this.entity.sampleModel
        this.componentData3.entity.partNo = this.entity.partNo
        this.componentData3.entity.inspectStatus = this.entity.inspectStatus
        if (this.entity.date!==null) {
          this.componentData3.entity.beginDeclareDate = this.entity.date[0] + ' 00:00:00'
          this.componentData3.entity.endDeclareDate = this.entity.date[1] + ' 23:59:59'
        } else {
          this.componentData3.entity.beginDeclareDate = ''
          this.componentData3.entity.endDeclareDate = ''
        }
        this.$nextTick(()=> {
          this.$refs['ValueTable3'].selectList(e)
        })
      }
    },
    // é‡ç½®
    refresh() {
      this.entity = this.HaveJson(this.entityEmpty)
      if (this.tabIndex === 0) {
        this.componentData.entity = this.HaveJson(this.entityCopy)
      } else if (this.tabIndex === 1) {
        this.componentData1.entity = this.HaveJson(this.entityCopy1)
      } else if (this.tabIndex === 2) {
        this.componentData2.entity = this.HaveJson(this.entityCopy2)
      }  else if (this.tabIndex === 4) {
        this.componentData4.entity = this.HaveJson(this.entityCopy4)
      } else {
        this.componentData3.entity = this.HaveJson(this.entityCopy3)
      }
      this.refreshTable()
    },
    // ä¸‹å•
    playOrder(num) {
      if (typeof num === "number") {
        this.active = num
      } else {
        this.active = 1
        this.orderType = 0
        this.isCopper = 0
        this.customsInspection = num
      }
      if (num === 0) {
        this.refreshTable('page')
      }
    },
    // å­£åº¦æ£€éªŒä¸‹å•
    playOrderSec (row) {
      if (typeof row === "number") {
        this.active = row
      } else {
        this.active = 1
        this.orderType = 1
        this.isCopper = 0
        this.customsInspection = row
      }
      if (row === 0) {
        this.refreshTable('page')
      }
    },
    // æ‰“开免检弹框
    exemption (row) {
      this.exemptionVisible = true
      this.exemptionInfo = row
      this.$set(this.exemptionInfo, 'partDetail', row.partDesc)
    },
    // æäº¤å…æ£€ä¿¡æ¯
    submitExemption () {
      this.exemptionLoading = true
      this.$axios.post(this.$api.rawMaterialOrder.rawOrderRelease, {
        ifsInventoryId: this.exemptionInfo.id,
        partDetail: this.exemptionInfo.partDetail
      }, {
        headers: {
          'Content-Type': 'application/json'
        },
        noQs: true
      }).then(res => {
        if (res.code === 200) {
          this.exemptionVisible = false
          this.$message.success('操作成功')
          this.refresh()
        }
        this.exemptionLoading = false
      }).catch(err => {
        console.log(err)
        this.exemptionLoading = false
      })
    },
    // æ‰“开撤销报检弹框
    cancelDeclare (row) {
      this.declareDialogVisible = true
      this.insOrderRow = row
    },
    // æäº¤æ’¤é”€æŠ¥æ£€ç”³è¯·
    submitDeclare () {
      this.$axios.post(this.$api.rawMaterialOrder.revokeInspectionReport, {
        id: this.insOrderRow.id
      }).then(res => {
        if (res.code === 200) {
          this.declareDialogVisible = false
          this.refreshTable('page')
          this.$message.success("撤销报检成功")
        }
      }).catch(err => {
        console.log(err)
      })
    },
    // æ‰“开撤销下单的弹框
    cancelOrder (row) {
      if (row.enterOrderId && row.quarterOrderId) {
        this.quashDialogVisible = true
      } else if (row.enterOrderId && !row.quarterOrderId) {
        this.$confirm('是否撤销进厂下单?', "警告", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        }).then(() => {
          this.$axios.post(this.$api.rawMaterialOrder.repealEnterRawOrder + '?enterOrderId=' + row.enterOrderId).then(res => {
            if (res.code === 200) {
              this.$message.success('撤销成功')
              this.refreshTable('page')
            }
          })
        }).catch(() => {})
      } else if (!row.enterOrderId && row.quarterOrderId) {
        this.$confirm('是否撤销季度下单?', "警告", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        }).then(() => {
          this.$axios.post(this.$api.rawMaterialOrder.repealQuarterRawOrder + '?quarterOrderId=' + row.quarterOrderId).then(res => {
            if (res.code === 200) {
              this.$message.success('撤销成功')
              this.refreshTable('page')
            }
          })
        }).catch(() => {})
      }
      this.insOrderRow = row
    },
    cancelQuashOrder (type) {
      console.log('type---', type)
      const url = type === 'enterOrderId' ? this.$api.rawMaterialOrder.repealEnterRawOrder : this.$api.rawMaterialOrder.repealQuarterRawOrder
      const name = type === 'enterOrderId' ? 'enterOrderId' : 'quarterOrderId'
      const paramInfo = type === 'enterOrderId' ? this.insOrderRow.enterOrderId : this.insOrderRow.quarterOrderId
      this.$confirm('是否撤销当前数据?', "警告", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      }).then(() => {
        this.$axios.post(url + `?${name}=` + paramInfo).then(res => {
          if (res.code === 200) {
            this.$message.success('撤销成功')
            this.refreshTable('page')
          }
        })
      }).catch(() => {})
    },
    // ç‚¹å‡»æ ·å“åç§°æŸ¥çœ‹è¯¦æƒ…
    selectAllByOne(row) {
      this.currentId = row.insOrderId
      this.isCopper = row.isCopper
      if (this.isCopper == 1) {
        this.currentId = row.enterOrderId
      }
      this.customsInspection = row
      this.active = 2;
    },
    // æ•°æ®æŸ¥çœ‹
    handleDataLook(row) {
      this.dataDialogVisible = true;
      this.dataLookInfo = row
    },
    // å…³é—­æ•°æ®æŸ¥çœ‹å¼¹æ¡†
    closeDataLook () {
      this.dataDialogVisible = false
    },
    // é™„件查看
    handleFileLook (row) {
      this.filesDialogVisible = true
      this.filesLookInfo = row
    },
    // å…³é—­é™„件查看弹框
    closeFilesLook () {
      this.filesDialogVisible = false
    },
    // é™„件下载
    handleDown(row){
      this.$axios.post(this.$api.insOrderPlan.downFile, {
        id: row.id,
      }).then(res => {
        if (res.code === 200) {
          let url = '';
          if(res.data.type==1){
            url = this.javaApi+'/img/'+res.data.fileUrl
            file.downloadIamge(url,row.fileName)
          }else{
            url = this.javaApi+'/word/'+res.data.fileUrl
            const link = document.createElement('a');
            link.href = url;
            link.download = row.fileName;
            link.click();
          }
        }
      }).catch(error => {
      })
    },
    // æŠ¥å‘Šä¸‹è½½
    download(row) {
      this.downFileDialogVisible = true
      this.downLoadInfo = row
    },
    // å…³é—­æŠ¥å‘Šä¸‹è½½å¼¹æ¡†
    closeDownFileDialog () {
      this.downFileDialogVisible = false
    },
    // æŸ¥çœ‹äº§ä¸šé“¾ä¿¡æ¯
    openInfoDialog (row) {
      this.showInfoDialog = true
      this.$nextTick(() => {
        this.$refs.showInfoDialog.getInfo(row.id)
      })
    },
    // ä¿®æ”¹å§”托编号
    changeEntrustCode (row) {
      this.entrustCodeVisible = true
      this.entrustCodeInfo = {...row}
    },
    // å¯¼å‡º
    handleOut(){
      let entity = this.tabIndex === 3 ? {...this.componentData3.entity} : {...this.componentData2.entity}
      delete entity.orderBy
      this.outLoading = true
      this.$axios.post(this.$api.rawMaterialOrder.rawAllExport,{
        entity:entity
      },{
        headers: {
          'Content-Type': 'application/json'
        }
        ,responseType: "blob"}).then(res => {
        this.outLoading = false
        this.$message.success('导出成功')
        const blob = new Blob([res],{ type: 'application/octet-stream' });
        const url = URL.createObjectURL(blob);
        const link = document.createElement('a');
        link.href = url;
        link.download = '原材料检测信息导出.xlsx';
        link.click();
      })
    },
    submitCode () {
      this.submitCodeLoading = true
      try {
        this.$axios.post(this.$api.insOrderPlan.updateEntrustCode, {
          id: this.entrustCodeInfo.id,
          entrustCode: this.entrustCodeInfo.entrustCode,
        }, {
          headers: {
            'Content-Type': 'application/json'
          }
        }).then(res => {
          if (res.code === 200) {
            this.entrustCodeVisible = false
            this.$message.success('修改成功')
          }
          this.submitCodeLoading = false
        })
      } catch (e) {
        this.submitCodeLoading = false
      }
    },
    // åˆ‡æ¢ä¸‹å•tab表格
    handleTab(m) {
      this.tabIndex = m.value;
      if (this.tabIndex === 0) {
        this.componentData.entity.updateBatchNo = this.entity.updateBatchNo
        this.componentData.entity.partDesc = this.entity.partDesc
      } else if (this.tabIndex === 1) {
        this.componentData1.entity.updateBatchNo = this.entity.updateBatchNo
        this.componentData1.entity.entrustCode = this.entity.entrustCode
        this.componentData1.entity.partDesc = this.entity.partDesc
      }  else if (this.tabIndex === 4) {
        this.componentData4.entity.updateBatchNo = this.entity.updateBatchNo
        this.componentData4.entity.entrustCode = this.entity.entrustCode
        this.componentData4.entity.partDesc = this.entity.partDesc
      } else {
        this.componentData2.entity.updateBatchNo = this.entity.updateBatchNo
        this.componentData2.entity.entrustCode = this.entity.entrustCode
        this.componentData2.entity.partDesc = this.entity.partDesc
      }
      this.refreshTable()
    },
    // è¡¨æ ¼é€‰æ‹©æ–¹æ³•
    selectMethod(val){
      this.multipleSelection = val
    },
    changeRowClass({row, rowIndex}) {
      if (row.isFirst == 1) {
        return 'highlight-danger-row-border'
      }
      return ''
    },
    getStyle(){
      return 'height: calc(100% - '+(this.more?'94':'44')+'px)'
    }
  },
}
</script>
<style scoped>
.app-container {
  padding-top: 0;
}
.title {
  height: 60px;
  line-height: 60px;
}
.tab {
  list-style-type: none;
  display: flex;
  margin-bottom: 12px;
  margin-top: 0;
  padding-left: 0;
}
.tab li {
  line-height: 24px;
  padding: 6px 14px;
  font-size: 14px;
  color: #333333;
  border: 1px solid #EEEEEE;
  cursor: pointer;
}
.tab li:nth-child(1) {
  border-radius: 8px 0 0 8px;
}
.tab li:nth-child(5) {
  border-radius: 0 8px 8px 0;
}
.tab li.active {
  border-color: #3A7BFA;
  color: #3A7BFA;
}
</style>
src/views/business/rawMaterialInspection/index.vue
@@ -4,7 +4,7 @@
      <el-row class="title">
        <el-col :span="12" style="text-align: left;">原材料报检</el-col>
        <el-col :span="12" style="text-align: right;">
          <el-button v-show="tabIndex === 4" :loading="outLoading" size="medium" type="primary" @click="handleDown">导出</el-button>
          <el-button v-show="tabIndex === 4" :loading="outLoading" size="small" type="primary" @click="handleDown">导出</el-button>
          <el-button v-if="isShowIFS && tabIndex === 0" :loading="btnLoading" size="small" type="primary" @click="openIFS">获取IFS订单</el-button>
          <el-button v-if="tabIndex === 0" size="small" type="primary" @click="declareS">报检</el-button>
          <el-button v-if="tabIndex === 0" size="small" type="primary" @click="addDeclare">新增报检信息</el-button>
@@ -37,11 +37,9 @@
                      @keyup.enter.native="refreshTable">
            </el-input>
          </el-form-item>
<!--          <div class="search_thing" style="padding-left: 30px;">-->
            <el-button v-if="tabIndex === 3 || tabIndex === 4" :icon="!more?'el-icon-arrow-down':'el-icon-arrow-up'" style="color: #3A7BFA;" type="text" @click="more=!more">{{!more?'更多':'收起'}}</el-button>
          <el-button v-if="tabIndex === 3 || tabIndex === 4" :icon="!more?'el-icon-arrow-down':'el-icon-arrow-up'" style="color: #3A7BFA;" type="text" @click="more=!more">{{!more?'更多':'收起'}}</el-button>
          <el-button size="small" icon="el-icon-search" type="primary" @click="refreshTable()">查 è¯¢</el-button>
          <el-button size="small" @click="refresh()" icon="el-icon-refresh">重 ç½®</el-button>
<!--          </div>-->
        </el-row>
        <el-row>
          <el-form-item label="检验状态" prop="menuName" v-if="(tabIndex === 3 || tabIndex === 4) && more">
src/views/index.vue
@@ -587,7 +587,7 @@
  width: 100%;
  margin-top: 20px;
  display: flex;
  align-items: start;
  align-items: flex-start;
  justify-content: space-between;
}
>>>.el-calendar__header {
@@ -667,7 +667,7 @@
}
.list3-item-title{
  display: flex;
  align-items: start;
  align-items: flex-start;
  margin-bottom: 10px;
}
.list3-item-info{