addBuild.vue 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. <template>
  2. <el-dialog
  3. :title="buildTitle"
  4. :visible.sync="buildDialogVis"
  5. id="messageDialog"
  6. width="50%"
  7. >
  8. <el-form
  9. :inline="true"
  10. :model="form"
  11. label-width="125px"
  12. :rules="rules"
  13. ref="ruleForm"
  14. >
  15. <template v-for="(val,key,index) in buildMessage">
  16. <h4>{{key}}</h4>
  17. <span
  18. :key="item.InfoPointCode"
  19. v-for="(item,index) in val"
  20. :class="[{'upload-file':item.InputMode == 'F2'}]"
  21. >
  22. <el-form-item
  23. :class="{FloorTypeSelect:item.InputMode == 'D1'||item.Unit}"
  24. :label="item.InfoPointName"
  25. :prop="item.InfoPointCode"
  26. v-if="all||item.Visible"
  27. >
  28. <el-input v-if="item.InputMode == 'B1' || item.InputMode == 'B2'" v-model="form[item.Path]"></el-input>
  29. <el-input type="number" v-else-if="item.InputMode == 'A1'||item.InputMode == 'A2'" v-model="form[item.Path]">
  30. <template slot="append" v-if="item.Unit">{{item.Unit}}</template>
  31. </el-input>
  32. <el-select
  33. placeholder="请选择" v-else-if="item.InputMode == 'D1' || item.InputMode == 'E2'" v-model="form[item.Path]">
  34. <el-option :key="op.Code" :label="op.Name" :value="op.Code" v-for="op in item.options"></el-option>
  35. </el-select>
  36. <el-select
  37. placeholder="请选择"
  38. v-else-if="item.InputMode == 'D2'"
  39. v-model="form[item.Path]"
  40. multiple
  41. collapse-tags
  42. filterable
  43. @change="multipleSelect($event,item.Path)"
  44. >
  45. <el-option :key="op.Code" :label="op.Name" :value="op.Code" v-for="op in item.options"></el-option>
  46. </el-select>
  47. <el-date-picker
  48. v-model="form[item.Path]"
  49. type="daterange"
  50. v-else-if="item.InputMode == 'C6'"
  51. value-format="yyyy-MM-dd"
  52. range-separator="至"
  53. start-placeholder="开始日期"
  54. end-placeholder="结束日期"/>
  55. <el-cascader
  56. v-else-if="item.InputMode == 'D1L'"
  57. placeholder="请选择"
  58. :options="item.options"
  59. v-model="form[item.Path]"
  60. :props="{ checkStrictly: true ,value: 'Code',label:'Name'}"
  61. clearable
  62. />
  63. <el-input
  64. v-else-if="item.InputMode == 'L'||item.InputMode == 'L1'||item.InputMode == 'L2'||item.InputMode == 'M'"
  65. v-model="form[item.Path]">
  66. <template slot="append" v-if="item.Unit">{{item.Unit}}</template>
  67. </el-input>
  68. <el-date-picker
  69. placeholder="选择日期"
  70. value-format="yyyy-MM-dd"
  71. type="date" v-else-if="item.InputMode == 'C5'" v-model="form[item.Path]">
  72. </el-date-picker>
  73. <uploadImgs
  74. :readOnly="false"
  75. v-else-if="item.InputMode == 'F2'&& item.Path === 'BuildingInfo.BuildingType.Pic'"
  76. v-model="form[item.Path]"
  77. :keysArr="Array.isArray(buildData[item.Path]) ? buildData[item.Path]:[]"
  78. :context-key="item.Path"
  79. :isShow="1"
  80. @change="changeItem"
  81. />
  82. <upload-files
  83. v-model="form[item.Path]"
  84. v-else-if="item.InputMode == 'F2'"
  85. :readOnly="false"
  86. :isShow="1"
  87. :keys-arr="Array.isArray(buildData[item.Path]) ? buildData[item.Path]:[] "
  88. :show-file-list="false"
  89. :context-key="item.Path"
  90. @change="changeItem"
  91. />
  92. <el-input disabled title="暂不支持" v-else v-model="form[item.Path]"></el-input>
  93. <span>{{item.InputMode}}</span>
  94. </el-form-item>
  95. </span>
  96. </template>
  97. </el-form>
  98. <span
  99. class="dialog-footer"
  100. slot="footer"
  101. >
  102. <el-button @click="buildDialogVis = false">取 消</el-button>
  103. <el-button @click="submitForm('ruleForm')" type="primary">确 定</el-button>
  104. </span>
  105. <el-dialog :visible.sync="dialogVisible">
  106. <img width="100%" :src="dialogImageUrl" alt="">
  107. </el-dialog>
  108. </el-dialog>
  109. </template>
  110. <script>
  111. import uploadFiles from "@/components/business_space/lib/uploadFiles";
  112. import uploadImgs from "@/components/business_space/lib/uploadImgsName";
  113. function flattenKeys(obj) {
  114. let res = {}
  115. function isObject(val) {
  116. return typeof val === 'object' && !Array.isArray(val)
  117. }
  118. function digKeys(prev, obj) {
  119. Object.entries(obj).forEach(([key, value]) => {
  120. const currentKey = prev ? `${prev}.${key}` : key
  121. if (isObject(value)) {
  122. digKeys(currentKey, value)
  123. } else {
  124. res[currentKey] = value
  125. }
  126. })
  127. }
  128. digKeys('', obj)
  129. return res
  130. }
  131. export default {
  132. data() {
  133. return {
  134. buildName: '',
  135. keysArr: [], //保存临时的文件key
  136. buildDialogVis: false,
  137. form: {},
  138. dialogImageUrl: '',
  139. dialogVisible: false,
  140. all: true,
  141. rules: {
  142. "BuildLocalID": [
  143. {"required": true, "message": "请输入建筑本地编码", "trigger": "blur"}
  144. ],
  145. "BuildLocalName": [
  146. {"required": true, "message": "请输入建筑本地名称", "trigger": "blur"}
  147. ]
  148. },
  149. buildData: {},
  150. }
  151. },
  152. components: {uploadFiles, uploadImgs},
  153. props: ['buildTitle', 'buildMessage', 'currentBuild'],
  154. computed: {
  155. 'item.Path':{
  156. get() {
  157. return this.form[item.Path].split(',')
  158. },
  159. set(val) {
  160. this.form[item.Path] = val.join(',')
  161. }
  162. }
  163. },
  164. mounted() {
  165. },
  166. methods: {
  167. deepCopy(obj) {
  168. return JSON.parse(JSON.stringify(obj))
  169. },
  170. multipleSelect(val,item) {
  171. },
  172. showDialog(data) {
  173. //获取信息
  174. this.buildData = data || {};
  175. this.buildData = flattenKeys(this.buildData)
  176. // this.keysArr = this.buildData[]
  177. this.timeoutSetVal()
  178. this.buildDialogVis = true
  179. },
  180. timeoutSetVal() {
  181. let that = this
  182. setTimeout(() => {
  183. if (that.form) {
  184. that.form = that.buildData
  185. } else {
  186. this.timeoutSetVal()
  187. }
  188. })
  189. },
  190. closeDialog() {
  191. this.buildDialogVis = false
  192. },
  193. submitForm(formName) {
  194. this.$refs[formName].validate((valid) => {
  195. if (valid) {
  196. this.$emit('handleBuild', this.form)
  197. } else {
  198. return false;
  199. }
  200. });
  201. },
  202. changeItem(val) {
  203. console.log(val)
  204. let _key = Object.keys(val)[0] + '';
  205. this.form[_key] = val[_key];
  206. },
  207. }
  208. }
  209. </script>
  210. <style lang="less" scoped>
  211. #messageDialog {
  212. /deep/ .el-date-editor.el-input, .el-date-editor.el-input__inner, /deep/ .el-select {
  213. width: 200px;
  214. }
  215. /deep/ .FloorTypeSelect .el-form-item__content {
  216. width: 200px;
  217. }
  218. /deep/ .el-dialog__body {
  219. height: 420px;
  220. overflow: auto;
  221. }
  222. .upload-file {
  223. width: 100%;
  224. display: block;
  225. }
  226. }
  227. </style>