formItems.vue 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. <template>
  2. <div id="inforsPoint">
  3. <el-form
  4. ref="ruleForm"
  5. :model="form"
  6. label-width="150px"
  7. :rules="rules"
  8. :inline="true"
  9. :label-position="'right'"
  10. >
  11. <div
  12. v-for="item in InforsList"
  13. :key="item.infoPointCode"
  14. style="width: 50%; display: inline-block"
  15. >
  16. <el-form-item
  17. :label="item.name"
  18. :prop="item.code"
  19. v-if="all || item.visible"
  20. :class="{ FloorTypeSelect: item.dataType == 'ENUM' || item.unit }"
  21. >
  22. <el-input
  23. v-model.trim="form[item.path]"
  24. v-if="
  25. item.infoPointCode == 'bimLocation' ||
  26. item.infoPointCode == 'modelId'
  27. "
  28. disabled
  29. />
  30. <!--二维码相关-->
  31. <span v-else-if="item.infoPointCode == 'DefaultQRCode'">
  32. <el-input
  33. v-if="!form[item.path]"
  34. v-model.trim="form[item.path]"
  35. disabled
  36. />
  37. <el-popover v-else placement="right" width="210" trigger="click">
  38. <div style="overflow: hidden">
  39. <img
  40. style="width: 200px; height: 200px"
  41. :src="
  42. '/image-service/common/file_get/' +
  43. form[item.path] +
  44. '?systemId=dataPlatform'
  45. "
  46. alt="二维码"
  47. />
  48. </div>
  49. <el-button slot="reference" type="text">点击查看</el-button>
  50. </el-popover>
  51. </span>
  52. <span v-else-if="item.infoPointCode == 'QRCodePic'">
  53. <el-input
  54. v-if="!form[item.path]"
  55. v-model.trim="form[item.path]"
  56. disabled
  57. />
  58. <el-popover v-else placement="right" width="210" trigger="click">
  59. <div style="overflow: hidden">
  60. <img
  61. style="width: 200px; height: 200px"
  62. :src="
  63. '/image-service/common/file_get/' +
  64. form[item.path] +
  65. '?systemId=dataPlatform'
  66. "
  67. alt="二维码"
  68. />
  69. </div>
  70. <el-button slot="reference" type="text">点击查看</el-button>
  71. </el-popover>
  72. </span>
  73. <!--/二维码相关-->
  74. <span v-else-if="item.dataType == 'STRING'">
  75. <el-input
  76. v-model.trim="form[item.path]"
  77. :disabled="!item.editable"
  78. :placeholder="
  79. item.dataType == 'STRING' && item.path === 'localId'
  80. ? '填写示例:F1、B1?'
  81. : ''
  82. "
  83. />
  84. <div
  85. v-if="
  86. item.dataType == 'STRING' &&
  87. item.path === 'localId' &&
  88. isShowTitle
  89. "
  90. style="color: gray; font-size: 12px"
  91. >
  92. 用于楼层平面图切换
  93. </div>
  94. </span>
  95. <el-input-number
  96. v-model.trim="form[item.path]"
  97. :controls="false"
  98. style="text-align: right;"
  99. v-else-if="item.dataType == 'INTEGER' || item.dataType == 'DOUBLE'"
  100. >
  101. <template slot="append" v-if="item.unit">{{ item.unit }}</template>
  102. </el-input-number>
  103. <el-select
  104. v-model="form[item.path]"
  105. placeholder="请选择"
  106. v-else-if="item.dataType == 'ENUM' || item.dataType == 'BOOLEAN'"
  107. >
  108. <el-option
  109. v-for="op in item.options"
  110. :key="op.code"
  111. :label="op.name"
  112. :value="op.code"
  113. ></el-option>
  114. </el-select>
  115. <el-input
  116. v-model.trim="form[item.path]"
  117. v-else
  118. :disabled="!item.editable"
  119. :placeholder="item.dataType ? '' : '字典无输入类型'"
  120. ></el-input>
  121. </el-form-item>
  122. </div>
  123. </el-form>
  124. </div>
  125. </template>
  126. <script>
  127. import { getDataDictionary } from "@/api/dict";
  128. import rules from "../../../api/fm/rules";
  129. export default {
  130. props: {
  131. type: {
  132. default: "floor"
  133. }
  134. },
  135. data() {
  136. let validateId = (rule, value, callback) => {
  137. console.log("localId", rule, value, callback);
  138. if (!value) {
  139. this.isShowTitle = false;
  140. return callback(new Error("请输入楼层本地编码"));
  141. } else {
  142. this.isShowTitle = true;
  143. callback();
  144. }
  145. };
  146. return {
  147. form: {},
  148. isShowTitle: true,
  149. InforsList: [],
  150. all: true, // 默认显示全部
  151. rules: {
  152. localId: [{ validator: validateId, trigger: "blur", required: true }],
  153. localName: [
  154. { required: true, message: "请输入楼层本地名称", trigger: "blur" }
  155. ],
  156. floorSequenceID: [
  157. { required: true, message: "请输入楼层顺序号", trigger: "blur" }
  158. ]
  159. }
  160. };
  161. },
  162. created() {
  163. this.getInforsPoint();
  164. },
  165. methods: {
  166. getInforsPoint() {
  167. let params = {
  168. type: this.type,
  169. // orders: "sort asc,infoPointCode asc",
  170. pageNumber: 1,
  171. pageSize: 1000,
  172. orders: "sort asc, name desc"
  173. };
  174. getDataDictionary(params, res => {
  175. let arr = res.content
  176. .map(item => {
  177. const category = ["ENUM", "MENUM", "BOOLEAN"];
  178. if (
  179. item.category == "STATIC" &&
  180. category.includes(item.dataType) &&
  181. item.dataSource
  182. ) {
  183. item.options = item.dataSource;
  184. if (item.options[0]) {
  185. item.props = {
  186. value: "code",
  187. label: "name",
  188. children: "content",
  189. checkStrictly: true
  190. };
  191. }
  192. }
  193. switch (
  194. item.code //过滤掉待删除的
  195. ) {
  196. case "floorIdentity":
  197. case "relatedSchedule":
  198. case "outPeopleFlow":
  199. case "inPeopleFlow":
  200. case "exsitPeopleNum":
  201. break;
  202. default:
  203. return item;
  204. }
  205. })
  206. .filter(_c => {
  207. return !!_c;
  208. });
  209. this.InforsList = arr;
  210. });
  211. },
  212. submitForm(call) {
  213. this.$refs.ruleForm.validate(valid => {
  214. if (valid) {
  215. call();
  216. } else {
  217. return false;
  218. }
  219. });
  220. }
  221. }
  222. };
  223. </script>
  224. <style lang="scss" scoped>
  225. #inforsPoint {
  226. .el-form-item {
  227. /deep/ label.el-form-item__label {
  228. font-size: 12px;
  229. }
  230. }
  231. /deep/ .el-input-number .el-input__inner {
  232. text-align: left;
  233. }
  234. /deep/ .FloorTypeSelect .el-form-item__content {
  235. width: 200px;
  236. }
  237. /deep/ .el-input--small {
  238. width: 200px;
  239. }
  240. }
  241. </style>