赫艾前端
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.

1038 lines
41 KiB

3 years ago
2 years ago
3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
1 year ago
3 years ago
1 year ago
3 years ago
1 year ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
1 year ago
3 years ago
1 year ago
3 years ago
3 years ago
1 year ago
3 years ago
3 years ago
3 years ago
1 year ago
3 years ago
1 year ago
3 years ago
2 years ago
3 years ago
1 year ago
3 years ago
3 years ago
3 years ago
1 year ago
3 years ago
3 years ago
3 years ago
3 years ago
1 year ago
3 years ago
1 year ago
3 years ago
1 year ago
1 year ago
1 year ago
3 years ago
2 years ago
2 years ago
1 year ago
3 years ago
1 year ago
3 years ago
3 years ago
3 years ago
1 year ago
3 years ago
1 year ago
3 years ago
1 year ago
3 years ago
2 years ago
3 years ago
1 year ago
3 years ago
3 years ago
1 year ago
3 years ago
1 year ago
3 years ago
1 year ago
1 year ago
3 years ago
1 year ago
3 years ago
1 year ago
3 years ago
3 years ago
3 years ago
1 year ago
3 years ago
3 years ago
1 year ago
3 years ago
1 year ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
3 years ago
1 year ago
3 years ago
1 year ago
3 years ago
1 year ago
3 years ago
  1. <template>
  2. <div class="mod-config">
  3. <el-form :inline="true" label-position="top" label-width="100px" >
  4. <el-form-item :label="'派工单号:'">
  5. <el-input v-model="searchData.seqNo" type="number" style="width: 80px"></el-input>
  6. </el-form-item>
  7. <el-form-item :label="'反馈日期:'">
  8. <el-date-picker
  9. style="width: 120px"
  10. v-model="searchData.startDate"
  11. value-format="yyyy-MM-dd"
  12. placeholder="选择日期">
  13. </el-date-picker>
  14. </el-form-item>
  15. <el-form-item style="margin-top: 23px;">
  16. <laber style="margin-left: -9px;font-size: 19px">&#10142</laber>
  17. </el-form-item>
  18. <el-form-item :label="' '">
  19. <el-date-picker
  20. style="width: 120px"
  21. v-model="searchData.endDate"
  22. type="date"
  23. value-format="yyyy-MM-dd"
  24. placeholder="选择日期">
  25. </el-date-picker>
  26. </el-form-item>
  27. <el-form-item label="异常情况原因:" >
  28. <el-select v-model="searchData.abnormalCode" style="width: 120px">
  29. <el-option label="全部" value="" ></el-option>
  30. <el-option
  31. v-for="(item,index) in abnormalList"
  32. :key="index"
  33. :label="item.abnormalDesc"
  34. :value="item.abnormalCode"
  35. >
  36. </el-option>
  37. </el-select>
  38. </el-form-item>
  39. <el-form-item label="状态:" >
  40. <el-select v-model="searchData.status" style="width: 120px">
  41. <el-option label="全部" value=""></el-option>
  42. <el-option label="已录入" value="已录入"></el-option>
  43. <el-option label="已填写紧急处理" value="已填写紧急处理"></el-option>
  44. <el-option label="已填写长久处理" value="已填写长久处理"></el-option>
  45. <el-option label="已完结" value="已完结"></el-option>
  46. </el-select>
  47. </el-form-item>
  48. <el-form-item :label="'操作员姓名:'">
  49. <el-input v-model="searchData.operatorDesc" style="width: 80px"></el-input>
  50. </el-form-item>
  51. <el-form-item :label="'物料规格型号:'">
  52. <el-input v-model="searchData.partDesc" style="width: 80px"></el-input>
  53. </el-form-item>
  54. <el-form-item label=" " >
  55. <el-button @click="search()" style="margin-left: 0px;margin-top: 0px" type="primary">查询</el-button>
  56. <el-button @click="addAbnormal()" style="margin-left: 0px;margin-top: 0px" type="primary">新增</el-button>
  57. <download-excel
  58. :fields="exportDataStandard"
  59. :data="tableData"
  60. type="xlsx"
  61. :name="exportName"
  62. :header="exportHeader"
  63. :footer="exportFooter"
  64. :defaultValue="exportDefaultValue"
  65. :fetch="createExportData"
  66. :before-generate="startDownload"
  67. :before-finish="finishDownload"
  68. worksheet="导出信息"
  69. class="el-button el-button--primary el-button--medium">
  70. {{'导出'}}
  71. </download-excel>
  72. </el-form-item>
  73. </el-form>
  74. <el-table
  75. :height="height"
  76. :data="tableData"
  77. border
  78. style="width: 100%">
  79. <el-table-column
  80. prop="site"
  81. header-align="center"
  82. align="left"
  83. width="60"
  84. label="工厂编号">
  85. </el-table-column>
  86. <el-table-column
  87. prop="orderNo"
  88. header-align="center"
  89. align="left"
  90. width="80"
  91. label="生产订单">
  92. </el-table-column>
  93. <el-table-column
  94. prop="seqNo"
  95. header-align="center"
  96. align="left"
  97. width="60"
  98. label="派工单号">
  99. </el-table-column>
  100. <el-table-column
  101. prop="partNo"
  102. header-align="center"
  103. align="left"
  104. width="60"
  105. label="物料编码">
  106. </el-table-column>
  107. <el-table-column
  108. prop="partDesc"
  109. header-align="center"
  110. align="left"
  111. width="140"
  112. label="规格型号">
  113. </el-table-column>
  114. <el-table-column
  115. prop="operatorDesc"
  116. header-align="center"
  117. align="left"
  118. width="60"
  119. label="操作员">
  120. </el-table-column>
  121. <el-table-column
  122. prop="productionLineDesc"
  123. header-align="center"
  124. align="left"
  125. width="60"
  126. label="生产线">
  127. </el-table-column>
  128. <el-table-column
  129. prop="feedbackDate"
  130. header-align="center"
  131. align="left"
  132. width="130"
  133. label="反馈时间">
  134. </el-table-column>
  135. <el-table-column
  136. prop="feedbackBy"
  137. header-align="center"
  138. align="left"
  139. width="80"
  140. label="反馈人">
  141. </el-table-column>
  142. <el-table-column
  143. prop="status"
  144. header-align="center"
  145. align="left"
  146. width="100"
  147. label="状态">
  148. </el-table-column>
  149. <el-table-column
  150. prop="abnormalDesc"
  151. header-align="center"
  152. align="left"
  153. width="100"
  154. label="异常原因">
  155. </el-table-column>
  156. <el-table-column
  157. prop="abnormalQty"
  158. header-align="center"
  159. align="right"
  160. width="100"
  161. label="异常数量">
  162. </el-table-column>
  163. <el-table-column
  164. prop="abnormalInfluence"
  165. header-align="center"
  166. align="left"
  167. width="120"
  168. label="异常情况影响分析">
  169. </el-table-column>
  170. <el-table-column
  171. prop="abnormalRemark"
  172. header-align="center"
  173. align="left"
  174. min-width="300"
  175. label="异常描述">
  176. </el-table-column>
  177. <el-table-column
  178. fixed="right"
  179. header-align="center"
  180. align="center"
  181. width="300"
  182. label="操作">
  183. <template slot-scope="scope">
  184. <a type="text" size="small" @click="getFileModel(scope.row)">附件</a>
  185. <a type="text" size="small" @click="getDetailModel(scope.row)">查看</a>
  186. <a type="text" size="small" @click="doPrint(scope.row)">打印</a>
  187. <a type="text" size="small" v-if="scope.row.status!='已完结'" @click="getDetailModel2(scope.row)">紧急处理方式</a>
  188. <a type="text" size="small" v-if="scope.row.status!='已完结'" @click="getDetailModel3(scope.row)">长久处理方式</a>
  189. <a type="text" size="small" v-if="scope.row.status!='已录入'&&scope.row.status!='已完结'&&isAuth('sys:abnormal:close')" @click="closeFeedBack(scope.row)">结束</a>
  190. <a type="text" size="small" v-if="scope.row.status=='已完结'" @click="openFeedBack(scope.row)">开启</a>
  191. </template>
  192. </el-table-column>
  193. </el-table>
  194. <el-dialog title="新增反馈" :close-on-click-modal="false" v-drag :visible.sync="addModalFlag" width="620px" >
  195. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: -5px;">
  196. <el-form-item :label="'异常原因:'">
  197. <el-select v-model="addData.abnormalCode" style="width: 120px">
  198. <el-option
  199. v-for="(item,index) in abnormalList"
  200. :key="index"
  201. :label="item.abnormalDesc"
  202. :value="item.abnormalCode"
  203. >
  204. </el-option>
  205. </el-select>
  206. </el-form-item>
  207. <el-form-item :label="'派工单号:'">
  208. <el-input v-model="addData.seqNo" type="number" @blur="seqNoCheck()" style="width: 85px"></el-input>
  209. </el-form-item>
  210. <el-form-item :label="'生产订单:'">
  211. <el-input v-model="addData.orderNo" disabled style="width: 100px"></el-input>
  212. </el-form-item>
  213. <el-form-item :label="'机台:'">
  214. <el-input v-model="addData.resourceDesc" disabled style="width: 100px"></el-input>
  215. </el-form-item>
  216. <el-form-item :label="'班次:'">
  217. <el-input v-model="addData.shiftNo" disabled style="width: 100px"></el-input>
  218. </el-form-item>
  219. </el-form>
  220. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: 0px;">
  221. <el-form-item :label="'异常数量:'">
  222. <el-input v-model="addData.abnormalQty" type="number" style="width: 85px"></el-input>
  223. </el-form-item>
  224. <el-form-item :label="'异常情况影响分析:'">
  225. <el-input v-model="addData.abnormalInfluence" style="width: 463px"></el-input>
  226. </el-form-item>
  227. </el-form>
  228. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: 0px;">
  229. <el-form-item label="异常情况描述(派工单0:表示混炼胶异常反馈;-1:表示产品发货异常反馈;-2:客户投诉异常反馈;-3:设备维修保养;-4:工具维修保养)">
  230. <el-input v-model="addData.abnormalRemark" type="textarea" :rows="3" resize='none' style="width: 562px"></el-input>
  231. </el-form-item>
  232. </el-form>
  233. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: 50px;">
  234. <el-upload drag :file-list="fileList"
  235. action="javascript:void(0);" ref="uploadFile"
  236. :on-change="onChange"
  237. multiple :auto-upload="false"
  238. style="text-align: left;">
  239. <i class="el-icon-upload"></i>
  240. <div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
  241. </el-upload>
  242. </el-form>
  243. <el-footer style="height:30px;margin-top: 10px;text-align:center">
  244. <el-button type="primary" @click="saveAbnormalData()" >保存</el-button>
  245. <el-button type="primary" @click="addModalFlag = false">取消</el-button>
  246. </el-footer>
  247. </el-dialog>
  248. <el-dialog title="异常反馈" :close-on-click-modal="false" v-drag :visible.sync="modalFlag" width="650px" >
  249. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: -5px;">
  250. <span style="font-size: 12px">异常原因:</span>
  251. <el-input v-model="abnormalFeedBackData.abnormalDesc" disabled style="width: 180px"></el-input>
  252. </el-form>
  253. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: 0px;">
  254. <el-form-item label="异常情况描述">
  255. <el-input v-model="abnormalFeedBackData.abnormalRemark" type="textarea" :disabled="disableFlag1" :rows="3" resize='none' style="width: 562px"></el-input>
  256. </el-form-item>
  257. </el-form>
  258. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: 40px;">
  259. <el-form-item label="报废状态1">
  260. <el-select filterable v-model="abnormalFeedBackData.scrapType1" clearable style="width: 95px">
  261. <el-option :label="item.label" :value="item.label" v-for="(item,index) in scrapTypeList "
  262. :key="index"></el-option>
  263. </el-select>
  264. </el-form-item>
  265. <el-form-item label="报废状态2">
  266. <el-select filterable v-model="abnormalFeedBackData.scrapType2" clearable style="width: 95px">
  267. <el-option :label="item.label" :value="item.label" v-for="(item,index) in scrapTypeList "
  268. :key="index"></el-option>
  269. </el-select>
  270. </el-form-item>
  271. <el-form-item label="报废状态3">
  272. <el-select filterable v-model="abnormalFeedBackData.scrapType3" clearable style="width: 95px">
  273. <el-option :label="item.label" :value="item.label" v-for="(item,index) in scrapTypeList "
  274. :key="index"></el-option>
  275. </el-select>
  276. </el-form-item>
  277. <el-form-item label="报废状态4">
  278. <el-select filterable v-model="abnormalFeedBackData.scrapType4" clearable style="width: 95px">
  279. <el-option :label="item.label" :value="item.label" v-for="(item,index) in scrapTypeList "
  280. :key="index"></el-option>
  281. </el-select>
  282. </el-form-item>
  283. <el-form-item label="报废状态5">
  284. <el-select filterable v-model="abnormalFeedBackData.scrapType5" clearable style="width: 95px">
  285. <el-option :label="item.label" :value="item.label" v-for="(item,index) in scrapTypeList "
  286. :key="index"></el-option>
  287. </el-select>
  288. </el-form-item>
  289. </el-form>
  290. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: 0px;">
  291. <el-form-item label="报废原因1">
  292. <el-select filterable v-model="abnormalFeedBackData.scrapReason1" clearable style="width: 95px">
  293. <el-option :label="item.label" :value="item.label" v-for="(item,index) in scrapReasonList "
  294. :key="index"></el-option>
  295. </el-select>
  296. </el-form-item>
  297. <el-form-item label="报废原因2">
  298. <el-select filterable v-model="abnormalFeedBackData.scrapReason2" clearable style="width: 95px">
  299. <el-option :label="item.label" :value="item.label" v-for="(item,index) in scrapReasonList "
  300. :key="index"></el-option>
  301. </el-select>
  302. </el-form-item>
  303. <el-form-item label="报废原因3">
  304. <el-select filterable v-model="abnormalFeedBackData.scrapReason3" clearable style="width: 95px">
  305. <el-option :label="item.label" :value="item.label" v-for="(item,index) in scrapReasonList "
  306. :key="index"></el-option>
  307. </el-select>
  308. </el-form-item>
  309. <el-form-item label="报废原因4">
  310. <el-select filterable v-model="abnormalFeedBackData.scrapReason4" clearable style="width: 95px">
  311. <el-option :label="item.label" :value="item.label" v-for="(item,index) in scrapReasonList "
  312. :key="index"></el-option>
  313. </el-select>
  314. </el-form-item>
  315. <el-form-item label="报废原因5">
  316. <el-select filterable v-model="abnormalFeedBackData.scrapReason5" clearable style="width: 95px">
  317. <el-option :label="item.label" :value="item.label" v-for="(item,index) in scrapReasonList "
  318. :key="index"></el-option>
  319. </el-select>
  320. </el-form-item>
  321. </el-form>
  322. <el-form :inline="true" label-position="top" style="margin-left: 7px;">
  323. <el-form-item label="紧急处理方式">
  324. <el-input v-model="abnormalFeedBackData.treatmentTemporary" type="textarea" :disabled="disableFlag2" :rows="3" resize='none' style="width: 562px"></el-input>
  325. </el-form-item>
  326. </el-form>
  327. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: 40px;">
  328. <el-form-item label="临时性措施结论">
  329. <el-input v-model="abnormalFeedBackData.temporaryConclusion" type="textarea" :disabled="disableFlag2" :rows="3" resize='none' style="width: 562px"></el-input>
  330. </el-form-item>
  331. </el-form>
  332. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: 40px;">
  333. <span style="font-size: 12px">工艺变更记录:</span>
  334. </el-form>
  335. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: 0px;">
  336. <span style="font-size: 12px">&nbsp温度&nbsp&nbsp&nbsp</span> <el-input v-model="abnormalFeedBackData.temperatureTemporary" :disabled="disableFlag2" style="width: 70px"></el-input>
  337. <span style="font-size: 12px">压力&nbsp&nbsp&nbsp</span> <el-input v-model="abnormalFeedBackData.pressureTemporary" :disabled="disableFlag2" style="width: 70px"></el-input>
  338. <span style="font-size: 12px">时间&nbsp&nbsp&nbsp</span> <el-input v-model="abnormalFeedBackData.timeTemporary" :disabled="disableFlag2" style="width: 70px"></el-input>
  339. <span style="font-size: 12px">投料量</span> <el-input v-model="abnormalFeedBackData.feedingTemporary" :disabled="disableFlag2" style="width: 70px"></el-input>
  340. <span style="font-size: 12px">机台&nbsp&nbsp&nbsp</span> <el-input v-model="abnormalFeedBackData.resourceTemporary" :disabled="disableFlag2" style="width: 70px"></el-input>
  341. </el-form>
  342. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: 0px;">
  343. <span style="font-size: 12px">&nbsp功率&nbsp&nbsp&nbsp</span> <el-input v-model="abnormalFeedBackData.efficiencyTemporary" :disabled="disableFlag2" style="width: 70px"></el-input>
  344. <span style="font-size: 12px">速度&nbsp&nbsp&nbsp</span> <el-input v-model="abnormalFeedBackData.speedTemporary" :disabled="disableFlag2" style="width: 70px"></el-input>
  345. <span style="font-size: 12px">材料&nbsp&nbsp&nbsp</span> <el-input v-model="abnormalFeedBackData.materialTemporary" :disabled="disableFlag2" style="width: 70px"></el-input>
  346. <span style="font-size: 12px">模具&nbsp&nbsp&nbsp</span> <el-input v-model="abnormalFeedBackData.mouldTemporary" :disabled="disableFlag2" style="width: 70px;margin-left: 2px"></el-input>
  347. <span style="font-size: 12px">工装&nbsp&nbsp&nbsp</span> <el-input v-model="abnormalFeedBackData.workClothesTemporary" :disabled="disableFlag2" style="width: 70px"></el-input>
  348. </el-form>
  349. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: 0px;">
  350. <el-form-item label="根本原因分析">
  351. <el-input v-model="abnormalFeedBackData.rootCause" type="textarea" :disabled="disableFlag3" :rows="3" resize='none' style="width: 562px"></el-input>
  352. </el-form-item>
  353. <el-form-item label="长久处理方式" style="margin-top: 40px;">
  354. <el-input v-model="abnormalFeedBackData.treatment" type="textarea" :disabled="disableFlag3" :rows="3" resize='none' style="width: 562px"></el-input>
  355. </el-form-item>
  356. <el-form-item label="效果验证结论" style="margin-top: 40px;">
  357. <el-input v-model="abnormalFeedBackData.permanentConclusion" type="textarea" :disabled="disableFlag3" :rows="3" resize='none' style="width: 562px"></el-input>
  358. </el-form-item>
  359. </el-form>
  360. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: 40px;">
  361. <span style="font-size: 12px">工艺变更记录:</span>
  362. </el-form>
  363. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: 0px;">
  364. <span style="font-size: 12px">&nbsp温度&nbsp&nbsp&nbsp</span> <el-input v-model="abnormalFeedBackData.temperature" :disabled="disableFlag3" style="width: 70px"></el-input>
  365. <span style="font-size: 12px">压力&nbsp&nbsp&nbsp</span> <el-input v-model="abnormalFeedBackData.pressure" :disabled="disableFlag3" style="width: 70px"></el-input>
  366. <span style="font-size: 12px">时间&nbsp&nbsp&nbsp</span> <el-input v-model="abnormalFeedBackData.time" :disabled="disableFlag3" style="width: 70px"></el-input>
  367. <span style="font-size: 12px">投料量</span> <el-input v-model="abnormalFeedBackData.feeding" :disabled="disableFlag3" style="width: 70px"></el-input>
  368. <span style="font-size: 12px">机台&nbsp&nbsp&nbsp</span> <el-input v-model="abnormalFeedBackData.resource" :disabled="disableFlag3" style="width: 70px"></el-input>
  369. </el-form>
  370. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: 0px;">
  371. <span style="font-size: 12px">&nbsp功率&nbsp&nbsp&nbsp</span> <el-input v-model="abnormalFeedBackData.efficiency" :disabled="disableFlag3" style="width: 70px"></el-input>
  372. <span style="font-size: 12px">速度&nbsp&nbsp&nbsp</span> <el-input v-model="abnormalFeedBackData.speed" :disabled="disableFlag3" style="width: 70px"></el-input>
  373. <span style="font-size: 12px">材料&nbsp&nbsp&nbsp</span> <el-input v-model="abnormalFeedBackData.material" :disabled="disableFlag3" style="width: 70px"></el-input>
  374. <span style="font-size: 12px">模具&nbsp&nbsp&nbsp</span> <el-input v-model="abnormalFeedBackData.mould" :disabled="disableFlag3" style="width: 70px;margin-left: 2px"></el-input>
  375. <span style="font-size: 12px">工装&nbsp&nbsp&nbsp</span> <el-input v-model="abnormalFeedBackData.workClothes" :disabled="disableFlag3" style="width: 70px"></el-input>
  376. </el-form>
  377. <el-footer style="height:30px;margin-top: 10px;text-align:center">
  378. <el-button type="primary" @click="saveAbnormalDetail()" v-if="disableFlag4">保存</el-button>
  379. <el-button type="primary" @click="modalFlag = false">取消</el-button>
  380. </el-footer>
  381. </el-dialog>
  382. <el-dialog title="附件" :close-on-click-modal="false" v-drag :visible.sync="fileModalFlag" width="650px" >
  383. <el-form label-position="top" style="margin-top: 1px; margin-left: 0px;">
  384. <el-form :inline="true" label-position="top" style="margin-top: 0px">
  385. <el-button type="primary" @click="addUploadFileModal">上传文件</el-button>
  386. </el-form>
  387. </el-form>
  388. <el-table
  389. :data="fileData"
  390. height="240"
  391. border
  392. v-loading="false"
  393. style="width: 100%; ">
  394. <el-table-column
  395. v-for="(item,index) in columnFileContentArray" :key="index"
  396. :sortable="item.columnSortable"
  397. :prop="item.columnProp"
  398. :header-align="item.headerAlign"
  399. :show-overflow-tooltip="item.showOverflowTooltip"
  400. :align="item.align"
  401. :fixed="item.fixed==''?false:item.fixed"
  402. :min-width="item.columnWidth"
  403. :label="item.columnLabel">
  404. <template slot-scope="scope">
  405. <span v-if="!item.columnHidden"> {{ scope.row[item.columnProp] }}</span>
  406. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]"
  407. style="width: 100px; height: 80px"/></span>
  408. </template>
  409. </el-table-column>
  410. <el-table-column
  411. fixed="right"
  412. header-align="center"
  413. align="center"
  414. width="100"
  415. label="操作">
  416. <template slot-scope="scope">
  417. <!-- <a :href="'http://192.168.1.130:80/file/'+scope.row.url" :download="scope.row.fileName">下载</a>-->
  418. <a @click="downloadFile(scope.row)" >下载</a>
  419. <a type="text" size="small" @click="deleteHandle(scope.row.id)">删除</a>
  420. </template>
  421. </el-table-column>
  422. </el-table>
  423. </el-dialog>
  424. <el-dialog title="上传附件" :close-on-click-modal="false" v-drag :visible.sync="upLoadModalFlag" width="400px" >
  425. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: 0px;">
  426. <el-upload drag :file-list="fileList"
  427. action="javascript:void(0);" ref="uploadFile"
  428. :on-change="onChange"
  429. multiple :auto-upload="false"
  430. style="text-align: left;">
  431. <i class="el-icon-upload"></i>
  432. <div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
  433. </el-upload>
  434. </el-form>
  435. <el-footer style="height:30px;margin-top: 10px;text-align:center">
  436. <el-button type="primary" @click="upLoadFiles()" >保存</el-button>
  437. <el-button type="primary" @click="upLoadModalFlag = false">取消</el-button>
  438. </el-footer>
  439. </el-dialog>
  440. </div>
  441. </template>
  442. <script>
  443. import {
  444. getAbnormalCodeList,
  445. getShopOrderData,
  446. getAbnormalFeedBackList,
  447. saveAbnormalData,
  448. saveAbnormalDetail,
  449. openFeedBack,
  450. closeFeedBack,
  451. } from "@/api/abnormal.js"
  452. import {
  453. getSOScheduleRoutingDataForShiyanshi,
  454. downLoadProjectFile,
  455. upLoadAbnormalFiles,
  456. } from '@/api/production/inspect.js'
  457. import {
  458. printABLabel,
  459. } from "@/views/modules/print/print_Abnormal_label.js"
  460. import {ossListForOther} from '@/api/ftp/oss.js'
  461. export default {
  462. name: 'AbnormalFeedBack',
  463. data () {
  464. return {
  465. upLoadModalFlag:false,
  466. fileModalFlag:false,
  467. folder: 'abnormal',
  468. fileList: [],
  469. fileData: [],
  470. searchData:{
  471. userId:this.$store.state.user.name,
  472. startDate:'',
  473. endDate:'',
  474. abnormalCode:'',
  475. site:'',
  476. status:'',
  477. operatorDesc:'',
  478. partDesc:'',
  479. id:'',
  480. },
  481. upLoadData: {
  482. id:0,
  483. site:'',
  484. },
  485. fileContentList: [],
  486. // 导出 start
  487. exportData: [],
  488. exportDataStandard: {
  489. "工厂编号": "site",
  490. "生产订单": "orderNo",
  491. "派工单号": "seqNo",
  492. "物料编码": "partNo",
  493. "规格型号": "partDesc",
  494. "操作员": "operatorDesc",
  495. "生产线": "productionLineDesc",
  496. "反馈时间": "feedbackDate",
  497. "反馈人": "feedbackBy",
  498. "状态": "status",
  499. "异常原因": "abnormalDesc",
  500. "异常数量": "abnormalQty",
  501. "异常情况影响分析": "abnormalInfluence",
  502. "异常描述": "abnormalRemark",
  503. "报废状态1": "scrapType1",
  504. "报废原因1": "scrapReason1",
  505. "报废状态2": "scrapType2",
  506. "报废原因2": "scrapReason2",
  507. "报废状态3": "scrapType3",
  508. "报废原因3": "scrapReason3",
  509. "报废状态4": "scrapType4",
  510. "报废原因4": "scrapReason4",
  511. "报废状态5": "scrapType5",
  512. "报废原因5": "scrapReason5",
  513. "紧急处理方式": "treatmentTemporary",
  514. "临时性措施结论": "temporaryConclusion",
  515. "温度": "temperatureTemporary",
  516. "压力": "pressureTemporary",
  517. "时间": "timeTemporary",
  518. "投料量": "feedingTemporary",
  519. "机台": "resourceTemporary",
  520. "功率": "efficiencyTemporary",
  521. "速度": "speedTemporary",
  522. "材料": "materialTemporary",
  523. "模具": "mouldTemporary",
  524. "工装": "workClothesTemporary",
  525. "根本原因分析": "rootCause",
  526. "长久处理方式": "treatment",
  527. "效果验证结论": "permanentConclusion",
  528. "温度 ": "temperature",
  529. "压力 ": "pressure",
  530. "时间 ": "time",
  531. "投料量 ": "feeding",
  532. "机台 ": "resource",
  533. "功率 ": "efficiency",
  534. "速度 ": "speed",
  535. "材料 ": "material",
  536. "模具 ": "mould",
  537. "工装 ": "workClothes",
  538. },
  539. exportName: "异常反馈清单"+this.getStrDate(),
  540. exportHeader: ["异常反馈清单"],
  541. exportFooter: [],
  542. exportDefaultValue: "",
  543. // 导出 end
  544. dataListLoading:false,
  545. // 导出 end
  546. height:200,
  547. fileSearchData:{
  548. fileTypeCode:'Abnormal',
  549. orderRef1:'',
  550. orderRef2:''
  551. },
  552. tableData:[],
  553. addData:{
  554. site:'',
  555. seqNo:'',
  556. orderNo:'',
  557. shiftNo:'',
  558. resourceDesc:'',
  559. feedbackBy:this.$store.state.user.name,
  560. abnormalCode:'',
  561. abnormalRemark:'',
  562. abnormalInfluence:'',
  563. abnormalQty:'',
  564. },
  565. addModalFlag:false,
  566. modalFlag:false,
  567. disableFlag4:false,
  568. disableFlag1:false,
  569. disableFlag2:false,
  570. disableFlag3:false,
  571. abnormalList:[],
  572. abnormalFeedBackData:{
  573. },
  574. scrapTypeList:[
  575. {label:'缺料'},
  576. {label:'气泡'},
  577. {label:'断裂'},
  578. {label:'窝气'},
  579. {label:'粘模'},
  580. {label:'熟料'},
  581. {label:'杂质'},
  582. {label:'烧边'},
  583. {label:'错位'},
  584. {label:'脱胶'},
  585. {label:'表面缺陷'},
  586. ],
  587. scrapReasonList:[
  588. {label:'材料问题'},
  589. {label:'人员操作'},
  590. {label:'设备问题'},
  591. {label:'模具问题'},
  592. {label:'工艺问题'},
  593. ],
  594. columnFileContentArray: [
  595. {
  596. columnProp: 'fileName',
  597. headeralign: 'left',
  598. align: 'left',
  599. columnLabel: '文件名称',
  600. columnHidden: false,
  601. columnImage: false,
  602. columnSortable: false,
  603. sortLv: 0,
  604. status: true,
  605. fixed: false
  606. }, {
  607. columnProp: 'createDate',
  608. headeralign: 'left',
  609. align: 'left',
  610. columnLabel: '上传时间',
  611. columnHidden: false,
  612. columnImage: false,
  613. columnSortable: true,
  614. sortLv: 0,
  615. status: true,
  616. fixed: false
  617. },
  618. ],
  619. }
  620. },
  621. mounted() {
  622. this.$nextTick(()=>{
  623. this.height = window.innerHeight - 210;
  624. })
  625. },
  626. watch: {
  627. '$route'(to, from) {
  628. if (localStorage.getItem('feedBackId') !== undefined) {
  629. let data = JSON.parse(localStorage.getItem('feedBackId'));
  630. console.log(data)
  631. if (data) {
  632. this.searchData.id = data.id
  633. getAbnormalFeedBackList(this.searchData).then(({data}) => {
  634. this.tableData = data.rows;
  635. this.getDetailModel2(data.rows[0])
  636. })
  637. setTimeout(() => {
  638. this.searchData.id = null
  639. },1000)
  640. }
  641. localStorage.removeItem('feedBackId');
  642. }
  643. }
  644. },
  645. methods: {
  646. getAllAbnormalItem(){
  647. getAbnormalCodeList().then(({data}) => {
  648. this.abnormalList = data.rows;
  649. })
  650. },
  651. search(){
  652. getAbnormalFeedBackList(this.searchData).then(({data}) => {
  653. this.tableData = data.rows;
  654. })
  655. },
  656. /*选择上传文件时*/
  657. onChange(file,fileList){
  658. this.fileList = fileList;
  659. },
  660. addAbnormal(){
  661. this.addData.seqNo='',
  662. this.addData.shiftNo='',
  663. this.addData.site='',
  664. this.addData.resourceDesc='',
  665. this.addData.orderNo='',
  666. this.addData.abnormalRemark='',
  667. this.addData.abnormalCode='',
  668. this.getAllAbnormalItem();
  669. this.fileList = [];
  670. this.addModalFlag=true;
  671. },
  672. seqNoCheck(){
  673. let inData={
  674. seqNo:this.addData.seqNo
  675. }
  676. getShopOrderData(inData).then(({data}) => {
  677. let rows=data.rows;
  678. if(rows.length==0){
  679. this.addData.seqNo='',
  680. this.addData.shiftNo='',
  681. this.addData.site='',
  682. this.addData.resourceDesc='',
  683. this.addData.orderNo='',
  684. this.$alert('该派工单不存在!', '错误', {
  685. confirmButtonText: '确定'
  686. })
  687. return false
  688. }else {
  689. this.addData.shiftNo=data.rows[0].sShiftNo
  690. this.addData.site=data.rows[0].site
  691. this.addData.resourceDesc=data.rows[0].resourceDesc
  692. this.addData.orderNo=data.rows[0].orderNo
  693. }
  694. })
  695. },
  696. saveAbnormalData(){
  697. if( this.addData.seqNo==null||this.addData.seqNo==''){
  698. this.$alert("请输入派工单号", '错误', {
  699. confirmButtonText: '确定'
  700. })
  701. return false;
  702. }
  703. if( this.addData.abnormalCode==null||this.addData.abnormalCode==''){
  704. this.$alert("请选择异常原因", '错误', {
  705. confirmButtonText: '确定'
  706. })
  707. return false;
  708. }
  709. if( this.addData.abnormalRemark==null||this.addData.abnormalRemark==''){
  710. this.$alert("请输入描述", '错误', {
  711. confirmButtonText: '确定'
  712. })
  713. return false;
  714. }
  715. const formData = new FormData();
  716. //片接文件
  717. for (let i = 0; i < this.fileList.length; i++) {
  718. formData.append("file",this.fileList[i].raw)
  719. }
  720. formData.append("folder", this.folder);
  721. formData.append("site", this.addData.site);
  722. formData.append("seqNo", this.addData.seqNo);
  723. formData.append("orderNo", this.addData.orderNo);
  724. formData.append("shiftNo", this.addData.shiftNo);
  725. formData.append("resourceDesc", this.addData.resourceDesc);
  726. formData.append("feedbackBy", this.addData.feedbackBy);
  727. formData.append("abnormalCode", this.addData.abnormalCode);
  728. formData.append("abnormalRemark", this.addData.abnormalRemark);
  729. formData.append("abnormalInfluence", this.addData.abnormalInfluence);
  730. formData.append("abnormalQty", this.addData.abnormalQty);
  731. saveAbnormalData(formData).then(({data}) => {
  732. if (data && data.code === 0) {
  733. this.$refs.uploadFile.clearFiles();
  734. this.fileList = [];
  735. this.addModalFlag=false
  736. this.search()
  737. this.$message({
  738. message: '操作成功',
  739. type: 'success',
  740. duration: 1500,
  741. onClose: () => {
  742. }
  743. })
  744. } else {
  745. this.$alert(data.msg, '错误', {
  746. confirmButtonText: '确定'
  747. })
  748. }
  749. })
  750. },
  751. getDetailModel(row){
  752. this.abnormalFeedBackData=JSON.parse(JSON.stringify(row));
  753. this.disableFlag1=true;
  754. this.disableFlag2=true;
  755. this.disableFlag3=true;
  756. this.disableFlag4=false;
  757. this.modalFlag=true;
  758. },
  759. getDetailModel2(row){
  760. this.abnormalFeedBackData=JSON.parse(JSON.stringify(row));
  761. if(this.abnormalFeedBackData.status=='已录入'){
  762. this.abnormalFeedBackData.status='已填写紧急处理'
  763. }
  764. this.disableFlag1=true;
  765. this.disableFlag2=false;
  766. this.disableFlag3=true;
  767. this.disableFlag4=true;
  768. this.modalFlag=true;
  769. },
  770. getDetailModel3(row){
  771. this.abnormalFeedBackData=JSON.parse(JSON.stringify(row));
  772. if(this.abnormalFeedBackData.status=='已录入'||this.abnormalFeedBackData.status=='已填写紧急处理'){
  773. this.abnormalFeedBackData.status='已填写长久处理'
  774. }
  775. this.disableFlag1=true;
  776. this.disableFlag2=true;
  777. this.disableFlag3=false;
  778. this.disableFlag4=true;
  779. this.modalFlag=true;
  780. },
  781. saveAbnormalDetail(){
  782. if( this.disableFlag2==false&&(this.abnormalFeedBackData.treatmentTemporary==null||this.abnormalFeedBackData.treatmentTemporary=='')){
  783. this.$alert("请填写处理方式", '错误', {
  784. confirmButtonText: '确定'
  785. })
  786. return false;
  787. }
  788. if( this.disableFlag3==false&&(this.abnormalFeedBackData.treatment==null||this.abnormalFeedBackData.treatment=='')){
  789. this.$alert("请填写处理方式", '错误', {
  790. confirmButtonText: '确定'
  791. })
  792. return false;
  793. }
  794. if( this.disableFlag3==false&&(this.abnormalFeedBackData.rootCause==null||this.abnormalFeedBackData.rootCause=='')){
  795. this.$alert("请填写根本原因分析", '错误', {
  796. confirmButtonText: '确定'
  797. })
  798. return false;
  799. }
  800. saveAbnormalDetail(this.abnormalFeedBackData).then(({data}) => {
  801. if (data && data.code === 0) {
  802. this.modalFlag=false
  803. this.search()
  804. this.$message({
  805. message: '操作成功',
  806. type: 'success',
  807. duration: 1500,
  808. onClose: () => {
  809. }
  810. })
  811. } else {
  812. this.$alert(data.msg, '错误', {
  813. confirmButtonText: '确定'
  814. })
  815. }
  816. })
  817. },
  818. closeFeedBack(row){
  819. this.$confirm(`是否关闭此反馈单?`, '提示', {
  820. confirmButtonText: '确定',
  821. cancelButtonText: '取消',
  822. type: 'warning'
  823. }).then(() => {
  824. closeFeedBack(row).then(({data}) => {
  825. if (data && data.code === 0) {
  826. this.search()
  827. this.$message({
  828. message: '操作成功',
  829. type: 'success',
  830. duration: 1500,
  831. onClose: () => {
  832. }
  833. })
  834. } else {
  835. this.$alert(data.msg, '错误', {
  836. confirmButtonText: '确定'
  837. })
  838. }
  839. })
  840. }).catch(() => {
  841. })
  842. },
  843. openFeedBack(row){
  844. this.$confirm(`是否开启此反馈单?`, '提示', {
  845. confirmButtonText: '确定',
  846. cancelButtonText: '取消',
  847. type: 'warning'
  848. }).then(() => {
  849. openFeedBack(row).then(({data}) => {
  850. if (data && data.code === 0) {
  851. this.search()
  852. this.$message({
  853. message: '操作成功',
  854. type: 'success',
  855. duration: 1500,
  856. onClose: () => {
  857. }
  858. })
  859. } else {
  860. this.$alert(data.msg, '错误', {
  861. confirmButtonText: '确定'
  862. })
  863. }
  864. })
  865. }).catch(() => {
  866. })
  867. },
  868. createExportData() {
  869. return this.tableData;
  870. },
  871. startDownload() {
  872. // this.exportData = this.dataList
  873. },
  874. finishDownload() {
  875. },
  876. getStrDate() {
  877. let dd = new Date();
  878. let Y = dd.getFullYear();
  879. let M = (dd.getMonth() + 1) < 10 ? "0" + (dd.getMonth() + 1) : (dd.getMonth() + 1);//获取当前月份的日期,不足10补0
  880. let D = dd.getDate() < 10 ? "0" + dd.getDate() : dd.getDate();//获取当前几号,不足10补0
  881. let H = dd.getHours() < 10 ? "0" + dd.getHours() : dd.getHours();
  882. let MM = dd.getMinutes() < 10 ? "0" + dd.getMinutes() : dd.getMinutes();
  883. let S = dd.getSeconds() < 10 ? "0" + dd.getSeconds() : dd.getSeconds();
  884. return Y + M + D + H + MM + S;
  885. },
  886. doPrint(row){
  887. let inData={
  888. seqNo:row.seqNo
  889. }
  890. getSOScheduleRoutingDataForShiyanshi(inData).then(({data})=>{
  891. data.rows[0].abnormalDesc=row.abnormalDesc
  892. data.rows[0].abnormalRemark=row.abnormalRemark
  893. printABLabel(data.rows);
  894. })
  895. },
  896. downloadFile(row){
  897. downLoadProjectFile(row)
  898. .then(({data}) => {
  899. // 不限制文件下载类型
  900. const blob = new Blob([data], {type: 'application/octet-stream;charset=utf-8'})
  901. // 下载文件名称
  902. const fileName = row.fileName
  903. // a标签下载
  904. const linkNode = document.createElement('a')
  905. linkNode.download = fileName // a标签的download属性规定下载文件的名称
  906. linkNode.style.display = 'none'
  907. linkNode.href = URL.createObjectURL(blob) // 生成一个Blob URL
  908. console.log(linkNode)
  909. // if(val == 'Y'){
  910. // this.pdfVisible = true
  911. // this.pdfUrl = linkNode.href
  912. // }else {
  913. document.body.appendChild(linkNode)
  914. linkNode.click() // 模拟在按钮上的一次鼠标单击
  915. URL.revokeObjectURL(linkNode.href) // 释放URL 对象
  916. document.body.removeChild(linkNode)
  917. })
  918. },
  919. getFileModel(row){
  920. this.fileSearchData={
  921. fileTypeCode:'Abnormal',
  922. orderRef1:row.site,
  923. orderRef2:row.id,
  924. }
  925. this.getFileList()
  926. this.fileModalFlag=true;
  927. },
  928. getFileList(){
  929. ossListForOther(this.fileSearchData).then(({data}) => {
  930. if (data && data.code == 0) {
  931. this.fileData = data.data
  932. } else {
  933. this.fileData = []
  934. }
  935. })
  936. },
  937. deleteHandle(id) {
  938. let ids = [id]
  939. this.$confirm(`确定进行[删除]操作?`, '提示', {
  940. confirmButtonText: '确定',
  941. cancelButtonText: '取消',
  942. type: 'warning'
  943. }).then(() => {
  944. this.$http({
  945. url: this.$http.adornUrl('/sys/oss/delete'),
  946. method: 'post',
  947. data: this.$http.adornData(ids, false)
  948. }).then(({data}) => {
  949. if (data && data.code === 0) {
  950. this.$message.success('操作成功')
  951. this.getFileList()
  952. } else {
  953. this.$message.error(data.msg)
  954. }
  955. })
  956. }).catch(() => {
  957. })
  958. },
  959. addUploadFileModal(){
  960. this.upLoadData.site=this.fileSearchData.orderRef1
  961. this.upLoadData.id=this.fileSearchData.orderRef2
  962. this.fileList=[]
  963. this.upLoadModalFlag=true;
  964. },
  965. upLoadFiles(){
  966. if(null == this.fileList || 0 === this.fileList.length){
  967. this.$alert('未选择附件上传!', '错误', {
  968. confirmButtonText: '确定'
  969. })
  970. return false;
  971. }
  972. const formData = new FormData();
  973. //片接文件
  974. for (let i = 0; i < this.fileList.length; i++) {
  975. formData.append("file",this.fileList[i].raw)
  976. }
  977. formData.append("site", this.upLoadData.site);
  978. formData.append("folder", this.folder);
  979. formData.append("projectId", this.upLoadData.id);
  980. upLoadAbnormalFiles(formData).then(({data}) => {
  981. if (data && data.code === 0) {
  982. this.$refs.uploadFile.clearFiles();
  983. this.fileList = [];
  984. this.upLoadModalFlag=false
  985. this.getFileList()
  986. this.$message({
  987. message: '操作成功',
  988. type: 'success',
  989. duration: 1500,
  990. onClose: () => {
  991. }
  992. })
  993. } else {
  994. this.$alert(data.msg, '错误', {
  995. confirmButtonText: '确定'
  996. })
  997. }
  998. })
  999. },
  1000. },
  1001. created() {
  1002. this.getAllAbnormalItem();
  1003. if (localStorage.getItem('feedBackId') !== undefined) {
  1004. let data = JSON.parse(localStorage.getItem('feedBackId'));
  1005. console.log(data)
  1006. if (data) {
  1007. this.searchData.id = data.id
  1008. getAbnormalFeedBackList(this.searchData).then(({data}) => {
  1009. this.tableData = data.rows;
  1010. this.getDetailModel2(data.rows[0])
  1011. })
  1012. setTimeout(() => {
  1013. this.searchData.id = null
  1014. },1000)
  1015. }
  1016. localStorage.removeItem('feedBackId');
  1017. }
  1018. }
  1019. }
  1020. </script>
  1021. <style scoped>
  1022. </style>