formPerfectSensor.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  1. <template>
  2. <div>
  3. <el-form ref="form" :model="form" :rules="rules" label-width="160px">
  4. <div class="inputBox flexBox">
  5. <span class="label">传感器ID</span>
  6. <div>{{ form.sensorCode }}</div>
  7. </div>
  8. <el-form-item label="传感器名称:" prop="sensorName">
  9. <el-input
  10. placeholder="请输入"
  11. maxlength="60"
  12. v-autoTrim="{ obj: form, key: 'sensorName' }"
  13. v-model="form.sensorName"
  14. >
  15. </el-input>
  16. </el-form-item>
  17. <el-form-item label="传感器描述:" prop="description">
  18. <el-input
  19. v-autoTrim="{
  20. obj: form,
  21. key: 'description',
  22. }"
  23. v-model="form.description"
  24. type="textarea"
  25. placeholder="请输入传感器描述"
  26. :autosize="{ minRows: 4, maxRows: 4 }"
  27. maxlength="200"
  28. ></el-input>
  29. </el-form-item>
  30. <div class="titlePanel">
  31. <div class="titlePanelBor">内参</div>
  32. </div>
  33. <el-form-item label="盲区距离(m):" prop="nearDistance">
  34. <el-input
  35. placeholder="请输入"
  36. maxlength="15"
  37. v-autoTrim="{ obj: form, key: 'nearDistance' }"
  38. v-model="form.nearDistance"
  39. >
  40. </el-input>
  41. </el-form-item>
  42. <el-form-item label="探测距离(m):" prop="farDistance">
  43. <el-input
  44. placeholder="请输入"
  45. maxlength="15"
  46. v-autoTrim="{ obj: form, key: 'farDistance' }"
  47. v-model="form.farDistance"
  48. @input="inputChange"
  49. >
  50. </el-input>
  51. </el-form-item>
  52. <el-form-item label="水平视场角左(deg):" prop="fovHLeft">
  53. <el-input
  54. placeholder="请输入"
  55. maxlength="15"
  56. v-autoTrim="{ obj: form, key: 'fovHLeft' }"
  57. v-model="form.fovHLeft"
  58. @input="inputChange"
  59. >
  60. </el-input>
  61. </el-form-item>
  62. <el-form-item label="水平视场角右(deg):" prop="fovHRight">
  63. <el-input
  64. placeholder="请输入"
  65. maxlength="15"
  66. v-autoTrim="{ obj: form, key: 'fovHRight' }"
  67. v-model="form.fovHRight"
  68. @input="inputChange"
  69. >
  70. </el-input>
  71. </el-form-item>
  72. <el-form-item label="垂直视场角顶(deg):" prop="fovVTop">
  73. <el-input
  74. placeholder="请输入"
  75. maxlength="15"
  76. v-autoTrim="{ obj: form, key: 'fovVTop' }"
  77. v-model="form.fovVTop"
  78. >
  79. </el-input>
  80. </el-form-item>
  81. <el-form-item label="垂直视场角底(deg):" prop="fovVBottom">
  82. <el-input
  83. placeholder="请输入"
  84. maxlength="15"
  85. v-autoTrim="{ obj: form, key: 'fovVBottom' }"
  86. v-model="form.fovVBottom"
  87. >
  88. </el-input>
  89. </el-form-item>
  90. <div class="titlePanel">
  91. <div class="titlePanelBor">其他</div>
  92. </div>
  93. <el-form-item label="显示探测锥:" prop="rangeDisplay">
  94. <el-radio v-model="form.rangeDisplay" label="1">是</el-radio>
  95. <el-radio v-model="form.rangeDisplay" label="0">否</el-radio>
  96. </el-form-item>
  97. <el-form-item label="最大目标物数量(个):" prop="maxObjects">
  98. <el-input
  99. placeholder="请输入"
  100. maxlength="10"
  101. v-autoTrim="{ obj: form, key: 'maxObjects' }"
  102. v-model="form.maxObjects"
  103. >
  104. </el-input>
  105. </el-form-item>
  106. <el-form-item label="坐标系:" prop="coordinateSystem">
  107. <el-select v-model="form.coordinateSystem">
  108. <el-option
  109. v-for="item in coordinateSystemList"
  110. :label="item.caption"
  111. :value="item.code"
  112. :key="item.code"
  113. ></el-option>
  114. </el-select>
  115. </el-form-item>
  116. <el-form-item label="目标物筛选:" prop="targetFilter">
  117. <el-checkbox
  118. :indeterminate="isIndeterminate"
  119. v-model="checkAll"
  120. @change="handleCheckAllChange"
  121. >全选</el-checkbox
  122. >
  123. <el-checkbox-group
  124. v-model="form.targetFilter"
  125. @change="handleCheckedTargetChange"
  126. >
  127. <el-checkbox
  128. v-for="target in targetOptions"
  129. :label="target.code"
  130. :key="target.code"
  131. >{{ target.caption }}</el-checkbox
  132. >
  133. </el-checkbox-group>
  134. </el-form-item>
  135. </el-form>
  136. </div>
  137. </template>
  138. <script>
  139. //import from '';
  140. export default {
  141. name: "formPerfectSensor", // form-完美传感器
  142. components: {},
  143. data() {
  144. return {
  145. coordinateSystemList: [],
  146. checkAll: false,
  147. isIndeterminate: false,
  148. targetOptions: [],
  149. form: {
  150. id: "", // id
  151. sensorCode: "", // 传感器编码
  152. sensorName: "", // 传感器名称
  153. description: "", // 传感器描述
  154. nearDistance: "", // 盲区距离
  155. farDistance: "", // 探测距离
  156. fovHLeft: "", // 水平现场角左
  157. fovHRight: "", // 水平现场角右
  158. fovVTop: "", // 垂直现场角顶
  159. fovVBottom: "", // 垂直现场角底
  160. rangeDisplay: "1", // 显示探测锥
  161. maxObjects: "", // 最大目标物个数
  162. coordinateSystem: "", // 坐标系
  163. targetFilter: [], // 目标物筛选
  164. share: "", // 是否分享
  165. },
  166. rules: {
  167. sensorName: [
  168. { required: true, message: "请输入", trigger: "blur" },
  169. ],
  170. description: [
  171. { required: true, message: "请输入", trigger: "blur" },
  172. ],
  173. nearDistance: [
  174. { required: true, message: "请输入", trigger: "blur" },
  175. ],
  176. farDistance: [
  177. { required: true, message: "请输入", trigger: "blur" },
  178. ],
  179. fovHLeft: [
  180. { required: true, message: "请输入", trigger: "blur" },
  181. ],
  182. fovHRight: [
  183. { required: true, message: "请输入", trigger: "blur" },
  184. ],
  185. fovVTop: [
  186. { required: true, message: "请输入", trigger: "blur" },
  187. ],
  188. fovVBottom: [
  189. { required: true, message: "请输入", trigger: "blur" },
  190. ],
  191. rangeDisplay: [
  192. { required: true, message: "请选择", trigger: "change" },
  193. ],
  194. maxObjects: [
  195. { required: true, message: "请输入", trigger: "blur" },
  196. ],
  197. coordinateSystem: [
  198. { required: true, message: "请选择", trigger: "change" },
  199. ],
  200. targetFilter: [
  201. { required: true, message: "请选择", trigger: "change" },
  202. ],
  203. },
  204. };
  205. },
  206. computed: {},
  207. methods: {
  208. showInfo(id) {
  209. this.$axios({
  210. method: "post",
  211. url: this.$api.modelLibrary.getOgtInfo,
  212. data: {
  213. id,
  214. },
  215. }).then((res) => {
  216. if (res.code == 200 && res.info) {
  217. this.$refs.form.clearValidate();
  218. this.form = res.info;
  219. this.form.targetFilter = res.info.targetFilter.split(",");
  220. // 传回当前展示form的share,从而改变按钮的展示
  221. this.$emit("changeShare", this.form.share);
  222. // 数据加载完毕,可展示canvas
  223. this.$emit("showDone");
  224. } else {
  225. this.$message.error(res.message || "获取失败");
  226. }
  227. });
  228. },
  229. save(isAdd = false) {
  230. this.$refs.form.validate((valid) => {
  231. if (valid) {
  232. // 判断是否新增
  233. if (isAdd) {
  234. this.form.id = "";
  235. }
  236. let data = {
  237. ...this.form,
  238. targetFilter: this.form.targetFilter.join(","),
  239. };
  240. this.$axios({
  241. method: "post",
  242. url: this.$api.modelLibrary.saveOgt,
  243. data,
  244. }).then((res) => {
  245. if (res.code == 200 && res.info) {
  246. this.form.id = res.info.id;
  247. this.form.share = res.info.share;
  248. this.$message.success("保存成功");
  249. this.$emit("changeShare", this.form.share);
  250. this.$emit("getList");
  251. } else {
  252. this.$message.error(res.message || "保存失败");
  253. }
  254. });
  255. }
  256. });
  257. },
  258. share() {
  259. let data = {
  260. ...this.form,
  261. targetFilter: this.form.targetFilter.join(","),
  262. };
  263. this.$axios({
  264. method: "post",
  265. url: this.$api.modelLibrary.shareOgt,
  266. data,
  267. }).then((res) => {
  268. if (res.code == 200) {
  269. this.$message.success("分享成功");
  270. this.$emit("getList");
  271. } else {
  272. this.$message.error(res.message || "分享失败");
  273. }
  274. });
  275. },
  276. cancel() {
  277. if (this.form.id) {
  278. // 取消时有id则重新请求表单
  279. this.showInfo(this.form.id);
  280. } else {
  281. // 清空
  282. this.$emit("clearForm");
  283. }
  284. },
  285. handleCheckAllChange(val) {
  286. this.form.targetFilter = val
  287. ? this.targetOptions.map((i) => i.code)
  288. : [];
  289. this.isIndeterminate = false;
  290. },
  291. handleCheckedTargetChange(value) {
  292. let checkedCount = value.length;
  293. this.checkAll = checkedCount === this.form.targetFilter.length;
  294. this.isIndeterminate =
  295. checkedCount > 0 && checkedCount < this.targetOptions.length;
  296. },
  297. inputChange() {
  298. if (
  299. this.form.farDistance === "" ||
  300. this.form.fovHLeft === "" ||
  301. this.form.fovHRight === ""
  302. )
  303. return;
  304. this.$emit("inputChange", {
  305. r: this.form.farDistance,
  306. hl: this.form.fovHLeft,
  307. hr: this.form.fovHRight,
  308. });
  309. },
  310. },
  311. async mounted() {
  312. await this.$dicsListsInit({
  313. coordinateSystemList: "coordinate",
  314. targetOptions: "targetFilter",
  315. });
  316. },
  317. };
  318. </script>
  319. <style lang='less' scoped>
  320. @import "../common/util.less";
  321. </style>