index.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391
  1. <template>
  2. <div>
  3. <van-nav-bar
  4. title="计划反馈"
  5. left-text="返回"
  6. left-arrow
  7. @click-left="onClickLeft"
  8. />
  9. <div class="listcontent">
  10. <van-tabs v-model:active="active">
  11. <van-tab title="作业组">
  12. <div :style="`background:#fff;padding-top: 10px;max-height:${bodyheight-160}px;overflow-y: auto;`">
  13. <van-form>
  14. <van-cell-group inset>
  15. <van-field
  16. v-model="zxfkobj.gzz.fzr"
  17. name="负责人"
  18. label="负责人"
  19. placeholder="请输入负责人"
  20. />
  21. <van-field name="组员" label="组员">
  22. <template #input>
  23. <el-select
  24. v-model="zxfkobj.gzz.zy"
  25. multiple
  26. filterable
  27. allow-create
  28. default-first-option
  29. :reserve-keyword="false"
  30. placeholder="请输入组员"
  31. >
  32. <el-option
  33. v-for="item in allusers"
  34. :key="item.nickName"
  35. :label="item.nickName"
  36. :value="item.userId"
  37. />
  38. </el-select>
  39. </template>
  40. </van-field>
  41. <van-field
  42. v-model="zxfkobj.gzz.rs"
  43. name="人数"
  44. label="人数"
  45. type="number"
  46. placeholder="请输入人数"
  47. />
  48. <van-field
  49. v-model="zxfkobj.gzz.cq"
  50. name="城区"
  51. label="城区"
  52. is-link
  53. readonly
  54. placeholder="请选择城区"
  55. @click="showPicker = true"
  56. />
  57. <van-popup v-model:show="showPicker" position="bottom">
  58. <van-picker
  59. v-model="zxfkobj.gzz.cq"
  60. title="请选择城区"
  61. :columns="sys_area.map((i) => i.label)"
  62. @confirm="onConfirm"
  63. @cancel="showPicker = false"
  64. />
  65. </van-popup>
  66. <van-field
  67. v-model="zxfkobj.gzz.addrstart"
  68. name="管线起点"
  69. label="管线起点"
  70. placeholder="请输入地址"
  71. />
  72. <van-field
  73. v-model="zxfkobj.gzz.addrend"
  74. name="管线终点"
  75. label="管线终点"
  76. placeholder="请输入地址"
  77. />
  78. <van-field
  79. v-model="zxfkobj.gzz.starttime"
  80. name="开始时间"
  81. label="开始时间"
  82. is-link
  83. readonly
  84. placeholder="请选择日期"
  85. @click="showPicker1 = true"
  86. />
  87. <van-popup v-model:show="showPicker1" position="bottom">
  88. <van-datetime-picker
  89. v-model="taskdate"
  90. type="date"
  91. title="选择日期"
  92. @confirm="onConfirm1"
  93. @cancel="showPicker1 = false"
  94. />
  95. </van-popup>
  96. <van-field
  97. v-model="zxfkobj.gzz.endtime"
  98. name="结束时间"
  99. label="结束时间"
  100. is-link
  101. readonly
  102. placeholder="请选择日期"
  103. @click="showPicker2 = true"
  104. />
  105. <van-popup v-model:show="showPicker2" position="bottom">
  106. <van-datetime-picker
  107. v-model="taskdate1"
  108. type="date"
  109. title="选择日期"
  110. @confirm="onConfirm2"
  111. @cancel="showPicker2 = false"
  112. />
  113. </van-popup>
  114. <van-field
  115. v-model="zxfkobj.gzz.addr"
  116. name="作业地址"
  117. rows="2"
  118. autosize
  119. type="textarea"
  120. label="作业地址"
  121. placeholder="请输入地址"
  122. />
  123. <van-field
  124. v-model="zxfkobj.gzz.jcsb"
  125. name="作业方式"
  126. label="作业方式"
  127. placeholder="请输入"
  128. />
  129. <van-field
  130. v-model="zxfkobj.gzz.cars"
  131. name="车辆"
  132. label="车辆"
  133. placeholder="请输入车辆数"
  134. />
  135. <van-field
  136. v-model="zxfkobj.gzz.carnumber"
  137. name="车牌号"
  138. label="车牌号"
  139. placeholder="请输入车牌号"
  140. />
  141. <van-field name="作业图片" label="作业图片">
  142. <template #input>
  143. <ImageUpload v-model="zxfkobj.gzz.zyimages"></ImageUpload>
  144. </template>
  145. </van-field>
  146. <van-field name="工作图片" label="工作图片">
  147. <template #input>
  148. <ImageUpload v-model="zxfkobj.gzz.gzimages"></ImageUpload>
  149. </template>
  150. </van-field>
  151. </van-cell-group>
  152. </van-form>
  153. </div>
  154. </van-tab>
  155. <van-tab title="工作量">
  156. <div :style="`background:#fff;padding-top: 10px;max-height:${bodyheight-160}px;overflow-y: auto;`">
  157. <van-form>
  158. <van-cell-group inset>
  159. <van-field
  160. v-model="zxfkobj.gzl.gj"
  161. name="管径(mm)"
  162. label="管径(mm)"
  163. type="number"
  164. placeholder="请输入数量"
  165. />
  166. <van-field
  167. v-model="zxfkobj.gzl.dycd"
  168. name="对应长度(m)"
  169. label="对应长度(m)"
  170. type="number"
  171. placeholder="请输入数量"
  172. />
  173. <van-field
  174. v-model="zxfkobj.gzl.nl"
  175. name="泥量(方)"
  176. label="泥量(方)"
  177. type="number"
  178. placeholder="请输入数量"
  179. />
  180. <van-field
  181. v-model="zxfkobj.gzl.jcj"
  182. name="检查井(座)"
  183. label="检查井(座)"
  184. type="number"
  185. placeholder="请输入数量"
  186. />
  187. <van-field
  188. v-model="zxfkobj.gzl.ysk"
  189. name="雨水口(座)"
  190. label="雨水口(座)"
  191. type="number"
  192. placeholder="请输入数量"
  193. />
  194. <van-field
  195. v-model="zxfkobj.gzl.bz"
  196. name="箅子(个)"
  197. label="箅子(个)"
  198. type="number"
  199. placeholder="请输入数量"
  200. />
  201. <van-field
  202. v-model="zxfkobj.gzl.yskzg"
  203. name="雨水口支管(m)"
  204. label="雨水口支管(m)"
  205. type="number"
  206. placeholder="请输入数量"
  207. />
  208. <van-field
  209. v-model="zxfkobj.gzl.remark"
  210. name="备注"
  211. label="备注"
  212. rows="2"
  213. autosize
  214. type="textarea"
  215. placeholder="请输入"
  216. />
  217. <van-field
  218. v-model="zxfkobj.gzl.wnzyyy"
  219. name="未能作业原因"
  220. label="未能作业原因"
  221. rows="2"
  222. autosize
  223. type="textarea"
  224. placeholder="请输入"
  225. />
  226. <van-field
  227. v-model="zxfkobj.gzl.remark1"
  228. name="备注"
  229. label="备注"
  230. rows="2"
  231. autosize
  232. type="textarea"
  233. placeholder="请输入"
  234. />
  235. <van-field name="现场图片" label="现场图片">
  236. <template #input>
  237. <ImageUpload v-model="zxfkobj.gzl.images"></ImageUpload>
  238. </template>
  239. </van-field>
  240. </van-cell-group>
  241. </van-form>
  242. </div>
  243. </van-tab>
  244. </van-tabs>
  245. <div style="margin: 16px">
  246. <van-button round block type="primary" native-type="submit">
  247. 提交
  248. </van-button>
  249. </div>
  250. </div>
  251. </div>
  252. </template>
  253. <script setup>
  254. import { defineComponent, ref, onMounted, watch } from "vue";
  255. import { useRoute } from "vue-router";
  256. import ImageUpload from "@/components/ImageUpload";
  257. import FileUpload from "@/components/FileUpload";
  258. import VideoUpload from "@/components/VideoUpload";
  259. import { useDict } from "@/utils/dict";
  260. import moment from "moment";
  261. import {
  262. listMaintain,
  263. addMaintain,
  264. getMaintain,
  265. distributedMaintain,
  266. feedbackMaintain,
  267. completeMaintain,
  268. } from "@/api/system/maintain";
  269. import {
  270. changeUserStatus,
  271. listUser,
  272. resetUserPwd,
  273. delUser,
  274. getUser,
  275. updateUser,
  276. addUser,
  277. } from "@/api/system/user";
  278. const { maintain_status, maintain_type, sys_area } = useDict(
  279. "maintain_status",
  280. "maintain_type",
  281. "sys_area"
  282. );
  283. import router from "../../../../router";
  284. const STATICURL = import.meta.env.VITE_APP_BASE_API;
  285. const route = useRoute();
  286. const taskdate = ref(new Date());
  287. const taskdate1 = ref(new Date());
  288. const showPicker = ref(false);
  289. const showPicker1 = ref(false);
  290. const showPicker2 = ref(false);
  291. const bodyheight = ref(0);
  292. bodyheight.value = document.body.clientHeight - 48;
  293. if (!route.params.id || route.params.id == "undefined") {
  294. router.back();
  295. }
  296. const onConfirm = (value) => {
  297. zxfkobj.value.gzz.cq = value;
  298. showPicker.value = false;
  299. };
  300. const onConfirm1 = () => {
  301. showPicker1.value = false;
  302. zxfkobj.value.gzz.starttime = moment(taskdate.value).format("YYYY-MM-DD");
  303. };
  304. const onConfirm2 = () => {
  305. showPicker2.value = false;
  306. zxfkobj.value.gzz.endtime = moment(taskdate1.value).format("YYYY-MM-DD");
  307. };
  308. const active = ref(0);
  309. const zxfkobj = ref({
  310. gzz: {
  311. fzr: "",
  312. zy: "",
  313. rs: 1,
  314. starttime: "",
  315. endtime: "",
  316. addrstart: "",
  317. addrend: "",
  318. cq: "",
  319. addr: "",
  320. jcsb: "",
  321. cars: "",
  322. carnumber: "",
  323. zyimages: [],
  324. gzimages: [],
  325. },
  326. gzl: {
  327. gj: "",
  328. dycd: "",
  329. nl: "",
  330. jcj: "",
  331. ysk: "",
  332. bz: "",
  333. yskzg: "",
  334. remark: "",
  335. wnzyyy: "",
  336. remark1: "",
  337. images: [],
  338. },
  339. });
  340. const allusers = ref([]);
  341. onMounted(async () => {
  342. await listUser({ pageSize: 1000 }).then((res) => {
  343. allusers.value = res.rows;
  344. });
  345. getMaintain(Number(route.params.id))
  346. .then((res) => {
  347. var maintaininfo = res.data;
  348. if (Number(maintaininfo.status) > 1) {
  349. try {
  350. zxfkobj.value.gzz.fzr =
  351. allusers.value.filter(
  352. (i) =>
  353. i.userId.toString() ===
  354. JSON.parse(
  355. maintaininfo.maintainLogs.filter(
  356. (ii) => ii.maintainStatus === 2
  357. )[0].logDes
  358. ).fzr.toString()
  359. )[0]?.nickName ?? "-";
  360. } catch (e) {}
  361. }
  362. })
  363. .catch(function (error) {
  364. router.back();
  365. });
  366. });
  367. </script>
  368. <style lang="scss">
  369. body {
  370. position: fixed;
  371. width: 100%;
  372. top: -1px;
  373. }
  374. .el-select {
  375. width: 100%;
  376. }
  377. .listcontent {
  378. // overflow-y: auto;
  379. padding: 10px;
  380. }
  381. </style>