formGps.vue 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  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="经度偏移量(deg):" prop="longitudeOffset">
  34. <el-input
  35. placeholder="请输入"
  36. maxlength="12"
  37. v-autoTrim="{ obj: form, key: 'longitudeOffset' }"
  38. v-model="form.longitudeOffset"
  39. >
  40. </el-input>
  41. </el-form-item>
  42. <el-form-item label="纬度偏移量(deg):" prop="latitudeOffset">
  43. <el-input
  44. placeholder="请输入"
  45. maxlength="12"
  46. v-autoTrim="{ obj: form, key: 'latitudeOffset' }"
  47. v-model="form.latitudeOffset"
  48. >
  49. </el-input>
  50. </el-form-item>
  51. <div class="titlePanel">
  52. <div class="titlePanelBor">其他</div>
  53. </div>
  54. <el-form-item label="帧率(HZ):" prop="frameRate">
  55. <el-select v-model="form.frameRate">
  56. <el-option
  57. v-for="item in frameRateList"
  58. :label="item.caption"
  59. :value="item.code"
  60. :key="item.code"
  61. ></el-option>
  62. </el-select>
  63. </el-form-item>
  64. </el-form>
  65. </div>
  66. </template>
  67. <script>
  68. //import from '';
  69. export default {
  70. name: "formGps", // form-GPS
  71. components: {},
  72. data() {
  73. // 校验非负且最多4位小数
  74. let validateNum = (rule, value, callback) => {
  75. !/^(0|[1-9][0-9]*)(\.\d{1,4})?$/.test(value) &&
  76. callback(new Error(rule.message));
  77. callback();
  78. };
  79. // 校验不大于180
  80. let validateNoMore180 = (rule, value, callback) => {
  81. if (value > 180) {
  82. callback(new Error(rule.message));
  83. return;
  84. }
  85. callback();
  86. };
  87. // 校验不大于360
  88. let validateNoMore360 = (rule, value, callback) => {
  89. if (value > 360) {
  90. callback(new Error(rule.message));
  91. return;
  92. }
  93. callback();
  94. };
  95. return {
  96. frameRateList: [],
  97. form: {
  98. id: "", // id
  99. sensorCode: "", // 传感器编码
  100. sensorName: "", // 传感器名称
  101. description: "", // 传感器描述
  102. longitudeOffset: "", // 经度偏移量
  103. latitudeOffset: "", // 纬度偏移量
  104. frameRate: "", // 帧率
  105. share: "", // 是否分享
  106. },
  107. rules: {
  108. sensorName: [
  109. { required: true, message: "请输入", trigger: "blur" },
  110. ],
  111. description: [
  112. { required: true, message: "请输入", trigger: "blur" },
  113. ],
  114. longitudeOffset: [
  115. { required: true, message: "请输入", trigger: "blur" },
  116. {
  117. validator: validateNum,
  118. message: "请输入最多带有4位小数的非负数",
  119. trigger: ["blur"],
  120. },
  121. {
  122. validator: validateNoMore360,
  123. message: "请输入不大于360的非负数",
  124. trigger: ["blur"],
  125. },
  126. ],
  127. latitudeOffset: [
  128. { required: true, message: "请输入", trigger: "blur" },
  129. {
  130. validator: validateNum,
  131. message: "请输入最多带有4位小数的非负数",
  132. trigger: ["blur"],
  133. },
  134. {
  135. validator: validateNoMore180,
  136. message: "请输入不大于180的非负数",
  137. trigger: ["blur"],
  138. },
  139. ],
  140. frameRate: [
  141. { required: true, message: "请选择", trigger: "change" },
  142. ],
  143. },
  144. };
  145. },
  146. computed: {},
  147. methods: {
  148. // 展示详情
  149. showInfo(id) {
  150. this.$axios({
  151. method: "post",
  152. url: this.$api.modelLibrary.getGpsInfo,
  153. data: {
  154. id,
  155. },
  156. }).then((res) => {
  157. if (res.code == 200 && res.info) {
  158. this.$refs.form.clearValidate();
  159. this.form = res.info;
  160. // 传回当前展示form的share,从而改变按钮的展示
  161. this.$emit("changeShare", this.form.share);
  162. } else {
  163. this.$message.error(res.message || "获取失败");
  164. }
  165. });
  166. },
  167. save(isAdd = false) {
  168. this.$refs.form.validate((valid) => {
  169. if (valid) {
  170. // 判断是否新增
  171. if (isAdd) {
  172. this.form.id = "";
  173. }
  174. this.$axios({
  175. method: "post",
  176. url: this.$api.modelLibrary.saveGps,
  177. data: {
  178. ...this.form,
  179. },
  180. }).then((res) => {
  181. if (res.code == 200 && res.info) {
  182. this.form.id = res.info.id;
  183. this.form.share = res.info.share;
  184. this.$message.success("保存成功");
  185. this.$emit("changeShare", this.form.share);
  186. this.$emit("getList");
  187. } else {
  188. this.$message.error(res.message || "保存失败");
  189. }
  190. });
  191. }
  192. });
  193. },
  194. share() {
  195. this.$axios({
  196. method: "post",
  197. url: this.$api.modelLibrary.shareGps,
  198. data: {
  199. ...this.form,
  200. },
  201. }).then((res) => {
  202. if (res.code == 200) {
  203. this.$message.success("分享成功");
  204. this.$emit("getList");
  205. } else {
  206. this.$message.error(res.message || "分享失败");
  207. }
  208. });
  209. },
  210. cancel() {
  211. if (this.form.id) {
  212. // 取消时有id则重新请求表单
  213. this.showInfo(this.form.id);
  214. } else {
  215. // 清空
  216. this.$emit("clearForm");
  217. }
  218. },
  219. },
  220. async mounted() {
  221. await this.$dicsListsInit({
  222. frameRateList: "frameRate",
  223. });
  224. },
  225. };
  226. </script>
  227. <style lang='less' scoped>
  228. @import "../common/util.less";
  229. </style>