MetaDataDetail.vue 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. <template>
  2. <el-dialog v-if="isShow"
  3. :model-value="isShow"
  4. title="编辑数据"
  5. :width="700"
  6. :close-on-click-modal="false"
  7. :before-close="handleClose"
  8. >
  9. <div id="addData">
  10. <el-form ref="form" :model="formData" :rules="formDataRules" style="margin: 0 15px" :label-width="110">
  11. <el-form-item label="ID:" v-show="false">
  12. <el-input v-model="formData.id"/>
  13. </el-form-item>
  14. <el-form-item label="标题:" prop="title">
  15. <el-input v-model="formData.title" placeholder="请输入标题" :disabled="formData.isDataView"/>
  16. </el-form-item>
  17. <el-form-item label="描述:" prop="content">
  18. <el-input v-model="formData.content" placeholder="请输入描述" :disabled="formData.isDataView"/>
  19. </el-form-item>
  20. <el-form-item label="类别:" prop="menuId">
  21. <el-select v-model="formData.menuId" placeholder="请选择类别" @change="handleMenuIdSelect"
  22. :disabled="formData.isDataView">
  23. <el-option
  24. v-for="item in category"
  25. :key="item.value"
  26. :label="item.label"
  27. :value="item.value"
  28. />
  29. </el-select>
  30. </el-form-item>
  31. <el-form-item label="数据类型:" prop="dataType">
  32. <el-select v-model="formData.dataType" placeholder="请选择数据类型" :disabled="formData.isDataView">
  33. <el-option v-for="item in dataType" :key="item.value" :label="item.label" :value="item.value"></el-option>
  34. </el-select>
  35. </el-form-item>
  36. <el-form-item label="数据ID:" prop="dataId" v-if="formData.dataType && formData.dataType !== ''">
  37. <el-select style="width: 80%" v-model="formData.dataId" placeholder="请选择数据ID,输入ID/标题/描述进行搜索"
  38. :filterable="true"
  39. :remote="true"
  40. :remote-method="searchForDataId"
  41. :remote-show-suffix="true"
  42. :loading="searchDataLoading"
  43. :disabled="formData.isDataView">
  44. <el-option v-for="item in dataList" :key="item.id" :label="item.title" :value="item.id">
  45. <span style="float: left">{{ item.title }}</span>
  46. <span style="float: right;color: var(--el-text-color-secondary);font-size: 10px;">
  47. {{ item.content }}
  48. </span>
  49. </el-option>
  50. </el-select>
  51. </el-form-item>
  52. <el-form-item label="地名地址库:" prop="address">
  53. <el-input v-model="formData.address" placeholder="请输入地名地址库名称" :disabled="formData.isDataView"/>
  54. </el-form-item>
  55. </el-form>
  56. <HighOptionData :init-data="[]" :call-back="setProperties"></HighOptionData>
  57. </div>
  58. <template #footer>
  59. <el-button type="primary" @click="submit" v-show="!formData.isDataView">保存</el-button>
  60. </template>
  61. </el-dialog>
  62. </template>
  63. <script>
  64. import OlMap from "@/components/map/OlMap";
  65. import JsonDataView from "@/components/json/JsonDataView";
  66. import api from "@/api/data/MetaData";
  67. import menuApi from "@/api/data/MenuData";
  68. import HighOptionData from "@/components/dataManage/dataDetail/HighOptionData";
  69. export default {
  70. data() {
  71. return {
  72. formData: {},
  73. oriFormData: {},
  74. formDataRules: {
  75. title: [
  76. {required: true, message: '请输入标题', trigger: 'change'},
  77. ],
  78. content: [
  79. {required: true, message: '请输入描述', trigger: 'change'},
  80. ],
  81. menuId: [
  82. {required: true, message: '请选择类别', trigger: 'change'},
  83. ],
  84. geometryStr: [
  85. {required: true, message: '请输入Geojson数据', trigger: 'blur'},
  86. ],
  87. dataType: [
  88. {required: true, message: '请选择数据类型', trigger: 'blur'},
  89. {required: true, message: '请选择数据类型', trigger: 'change'},
  90. ],
  91. dataId: [
  92. {required: true, message: '请输入数据Id', trigger: 'blur'},
  93. {required: true, message: '请输入数据Id', trigger: 'change'},
  94. ]
  95. // address: [
  96. // { required: true, message: '请输入地名地址库名称', trigger: 'change' },
  97. // ]
  98. },
  99. dataType: [
  100. {
  101. label: '二维数据',
  102. value: 1
  103. }, {
  104. label: '三维数据',
  105. value: 4
  106. }, {
  107. label: '业务数据',
  108. value: 3
  109. }, {
  110. label: '模型数据',
  111. value: 5
  112. }, {
  113. label: '物联感知数据',
  114. value: 2
  115. },
  116. ],
  117. dataList: [],
  118. searchDataLoading: false,
  119. category: [],
  120. isMapShow: false,
  121. isJsonDataView: false,
  122. }
  123. },
  124. props: {
  125. isShow: Boolean,
  126. item: Object,
  127. close: Function
  128. },
  129. watch: {
  130. "formData.dataType": function () {
  131. this.formData.dataId = '';
  132. }
  133. },
  134. mounted() {
  135. this.getMenuData()
  136. this.formData = this.item;
  137. this.oriFormData = JSON.parse(JSON.stringify(this.formData))
  138. },
  139. components: {
  140. HighOptionData
  141. },
  142. methods: {
  143. setProperties(item) {
  144. this.formData['properties'] = item;
  145. },
  146. getMenuData() {
  147. let app = this;
  148. let params = {
  149. type: "1",
  150. parentId: "3",
  151. }
  152. menuApi.getMenuData(params).then(res => {
  153. if (res.code === 200) {
  154. app.category = res.content
  155. }
  156. })
  157. },
  158. handleClose() {
  159. this.close();
  160. },
  161. submit() {
  162. let app = this;
  163. app.$refs.form.validate(valid => {
  164. if (valid) {
  165. if (app.formData.isEdit) {
  166. app.updateData();
  167. } else {
  168. app.addData();
  169. }
  170. } else {
  171. app.$message({message: '请完善数据', type: 'warning'})
  172. }
  173. })
  174. },
  175. searchForDataId(val) {
  176. let app = this;
  177. this.searchDataLoading = true;
  178. if (val && val !== '') {
  179. let params = {
  180. classId: this.formData.dataType,
  181. data: '' + val,
  182. }
  183. api.queryRelateData(params).then(res => {
  184. if (res.code === 200) {
  185. app.dataList = res.content
  186. }
  187. app.searchDataLoading = false;
  188. }).catch(() => {
  189. app.searchDataLoading = false;
  190. })
  191. } else {
  192. this.dataList = []
  193. this.searchDataLoading = false;
  194. }
  195. },
  196. // 数据录入
  197. addData() {
  198. let app = this;
  199. let params = JSON.parse(JSON.stringify(app.formData));
  200. params['menuNameOne'] = '二维数据'
  201. params['userName'] = app.$store.state.userInfo.username;
  202. api.addData(params).then(res => {
  203. if (res.code === 200) {
  204. app.$message({message: '录入成功', type: 'success'})
  205. app.close(true);
  206. }
  207. })
  208. },
  209. // 编辑数据
  210. updateData() {
  211. let app = this;
  212. let params = JSON.parse(JSON.stringify(app.formData));
  213. delete params.createDate;
  214. delete params.updateDate;
  215. params['userName'] = app.$store.state.userInfo.username;
  216. api.updateData(params).then(res => {
  217. if (res.code === 200) {
  218. app.$message({message: '修改成功', type: 'success'})
  219. app.close(true);
  220. }
  221. })
  222. },
  223. handleMenuIdSelect(val) {
  224. for (let i = 0; i < this.category.length; i++) {
  225. let item = this.category[i];
  226. if (item.id == val) {
  227. this.formData['menuNameTwo'] = item.title
  228. break;
  229. }
  230. }
  231. },
  232. }
  233. }
  234. </script>
  235. <style>
  236. #addData {
  237. width: 100%;
  238. height: 100%;
  239. }
  240. </style>