MissileMissionCard.vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <template>
  2. <el-form style="margin-top: 40px;padding: 0 40px" :model="local" disabled class="dense-form" label-width="110px" size="small">
  3. <el-row :gutter="16">
  4. <!--<el-col :span="12">-->
  5. <!-- <el-form-item label="任务目标类型">-->
  6. <!-- <el-select v-model="local.targetType" style="width:100%">-->
  7. <!-- <el-option label="对陆目标" value="land"/>-->
  8. <!-- <el-option label="对空目标" value="air"/>-->
  9. <!-- <el-option label="对海目标" value="sea"/>-->
  10. <!-- </el-select>-->
  11. <!-- </el-form-item>-->
  12. <!--</el-col>-->
  13. <el-col :span="span">
  14. <el-form-item label="总时间(s)">
  15. <el-input v-model.number="local.totalTime" :min="1" type="number"/>
  16. </el-form-item>
  17. </el-col>
  18. <el-col :span="span">
  19. <el-form-item label="攻击靶标">
  20. <el-input v-model.number="local.attackTheTarget"/>
  21. </el-form-item>
  22. </el-col>
  23. <el-col :span="span">
  24. <el-form-item label="射程/航程(km)">
  25. <el-input v-model.number="local.range" :min="1" type="number"/>
  26. </el-form-item>
  27. </el-col>
  28. <el-col :span="span">
  29. <el-form-item label="攻击目标方式">
  30. <el-input v-model.number="local.attackTargetMethod"/>
  31. </el-form-item>
  32. </el-col>
  33. <el-col :span="span">
  34. <el-form-item label="攻击目标经度">
  35. <el-input v-model="local.attackTargetLongitude" placeholder="lon,lat,alt(可选)"/>
  36. </el-form-item>
  37. </el-col>
  38. <el-col :span="span">
  39. <el-form-item label="攻击目标纬度">
  40. <el-input v-model="local.attackTargetLatitude" placeholder="lon,lat,alt(可选)"/>
  41. </el-form-item>
  42. </el-col>
  43. <!--<el-col :span="24">-->
  44. <!-- <el-form-item label="任务目标特性">-->
  45. <!-- <el-input v-model="local.targetDesc" :rows="3" placeholder="物理特性、防御能力等..." type="textarea"/>-->
  46. <!-- </el-form-item>-->
  47. <!--</el-col>-->
  48. </el-row>
  49. <div class="tool-row">
  50. <el-button type="primary" :disabled="false" @click="$emit('import-trajectory', local)">导入弹道轨迹</el-button>
  51. <!--<el-button type="text" @click="$emit('preview-trajectory', local.id)">-->
  52. <!-- 预览轨迹-->
  53. <!--</el-button>-->
  54. </div>
  55. <!--<el-card body-style="padding:0;" class="ui-card panel-card trajectory-placeholder" shadow="never">-->
  56. <!-- <div class="placeholder-content">-->
  57. <!-- <i class="el-icon-picture-outline placeholder-icon"></i>-->
  58. <!-- <p class="placeholder-text">轨迹预览</p>-->
  59. <!-- </div>-->
  60. <!--</el-card>-->
  61. </el-form>
  62. </template>
  63. <script>
  64. export default {
  65. name: 'MissileMissionCard',
  66. props: {
  67. span:{type:Number,default:12},
  68. /**
  69. * 使用 .sync:<MissileMissionCard :missile.sync="m" />
  70. * 结构示例:
  71. * { id, targetType, targetDesc, traj: { start, end, timeSec } }
  72. */
  73. missile: { type: Object, required: true }
  74. },
  75. data() {
  76. return {
  77. // 本地副本,避免直接改父级引用导致脏写
  78. local: this.clone(this.missile)
  79. };
  80. },
  81. watch: {
  82. },
  83. methods: {
  84. clone(o) { return JSON.parse(JSON.stringify(o || {})); }
  85. }
  86. };
  87. </script>
  88. <style scoped>
  89. /* 复用你在父页的卡片质感与占位风格 */
  90. .panel-card{
  91. background: linear-gradient(180deg, rgba(255,255,255,.04), rgba(255,255,255,.02)) !important;
  92. border: 1px solid rgba(255,255,255,.10) !important;
  93. border-radius: 14px !important;
  94. box-shadow: 0 8px 24px rgba(0,0,0,.28) !important;
  95. transition: box-shadow .25s ease, transform .25s ease, border-color .25s ease;
  96. overflow: hidden;
  97. }
  98. .panel-card:hover {
  99. transform: translateY(-1px);
  100. box-shadow: 0 14px 36px rgba(0,0,0,.34) !important;
  101. border-color: rgba(102,177,255,.28) !important;
  102. }
  103. .dense-form ::v-deep .el-form-item { margin-bottom: 8px; }
  104. .dense-form ::v-deep .el-form-item__label { color: var(--text-2); padding-right: 8px; }
  105. .dense-form ::v-deep .el-input__inner,
  106. .dense-form ::v-deep .el-textarea__inner,
  107. .dense-form ::v-deep .el-select .el-input__inner{
  108. background: rgba(255,255,255,.04);
  109. border: 1px solid rgba(255,255,255,.14);
  110. color: var(--text);
  111. }
  112. .dense-form ::v-deep .el-input__inner:focus,
  113. .dense-form ::v-deep .el-textarea__inner:focus{
  114. border-color: var(--accent);
  115. box-shadow: 0 0 0 3px rgba(102,177,255,.18);
  116. }
  117. .tool-row{
  118. text-align:right;
  119. margin-top:-6px;
  120. margin-bottom:8px;
  121. }
  122. .trajectory-placeholder{
  123. margin-top:8px; height:240px; display:flex; align-items:center; justify-content:center;
  124. border:1px dashed rgba(102,177,255,.28); border-radius:10px;
  125. background: linear-gradient(180deg, rgba(255,255,255,.03), rgba(255,255,255,.01));
  126. }
  127. .placeholder-content{ text-align:center; }
  128. .placeholder-icon{ font-size:40px; opacity:.9; }
  129. .placeholder-text{ font-size:14px; color: var(--text-2); }
  130. </style>