applications/drone-command/package.json
@@ -73,7 +73,6 @@ "@vitejs/plugin-vue": "catalog:", "@vue/compiler-sfc": "catalog:", "postcss-pxtorem": "catalog:", "prettier": "catalog:", "sass": "catalog:", "terser": "catalog:", "unplugin-auto-import": "catalog:", applications/drone-command/src/assets/images/dataCockpit/device-fz.svg
New file @@ -0,0 +1,66 @@ <svg width="30" height="42" viewBox="0 0 30 42" fill="none" xmlns="http://www.w3.org/2000/svg"> <g id="Group 2136637024"> <g id="Group 2136636871"> <g id="Ellipse 115"> <g filter="url(#filter0_i_201_2895)"> <circle cx="15.0204" cy="14.9795" r="14.9795" fill="#082389"/> <circle cx="15.0204" cy="14.9795" r="14.9795" fill="url(#paint0_linear_201_2895)" style="mix-blend-mode:overlay"/> <circle cx="15.0204" cy="14.9795" r="14.9795" fill="url(#paint1_linear_201_2895)" style="mix-blend-mode:overlay"/> </g> <circle cx="15.0204" cy="14.9795" r="14.4795" stroke="white" style="mix-blend-mode:overlay"/> </g> <g id="Frame"> <path id="Vector" d="M22.3395 20.5666C22.3395 21.2157 21.8137 21.7416 21.1644 21.7416H9.414C8.76486 21.7416 8.23898 21.2157 8.23898 20.5666V17.3352C8.23898 16.686 8.76488 16.1601 9.41401 16.1601H14.611V13.0757C14.611 12.6703 14.94 12.3412 15.3453 12.3412C15.7507 12.3412 16.0797 12.6703 16.0797 13.0757V16.1601H21.1644C21.8135 16.1601 22.3394 16.686 22.3394 17.3353L22.3395 20.5666ZM20.8707 18.9509C20.8707 18.5455 20.5417 18.2165 20.1362 18.2165C19.7309 18.2165 19.4019 18.5455 19.4019 18.9509C19.4019 19.3562 19.7309 19.6853 20.1362 19.6853C20.5417 19.6853 20.8707 19.3562 20.8707 18.9509ZM18.2268 18.9509C18.2268 18.5455 17.8978 18.2165 17.4925 18.2165C17.0871 18.2165 16.758 18.5455 16.758 18.9509C16.758 19.3562 17.0871 19.6853 17.4924 19.6853C17.8978 19.6853 18.2268 19.3562 18.2268 18.9509ZM15.3454 9.99116C17.0492 9.99116 18.4298 11.3719 18.4298 13.0757C18.4298 13.4811 18.1008 13.8101 17.6954 13.8101C17.29 13.8101 16.9611 13.4811 16.9611 13.0757C16.9611 12.1826 16.2384 11.46 15.3453 11.46C14.4523 11.46 13.7297 12.1826 13.7297 13.0757C13.7297 13.4811 13.4006 13.8101 12.9953 13.8101C12.5899 13.8101 12.2609 13.4811 12.2609 13.0757C12.2608 11.3719 13.6415 9.99116 15.3454 9.99116ZM15.3454 7.64111C18.3476 7.64111 20.7799 10.0735 20.7799 13.0757C20.7799 13.4811 20.451 13.8101 20.0455 13.8101C19.6401 13.8101 19.3111 13.4811 19.3111 13.0757C19.3111 10.8842 17.5368 9.10997 15.3454 9.10997C13.154 9.10997 11.3796 10.8842 11.3796 13.0757C11.3796 13.4811 11.0505 13.8101 10.6452 13.8101C10.2398 13.8101 9.91081 13.4811 9.91081 13.0757C9.91081 10.0735 12.3429 7.64111 15.3454 7.64111Z" fill="url(#paint2_linear_201_2895)"/> </g> </g> <g id="Group 2136637016"> <g id="路径"> <g filter="url(#filter1_i_201_2895)"> <path fill-rule="evenodd" clip-rule="evenodd" d="M14.959 36C12.4796 36 10.4713 36.8438 10.4713 37.875C10.4713 38.9062 12.4796 39.75 14.959 39.75C17.4385 39.75 19.4468 38.9062 19.4468 37.875C19.4468 36.8438 17.4385 36 14.959 36Z" fill="#0A3BFF" fill-opacity="0.588235"/> </g> <path fill-rule="evenodd" clip-rule="evenodd" d="M14.959 36C12.4796 36 10.4713 36.8438 10.4713 37.875C10.4713 38.9062 12.4796 39.75 14.959 39.75C17.4385 39.75 19.4468 38.9062 19.4468 37.875C19.4468 36.8438 17.4385 36 14.959 36Z" stroke="#518EFF" stroke-width="0.4"/> </g> <path id="路径_2" opacity="0.5" fill-rule="evenodd" clip-rule="evenodd" d="M14.9591 33.75C6.6942 33.75 0 35.598 0 37.875C0 40.152 6.6942 42 14.9591 42C23.224 42 29.9182 40.152 29.9182 37.875C29.9182 35.598 23.224 33.75 14.9591 33.75V33.75Z" stroke="#518EFF" stroke-width="0.6"/> <path id="路径_3" fill-rule="evenodd" clip-rule="evenodd" d="M14.9591 35.25C9.58694 35.25 5.23572 36.4225 5.23572 37.875C5.23572 39.3275 9.58694 40.5 14.9591 40.5C20.3313 40.5 24.6825 39.3275 24.6825 37.875C24.6825 36.4225 20.3313 35.25 14.9591 35.25V35.25Z" stroke="#518EFF" stroke-width="0.6"/> <path id="路径_4" fill-rule="evenodd" clip-rule="evenodd" d="M14.2111 31.5V37.5H15.707V31.5H14.2111Z" fill="url(#paint3_linear_201_2895)"/> </g> </g> <defs> <filter id="filter0_i_201_2895" x="0.0408936" y="0" width="29.9591" height="29.9591" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> <feFlood flood-opacity="0" result="BackgroundImageFix"/> <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> <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/> <feGaussianBlur stdDeviation="4.5"/> <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> <feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/> <feBlend mode="overlay" in2="shape" result="effect1_innerShadow_201_2895"/> </filter> <filter id="filter1_i_201_2895" x="10.2714" y="35.8" width="9.37537" height="5.1499" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> <feFlood flood-opacity="0" result="BackgroundImageFix"/> <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> <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="1"/> <feGaussianBlur stdDeviation="0.5"/> <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> <feColorMatrix type="matrix" values="0 0 0 0 0.005478 0 0 0 0 0.0928216 0 0 0 0 0.379808 0 0 0 0.239216 0"/> <feBlend mode="normal" in2="shape" result="effect1_innerShadow_201_2895"/> </filter> <linearGradient id="paint0_linear_201_2895" x1="15.0204" y1="0" x2="15.0204" y2="29.9591" gradientUnits="userSpaceOnUse"> <stop stop-color="white" stop-opacity="0"/> <stop offset="1" stop-color="white"/> </linearGradient> <linearGradient id="paint1_linear_201_2895" x1="15.0204" y1="0" x2="15.0204" y2="29.9591" gradientUnits="userSpaceOnUse"> <stop stop-color="white" stop-opacity="0"/> <stop offset="1" stop-color="white"/> </linearGradient> <linearGradient id="paint2_linear_201_2895" x1="15.2892" y1="7.64111" x2="15.2892" y2="21.7416" gradientUnits="userSpaceOnUse"> <stop stop-color="white"/> <stop offset="1" stop-color="#A2F2FB"/> </linearGradient> <linearGradient id="paint3_linear_201_2895" x1="17.2029" y1="37.5" x2="17.2029" y2="31.5" gradientUnits="userSpaceOnUse"> <stop stop-color="#0A3BFF" stop-opacity="0.01"/> <stop offset="1" stop-color="#0A3BFF"/> </linearGradient> </defs> </svg> applications/drone-command/src/assets/images/dataCockpit/device-wrj.svg
New file @@ -0,0 +1,49 @@ <svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg"> <g id="Group 2136637030"> <g id="Ellipse 120"> <g filter="url(#filter0_i_205_3058)"> <circle cx="15" cy="15" r="15" fill="#38100A"/> <circle cx="15" cy="15" r="15" fill="url(#paint0_linear_205_3058)" style="mix-blend-mode:overlay"/> <circle cx="15" cy="15" r="15" fill="url(#paint1_linear_205_3058)" style="mix-blend-mode:overlay"/> </g> <circle cx="15" cy="15" r="14.5" stroke="white" style="mix-blend-mode:overlay"/> </g> <g id="Frame" clip-path="url(#clip0_205_3058)"> <g id="Group 1321318248"> <path id="Vector" d="M24.5173 11.5642C24.5173 11.3706 22.2846 11.2128 21.1002 11.1927V11.0749C21.1002 10.9977 21.0731 10.9237 21.0248 10.8691C20.9766 10.8145 20.9111 10.7838 20.8429 10.7838C20.7747 10.7838 20.7092 10.8145 20.661 10.8691C20.6128 10.9237 20.5856 10.9977 20.5856 11.0749V11.1927C19.4013 11.2128 17.1686 11.3706 17.1686 11.5642C17.1686 11.7585 19.4013 11.9163 20.5856 11.9365V13.1597H17.7198C17.5046 12.786 17.1361 12.5313 16.7065 12.5313H13.735C13.3054 12.5313 12.937 12.786 12.7217 13.1597H9.85593V11.9364C11.0403 11.9163 13.273 11.7585 13.273 11.5642C13.273 11.3706 11.0403 11.2127 9.85593 11.1926V11.0749C9.85593 10.9977 9.82883 10.9237 9.78058 10.8691C9.73233 10.8145 9.66689 10.7838 9.59866 10.7838C9.53043 10.7838 9.46499 10.8145 9.41674 10.8691C9.3685 10.9237 9.34139 10.9977 9.34139 11.0749V11.1926C8.15702 11.2127 5.92432 11.3706 5.92432 11.5642C5.92432 11.7585 8.15702 11.9163 9.34139 11.9365V13.1597H8.47017C8.14381 13.1597 8.07472 13.6794 8.38594 13.7889L11.8782 15.2562L10.5511 18.2921C10.4722 18.4763 10.4543 18.6865 10.5008 18.8844C10.5473 19.0823 10.6648 19.1999 10.8044 19.3702C11.1129 19.7465 11.6502 19.9449 11.6502 19.9449C11.8782 20.104 12.068 20.0383 12.1534 19.8333C12.2251 19.6612 12.1546 19.4577 12.0381 19.3702L11.4005 18.8852C11.3548 18.8495 11.3219 18.7965 11.3076 18.7358C11.2934 18.675 11.2988 18.6105 11.3228 18.5539L12.6151 15.5043L12.6835 15.5282L12.9112 16.9647C12.92 17.0479 12.9471 17.1272 12.99 17.1955C13.0328 17.2638 13.0901 17.3188 13.1567 17.3556L15.0273 18.386C15.0875 18.4194 15.1537 18.4368 15.2207 18.4368C15.2878 18.4368 15.354 18.4194 15.4142 18.386L17.2849 17.3555C17.3514 17.3187 17.4087 17.2637 17.4516 17.1954C17.4944 17.1271 17.5215 17.0478 17.5303 16.9646L17.7579 15.5281L17.8264 15.5042L19.1187 18.5538C19.1429 18.6103 19.1484 18.6747 19.1342 18.7354C19.1199 18.7961 19.0868 18.849 19.041 18.8844L18.3593 19.4159C18.237 19.5113 18.1613 19.7578 18.2497 19.9449C18.3642 20.1871 18.8003 20.0514 18.9369 19.9449L19.727 19.4159C19.8764 19.3003 19.9841 19.128 20.0307 18.9302C20.0773 18.7324 20.0597 18.5222 19.981 18.3378L18.6581 15.2225L22.0555 13.7889C22.3668 13.6794 22.2977 13.1597 21.9713 13.1597H21.1001V11.9364C22.2845 11.9163 24.5173 11.7585 24.5173 11.5642ZM15.2207 17.1954C14.5733 17.1954 14.0587 16.6417 14.0587 16.0131C14.0587 15.432 14.579 14.851 15.2208 14.851C15.8626 14.851 16.3964 15.3714 16.3828 16.0131C16.3695 16.6416 15.8681 17.1954 15.2207 17.1954Z" fill="url(#paint2_linear_205_3058)"/> <path id="Vector_2" d="M14.6398 16.013C14.6398 16.0893 14.6548 16.1649 14.684 16.2354C14.7132 16.3059 14.756 16.3699 14.8099 16.4239C14.8639 16.4778 14.9279 16.5206 14.9984 16.5498C15.0689 16.579 15.1445 16.5941 15.2208 16.5941C15.2971 16.5941 15.3727 16.579 15.4432 16.5498C15.5137 16.5206 15.5777 16.4778 15.6317 16.4239C15.6856 16.3699 15.7284 16.3059 15.7576 16.2354C15.7868 16.1649 15.8018 16.0893 15.8018 16.013C15.8018 15.9367 15.7868 15.8612 15.7576 15.7907C15.7284 15.7202 15.6856 15.6561 15.6317 15.6022C15.5777 15.5482 15.5137 15.5054 15.4432 15.4762C15.3727 15.447 15.2971 15.432 15.2208 15.432C15.1445 15.432 15.0689 15.447 14.9984 15.4762C14.9279 15.5054 14.8639 15.5482 14.8099 15.6022C14.756 15.6561 14.7132 15.7202 14.684 15.7907C14.6548 15.8612 14.6398 15.9367 14.6398 16.013Z" fill="url(#paint3_linear_205_3058)"/> </g> </g> </g> <defs> <filter id="filter0_i_205_3058" x="0" y="0" width="30" height="30" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> <feFlood flood-opacity="0" result="BackgroundImageFix"/> <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> <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/> <feGaussianBlur stdDeviation="4.5"/> <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> <feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/> <feBlend mode="overlay" in2="shape" result="effect1_innerShadow_205_3058"/> </filter> <linearGradient id="paint0_linear_205_3058" x1="15" y1="0" x2="15" y2="30" gradientUnits="userSpaceOnUse"> <stop stop-color="white" stop-opacity="0"/> <stop offset="1" stop-color="white"/> </linearGradient> <linearGradient id="paint1_linear_205_3058" x1="15" y1="0" x2="15" y2="30" gradientUnits="userSpaceOnUse"> <stop stop-color="white" stop-opacity="0"/> <stop offset="1" stop-color="white"/> </linearGradient> <linearGradient id="paint2_linear_205_3058" x1="15.2208" y1="20.0803" x2="15.2208" y2="10.7838" gradientUnits="userSpaceOnUse"> <stop stop-color="#FCFEFF"/> <stop offset="1" stop-color="#FBB6A5"/> </linearGradient> <linearGradient id="paint3_linear_205_3058" x1="15.2208" y1="16.5941" x2="15.2208" y2="15.432" gradientUnits="userSpaceOnUse"> <stop stop-color="#FCFEFF"/> <stop offset="1" stop-color="#FBB6A5"/> </linearGradient> <clipPath id="clip0_205_3058"> <rect width="18.75" height="18.75" fill="white" transform="matrix(-1 0 0 1 24.6997 5.44312)"/> </clipPath> </defs> </svg> applications/drone-command/src/assets/images/dataCockpit/device-zc.svg
New file @@ -0,0 +1,76 @@ <svg width="30" height="42" viewBox="0 0 30 42" fill="none" xmlns="http://www.w3.org/2000/svg"> <g id="Group 2136637029"> <g id="Group 2136636871"> <g id="Ellipse 115"> <g filter="url(#filter0_i_205_3029)"> <circle cx="15.0204" cy="14.9795" r="14.9795" fill="#002624"/> <circle cx="15.0204" cy="14.9795" r="14.9795" fill="url(#paint0_linear_205_3029)" style="mix-blend-mode:overlay"/> <circle cx="15.0204" cy="14.9795" r="14.9795" fill="url(#paint1_linear_205_3029)" style="mix-blend-mode:overlay"/> </g> <circle cx="15.0204" cy="14.9795" r="14.4795" stroke="white" style="mix-blend-mode:overlay"/> </g> <g id="Frame"> <g id="Frame_2" clip-path="url(#clip0_205_3029)"> <g id="Frame_3" clip-path="url(#clip1_205_3029)"> <path id="Vector" d="M14.9991 16.3575L10.7982 21.959H19.2L14.9991 16.3575ZM20.1788 9.3562L19.1438 10.2984C20.0832 11.3285 20.6029 12.673 20.6007 14.0671C20.6027 15.461 20.083 16.805 19.1438 17.8349L20.1797 18.7762C21.3533 17.4889 22.0027 15.8091 22.0004 14.0671C22.0004 12.2531 21.3104 10.5993 20.1788 9.3562ZM9.81942 9.3562C8.64503 10.6438 7.9952 12.3244 7.99786 14.0671C7.99525 15.809 8.64435 17.4887 9.81755 18.7762L10.8544 17.834C9.91548 16.8043 9.39579 15.4606 9.39755 14.0671C9.39555 12.6733 9.91527 11.3292 10.8544 10.2993L9.81849 9.3562H9.81942ZM18.1069 11.2406L17.071 12.1828C17.5397 12.6984 17.8004 13.3696 17.7994 14.0662C17.7994 14.7918 17.5238 15.4528 17.071 15.9506L18.1079 16.8928C18.812 16.1203 19.2016 15.1124 19.2 14.0671C19.2 12.9778 18.7857 11.9859 18.1079 11.2406H18.1069ZM11.8904 11.2406C11.186 12.0133 10.7964 13.0216 10.7982 14.0671C10.7965 15.1121 11.1861 16.1198 11.8904 16.8918L12.9263 15.9506C12.4575 15.435 12.1979 14.7637 12.1988 14.0662C12.1988 13.3415 12.4744 12.6806 12.9263 12.1837L11.8904 11.2415V11.2406ZM14.9991 12.6675C14.8122 12.6626 14.6262 12.6953 14.4521 12.7634C14.278 12.8316 14.1193 12.934 13.9854 13.0645C13.8515 13.195 13.745 13.351 13.6724 13.5233C13.5997 13.6955 13.5623 13.8806 13.5623 14.0676C13.5623 14.2546 13.5997 14.4397 13.6724 14.612C13.745 14.7842 13.8515 14.9402 13.9854 15.0707C14.1193 15.2012 14.278 15.3036 14.4521 15.3718C14.6262 15.44 14.8122 15.4726 14.9991 15.4678C15.3642 15.4583 15.7111 15.3067 15.966 15.0451C16.2209 14.7836 16.3635 14.4328 16.3635 14.0676C16.3635 13.7024 16.2209 13.3517 15.966 13.0901C15.7111 12.8286 15.3642 12.6769 14.9991 12.6675Z" fill="url(#paint2_linear_205_3029)"/> </g> </g> </g> </g> <g id="Group 2136637016"> <g id="路径"> <g filter="url(#filter1_i_205_3029)"> <path fill-rule="evenodd" clip-rule="evenodd" d="M14.959 36C12.4796 36 10.4713 36.8438 10.4713 37.875C10.4713 38.9062 12.4796 39.75 14.959 39.75C17.4385 39.75 19.4468 38.9062 19.4468 37.875C19.4468 36.8438 17.4385 36 14.959 36Z" fill="#159DAD" fill-opacity="0.588235"/> </g> <path fill-rule="evenodd" clip-rule="evenodd" d="M14.959 36C12.4796 36 10.4713 36.8438 10.4713 37.875C10.4713 38.9062 12.4796 39.75 14.959 39.75C17.4385 39.75 19.4468 38.9062 19.4468 37.875C19.4468 36.8438 17.4385 36 14.959 36Z" stroke="#01DEF7" stroke-width="0.4"/> </g> <path id="路径_2" opacity="0.5" fill-rule="evenodd" clip-rule="evenodd" d="M14.9591 33.75C6.6942 33.75 0 35.598 0 37.875C0 40.152 6.6942 42 14.9591 42C23.224 42 29.9182 40.152 29.9182 37.875C29.9182 35.598 23.224 33.75 14.9591 33.75V33.75Z" stroke="#01DEF7" stroke-width="0.6"/> <path id="路径_3" fill-rule="evenodd" clip-rule="evenodd" d="M14.9591 35.25C9.58694 35.25 5.23572 36.4225 5.23572 37.875C5.23572 39.3275 9.58694 40.5 14.9591 40.5C20.3313 40.5 24.6825 39.3275 24.6825 37.875C24.6825 36.4225 20.3313 35.25 14.9591 35.25V35.25Z" stroke="#01DEF7" stroke-width="0.6"/> <path id="路径_4" fill-rule="evenodd" clip-rule="evenodd" d="M14.2111 31.5V37.5H15.707V31.5H14.2111Z" fill="url(#paint3_linear_205_3029)"/> </g> </g> <defs> <filter id="filter0_i_205_3029" x="0.0408936" y="0" width="29.9591" height="29.9591" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> <feFlood flood-opacity="0" result="BackgroundImageFix"/> <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> <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/> <feGaussianBlur stdDeviation="4.5"/> <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> <feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/> <feBlend mode="overlay" in2="shape" result="effect1_innerShadow_205_3029"/> </filter> <filter id="filter1_i_205_3029" x="10.2714" y="35.8" width="9.37537" height="5.1499" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> <feFlood flood-opacity="0" result="BackgroundImageFix"/> <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> <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="1"/> <feGaussianBlur stdDeviation="0.5"/> <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> <feColorMatrix type="matrix" values="0 0 0 0 0.005478 0 0 0 0 0.0928216 0 0 0 0 0.379808 0 0 0 0.239216 0"/> <feBlend mode="normal" in2="shape" result="effect1_innerShadow_205_3029"/> </filter> <linearGradient id="paint0_linear_205_3029" x1="15.0204" y1="0" x2="15.0204" y2="29.9591" gradientUnits="userSpaceOnUse"> <stop stop-color="white" stop-opacity="0"/> <stop offset="1" stop-color="white"/> </linearGradient> <linearGradient id="paint1_linear_205_3029" x1="15.0204" y1="0" x2="15.0204" y2="29.9591" gradientUnits="userSpaceOnUse"> <stop stop-color="white" stop-opacity="0"/> <stop offset="1" stop-color="white"/> </linearGradient> <linearGradient id="paint2_linear_205_3029" x1="14.9991" y1="21.959" x2="14.9991" y2="9.3562" gradientUnits="userSpaceOnUse"> <stop stop-color="#ABF3FB"/> <stop offset="1" stop-color="#FCFEFF"/> </linearGradient> <linearGradient id="paint3_linear_205_3029" x1="17.2029" y1="37.5" x2="17.2029" y2="31.5" gradientUnits="userSpaceOnUse"> <stop stop-color="#01DEF7" stop-opacity="0.01"/> <stop offset="1" stop-color="#01DEF7"/> </linearGradient> <clipPath id="clip0_205_3029"> <rect width="15" height="15" fill="white" transform="translate(7.5 8.25)"/> </clipPath> <clipPath id="clip1_205_3029"> <rect width="15" height="15" fill="white" transform="matrix(-1 0 0 1 22.5 8.25)"/> </clipPath> </defs> </svg> applications/drone-command/src/assets/images/dataCockpit/device-zhd.svg
New file @@ -0,0 +1,63 @@ <svg width="40" height="56" viewBox="0 0 40 56" fill="none" xmlns="http://www.w3.org/2000/svg"> <g id="Group 2136637022"> <g id="Group 2136637020"> <path id="路径" opacity="0.5" fill-rule="evenodd" clip-rule="evenodd" d="M20 45.7333C8.95 45.7333 0 48.033 0 50.8666C0 53.7002 8.95 55.9999 20 55.9999C31.05 55.9999 40 53.7002 40 50.8666C40 48.033 31.05 45.7333 20 45.7333V45.7333Z" stroke="#1EF9FD" stroke-width="0.6"/> <path id="路径_2" fill-rule="evenodd" clip-rule="evenodd" d="M20 48C12.8175 48 7 49.34 7 51C7 52.66 12.8175 54 20 54C27.1825 54 33 52.66 33 51C33 49.34 27.1825 48 20 48V48Z" stroke="#1EF9FD" stroke-width="0.6"/> <path id="路径_3" fill-rule="evenodd" clip-rule="evenodd" d="M19 42V50H21V42H19Z" fill="url(#paint0_linear_201_2906)"/> <g id="路径_4"> <g filter="url(#filter0_i_201_2906)"> <path fill-rule="evenodd" clip-rule="evenodd" d="M20 49C16.685 49 14 49.9 14 51C14 52.1 16.685 53 20 53C23.315 53 26 52.1 26 51C26 49.9 23.315 49 20 49Z" fill="#3DB4C2" fill-opacity="0.588235"/> </g> <path fill-rule="evenodd" clip-rule="evenodd" d="M20 49C16.685 49 14 49.9 14 51C14 52.1 16.685 53 20 53C23.315 53 26 52.1 26 51C26 49.9 23.315 49 20 49Z" stroke="#02E3FC" stroke-width="0.4"/> </g> </g> <g id="Frame 2136637015"> <g id="Group 2136637019"> <g id="Group 2136637018"> <g id="Group 2136637017"> <path id="形状_1" fill-rule="evenodd" clip-rule="evenodd" d="M21.1865 37.8053C20.8879 37.9788 20.5662 38.0656 20.2213 38.0656C19.8764 38.0656 19.5547 37.9788 19.2562 37.8053L5.40778 29.76C5.10909 29.5861 4.87354 29.349 4.70118 29.0486C4.52881 28.7482 4.44263 28.4247 4.44263 28.078V11.9873C4.44256 11.6406 4.52875 11.317 4.70114 11.0166C4.87351 10.7163 5.10906 10.4792 5.40778 10.3056L19.2562 2.26025C19.5547 2.08674 19.8764 2 20.2213 2C20.5662 2 20.8879 2.08674 21.1865 2.26025L35.0349 10.3056C35.3335 10.4792 35.569 10.7161 35.7414 11.0165C35.9138 11.3169 36 11.6405 36 11.9873V28.0793C35.9997 28.4258 35.9134 28.7491 35.741 29.0493C35.5687 29.3494 35.3333 29.5863 35.0349 29.76L21.1865 37.8053Z" fill="url(#paint1_linear_201_2906)" stroke="url(#paint2_linear_201_2906)" stroke-width="3"/> <path id="形状_1_拷贝_2" opacity="0.3" fill-rule="evenodd" clip-rule="evenodd" d="M21.3504 35.512C21.0899 35.6631 20.8091 35.7387 20.5082 35.7387C20.2072 35.7387 19.9264 35.6631 19.666 35.512L7.57987 28.5045C7.31925 28.3533 7.11374 28.1469 6.96331 27.8854C6.81289 27.6239 6.73767 27.3422 6.73767 27.0403V13.0253C6.7377 12.7234 6.81291 12.4417 6.96334 12.1801C7.11377 11.9186 7.31928 11.7123 7.57987 11.5611L19.666 4.55336C19.9265 4.4023 20.2072 4.32678 20.5082 4.32678C20.8091 4.32678 21.0898 4.4023 21.3504 4.55336L33.4364 11.5611C33.6971 11.7123 33.9026 11.9187 34.053 12.1802C34.2034 12.4417 34.2787 12.7234 34.2787 13.0253V27.0403C34.2786 27.3422 34.2034 27.6239 34.053 27.8854C33.9026 28.147 33.697 28.3533 33.4364 28.5045L21.3504 35.512Z" fill="url(#paint3_linear_201_2906)"/> </g> </g> <g id="Group 2136637018_2"> <g id="Group 2136637017_2"> <path id="Vector" d="M23.3913 19.6115C23.7642 19.9799 24.3236 19.9799 24.6966 19.6115L27.4937 16.8484C27.8667 16.48 27.8667 15.9273 27.4937 15.5589L24.6966 12.7958C24.3236 12.4274 23.7642 12.4274 23.3913 12.7958L20.5941 15.5589C20.2212 15.9273 20.2212 16.48 20.5941 16.8484L23.3913 19.6115ZM18.7294 12.7432H13.6146C13.1085 12.7432 12.6823 13.1643 12.6823 13.6642V18.7431C12.6823 19.243 13.1085 19.6641 13.6146 19.6641H18.756C19.2622 19.6641 19.6884 19.243 19.6884 18.7431V13.6642C19.6618 13.1643 19.2355 12.7432 18.7294 12.7432ZM18.7294 20.5851H13.6146C13.1085 20.5851 12.6823 21.0062 12.6823 21.5061V26.585C12.6823 27.085 13.1085 27.506 13.6146 27.506H18.756C19.2622 27.506 19.6884 27.085 19.6884 26.585V21.5061C19.6618 21.0062 19.2355 20.5851 18.7294 20.5851ZM26.6679 20.5851H21.5265C21.0204 20.5851 20.5941 21.0062 20.5941 21.5061V26.585C20.5941 27.085 21.0204 27.506 21.5265 27.506H26.6679C27.1741 27.506 27.6003 27.085 27.6003 26.585V21.5061C27.6003 21.0062 27.1741 20.5851 26.6679 20.5851Z" fill="url(#paint4_linear_201_2906)"/> </g> </g> </g> </g> </g> <defs> <filter id="filter0_i_201_2906" x="13.8" y="48.8" width="12.3999" height="5.3999" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> <feFlood flood-opacity="0" result="BackgroundImageFix"/> <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> <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="1"/> <feGaussianBlur stdDeviation="0.5"/> <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> <feColorMatrix type="matrix" values="0 0 0 0 0.005478 0 0 0 0 0.0928216 0 0 0 0 0.379808 0 0 0 0.239216 0"/> <feBlend mode="normal" in2="shape" result="effect1_innerShadow_201_2906"/> </filter> <linearGradient id="paint0_linear_201_2906" x1="23" y1="50" x2="23" y2="42" gradientUnits="userSpaceOnUse"> <stop stop-color="#02E3FC" stop-opacity="0.01"/> <stop offset="1" stop-color="#01F7F7"/> </linearGradient> <linearGradient id="paint1_linear_201_2906" x1="35.9969" y1="38.0655" x2="35.9969" y2="2.00703" gradientUnits="userSpaceOnUse"> <stop stop-color="#08393C"/> <stop offset="0.994" stop-color="#007874"/> <stop offset="1" stop-color="#007874"/> </linearGradient> <linearGradient id="paint2_linear_201_2906" x1="35.9969" y1="38.0655" x2="35.9969" y2="2.00703" gradientUnits="userSpaceOnUse"> <stop stop-color="#1A6B6C"/> <stop offset="1" stop-color="#C3FFFE"/> </linearGradient> <linearGradient id="paint3_linear_201_2906" x1="34.2787" y1="35.7411" x2="34.2787" y2="4.32907" gradientUnits="userSpaceOnUse"> <stop stop-color="#0C656E" stop-opacity="0.01"/> <stop offset="1"/> </linearGradient> <linearGradient id="paint4_linear_201_2906" x1="20.2278" y1="12.5195" x2="20.2278" y2="27.506" gradientUnits="userSpaceOnUse"> <stop stop-color="#4AB8B5"/> <stop offset="1" stop-color="#DAFAFB"/> </linearGradient> </defs> </svg> applications/drone-command/src/views/basicManage/deviceScrap/index.vue
@@ -2,22 +2,45 @@ <basic-container> <el-form ref="queryParamsRef" :model="searchParams" class="ztzf-page-history-search"> <el-form-item label="设备名称" prop="deviceName"> <el-input class="ztzf-data-cockpit-search-input" v-model="searchParams.deviceName" placeholder="请输入" clearable @clear="handleSearch" /> <el-input class="ztzf-data-cockpit-search-input" v-model="searchParams.deviceName" placeholder="请输入" clearable @clear="handleSearch" /> </el-form-item> <el-form-item label="设备类型" prop="deviceType"> <el-select class="ztzf-data-cockpit-select" popper-class="ztzf-data-cockpit-select-popper" v-model="searchParams.deviceType" placeholder="请选择" clearable @change="handleSearch"> <el-option v-for="item in dictObj.deviceType" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" /> <el-select class="ztzf-data-cockpit-select" popper-class="ztzf-data-cockpit-select-popper" v-model="searchParams.deviceType" placeholder="请选择" clearable @change="handleSearch" > <el-option v-for="item in dictObj.deviceType" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" /> </el-select> </el-form-item> <el-form-item label="所属部门" prop="belongDept"> <el-tree-select class="ztzf-data-cockpit-select" popper-class="ztzf-data-cockpit-tree-select-popper" v-model="searchParams.belongDept" :data="deptTree" :props="treeProps" node-key="id" check-strictly clearable @change="handleSearch" /> <el-tree-select class="ztzf-data-cockpit-select" popper-class="ztzf-data-cockpit-tree-select-popper" v-model="searchParams.belongDept" :data="deptTree" :props="treeProps" node-key="id" check-strictly clearable @change="handleSearch" /> </el-form-item> <el-form-item class="history-search-actions"> @@ -42,7 +65,11 @@ <el-table-column prop="source" show-overflow-tooltip label="来源" /> <el-table-column prop="belongDeptName" show-overflow-tooltip label="所属部门" /> <el-table-column prop="charger" show-overflow-tooltip label="负责人" /> <el-table-column prop="scrapTime" show-overflow-tooltip label="报废时间" /> <el-table-column prop="scrapTime" show-overflow-tooltip label="报废时间"> <template v-slot="{ row }"> {{dayjs(row.scrapTime).format('YYYY-MM-DD')}} </template> </el-table-column> <el-table-column prop="scrapReason" show-overflow-tooltip label="报废原因" /> <el-table-column prop="disposeWay" show-overflow-tooltip label="处置方式" /> <el-table-column label="操作" class-name="operation-btns"> @@ -54,9 +81,14 @@ </div> <div class="ztzf-table-pagination"> <el-pagination popper-class="ztzf-data-cockpit-select-popper" v-model:current-page="searchParams.current" v-model:page-size="searchParams.size" layout="total, prev, pager, next, sizes" :total="total" @change="getList" /> <el-pagination popper-class="ztzf-data-cockpit-select-popper" v-model:current-page="searchParams.current" v-model:page-size="searchParams.size" layout="total, prev, pager, next, sizes" :total="total" @change="getList" /> </div> </div> @@ -73,6 +105,7 @@ import FormDiaLog from './FormDiaLog.vue' import MaintenanceDiaLog from '@/views/basicManage/maintainRecord/MaintenanceDiaLog.vue' import { fwDeviceScrapPageApi } from '@/views/basicManage/deviceStock/fwDeviceScrapApi' import dayjs from 'dayjs' const initSearchParams = () => ({ deviceName: '', // 设备名称 @@ -106,7 +139,7 @@ provide('planCycleOptions', planCycleOptions) // 获取列表 async function getList () { async function getList() { loading.value = true try { const res = await fwDeviceScrapPageApi(searchParams.value) @@ -118,43 +151,43 @@ } // 查询 function handleSearch () { function handleSearch() { searchParams.value.current = 1 getList() } // 重置查询 function resetForm () { function resetForm() { queryParamsRef.value?.resetFields() searchParams.value.current = 1 getList() } // 查看 function handleView (row) { function handleView(row) { dialogRef.value?.open({ mode: 'view', row: { ...row } }) } // 获取字典 function getDictList () { function getDictList() { getDictionaryByCode('deviceType,deviceAtt').then(res => { dictObj.value = res.data.data }) } // 获取部门树 function getDeptTreeFun () { function getDeptTreeFun() { getDeptTree().then(res => { deptTree.value = res.data.data }) } // 新增 function handleAdd () { function handleAdd() { dialogRef.value?.open({ mode: 'add' }) } function getPlanCycleLabel (row) { function getPlanCycleLabel(row) { const item = planCycleOptions.find(option => option.value === row.planCycleType) return item?.label + '-' + row.planCycleValue.join(',') } applications/drone-command/src/views/basicManage/deviceStock/DeviceScrapDiaLog.vue
@@ -16,7 +16,7 @@ <el-form-item label="报废时间" prop="scrapTime"> <el-date-picker class="ztzf-data-cockpit-date-picker" popper-class="ztzf-data-cockpit-date-picker-popper" v-model="formData.scrapTime" type="date" type="datetime" placeholder="选择日期" value-format="YYYY-MM-DD HH:mm:ss" clearable applications/drone-command/src/views/basicManage/deviceStock/index.vue
@@ -48,21 +48,6 @@ @change="handleSearch" /> </el-form-item> <el-form-item label="时间"> <el-date-picker popper-class="ztzf-data-cockpit-date-picker-popper" class="ztzf-data-cockpit-date-picker" v-model="dateRange" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" value-format="YYYY-MM-DD HH:mm:ss" @change="handleSearch" /> </el-form-item> <el-form-item class="history-search-actions"> <el-button :icon="RefreshRight" @click="resetForm"></el-button> <el-button class="search-btn" :icon="Search" @click="handleSearch"></el-button> @@ -71,7 +56,6 @@ <div class="ztzf-table-toolbar"> <el-button :icon="Plus" color="#284FE3" type="primary" @click="handleAdd">设备建档</el-button> <el-button :icon="Download" color="#1A2652" type="primary" @click="exportFile" :loading="exportLoading">导出</el-button> <!-- <el-button type="danger" :disabled="!selectedIds.length" @click="handleDelete()">删除</el-button>--> </div> @@ -91,7 +75,7 @@ <el-table-column prop="manufacturer" show-overflow-tooltip width="130" label="生产厂商" /> <el-table-column prop="createTime" show-overflow-tooltip width="96" label="入库时间"> <template v-slot="{ row }"> {{ formatDateToSlash(row.createTime) }} {{ dayjs(row.createTime).format('YYYY-MM-DD') }} </template> </el-table-column> <el-table-column prop="source" show-overflow-tooltip width="112" label="来源" /> @@ -147,6 +131,7 @@ import DeviceChart1 from '@/views/basicManage/deviceStock/DeviceChart1.vue' import DeviceChart2 from '@/views/basicManage/deviceStock/DeviceChart2.vue' import DeviceChart3 from '@/views/basicManage/deviceStock/DeviceChart3.vue' import dayjs from 'dayjs' const initSearchParams = () => ({ deviceName: '', // 设备名称 applications/drone-command/src/views/basicManage/maintainRecord/MaintenanceDiaLog.vue
@@ -1,6 +1,11 @@ <template> <el-dialog class="ztzf-page-view-dialog" v-model="visible" :title="titleEnum[dialogMode]" @closed="handleClosed" destroy-on-close> <el-dialog class="ztzf-page-view-dialog" v-model="visible" :title="titleEnum[dialogMode]" @closed="handleClosed" destroy-on-close > <div class="detail-container" v-if="dialogReadonly"> <div class="detail-title">设备详情</div> <el-row> @@ -14,8 +19,15 @@ </el-col> </el-row> </div> <el-form class="dialog-form" v-else ref="formRef" :model="formData" :rules="rules" :disabled="dialogReadonly" label-width="110px"> <el-form class="dialog-form" v-else ref="formRef" :model="formData" :rules="rules" :disabled="dialogReadonly" label-width="110px" > <el-row> <el-col :span="24"> <el-form-item label="维护内容" prop="maintainContent"> @@ -47,7 +59,7 @@ class="ztzf-data-cockpit-date-picker" popper-class="ztzf-data-cockpit-date-picker-popper" v-model="formData.maintainTime" type="date" type="datetime" placeholder="选择日期" value-format="YYYY-MM-DD HH:mm:ss" clearable @@ -102,7 +114,7 @@ const deviceList = ref([]) // 设备列表 const dialogReadonly = computed(() => dialogMode.value === 'view') const titleEnum = ref({ edit: '编辑', view: '查看', add: '维护计划' }) const titleEnum = ref({ edit: '维护', view: '查看', add: '维护计划' }) const planCycleLabel = computed(() => { const item = planCycleOptions.find(option => option.value === formData.value.planCycleType) applications/drone-command/src/views/detectionCountermeasure/detectionRange/DetectionRangeDialog.vue
@@ -1,6 +1,12 @@ <template> <el-dialog v-model="visible" class="ztzf-page-map-view-dialog" :show-close="false" :close-on-click-modal="false" destroy-on-close @closed="handleClosed"> <el-dialog v-model="visible" class="ztzf-page-map-view-dialog" :show-close="false" :close-on-click-modal="false" destroy-on-close @closed="handleClosed" > <div class="dialog-container"> <div class="left-container"> <div class="leftMap ztzf-cesium" id="detectionRangeMap"></div> @@ -32,52 +38,90 @@ <div class="val">{{ formData.deviceModel || '-' }}</div> </el-col> <el-col :span="24"> <div class="label">覆盖范围</div> <div class="label">覆盖范围(m)</div> <div class="val">{{ formatRange(formData.effectiveRangeKm) }}</div> </el-col> </el-row> </div> <el-form v-else ref="formRef" class="dialog-form" :model="formData" :rules="rules" label-width="96px"> <el-form v-else ref="formRef" class="dialog-form" :model="formData" :rules="rules" label-width="110px"> <el-form-item label="侦测设备" prop="deviceId"> <el-select class="ztzf-data-cockpit-select" popper-class="ztzf-data-cockpit-select-popper" v-model="formData.deviceId" placeholder="请选择" clearable @change="handleDeviceChange"> <el-option v-for="item in deviceOptions" :key="item.value" :label="item.label" :value="item.value" /> <el-select class="ztzf-data-cockpit-select" popper-class="ztzf-data-cockpit-select-popper" v-model="formData.deviceId" placeholder="请选择" clearable @change="handleDeviceChange" > <el-option v-for="item in deviceOptions" :key="item.value" :label="item.label" :value="item.value" /> </el-select> </el-form-item> <el-form-item label="设备类型" prop="deviceType"> <el-select class="ztzf-data-cockpit-select" popper-class="ztzf-data-cockpit-select-popper" v-model="formData.deviceType" placeholder="请选择" clearable> <el-option v-for="item in dictObj.deviceType" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" /> <el-select class="ztzf-data-cockpit-select" popper-class="ztzf-data-cockpit-select-popper" v-model="formData.deviceType" placeholder="请选择" clearable > <el-option v-for="item in dictObj.deviceType" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" /> </el-select> </el-form-item> <el-form-item label="设备位置" prop="deployLocation"> <el-input class="ztzf-data-cockpit-search-input" v-model="formData.deployLocation" placeholder="请选择位置"> <el-input class="ztzf-data-cockpit-search-input" v-model="formData.deployLocation" disabled placeholder="请选择位置" > <template #suffix> <span class="suffix-action">地图选点</span> </template> </el-input> </el-form-item> <el-form-item label="设备编号" prop="deviceSn"> <el-input class="ztzf-data-cockpit-search-input" v-model="formData.deviceSn" placeholder="请输入" clearable /> <el-input class="ztzf-data-cockpit-search-input" v-model="formData.deviceSn" placeholder="请输入" clearable /> </el-form-item> <el-form-item label="设备型号" prop="deviceModel"> <el-input class="ztzf-data-cockpit-search-input" v-model="formData.deviceModel" placeholder="请输入" clearable /> <el-input class="ztzf-data-cockpit-search-input" v-model="formData.deviceModel" placeholder="请输入" clearable /> </el-form-item> <el-form-item label="覆盖范围" prop="effectiveRangeKm"> <el-input-number class="ztzf-data-cockpit-search-input" v-model="formData.effectiveRangeKm" :min="0" :precision="2" :controls="false" placeholder="请输入" /> <el-form-item label="覆盖范围(m)" prop="effectiveRangeKm"> <el-input-number class="ztzf-data-cockpit-search-input" v-model="formData.effectiveRangeKm" :min="0" :precision="2" :controls="false" placeholder="请输入" /> </el-form-item> </el-form> <div class="footer"> <el-button color="#2B2B4C" @click="handleCancel">{{ dialogReadonly ? '关闭' : '取消' }}</el-button> <el-button color="#284FE3" v-if="!dialogReadonly" type="primary" :loading="submitting" :disabled="submitting" @click="handleSubmit"> <el-button color="#284FE3" v-if="!dialogReadonly" type="primary" :loading="submitting" :disabled="submitting" @click="handleSubmit" > 保存 </el-button> </div> @@ -87,7 +131,7 @@ </template> <script setup> import { computed, inject, nextTick, ref } from 'vue' import { computed, inject, nextTick, ref, watch } from 'vue' import { ElMessage } from 'element-plus' import { detectionRangeDetailApi, @@ -96,6 +140,7 @@ } from '@/api/detectionCountermeasure/detectionRange' import { PublicCesium } from '@/utils/cesium/publicCesium' import * as Cesium from 'cesium' import deviceZcImg from '@/assets/images/dataCockpit/device-zc.svg' const initForm = () => ({ deviceId: '', // 侦测设备ID @@ -111,13 +156,14 @@ const emit = defineEmits(['success']) const formRef = ref(null) // 表单实例 const formData = ref(initForm()) // 表单数据 const visible = ref(false) // 弹框显隐 const visible = defineModel() // 弹框显隐 const dialogMode = ref('add') // 弹框模式 const submitting = ref(false) // 提交中 const deviceOptions = ref([]) const dialogReadonly = computed(() => dialogMode.value === 'view') let viewer let redPointEntity let rangeCircleEntity const formTitle = computed(() => { if (dialogMode.value === 'edit') { return '编辑侦测范围' @@ -135,7 +181,7 @@ effectiveRangeKm: [{ required: true, message: '请输入覆盖范围', trigger: ['blur', 'change'] }], } function handleDeviceChange (value) { function handleDeviceChange(value) { const target = deviceOptions.value.find(item => item.value === value) const raw = target?.raw if (!raw) return @@ -148,24 +194,24 @@ raw.deployLocation ?? raw.address ?? raw.location ?? raw.deployAddress ?? formData.value.deployLocation } function getDeviceTypeLabel (value) { function getDeviceTypeLabel(value) { const list = dictObj?.deviceType ?? [] const target = list.find(item => item.dictKey === value) return target?.dictValue ?? value ?? '-' } function formatRange (value) { function formatRange(value) { if (value == null || value === '') return '-' return `${value}km` return `${value}` } // 关闭弹框 function handleCancel () { function handleCancel() { visible.value = false } // 提交新增/编辑 async function handleSubmit () { async function handleSubmit() { const isValid = await formRef.value?.validate().catch(() => false) if (!isValid) return submitting.value = true @@ -186,13 +232,13 @@ } // 加载详情 async function loadDetail (id) { async function loadDetail(id) { if (!id) return null const res = await detectionRangeDetailApi({ id }) return res?.data?.data ?? null } async function loadDeviceOptions () { async function loadDeviceOptions() { const res = await detectionRangePageApi({ current: 1, size: 200, @@ -207,34 +253,38 @@ } // 关闭后重置 function handleClosed () { function handleClosed() { formData.value = initForm() clearRangeCircle() viewer = null redPointEntity = null rangeCircleEntity = null } function setMapPoint (longitude, latitude) { function setMapPoint(longitude, latitude) { if (!viewer || longitude == null || latitude == null) return if (!redPointEntity) { redPointEntity = viewer.entities.add({ position: Cesium.Cartesian3.fromDegrees(longitude, latitude), point: { color: Cesium.Color.RED, pixelSize: 10, billboard: { image: deviceZcImg, // 这里替换为你的图片路径或变量 deviceZcImg width: 30, // 可选:设置图片宽度 height: 42, // 可选:设置图片高度 verticalOrigin: Cesium.VerticalOrigin.BOTTOM, // 设置图片底部对齐坐标点 }, label: { text: `${longitude.toFixed(6)}, ${latitude.toFixed(6)}`, font: '14px', font: '16px', fillColor: Cesium.Color.WHITE, backgroundColor: Cesium.Color.BLACK.withAlpha(0.45), backgroundPadding: new Cesium.Cartesian2(5, 5), pixelOffset: new Cesium.Cartesian2(0, -20), showBackground: true, style: Cesium.LabelStyle.FILL_AND_OUTLINE, horizontalOrigin: Cesium.HorizontalOrigin.CENTER, verticalOrigin: Cesium.VerticalOrigin.CENTER, outlineWidth: 1, outlineColor: Cesium.Color.WHITE, pixelOffset: new Cesium.Cartesian2(0, -60), eyeOffset: new Cesium.Cartesian3(0, 0, -20), }, }) @@ -242,9 +292,51 @@ redPointEntity.position = Cesium.Cartesian3.fromDegrees(longitude, latitude) redPointEntity.label.text = `${longitude.toFixed(6)}, ${latitude.toFixed(6)}` } updateRangeCircle(longitude, latitude, formData.value.effectiveRangeKm) } function initMap () { function parseDeployLocation(value) { if (!value) return null const [longitude, latitude] = value.split(',').map(item => Number(item.trim())) if (Number.isNaN(longitude) || Number.isNaN(latitude)) return null return { longitude, latitude } } function clearRangeCircle() { if (viewer && rangeCircleEntity) { viewer.entities.remove(rangeCircleEntity) } } function updateRangeCircle(longitude, latitude, range) { if (!viewer || longitude == null || latitude == null) return const rangeMeters = Number(range) if (!Number.isFinite(rangeMeters) || rangeMeters <= 0) { clearRangeCircle() rangeCircleEntity = null return } const position = Cesium.Cartesian3.fromDegrees(longitude, latitude) if (!rangeCircleEntity) { rangeCircleEntity = viewer.entities.add({ position, ellipse: { semiMajorAxis: rangeMeters, semiMinorAxis: rangeMeters, material: Cesium.Color.fromCssColorString('#6b9ca8').withAlpha(0.6), outline: true, outlineColor: Cesium.Color.fromCssColorString('#6b9ca8').withAlpha(0.6), heightReference: Cesium.HeightReference.CLAMP_TO_GROUND, }, }) return } rangeCircleEntity.position = position rangeCircleEntity.ellipse.semiMajorAxis = rangeMeters rangeCircleEntity.ellipse.semiMinorAxis = rangeMeters } function initMap() { if (viewer) return const publicCesiumInstance = new PublicCesium({ dom: 'detectionRangeMap', @@ -259,7 +351,7 @@ viewer = publicCesiumInstance.getViewer() } function handleMapClick (click) { function handleMapClick(click) { const pos = click.position const cartesian3 = viewer.camera.pickEllipsoid(pos, viewer.scene.globe.ellipsoid) if (!cartesian3) return @@ -271,9 +363,8 @@ } // 打开弹框 async function open ({ mode, row } = {}) { async function open({ mode, row } = {}) { dialogMode.value = mode || 'add' visible.value = true await nextTick() initMap() if (dialogMode.value === 'add') { @@ -286,6 +377,7 @@ const detail = await loadDetail(row?.id) formData.value = detail ?? row } formData.value.deployLocation = `${formData.value.longitude}, ${formData.value.latitude}` formData.value.deviceId = formData.value.id ?? formData.value.deviceId await loadDeviceOptions() const currentName = formData.value.deviceName @@ -295,14 +387,24 @@ } const location = formData.value.deployLocation if (location) { const [longitude, latitude] = location.split(',').map(item => Number(item.trim())) if (!Number.isNaN(longitude) && !Number.isNaN(latitude)) { setMapPoint(longitude, latitude) const parsed = parseDeployLocation(location) if (parsed) { setMapPoint(parsed.longitude, parsed.latitude) viewer.flyTo(redPointEntity, { duration: 0 }) } } } defineExpose({ open }) watch( () => formData.value.effectiveRangeKm, value => { const parsed = parseDeployLocation(formData.value.deployLocation) if (!parsed) return updateRangeCircle(parsed.longitude, parsed.latitude, value) } ) </script> <style scoped lang="scss"></style> applications/drone-command/src/views/detectionCountermeasure/detectionRange/index.vue
@@ -1,7 +1,7 @@ <template> <basic-container> <el-form ref="queryParamsRef" :model="searchParams" class="ztzf-page-history-search"> <el-form-item label="名称" prop="deviceName"> <el-form-item label="设备名称" prop="deviceName"> <el-input class="ztzf-data-cockpit-search-input" v-model="searchParams.deviceName" @@ -11,7 +11,7 @@ /> </el-form-item> <el-form-item label="类型" prop="deviceType"> <el-form-item label="设备类型" prop="deviceType"> <el-select class="ztzf-data-cockpit-select" popper-class="ztzf-data-cockpit-select-popper" @@ -55,7 +55,7 @@ </template> </el-table-column> <el-table-column prop="deviceModel" show-overflow-tooltip label="型号" /> <el-table-column show-overflow-tooltip label="覆盖范围"> <el-table-column show-overflow-tooltip label="覆盖范围(m)"> <template v-slot="{ row }"> {{ formatRange(row) }} </template> @@ -87,7 +87,7 @@ </div> </div> <DetectionRangeDialog ref="dialogRef" @success="getList" /> <DetectionRangeDialog ref="dialogRef" @success="getList" v-model="visible" v-if="visible" /> </basic-container> </template> <script setup> @@ -115,7 +115,7 @@ const dictObj = ref({ deviceType: [], // 设备类型 }) const visible = ref(false) provide('dictObj', dictObj) // 获取列表 @@ -145,17 +145,26 @@ // 新增 function handleAdd() { dialogRef.value?.open({ mode: 'add' }) visible.value = true nextTick(() => { dialogRef.value?.open({ mode: 'add' }) }) } // 查看 function handleView(row) { dialogRef.value?.open({ mode: 'view', row: { ...row } }) visible.value = true nextTick(() => { dialogRef.value?.open({ mode: 'view', row: { ...row } }) }) } // 编辑 function handleEdit(row) { dialogRef.value?.open({ mode: 'edit', row: { ...row } }) visible.value = true nextTick(() => { dialogRef.value?.open({ mode: 'edit', row: { ...row } }) }) } // 删除 @@ -179,20 +188,8 @@ } function formatDeployLocation(row) { if (!row) return '-' const location = row.deployLocation ?? row.address ?? row.location ?? row.deployAddress if (Array.isArray(location) && location.length) { return location.filter(value => value !== null && value !== undefined).join(',') } if (typeof location === 'string' && location.trim()) { return location } const longitude = row.deployLongitude ?? row.longitude const latitude = row.deployLatitude ?? row.latitude if (longitude != null || latitude != null) { return `${longitude ?? '-'},${latitude ?? '-'}` } return '-' if (!row.longitude || !row.latitude) return '' return `${row.longitude}, ${row.latitude}` } function formatRange(row) { applications/drone-command/src/views/detectionCountermeasure/deviceAppConfig/FormDiaLog.vue
@@ -45,8 +45,9 @@ </el-row> </div> <el-form v-else ref="formRef" :model="formData" :rules="rules" label-width="120px" class="dialog-form"> <el-form v-else ref="formRef" :model="formData" :rules="rules" label-width="120" class="dialog-form"> <el-row> <el-col :span="24"><h3 style="color: #ffffff">工作模式</h3></el-col> <el-col :span="12"> <el-form-item label="起始扇区" prop="startSector"> <el-input @@ -93,6 +94,7 @@ /> </el-form-item> </el-col> <el-col :span="24"><h3 style="color: #ffffff">工作模式</h3></el-col> <el-col :span="12"> <el-form-item label="伺服模式" prop="servoMode"> <el-select @@ -169,7 +171,7 @@ <script setup> import { computed, ref } from 'vue' import { ElMessage } from 'element-plus' import { fwDeviceConfigSubmitApi } from './deviceAppConfigApi' import { fwDeviceConfigDetailApi, fwDeviceConfigSubmitApi } from './deviceAppConfigApi' import { fieldRules } from '@ztzf/utils' const configKeys = [ @@ -204,7 +206,7 @@ const dialogMode = ref('view') // 弹框模式 const submitting = ref(false) // 提交中 const readonly = computed(() => dialogMode.value === 'view') const titleEnum = ref({ edit: '编辑', view: '查看' }) const titleEnum = ref({ edit: '配置接口', view: '查看' }) const searchModeOptions = [ { label: '0', value: '0' }, @@ -267,10 +269,18 @@ } } function loadingDetails() { fwDeviceConfigDetailApi({ deviceId: formData.value.deviceId }).then(res => { const configJson = res.data.data ? JSON.parse(res.data.data.configJson) : {} formData.value = { ...formData.value, ...configJson } }) } // 打开弹框 async function open({ mode, row } = {}) { dialogMode.value = mode || 'view' formData.value = { ...initForm(), deviceId: row.id } loadingDetails() } defineExpose({ open }) applications/drone-command/src/views/detectionCountermeasure/deviceAppConfig/index.vue
@@ -78,17 +78,17 @@ <el-table-column prop="manufacturer" show-overflow-tooltip label="厂商" /> <el-table-column prop="contactPhone" show-overflow-tooltip label="联系方式" /> <el-table-column prop="sceneName" show-overflow-tooltip label="所属场景" /> <el-table-column label="设置配置" class-name="operation-btns"> <el-table-column label="操作" class-name="operation-btns"> <template v-slot="{ row }"> <el-link @click="openForm('edit', row)" type="warning">配置接口</el-link> </template> </el-table-column> <el-table-column label="操作" class-name="operation-btns"> <!-- <el-table-column label="操作" class-name="operation-btns"> <template v-slot="{ row }"> <el-link @click="handleEdit(row)">编辑</el-link> <el-link @click="handleDelete(row)" type="danger">删除</el-link> </template> </el-table-column> </el-table-column>--> </el-table> </div> @@ -210,11 +210,8 @@ } function formatDeployLocation(row) { if (!row) return '' const longitude = row.deployLongitude ?? row.longitude const latitude = row.deployLatitude ?? row.latitude if (longitude == null || latitude == null) return '' return `${longitude}, ${latitude}` if (!row.longitude || !row.latitude) return '' return `${row.longitude}, ${row.latitude}` } onMounted(() => { applications/drone-command/src/views/detectionCountermeasure/taskSchedule/index.vue
@@ -15,11 +15,11 @@ </el-select> </el-form-item> <el-form-item label="设备状态" prop="deviceStatus"> <el-form-item label="设备状态" prop="status"> <el-select class="ztzf-data-cockpit-select" popper-class="ztzf-data-cockpit-select-popper" v-model="searchParams.deviceStatus" v-model="searchParams.status" placeholder="请选择" clearable @clear="handleSearch" @@ -34,7 +34,7 @@ </el-select> </el-form-item> <el-form-item label="设备编号" prop="deviceSn"> <el-form-item label="设备编码" prop="deviceSn"> <el-input class="ztzf-data-cockpit-search-input" v-model="searchParams.deviceSn" @@ -62,9 +62,9 @@ <el-table-column type="index" show-overflow-tooltip width="64" label="序号" /> <el-table-column prop="deviceName" show-overflow-tooltip width="140" label="设备名称" /> <el-table-column prop="deviceSn" show-overflow-tooltip width="140" label="设备编码" /> <el-table-column prop="deviceStatus" show-overflow-tooltip width="100" label="设备状态"> <el-table-column prop="status" show-overflow-tooltip width="100" label="设备状态"> <template v-slot="{ row }"> {{ getDictLabel(row.deviceStatus, dictObj.deviceStatus) }} {{ formatDeployLocation(row) }} </template> </el-table-column> <el-table-column prop="areaName" show-overflow-tooltip width="120" label="区域" /> @@ -127,7 +127,7 @@ // 初始化查询参数 const initSearchParams = () => ({ deviceId: '', // 设备名称 deviceStatus: '', // 设备状态 status: '', // 设备状态 deviceSn: '', // 设备编号 current: 1, // 当前页 size: 10, // 每页大小 @@ -157,7 +157,10 @@ } return row.dispatchStartTime || row.dispatchEndTime || '' } function formatDeployLocation(row) { if (!row.longitude || !row.latitude) return '' return `${row.longitude}, ${row.latitude}` } // 获取列表 async function getList() { loading.value = true applications/drone-command/src/views/recordManage/historyTracks/TrajectoryDiaLog.vue
@@ -1,6 +1,12 @@ <template> <el-dialog class="ztzf-page-map-view-dialog" v-model="visible" :show-close="false" :close-on-click-modal="false" @closed="handleClosed" destroy-on-close> <el-dialog class="ztzf-page-map-view-dialog" v-model="visible" :show-close="false" :close-on-click-modal="false" @closed="handleClosed" destroy-on-close > <div class="dialog-container"> <div class="left-container"> <div class="leftMap ztzf-cesium" id="leftMapContainer"></div> @@ -59,6 +65,7 @@ import { PublicCesium } from '@/utils/cesium/publicCesium' import * as Cesium from 'cesium' import { flyVisual } from '@/utils/cesium/mapUtil' import { ArrowLineMaterialProperty } from '@/utils/cesium/Material' const initForm = () => ({ droneName: '', @@ -84,12 +91,12 @@ }) // 关闭弹框 function handleCancel () { function handleCancel() { visible.value = false } // 加载详情 async function loadDetail () { async function loadDetail() { if (!formData.value.id) return const res = await fwDroneFlightRecordDetailApi({ id: formData.value.id }) const res1 = await fwDroneFlightRecordDetailPageApi({ flightRecordId: formData.value.id }) @@ -98,28 +105,35 @@ formData.value = res?.data?.data ?? {} } let arrowLineMaterialProperty = new ArrowLineMaterialProperty({ color: new Cesium.Color(128 / 255, 215 / 255, 255 / 255, 1), directionColor: new Cesium.Color(1, 1, 1, 1), outlineColor: new Cesium.Color(1, 1, 1, 1), outlineWidth: 0, speed: 5, }) // 角度转c3 function degreesToC3 ({ longitude, latitude, height = 0 }) { function degreesToC3({ longitude, latitude, height = 0 }) { return Cesium.Cartesian3.fromDegrees(longitude, latitude, height) } // 渲染航线 function drawFlightPath () { function drawFlightPath() { const positions = list.value.map(p => degreesToC3(p)) droneLineEntity && geometricSource.entities.remove(droneLineEntity) const color = Cesium.Color.fromCssColorString('#00D690') droneLineEntity = geometricSource.entities.add({ polyline: { width: 4, positions: positions, width: 3, material: new Cesium.PolylineOutlineMaterialProperty({ color }), material: arrowLineMaterialProperty, clampToGround: false, }, }) viewer.flyTo(droneLineEntity) viewer.flyTo(droneLineEntity, { duration: 0 }) } // 关闭后重置 function handleClosed () { function handleClosed() { formData.value = initForm() list.value = [] viewer = null @@ -128,7 +142,7 @@ } let viewer, geometricSource, droneLineEntity function initMap () { function initMap() { if (viewer) return const publicCesiumInstance = new PublicCesium({ dom: 'leftMapContainer', @@ -143,7 +157,7 @@ } // 打开弹框 async function open ({ mode, row } = {}) { async function open({ mode, row } = {}) { dialogMode.value = mode || 'add' visible.value = true await nextTick() applications/drone-command/src/views/recordManage/index.vue
File was deleted applications/mobile-web-view/package.json
@@ -77,7 +77,6 @@ "@vitejs/plugin-vue": "catalog:", "@vue/compiler-sfc": "catalog:", "postcss-pxtorem": "catalog:", "prettier": "catalog:", "sass": "catalog:", "terser": "catalog:", "unplugin-auto-import": "catalog:", applications/mobile-web-view/src/appPages/voiceCallDetail/index.vue
@@ -367,8 +367,6 @@ /* ---------------- 信令处理 ---------------- */ async function onSignal(msg) { console.log('1cesss',msg); if (!msg) return const t = (msg.type || '').toString() applications/task-work-order/package.json
@@ -72,7 +72,6 @@ "@vitejs/plugin-vue": "catalog:", "@vue/compiler-sfc": "catalog:", "postcss-pxtorem": "catalog:", "prettier": "catalog:", "sass": "catalog:", "terser": "catalog:", "unplugin-auto-import": "catalog:", uniapps/work-app/README.md
@@ -1,4 +1,4 @@ # 掌控智飞 # ``` npm install pnpm -g uniapps/work-app/package.json
@@ -2,7 +2,7 @@ "name": "work-app", "type": "module", "version": "1.5.0", "description": "掌控智飞", "description": "", "private": true, "author": { "name": "ztzf" uniapps/work-app/src/manifest.json
@@ -1,5 +1,5 @@ { "name" : "掌控智飞", "name" : "", "appid" : "__UNI__0981D7F", "description" : "", "versionName" : "1.0.0", uniapps/work-app/src/pages.json
@@ -66,7 +66,8 @@ { "path": "voiceCallDetail/index", "style": { "navigationBarTitleText": "通话详情" "navigationBarTitleText": "通话详情", "navigationStyle": "custom" } },