MetaDataDetail.vue 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. <template>
  2. <el-dialog v-if="isShow"
  3. :model-value="isShow"
  4. :title="dialogTitle"
  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="true">
  23. <el-option
  24. v-for="item in category"
  25. :key="item.id"
  26. :label="item.title"
  27. :value="item.id"
  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 api from "@/api/data/MetaData";
  65. import menuApi from "@/api/data/MenuData";
  66. import HighOptionData from "@/components/dataManage/dataDetail/HighOptionData";
  67. export default {
  68. data() {
  69. return {
  70. formData: {},
  71. oriFormData: {},
  72. formDataRules: {
  73. title: [
  74. {required: true, message: '请输入标题', trigger: 'change'},
  75. ],
  76. content: [
  77. {required: true, message: '请输入描述', trigger: 'change'},
  78. ],
  79. menuId: [
  80. {required: true, message: '请选择类别', trigger: 'change'},
  81. ],
  82. geometryStr: [
  83. {required: true, message: '请输入Geojson数据', trigger: 'blur'},
  84. ],
  85. dataType: [
  86. {required: true, message: '请选择数据类型', trigger: 'blur'},
  87. {required: true, message: '请选择数据类型', trigger: 'change'},
  88. ],
  89. dataId: [
  90. {required: true, message: '请输入数据Id', trigger: 'blur'},
  91. {required: true, message: '请输入数据Id', trigger: 'change'},
  92. ]
  93. // address: [
  94. // { required: true, message: '请输入地名地址库名称', trigger: 'change' },
  95. // ]
  96. },
  97. dataType: [
  98. {
  99. label: '二维数据',
  100. value: 1
  101. }, {
  102. label: '三维数据',
  103. value: 4
  104. }, {
  105. label: '业务数据',
  106. value: 3
  107. }, {
  108. label: '模型数据',
  109. value: 5
  110. }, {
  111. label: '物联感知数据',
  112. value: 2
  113. },
  114. ],
  115. dataList: [],
  116. searchDataLoading: false,
  117. category: [],
  118. isMapShow: false,
  119. isJsonDataView: false,
  120. }
  121. },
  122. props: {
  123. dialogTitle: String,
  124. isShow: Boolean,
  125. item: Object,
  126. currCategory: 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: this.$constant.menuIds['meta'],
  151. }
  152. menuApi.getMenuData(params).then(res => {
  153. if (res.code === 200) {
  154. app.category = res.content
  155. if (!app.formData.menuId || app.formData.menuId == '') {
  156. app.formData.menuId = app.currCategory.id
  157. app.handleMenuIdSelect(app.formData.menuId)
  158. }
  159. }
  160. })
  161. },
  162. handleClose() {
  163. this.close();
  164. },
  165. submit() {
  166. let app = this;
  167. app.$refs.form.validate(valid => {
  168. if (valid) {
  169. if (app.formData.isEdit) {
  170. app.updateData();
  171. } else {
  172. app.addData();
  173. }
  174. } else {
  175. app.$message({message: '请完善数据', type: 'warning'})
  176. }
  177. })
  178. },
  179. searchForDataId(val) {
  180. let app = this;
  181. this.searchDataLoading = true;
  182. if (val && val !== '') {
  183. let params = {
  184. classId: this.formData.dataType,
  185. data: '' + val,
  186. }
  187. api.queryRelateData(params).then(res => {
  188. if (res.code === 200) {
  189. app.dataList = res.content
  190. }
  191. app.searchDataLoading = false;
  192. }).catch(() => {
  193. app.searchDataLoading = false;
  194. })
  195. } else {
  196. this.dataList = []
  197. this.searchDataLoading = false;
  198. }
  199. },
  200. // 数据录入
  201. addData() {
  202. let app = this;
  203. let params = JSON.parse(JSON.stringify(app.formData));
  204. params['menuNameOne'] = '二维数据'
  205. params['userName'] = app.$store.state.userInfo.username;
  206. api.addData(params).then(res => {
  207. if (res.code === 200) {
  208. app.$message({message: '录入成功', type: 'success'})
  209. app.close(true);
  210. }
  211. })
  212. },
  213. // 编辑数据
  214. updateData() {
  215. let app = this;
  216. let params = JSON.parse(JSON.stringify(app.formData));
  217. delete params.createDate;
  218. delete params.updateDate;
  219. params['userName'] = app.$store.state.userInfo.username;
  220. api.updateData(params).then(res => {
  221. if (res.code === 200) {
  222. app.$message({message: '修改成功', type: 'success'})
  223. app.close(true);
  224. }
  225. })
  226. },
  227. handleMenuIdSelect(val) {
  228. for (let i = 0; i < this.category.length; i++) {
  229. let item = this.category[i];
  230. if (item.id == val) {
  231. this.formData['menuNameTwo'] = item.title
  232. break;
  233. }
  234. }
  235. },
  236. }
  237. }
  238. </script>
  239. <style>
  240. #addData {
  241. width: 100%;
  242. height: 100%;
  243. }
  244. </style>