index.vue 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. <template>
  2. <view class="container">
  3. <page-title>问题录入</page-title>
  4. <view class="cards-list">
  5. <view class="card only-card">
  6. <!-- 项目名称 -->
  7. <view class="card-item first-card-item">
  8. <view class="card-item-name">项目名称</view>
  9. <view class="card-item-description">{{pageForm.subName || "--"}}</view>
  10. </view>
  11. <!-- 监管单位 -->
  12. <view class="card-item">
  13. <view class="card-item-name">监管单位</view>
  14. <view class="card-item-description">{{pageForm.manage || "--"}}</view>
  15. </view>
  16. <!-- 项目内容 -->
  17. <view class="card-item">
  18. <view class="card-item-name">项目内容</view>
  19. </view>
  20. <view class="card-item">
  21. <u--textarea v-model="pageForm.subContent" disabled class="card-item-textarea"></u--textarea>
  22. </view>
  23. <!-- 问题类型 -->
  24. <view class="card-item">
  25. <view class="card-item-name">问题类型</view>
  26. <view class="card-item-description" @click="kindChooseOpen()">
  27. <view v-if="pageForm.kind">{{pageForm.kind}}</view>
  28. <view v-else class="remind-text">请选择类型</view>
  29. <u-icon name="arrow-right" color="#343437" size="16" customStyle="margin:auto 0 auto 10rpx"></u-icon>
  30. </view>
  31. </view>
  32. <!-- 问题来源 -->
  33. <view class="card-item">
  34. <view class="card-item-name">问题来源</view>
  35. <view class="card-item-description" @click="sourceChooseOpen()">
  36. <view v-if="pageForm.source">{{pageForm.source}}</view>
  37. <view v-else class="remind-text">请选择来源</view>
  38. <u-icon name="arrow-right" color="#343437" size="16" customStyle="margin:auto 0 auto 10rpx"></u-icon>
  39. </view>
  40. </view>
  41. <!-- 当前问题描述 -->
  42. <view class="card-item">
  43. <view class="card-item-name">当前问题描述</view>
  44. </view>
  45. <view class="card-item">
  46. <u--textarea v-model="pageForm.title" class="card-item-textarea"></u--textarea>
  47. </view>
  48. <!-- 要求完成日期 -->
  49. <view class="card-item">
  50. <view class="card-item-name">要求完成日期</view>
  51. <view class="card-item-description" @click="timeChooseOpen()">
  52. <view v-if="pageForm.date_conf">{{pageForm.date_conf}}</view>
  53. <view v-else class="remind-text">请选择日期</view>
  54. <u-icon name="arrow-right" color="#343437" size="16" customStyle="margin:auto 0 auto 10rpx"></u-icon>
  55. </view>
  56. </view>
  57. <!-- 附件 -->
  58. <view class="card-item flex-align-start">
  59. <view class="card-item-name">附件</view>
  60. <u-upload :fileList="uploadList" :maxCount="1" @afterRead="afterRead" @delete="delFile" name="file"
  61. uploadIcon="plus"></u-upload>
  62. </view>
  63. </view>
  64. <view class="confirm-btn" @click="confirmParams()">保存</view>
  65. <!-- 问题类型选择 -->
  66. <u-picker :show="kindShow" :columns="kindList" @confirm="kindChooseClose" @cancel="kindChooseClose"
  67. @close="kindChooseClose" closeOnClickOverlay></u-picker>
  68. <!-- 问题来源选择 -->
  69. <u-picker :show="sourceShow" :columns="sourceList" @confirm="sourceChooseClose" @cancel="sourceChooseClose"
  70. @close="sourceChooseClose" closeOnClickOverlay></u-picker>
  71. <!-- 要求完成日期选择 -->
  72. <u-datetime-picker :show="timeShow" @confirm="timeChooseClose" @cancel="timeChooseClose" @close="timeChooseClose"
  73. v-model="date_conf" mode="date" closeOnClickOverlay></u-datetime-picker>
  74. </view>
  75. </view>
  76. </template>
  77. <script setup>
  78. import {
  79. ref
  80. } from "vue"
  81. import {
  82. onLoad,
  83. } from "@dcloudio/uni-app"
  84. import config from '@/config.js'
  85. import {
  86. timeFormat
  87. } from "@/utils/timeFormatter.js"
  88. import {
  89. uploadFilePromise
  90. } from "@/utils/request_new.js"
  91. import {
  92. getQuestionInputById,
  93. saveQuestionInputById
  94. } from "@/api/work/questionInputAndTrace.js"
  95. // 获取问题详情
  96. function getQuestionDetail(paramData) {
  97. getQuestionInputById(paramData).then(res => {
  98. pageForm.value.id = res.data.subId;
  99. pageForm.value.subName = res.data.subName;
  100. pageForm.value.manage = res.data.manage;
  101. pageForm.value.subContent = res.data.subContent;
  102. kindList.value.push(res.data.wtlx.map(item => item.title));
  103. kindChooseList.value = res.data.wtlx;
  104. sourceList.value.push(res.data.wtly.map(item => item.title));
  105. sourceChooseList.value = res.data.wtly;
  106. })
  107. }
  108. // 主要数据
  109. let pageForm = ref({
  110. id: null,
  111. subName: null,
  112. manage: null,
  113. subContent: null,
  114. kind: null,
  115. source: null,
  116. title: null,
  117. date_conf: null,
  118. file_name: null,
  119. file_addre: null,
  120. file_type: null,
  121. })
  122. // ====================类型列表
  123. let kindList = ref([]);
  124. let kindChooseList = ref([]);
  125. let kindShow = ref(false);
  126. function kindChooseOpen() {
  127. kindShow.value = true
  128. }
  129. function kindChooseClose(e) {
  130. if (e) pageForm.value.kind = e.value[0]
  131. kindShow.value = false
  132. }
  133. // ====================来源列表
  134. let sourceList = ref([]);
  135. let sourceChooseList = ref([]);
  136. let sourceShow = ref(false);
  137. function sourceChooseOpen() {
  138. sourceShow.value = true
  139. }
  140. function sourceChooseClose(e) {
  141. if (e) pageForm.value.source = e.value[0]
  142. sourceShow.value = false
  143. }
  144. // ====================要求完成日期
  145. let date_conf = ref(null);
  146. let timeShow = ref(false);
  147. function timeChooseOpen() {
  148. timeShow.value = true;
  149. }
  150. function timeChooseClose(e) {
  151. if (e) {
  152. let time = timeFormat(e.value);
  153. pageForm.value.date_conf = time;
  154. }
  155. timeShow.value = false;
  156. }
  157. // ====================附件上传
  158. let uploadList = ref([])
  159. // 上传文件操作
  160. async function afterRead(event) {
  161. let lists = [].concat(event.file);
  162. let fileListLen = uploadList.value.length;
  163. lists.map((item) => {
  164. uploadList.value.push({
  165. ...item,
  166. status: 'uploading',
  167. message: '上传中'
  168. })
  169. })
  170. for (let i = 0; i < lists.length; i++) {
  171. const resultObj = await uploadFilePromise(lists[i].url);
  172. // let resultObj = JSON.parse(result);
  173. // 给表单赋值
  174. pageForm.value.file_name = resultObj.data.resultList[0].name;
  175. pageForm.value.file_addre = resultObj.data.resultList[0].id;
  176. pageForm.value.file_type = resultObj.data.resultList[0].ftype
  177. // 取消上传中状态
  178. let item = uploadList.value[fileListLen]
  179. uploadList.value.splice(fileListLen, 1, Object.assign(item, {
  180. status: 'success',
  181. message: '',
  182. url: resultObj.data.resultList[0].pathName
  183. }))
  184. fileListLen++
  185. }
  186. }
  187. // 删除文件
  188. function delFile(event) {
  189. uploadList.value.splice(event.index, 1);
  190. pageForm.value.file_name = null;
  191. pageForm.value.file_addre = null;
  192. pageForm.value.file_type = null;
  193. }
  194. // ====================提交数据
  195. function confirmParams() {
  196. let kind_sourceid = sourceChooseList.value.find(item => item.title === pageForm.value.source)?.id;
  197. let kind_typeid = kindChooseList.value.find(item => item.title === pageForm.value.kind)?.id;
  198. let date_conf = pageForm.value.date_conf ? pageForm.value.date_conf.replaceAll("/", "-") : null
  199. let params = {
  200. kind_sourceid,
  201. kind_typeid,
  202. date_conf,
  203. sub_id: pageForm.value.id,
  204. title: pageForm.value.title,
  205. file_name: pageForm.value.file_name,
  206. file_addre: pageForm.value.file_addre,
  207. file_type: pageForm.value.file_type,
  208. }
  209. saveQuestionInputById(params).then(res => {
  210. if (res.success) {
  211. uni.showToast({
  212. title: "提交成功。",
  213. icon: "success",
  214. duration: 2000
  215. })
  216. }
  217. })
  218. }
  219. onLoad(options => {
  220. let now = new Date()
  221. date_conf.value = timeFormat(now)
  222. getQuestionDetail(options)
  223. })
  224. </script>
  225. <style lang="scss">
  226. ::v-deep .u-upload__button {
  227. margin-left: 30rpx;
  228. background-color: #EAF0FA;
  229. border-radius: 20rpx;
  230. }
  231. </style>