propertyFlowForm.vue 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. <template>
  2. <div class="property-flow-form">
  3. <el-form ref="propertyForm" :model="propertyForm" label-position="top">
  4. <el-form-item label="资产名称">
  5. <el-input type="text" v-model="propertyForm.name" placeholder="请输入资产名称"></el-input>
  6. </el-form-item>
  7. <el-form-item label="资产类别">
  8. <el-cascader ref="cascader" v-model="departId" :options="departList" :props="defaultProps"
  9. @change="changePart" placeholder="请选择资产类别">
  10. </el-cascader>
  11. </el-form-item>
  12. <el-form-item label="设备类型" required>
  13. <el-select v-model="propertyForm.type" placeholder="请选择设备类型">
  14. <el-option label="普通设备" :value="0"></el-option>
  15. <el-option label="物联网设备" :value="1"></el-option>
  16. </el-select>
  17. </el-form-item>
  18. <el-form-item label="设计编码">
  19. <el-input type="text" v-model="propertyForm.designNumber" placeholder="请输入设计编码"></el-input>
  20. </el-form-item>
  21. <el-form-item label="资产编码">
  22. <div class="coding-text" @click="codeVisible = true">
  23. {{propertyForm.assetNumber || '点击生成资产编码'}}
  24. </div>
  25. </el-form-item>
  26. <el-form-item label="设备编码">
  27. <el-input type="text" v-model="propertyForm.deviceNumber" placeholder="请输入设备编码"></el-input>
  28. </el-form-item>
  29. <el-form-item label="品牌">
  30. <el-input type="text" v-model="propertyForm.deviceBrand" placeholder="请输入品牌"></el-input>
  31. </el-form-item>
  32. <el-form-item label="型号">
  33. <el-input type="text" v-model="propertyForm.deviceModel" placeholder="请输入型号"></el-input>
  34. </el-form-item>
  35. <el-form-item label="序列号">
  36. <el-input type="text" v-model="propertyForm.deviceSerialNumber" placeholder="请输入序列号"></el-input>
  37. </el-form-item>
  38. <el-form-item label="库房" required>
  39. <el-select v-model="propertyForm.godownId" placeholder="请选择库房" @change="changeGoDown">
  40. <el-option :label="item.name" :value="item.id" v-for="(item,index) in goDownData" :key="index">
  41. </el-option>
  42. </el-select>
  43. </el-form-item>
  44. <el-form-item label="厂家">
  45. <el-input type="text" v-model="propertyForm.manufacturer" placeholder="请输入厂家"></el-input>
  46. </el-form-item>
  47. <el-form-item label="联系人">
  48. <el-input type="text" v-model="propertyForm.liaison" placeholder="请输入联系人"></el-input>
  49. </el-form-item>
  50. <el-form-item label="联系方式">
  51. <el-input type="text" v-model="propertyForm.liaisonPhone" placeholder="请输入联系方式"></el-input>
  52. </el-form-item>
  53. <el-form-item label="进场时间" required>
  54. <el-date-picker v-model="propertyForm.entryTime" type="date" placeholder="进场时间"
  55. value-format="yyyy-MM-dd">
  56. </el-date-picker>
  57. </el-form-item>
  58. <el-form-item label="维保记录">
  59. <el-input type="text" v-model="propertyForm.maintenanceRecord" placeholder="请输入维保记录"></el-input>
  60. </el-form-item>
  61. <el-form-item label="资产备注" class="hui-textarea">
  62. <el-input type="textarea" v-model="propertyForm.remark" placeholder="请输入资产备注" resize="none">
  63. </el-input>
  64. </el-form-item>
  65. </el-form>
  66. <el-dialog :close-on-click-modal="false" title="编码生成器" :visible.sync="codeVisible" width="900px"
  67. :append-to-body="true">
  68. <coding v-if="codeVisible" :code="propertyForm.assetNumber" @callback="callback"></coding>
  69. </el-dialog>
  70. </div>
  71. </template>
  72. <script>
  73. import {
  74. getDevicePartList,
  75. getGoDownList,
  76. get3DModel
  77. } from '@/api/property'
  78. const coding = () => import('@/components/work/common/coding');
  79. import {
  80. findParentIds
  81. } from '@/uitls'
  82. export default {
  83. props: ['flowForm'],
  84. data() {
  85. return {
  86. propertyForm: {
  87. assetNumber: '',
  88. attachment: '',
  89. designNumber: '',
  90. deviceBrand: '',
  91. deviceModel: '',
  92. deviceNumber: '',
  93. deviceSerialNumber: '',
  94. name: '',
  95. operateDeviceLevelId: 0,
  96. remark: '',
  97. type: 0,
  98. godownId: '',
  99. godownName: '',
  100. modelBindType: '',
  101. modelBindContent: '',
  102. manufacturer: '',
  103. liaison: '',
  104. liaisonPhone: '',
  105. entryTime: '',
  106. maintenanceRecord: ''
  107. },
  108. departList: [],
  109. departId: [],
  110. nowDepart: {},
  111. defaultProps: {
  112. children: 'children',
  113. label: 'name',
  114. value: 'id'
  115. },
  116. goDownData: [],
  117. modelList: [],
  118. codeVisible: false,
  119. signList: [{
  120. id: 1,
  121. name: '摄像头',
  122. iconPath: './assets/shexiangtou.png'
  123. }, {
  124. id: 2,
  125. name: '门禁',
  126. iconPath: './assets/menjin.png'
  127. }, {
  128. id: 3,
  129. name: '停车',
  130. iconPath: './assets/car.png'
  131. }, {
  132. id: 4,
  133. name: '照明',
  134. iconPath: './assets/zhaoming.png'
  135. }],
  136. position: {
  137. x: '',
  138. y: '',
  139. z: ''
  140. }
  141. }
  142. },
  143. mounted() {
  144. if (JSON.stringify(this.flowForm) === "{}") return this.getPartList();
  145. this.propertyForm = this.flowForm;
  146. if (this.flowForm.modelBindPosition) this.position = JSON.parse(this.flowForm.modelBindPosition);
  147. this.getPartList();
  148. },
  149. methods: {
  150. getPartList() {
  151. getDevicePartList(this.$store.getters.organization.id, this.$store.getters.project.id).then(res => {
  152. if (res.state) {
  153. this.departList = res.data;
  154. this.returnChildren(this.departList);
  155. if (this.propertyForm.operateDeviceLevelId) this.departId = findParentIds(this.departList,
  156. this.propertyForm.operateDeviceLevelId);
  157. if (this.nowDepart.id) this.getModel();
  158. }
  159. })
  160. getGoDownList({
  161. organizationId: this.$store.getters.organization.id,
  162. projectId: this.$store.getters.project.id
  163. }).then(res => {
  164. if (res.state) {
  165. this.goDownData = res.data;
  166. }
  167. })
  168. },
  169. returnChildren(data) {
  170. data.forEach(item => {
  171. if (item.id === this.propertyForm.operateDeviceLevelId) this.nowDepart = item;
  172. if (item.children && item.children.length == 0) item.children = null;
  173. if (item.children && item.children.length > 0) this.returnChildren(item.children);
  174. });
  175. },
  176. changePart() {
  177. this.propertyForm['operateDeviceLevelId'] = this.departId[this.departId.length - 1];
  178. this.nowDepart = this.$refs.cascader.getCheckedNodes(true)[0].data;
  179. },
  180. callback(type, code) {
  181. if (type === 'set') this.propertyForm.assetNumber = code;
  182. this.codeVisible = false;
  183. },
  184. changeGoDown(val) {
  185. this.propertyForm.godownName = this.goDownData.find(node => node.id == val).name;
  186. },
  187. getModel() {
  188. if (this.propertyForm.modelBindType === 2) {
  189. get3DModel({
  190. modelLevelId: this.nowDepart.modelLevelId,
  191. levelId: this.nowDepart.id
  192. }).then(res => {
  193. if (res.state) {
  194. this.modelList = res.data;
  195. }
  196. })
  197. }
  198. },
  199. returnForm() {
  200. this.propertyForm['modelBindPosition'] = JSON.stringify(this.position);
  201. return {
  202. formData: this.propertyForm,
  203. commonForm: {
  204. deviceLevelId: this.propertyForm.operateDeviceLevelId
  205. }
  206. }
  207. }
  208. },
  209. watch: {
  210. flowForm() {
  211. if (JSON.stringify(this.flowForm) === "{}") return;
  212. this.propertyForm = this.flowForm;
  213. this.getPartList();
  214. if (this.flowForm.modelBindPosition) this.position = JSON.parse(this.flowForm.modelBindPosition);
  215. }
  216. },
  217. components: {
  218. coding
  219. },
  220. }
  221. </script>
  222. <style lang="scss">
  223. .property-flow-form {
  224. .chart-input {
  225. display: flex;
  226. flex-wrap: wrap;
  227. justify-content: space-between;
  228. .line {
  229. width: 10px;
  230. }
  231. .el-input__prefix {
  232. position: absolute;
  233. height: 100%;
  234. left: 10px;
  235. top: 0;
  236. text-align: center;
  237. transition: none;
  238. }
  239. .el-input {
  240. flex: 1;
  241. .el-input__inner {
  242. padding-left: 30px;
  243. }
  244. }
  245. }
  246. }
  247. .option-item {
  248. img {
  249. width: 20px;
  250. margin-right: 5px;
  251. }
  252. }
  253. .coding-text {
  254. border-radius: $--border-radius-base;
  255. border: 1px solid $--border-color-light;
  256. padding: 0 12px;
  257. height: $--input-height;
  258. line-height: $--input-height;
  259. box-sizing: border-box;
  260. cursor: pointer;
  261. }
  262. </style>