add.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. <template>
  2. <zz-form :cols="formCols" :data="formData" :rules="formRules" labelWidth="120" ref="form">
  3. <template slot="communityId">
  4. <el-select class="width65" v-model="formData.communityId" clearable>
  5. <el-option
  6. :label="item.communityName"
  7. :value="item.id"
  8. v-for="item in $store.getters['getAreaSelect']"
  9. :key="item.id"
  10. ></el-option>
  11. </el-select>
  12. </template>
  13. <template slot="cameraSettings">
  14. <el-select class="width65" v-model="formData.cameraSettings" clearable>
  15. <el-option label="是" :value="1"></el-option>
  16. <el-option label="否" :value="0"></el-option>
  17. </el-select>
  18. </template>
  19. <template slot="typeValue">
  20. <el-cascader
  21. ref="typeValue"
  22. v-model="formData.typeValue"
  23. :props="defaultProps"
  24. :options="deviceArr"
  25. @change="deviceArrToggle"
  26. ></el-cascader>
  27. <div style="text-align: center; margin-top: 20px">
  28. <el-transfer
  29. style="text-align: left; display: inline-block"
  30. v-model="formData.deviceIds"
  31. filterable
  32. :props="{
  33. key: 'id',
  34. label: 'deviceName'
  35. }"
  36. :titles="['待选列表', '已选列表']"
  37. @change="handleChange"
  38. :data="devicesArr"
  39. >
  40. </el-transfer>
  41. </div>
  42. </template>
  43. <el-date-picker
  44. class="width100"
  45. slot="startDate"
  46. v-model="effectiveDate"
  47. value-format="yyyy-MM-dd "
  48. type="daterange"
  49. range-separator="至"
  50. start-placeholder="选择开始日期"
  51. end-placeholder="选择结束日期"
  52. @change="effectiveDateToggle"
  53. :editable="false"
  54. ></el-date-picker>
  55. <el-cascader
  56. ref="userName"
  57. v-model="formData.peopleId"
  58. :props="defaultProps"
  59. slot="peopleId"
  60. :options="findUser"
  61. @change="findUserToggle"
  62. ></el-cascader>
  63. </zz-form>
  64. </template>
  65. <script >
  66. export default {
  67. props: ['params'],
  68. data() {
  69. return {
  70. formData: {
  71. communityId: '',
  72. inspectionName: '',
  73. cameraSettings: '',
  74. peopleId: '',
  75. peopleName: '',
  76. startDate: '',
  77. endDate: '',
  78. deviceIds: [],
  79. type: '',
  80. typeValue: '',
  81. remark: ''
  82. },
  83. formRules: {
  84. communityId: [this.$valid.selectRequired('社区')],
  85. peopleId: [this.$valid.selectRequired('巡检人员')],
  86. startDate: [this.$valid.selectRequired('巡检时间')],
  87. inspectionName: [this.$valid.inputRequired('巡检计划名称')],
  88. address: this.$valid.custome({
  89. validator(rule, value, cb) {
  90. const rl = rule;
  91. let regExp = /^.{1,20}$/;
  92. if (!value) {
  93. rl.message = '请输入地址';
  94. cb(new Error());
  95. } else if (!regExp.test(value)) {
  96. rl.message = '不能超过20个字';
  97. cb(new Error());
  98. } else {
  99. cb();
  100. }
  101. }
  102. }),
  103. repairName: this.$valid.custome({
  104. validator(rule, value, cb) {
  105. const rl = rule;
  106. let regExp = /^.{1,20}$/;
  107. if (!value) {
  108. rl.message = '请输入报修人';
  109. cb(new Error());
  110. } else if (!regExp.test(value)) {
  111. rl.message = '不能超过20个字';
  112. cb(new Error());
  113. } else {
  114. cb();
  115. }
  116. }
  117. }),
  118. typeValue: [this.$valid.selectRequired('设备/设施类型')]
  119. },
  120. formCols: [
  121. [
  122. {
  123. label: '所属社区',
  124. prop: 'communityId',
  125. slot: 'communityId'
  126. },
  127. {
  128. label: '巡检计划名称',
  129. prop: 'inspectionName',
  130. input: true
  131. },
  132. {
  133. label: '设备/设施类型',
  134. prop: 'typeValue',
  135. slot: 'typeValue'
  136. },
  137. {
  138. label: '巡检时间',
  139. prop: 'startDate',
  140. slot: 'startDate'
  141. },
  142. {
  143. label: '巡检人员',
  144. prop: 'peopleId',
  145. slot: 'peopleId'
  146. },
  147. {
  148. label: '拍照要求',
  149. prop: 'cameraSettings',
  150. slot: 'cameraSettings'
  151. },
  152. {
  153. label: ' 备注信息',
  154. prop: 'remark',
  155. maxlength: '100',
  156. rows: 3,
  157. textarea: true
  158. }
  159. ]
  160. ],
  161. findUser: [],
  162. deviceArr: [],
  163. devicesArr: [],
  164. defaultProps: {
  165. value: 'id', // 唯一标识
  166. label: 'label', // 标签显示
  167. children: 'children',
  168. emitPath: false
  169. },
  170. effectiveDate: []
  171. };
  172. },
  173. methods: {
  174. submit() {
  175. new Promise((resolve) => {
  176. this.$refs.form.validate(resolve);
  177. }).then(() => {
  178. var loading = this.$loading();
  179. let url = '/sc-community/inspection/add';
  180. if (this.params.todo === 'edit') {
  181. url = '/sc-community/inspection/update';
  182. }
  183. this.$http
  184. .post(url, this.formData)
  185. .then(({ status, msg }) => {
  186. if (status == 0) {
  187. this.$message.success(msg);
  188. this.params.callback();
  189. this.$emit('close');
  190. } else {
  191. this.$message.error(msg);
  192. }
  193. loading.close();
  194. })
  195. .catch(() => {
  196. loading.close();
  197. });
  198. });
  199. },
  200. findUserToggle() {
  201. this.formData.peopleName = this.$refs.userName.getCheckedNodes()[0].label;
  202. },
  203. deviceArrToggle() {
  204. this.formData.type = this.$refs.typeValue.getCheckedNodes()[0].data.type;
  205. this.getTypes();
  206. },
  207. getTypes() {
  208. this.$http
  209. .get('/sc-community/inspection/getDevices', { type: this.formData.type, typeId: this.formData.typeValue })
  210. .then(({ data, msg }) => {
  211. this.devicesArr = data;
  212. });
  213. },
  214. handleChange(e) {
  215. console.log(this.rightChecked);
  216. },
  217. effectiveDateToggle(va) {
  218. let arr = va;
  219. if (!arr) {
  220. arr = ['', ''];
  221. }
  222. this.formData.startDate = arr[0];
  223. this.formData.endDate = arr[1];
  224. },
  225. getDetails(id, resolve) {
  226. this.$http.get('/sc-community/inspection/find/' + id).then(({ data, msg }) => {
  227. const {
  228. communityId,
  229. inspectionName,
  230. cameraSettings,
  231. peopleId,
  232. peopleName,
  233. startDate,
  234. endDate,
  235. remark,
  236. type,
  237. typeValue,
  238. id
  239. } = data;
  240. this.formData = {
  241. communityId: communityId,
  242. inspectionName: inspectionName,
  243. cameraSettings: cameraSettings,
  244. peopleId: peopleId,
  245. peopleName: peopleName,
  246. startDate: startDate,
  247. endDate: endDate,
  248. deviceIds: [],
  249. type: type,
  250. typeValue: typeValue,
  251. remark: remark,
  252. id: id
  253. };
  254. this.effectiveDate = [data.startDate, data.endDate];
  255. resolve && resolve(true);
  256. });
  257. },
  258. getSelectDevice(id) {
  259. this.$http.get('/sc-community/inspection/getInspectionDevices?id=' + id).then(({ data, msg }) => {
  260. if (!!data && data.length > 0) {
  261. let deviceIds = [];
  262. data.map((item) => {
  263. deviceIds.push(item.deviceId);
  264. });
  265. this.formData.deviceIds = deviceIds;
  266. }
  267. });
  268. }
  269. },
  270. created() {
  271. this.deviceArr = this.params.deviceArr;
  272. this.findUser = this.params.arrData;
  273. if (!!this.params.data && !!this.params.data.id) {
  274. new Promise((resolve) => {
  275. this.getDetails(this.params.data.id, resolve);
  276. }).then((_) => {
  277. this.getTypes();
  278. this.getSelectDevice(this.params.data.id);
  279. });
  280. }
  281. }
  282. };
  283. </script>
  284. <style scoped lang='scss' scoped>
  285. /deep/ .el-date-editor .el-range-separator {
  286. padding: 0;
  287. }
  288. </style>