工单小程序2024-11-20
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

374 lines
7.7 KiB

5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
  1. <template>
  2. <view class="page">
  3. <navbar :title="title" leftClick @leftClick="$utils.navigateBack" />
  4. <view class="info">
  5. <view class="Work-List">
  6. <view class="label">
  7. 部件名
  8. </view>
  9. <view class="text">
  10. <input type="text" v-model="StepOne.component"/>
  11. </view>
  12. </view>
  13. <view class="Work-List">
  14. <view class="label">
  15. 研发确认
  16. </view>
  17. <view class="text">
  18. <input type="text" v-model="StepOne.comfirmDevelop"/>
  19. </view>
  20. </view>
  21. <view class="Work-List">
  22. <view class="label">
  23. 品质确认
  24. </view>
  25. <view class="text">
  26. <input type="text" v-model="StepOne.comfirmQuality"/>
  27. </view>
  28. </view>
  29. <view class="Work-List">
  30. <view class="label">
  31. 中试确认
  32. </view>
  33. <view class="text">
  34. <input type="text" v-model="StepOne.comfirmTrial"/>
  35. </view>
  36. </view>
  37. <!-- <view class="Work-List">
  38. <view class="label">
  39. 备注
  40. </view>
  41. <view class="text">
  42. <input type="text" v-model="StepOne.remark"/>
  43. </view>
  44. </view> -->
  45. </view>
  46. <view class="list">
  47. <view class="item-box"
  48. :key="stepIndex"
  49. v-for="(step, stepIndex) in stepList">
  50. <view class="title">
  51. {{ step.name }}
  52. </view>
  53. <view class="list-box"
  54. :key="cIndex"
  55. v-for="(c, cIndex) in step.workorderItemCheckList">
  56. <view class="title">
  57. {{ c.name }}
  58. </view>
  59. <view class="item-input"
  60. :key="wi"
  61. v-for="(w, wi) in c.workorderParamStepfourList"
  62. >
  63. <!-- <uv-upload
  64. :fileList="w.fileList"
  65. :maxCount="10"
  66. multiple
  67. width="150rpx"
  68. height="150rpx"
  69. @delete="e => deleteImage(e, w)"
  70. @afterRead="e => afterRead(e, w)"
  71. :previewFullImage="true"></uv-upload> -->
  72. <view class="image-box">
  73. <view class="image"
  74. :key="xi"
  75. v-for="(x, xi) in 10">
  76. <image
  77. v-if="w['param' + (xi + 1)]"
  78. :src="w['param' + (xi + 1)]"
  79. @click="previewImage([w['param' + (xi + 1)]], 0)"
  80. mode="aspectFill"></image>
  81. <view class="add-image"
  82. v-else
  83. @click="upload(w, 'param' + (xi + 1))">
  84. <uv-icon
  85. size="40rpx"
  86. name="plus"
  87. color="#00000022"
  88. ></uv-icon>
  89. </view>
  90. <view class="delete"
  91. @click="del(w, 'param' + (xi + 1))"
  92. v-if="w['param' + (xi + 1)]">
  93. x
  94. </view>
  95. </view>
  96. </view>
  97. <view class="Work-List"
  98. >
  99. <view class="label">
  100. 作业员
  101. </view>
  102. <view class="text">
  103. <input type="text"
  104. style="width: 450rpx;"
  105. v-model="w.operator"/>
  106. </view>
  107. </view>
  108. </view>
  109. </view>
  110. </view>
  111. </view>
  112. <view class="uni-color-btn"
  113. @click="submit">
  114. 保存
  115. </view>
  116. </view>
  117. </template>
  118. <script>
  119. export default {
  120. data() {
  121. return {
  122. id: 0,
  123. StepOne: {},
  124. stepList : [],
  125. index : 1,
  126. title : '',
  127. }
  128. },
  129. onLoad(arg) {
  130. this.id = arg.id
  131. this.index = arg.index || 2
  132. this.title = arg.name
  133. this.queryStepFour()
  134. this.queryTemplateById()
  135. },
  136. methods: {
  137. queryStepFour() {
  138. this.$api('queryStepFour', {
  139. templateId: this.id
  140. }, res => {
  141. if (res.code == 200) {
  142. this.StepOne = res.result.workorderGeneralStepfour
  143. }
  144. })
  145. },
  146. // 根据id获取工单详情
  147. queryTemplateById(){
  148. this.$api('queryTemplateById', {
  149. templateId : this.id
  150. }, res =>{
  151. if(res.code == 200){
  152. let p = res.result.workorderStepList[this.index]
  153. // for(let i = 0;i < p.workorderProcessList.length;i++){
  154. // let step = p.workorderProcessList[i]
  155. // for(let j = 0;j < step.workorderItemCheckList.length;j++){
  156. // let check = step.workorderItemCheckList[j]
  157. // for(let k = 0;k < check.workorderParamStepfourList.length;k++){
  158. // let params = check.workorderParamStepfourList[k]
  159. // params.fileList = []
  160. // for(let p = 0;p < 10;p++){
  161. // let url = params['param' + (p + 1)]
  162. // if(url){
  163. // params.fileList.push({
  164. // url
  165. // })
  166. // }
  167. // }
  168. // }
  169. // }
  170. // }
  171. this.stepList = p.workorderProcessList
  172. }
  173. })
  174. },
  175. //工单信息-修改工序参数-工序卡1(选配)
  176. updateParamStepOne(item){
  177. return new Promise((success, error) => {
  178. let data = JSON.parse(JSON.stringify(item))
  179. delete data.updateBy
  180. delete data.updateTime
  181. delete data.createBy
  182. delete data.createTime
  183. this.$api('updateParamStepFour', data, res => {
  184. if(res.code == 200){
  185. success(res)
  186. }else{
  187. error(res)
  188. }
  189. })
  190. })
  191. },
  192. async submit(){
  193. console.log(this.stepList);
  194. let StepOne = JSON.parse(JSON.stringify(this.StepOne))
  195. delete StepOne.updateBy
  196. delete StepOne.updateTime
  197. delete StepOne.createBy
  198. delete StepOne.createTime
  199. // 修改常规参数
  200. this.$api('updateGeneralStepFour', StepOne, res => {
  201. })
  202. uni.showToast({
  203. title: '保存中...',
  204. icon: 'none'
  205. })
  206. // 任务列表
  207. let tasks = []
  208. for(let i = 0;i < this.stepList.length;i++){
  209. let step = this.stepList[i]
  210. for(let j = 0;j < step.workorderItemCheckList.length;j++){
  211. let check = step.workorderItemCheckList[j]
  212. for(let k = 0;k < check.workorderParamStepfourList.length;k++){
  213. let params = check.workorderParamStepfourList[k]
  214. // 将请求添加到任务
  215. tasks.push(this.updateParamStepOne(params))
  216. }
  217. }
  218. }
  219. // 等待任务所有完成
  220. await Promise.all(tasks)
  221. uni.showToast({
  222. title: '保存成功',
  223. icon: 'none'
  224. })
  225. setTimeout(uni.navigateBack, 1000, -1)
  226. },
  227. upload(w, key){
  228. this.$Oss.ossUploadImage({
  229. success : url => {
  230. w[key] = url
  231. }
  232. })
  233. },
  234. del(w, key){
  235. w[key] = ''
  236. },
  237. // deleteImage(e, w){
  238. // w.fileList.splice(e.index, 1)
  239. // },
  240. // afterRead(e, w){
  241. // let self = this
  242. // e.file.forEach(file => {
  243. // self.$Oss.ossUpload(file.url).then(url => {
  244. // w.fileList.push({
  245. // url
  246. // })
  247. // })
  248. // })
  249. // },
  250. }
  251. }
  252. </script>
  253. <style scoped lang="scss">
  254. .page{
  255. padding-bottom: 200rpx;
  256. .Work-List{
  257. display: flex;
  258. padding: 16rpx 0rpx;
  259. align-items: center;
  260. .label{
  261. width: 200rpx;
  262. flex-shrink: 0;
  263. }
  264. .text{
  265. input{
  266. background-color: #eee;
  267. padding: 10rpx 20rpx;
  268. border-radius: 20rpx;
  269. }
  270. }
  271. }
  272. .info{
  273. padding: 30rpx;
  274. input{
  275. width: 430rpx;
  276. }
  277. }
  278. .list{
  279. padding: 0 30rpx;
  280. .list-box{
  281. padding: 20rpx 0;
  282. padding-left: 40rpx;
  283. .item-input{
  284. padding-left: 40rpx;
  285. .label{
  286. width: 130rpx;
  287. }
  288. .image-box{
  289. display: flex;
  290. width: 100%;
  291. flex-shrink: 0;
  292. flex-wrap: wrap;
  293. .image{
  294. width: 100rpx;
  295. height: 100rpx;
  296. margin: 10rpx;
  297. position: relative;
  298. image{
  299. width: 100%;
  300. height: 100%;
  301. border-radius: 20rpx;
  302. }
  303. .add-image{
  304. width: 100%;
  305. height: 100%;
  306. display: flex;
  307. justify-content: center;
  308. align-items: center;
  309. border: 1rpx solid #00000022;
  310. border-radius: 20rpx;
  311. }
  312. .delete{
  313. width: 30rpx;
  314. height: 30rpx;
  315. background-color: #00000066;
  316. color: #fff;
  317. position: absolute;
  318. right: 0;
  319. top: 0;
  320. font-size: 22rpx;
  321. display: flex;
  322. justify-content: center;
  323. align-items: center;
  324. }
  325. }
  326. }
  327. }
  328. }
  329. input{
  330. width: 320rpx;
  331. }
  332. }
  333. }
  334. </style>