Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

userDefinedGroupPage.vue 7.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. <template>
  2. <!-- eslint-disable max-len -->
  3. <div>
  4. <div v-if="showField === false">
  5. <section class="intro-single">
  6. <div class="container">
  7. <div class="row">
  8. <div class="col-md-12 col-lg-8">
  9. <div class="title-single-box">
  10. <h2 class="title-single">User Defined Group</h2>
  11. </div>
  12. </div>
  13. </div>
  14. </div>
  15. </section>
  16. <div class="container">
  17. <div class="row mb-3">
  18. <div class="col-md-12">
  19. <form id="mainForm">
  20. <div v-if="userDefinedGroup" class="form-group row">
  21. <div class="col-md-4">
  22. <label>Description</label>
  23. <input
  24. class="form-control"
  25. type="text"
  26. name="description"
  27. id="description"
  28. v-model="userDefinedGroup.description"
  29. />
  30. </div>
  31. <div class="col-md-4">
  32. <label>Property Type</label>
  33. <select
  34. class="form-control"
  35. name="UsageType"
  36. id="UsageType"
  37. v-model="userDefinedGroup.usageType"
  38. >
  39. <option value="0">Residential</option>
  40. <option value="1">Commercial</option>
  41. <option value="2">Both</option>
  42. </select>
  43. </div>
  44. <div class="col-md-4">
  45. <label>Order</label>
  46. <input
  47. class="form-control"
  48. type="number"
  49. name="rank"
  50. id="rank"
  51. v-model="userDefinedGroup.rank"
  52. />
  53. </div>
  54. </div>
  55. <div v-if="!userDefinedGroup" class="form-group row">
  56. <div class="col-md-4">
  57. <label>Description</label>
  58. <input
  59. class="form-control"
  60. type="text"
  61. name="description"
  62. id="description"
  63. v-model="group.description"
  64. />
  65. </div>
  66. <div class="col-md-4">
  67. <label>Property Type</label>
  68. <select
  69. class="form-control"
  70. name="UsageType"
  71. id="UsageType"
  72. v-model="group.usageType"
  73. >
  74. <option value="0">Residential</option>
  75. <option value="1">Commercial</option>
  76. <option value="2">Both</option>
  77. </select>
  78. </div>
  79. <div class="col-md-4">
  80. <label>Order</label>
  81. <input
  82. class="form-control"
  83. type="number"
  84. name="rank"
  85. id="rank"
  86. v-model="group.rank"
  87. />
  88. </div>
  89. </div>
  90. </form>
  91. </div>
  92. </div>
  93. </div>
  94. <div class="container">
  95. <button
  96. type="button"
  97. @click="newItem()"
  98. class="btn btn-b-n"
  99. style="width: 85px; height:40px;"
  100. >New</button>
  101. <br />
  102. <table class="table table-bordered">
  103. <thead>
  104. <tr>
  105. <th>Field Name</th>
  106. <th>Field Type</th>
  107. <th>Order</th>
  108. <th></th>
  109. <th></th>
  110. </tr>
  111. </thead>
  112. <tbody>
  113. <tr v-for="(item, i) in userFields" :key="i">
  114. <td>{{item.fieldName}}</td>
  115. <td v-if="item.fieldType === 'text'">Text</td>
  116. <td v-else-if="item.fieldType === 'number'">Number</td>
  117. <td v-else>Yes / No</td>
  118. <td>{{item.rank}}</td>
  119. <td>
  120. <button
  121. type="button"
  122. @click="Edit(item)"
  123. class="btn btn-b-n"
  124. style="width: 85px; height:40px;"
  125. >Edit</button>
  126. </td>
  127. <td>
  128. <button
  129. type="button"
  130. @click="Delete(item)"
  131. class="btn btn-b-n"
  132. style="width: 85px; height:40px;"
  133. >Delete</button>
  134. </td>
  135. </tr>
  136. </tbody>
  137. </table>
  138. </div>
  139. <button
  140. type="button"
  141. @click="SubmitData()"
  142. class="btn btn-b-n"
  143. style="width: 85px; height:40px;"
  144. >Save</button>
  145. <button
  146. type="button"
  147. @click="Close()"
  148. class="btn btn-b-n"
  149. style="width: 85px; height:40px;"
  150. >Close</button>
  151. </div>
  152. <div v-else>
  153. <userFields @UpdateUserField="UpdateUserField" :field="item" />
  154. </div>
  155. </div>
  156. </template>
  157. <script>
  158. import { mapState, mapActions } from 'vuex';
  159. import userFields from './userDefinedField.vue';
  160. export default {
  161. name: 'UserDefinedGroup',
  162. components: {
  163. userFields,
  164. },
  165. data() {
  166. return {
  167. item: {},
  168. showField: false,
  169. };
  170. },
  171. mounted() {
  172. this.clearUserFields();
  173. this.clearUserGroup();
  174. if (this.$route.params.id > 0) {
  175. this.getUserDefinedGroup(this.$route.params.id);
  176. this.getUserFields(this.$route.params.id);
  177. }
  178. },
  179. computed: {
  180. ...mapState('propertyAdmin', [
  181. 'userDefinedGroup',
  182. 'userFields',
  183. 'userField',
  184. ]),
  185. },
  186. methods: {
  187. ...mapActions('propertyAdmin', [
  188. 'getUserDefinedGroup',
  189. 'getUserFields',
  190. 'saveUserDefinedGroup',
  191. 'updateUserDefinedGroup',
  192. 'clearUserGroup',
  193. 'clearUserFields',
  194. 'clearUserField',
  195. 'saveUserField',
  196. 'updateUserField',
  197. 'deleteUserField',
  198. ]),
  199. SubmitData() {
  200. this.userDefinedGroup.fields = [];
  201. let reload = false;
  202. if (this.$route.params.id > 0) {
  203. this.updateUserDefinedGroup(this.userDefinedGroup);
  204. this.userFields.forEach((fieldData) => {
  205. if (fieldData.id === 0) {
  206. fieldData.groupId = this.userDefinedGroup.id;
  207. this.saveUserField(fieldData);
  208. } else {
  209. this.updateUserField(fieldData);
  210. }
  211. });
  212. } else {
  213. reload = true;
  214. this.userFields.forEach((fieldData) => {
  215. this.userDefinedGroup.fields.push({
  216. fieldName: fieldData.fieldName,
  217. fieldType: fieldData.fieldType,
  218. rank: fieldData.rank,
  219. });
  220. });
  221. this.saveUserDefinedGroup(this.userDefinedGroup);
  222. }
  223. this.$router.push('/userDefinedGroups/list');
  224. // this.$router.push({
  225. // path: '/userDefinedGroups/list',
  226. // query: { reload },
  227. // });
  228. },
  229. newItem() {
  230. this.clearUserField();
  231. this.item = this.userField;
  232. this.item.groupId = this.userDefinedGroup.id;
  233. this.showField = true;
  234. },
  235. Edit(item) {
  236. this.item = item;
  237. this.showField = true;
  238. },
  239. Close() {
  240. this.$router.push('/userDefinedGroups/list');
  241. },
  242. UpdateUserField(item) {
  243. if (item.id === 0) {
  244. this.userFields.push(item);
  245. }
  246. this.showField = false;
  247. },
  248. Delete(item) {
  249. if (item.id === 0) {
  250. this.userFields.pop(this.userFields.find(p => p.id === item.id));
  251. } else {
  252. this.deleteUserField(item.id);
  253. }
  254. },
  255. },
  256. };
  257. </script>