plan-submit.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357
  1. <template>
  2. <div>
  3. <div class="my-title">处理</div>
  4. <el-form
  5. :model="dataForm"
  6. :rules="dataRule"
  7. ref="dataForm"
  8. label-width="auto"
  9. >
  10. <el-row class="my-row">
  11. <el-col :span="6">
  12. <el-form-item label="项目名称:" prop="projectName">
  13. <span>{{dataForm.projectName}}</span>
  14. </el-form-item>
  15. </el-col>
  16. <el-col :span="6">
  17. <el-form-item label="任务号:" prop="orderCode">
  18. <span>{{dataForm.orderCode}}</span>
  19. </el-form-item>
  20. </el-col>
  21. <el-col :span="6">
  22. <el-form-item label="技术协议:" prop="attachList1">
  23. <span class="attch-file" @click="attachDetail(dataForm.attachList1)">{{dataForm.attachList1 == null || dataForm.attachList1.length == 0 ? '' : dataForm.attachList1[0].fileName}}</span>
  24. </el-form-item>
  25. </el-col>
  26. <el-col :span="6">
  27. <el-form-item label="资料:" prop="attachList2">
  28. <span class="attch-file" @click="attachDetail(dataForm.attachList2)">{{dataForm.attachList2 == null || dataForm.attachList2.length == 0 ? '' : dataForm.attachList2[0].fileName}}</span>
  29. </el-form-item>
  30. </el-col>
  31. </el-row>
  32. <el-table
  33. :data="dataForm.proProductList"
  34. border
  35. v-loading="dataListLoading"
  36. @expand-change="handleExpandChange"
  37. :expand-row-keys="expandedRowKeys"
  38. :load="loadingData"
  39. row-key="productId"
  40. lazy
  41. style="width: 100%;">
  42. <el-table-column
  43. label="序号"
  44. type="index"
  45. width="100"
  46. align="center">
  47. </el-table-column>
  48. <el-table-column
  49. prop="productName"
  50. header-align="center"
  51. align="center"
  52. min-width="140"
  53. :show-tooltip-when-overflow="true"
  54. label="名称">
  55. </el-table-column>
  56. <el-table-column
  57. prop="mapNumber"
  58. header-align="center"
  59. align="center"
  60. min-width="140"
  61. :show-tooltip-when-overflow="true"
  62. label="图号">
  63. </el-table-column>
  64. <el-table-column
  65. prop="versionNumber"
  66. header-align="center"
  67. align="center"
  68. min-width="140"
  69. :show-tooltip-when-overflow="true"
  70. label="版本号">
  71. </el-table-column>
  72. <el-table-column
  73. prop="attachList2"
  74. header-align="center"
  75. align="center"
  76. min-width="140"
  77. :show-tooltip-when-overflow="true"
  78. label="简图">
  79. <template slot-scope="scope">
  80. <el-button :disabled="!scope.row.attachList2 || scope.row.attachList2.length === 0" type="text" size="small" @click="attachDetail(scope.row.attachList2)">查看</el-button>
  81. </template>
  82. </el-table-column>
  83. <el-table-column
  84. prop="unit"
  85. header-align="center"
  86. align="center"
  87. min-width="140"
  88. :show-tooltip-when-overflow="true"
  89. label="单位">
  90. </el-table-column>
  91. <el-table-column
  92. prop="cnt"
  93. header-align="center"
  94. align="center"
  95. min-width="140"
  96. :show-tooltip-when-overflow="true"
  97. label="单套数量">
  98. </el-table-column>
  99. <el-table-column
  100. prop="productSpec"
  101. header-align="center"
  102. align="center"
  103. min-width="140"
  104. :show-tooltip-when-overflow="true"
  105. label="材料规格">
  106. </el-table-column>
  107. <el-table-column
  108. prop="size"
  109. header-align="center"
  110. align="center"
  111. min-width="140"
  112. :show-tooltip-when-overflow="true"
  113. label="净尺寸">
  114. </el-table-column>
  115. <el-table-column
  116. prop="projectName"
  117. header-align="center"
  118. align="center"
  119. min-width="140"
  120. :show-tooltip-when-overflow="true"
  121. label="表处理">
  122. </el-table-column>
  123. <el-table-column
  124. prop="heatTreatment"
  125. header-align="center"
  126. align="center"
  127. min-width="140"
  128. :show-tooltip-when-overflow="true"
  129. label="热处理">
  130. </el-table-column>
  131. <el-table-column
  132. prop="projectName"
  133. header-align="center"
  134. align="center"
  135. min-width="140"
  136. :show-tooltip-when-overflow="true"
  137. label="关重性">
  138. </el-table-column>
  139. <el-table-column
  140. prop="notes"
  141. header-align="center"
  142. align="center"
  143. min-width="140"
  144. :show-tooltip-when-overflow="true"
  145. label="备注">
  146. </el-table-column>
  147. <el-table-column
  148. fixed="right"
  149. prop="materialCnt"
  150. header-align="center"
  151. align="center"
  152. width="70"
  153. :show-tooltip-when-overflow="true"
  154. label="库存数">
  155. </el-table-column>
  156. <el-table-column
  157. fixed="right"
  158. prop="planCnt"
  159. header-align="center"
  160. align="center"
  161. width="100"
  162. :show-tooltip-when-overflow="true"
  163. label="计划数量">
  164. <template slot-scope="scope">
  165. <!-- <el-form-item :prop="'proProductList.' + scope.$index + '.planCnt'" :rules="dataRule.planCnt" label-width="0">
  166. <el-input v-model="scope.row.planCnt" style="width:80px" :disabled="disabled" @input="scope.row.planCnt = scope.row.planCnt.replace(/[^\d]/g, '')"/>
  167. </el-form-item> -->
  168. </template>
  169. </el-table-column>
  170. <el-table-column
  171. fixed="right"
  172. prop="disposal"
  173. header-align="center"
  174. align="center"
  175. width="90"
  176. :show-tooltip-when-overflow="true"
  177. label="处置">
  178. <template slot-scope="scope">
  179. <div class="radio-wrapper">
  180. <el-form-item :prop="'proProductList.' + scope.$index + '.disposal'" :rules="dataRule.disposal" label-width="0">
  181. <el-radio-group v-model="scope.row.disposal" class="radio-group-wrap" :disabled="disabled">
  182. <el-radio :label="2" style="margin-left:0">采购件</el-radio>
  183. <el-radio :label="3" style="margin-left:0">委外件</el-radio>
  184. <el-radio :label="1" style="margin-left:0">自制件</el-radio>
  185. </el-radio-group>
  186. </el-form-item>
  187. </div>
  188. </template>
  189. </el-table-column>
  190. <el-table-column
  191. fixed="right"
  192. prop="isTechnology"
  193. header-align="center"
  194. align="center"
  195. width="90"
  196. :show-tooltip-when-overflow="true"
  197. label="工艺">
  198. <template slot-scope="scope">
  199. <el-form-item :prop="'proProductList.' + scope.$index + '.isTechnology'" :rules="dataRule.isTechnology" label-width="0">
  200. <el-radio-group v-model="scope.row.isTechnology" class="radio-group-wrap" :disabled="disabled">
  201. <el-radio :label="1" style="margin-left:0">需要</el-radio>
  202. <el-radio :label="2" style="margin-left:0">不需要</el-radio>
  203. </el-radio-group>
  204. </el-form-item>
  205. </template>
  206. </el-table-column>
  207. </el-table>
  208. </el-form>
  209. <span slot="footer" class="dialog-footer">
  210. <el-button @click="onChose">取消</el-button>
  211. <el-button
  212. v-if="!disabled"
  213. type="primary"
  214. @click="dataFormSubmit()"
  215. v-reClick
  216. >提交</el-button
  217. >
  218. </span>
  219. <attach-detail-dialog ref="attachDetail"/>
  220. </div>
  221. </template>
  222. <script>
  223. import AttachDetailDialog from '../common/attach-detail-dialog'
  224. export default {
  225. name: 'plan-submit',
  226. components: { AttachDetailDialog },
  227. computed: {},
  228. data () {
  229. return {
  230. disabled: false,
  231. id: 0,
  232. dataForm: {
  233. proProductList: []
  234. },
  235. dataRule: {
  236. planCnt: [{required: true, message: '请输入', trigger: 'blur'}],
  237. disposal: [{required: true, message: '请选择', trigger: 'change'}],
  238. isTechnology: [{required: true, message: '请选择', trigger: 'change'}]
  239. },
  240. dataList: [],
  241. dataListLoading: false,
  242. expandedRowKeys: [],
  243. treeMap: new Map()
  244. }
  245. },
  246. created () {},
  247. beforeDestroy () {},
  248. methods: {
  249. onChose () {
  250. this.$emit('onChose')
  251. },
  252. async init (item, readonly) {
  253. let id = item.productionManagementId
  254. if (readonly) {
  255. this.disabled = true
  256. }
  257. this.$http({
  258. url: this.$http.adornUrl(`/biz-service/projProduction/info/${id}`),
  259. method: 'get'
  260. }).then(({data}) => {
  261. if (data && data.code === '200') {
  262. data.data.proProductList.map(item => {
  263. item.hasChildren = item.proProductList != null && item.proProductList.length > 0
  264. })
  265. this.dataForm = data.data
  266. console.log(this.dataForm)
  267. } else {
  268. this.$message.error(data.msg)
  269. }
  270. })
  271. },
  272. validateField (type) {
  273. this.$refs.dataForm.validateField(type)
  274. },
  275. attachDetail (attachList) {
  276. this.$nextTick(() => {
  277. this.$refs.attachDetail.init(attachList)
  278. })
  279. },
  280. // 表单提交
  281. dataFormSubmit () {
  282. this.$refs['dataForm'].validate((valid) => {
  283. if (valid) {
  284. let data = {
  285. orderCode: this.dataForm.orderCode,
  286. proProductList: this.dataForm.proProductList
  287. }
  288. console.log('data', data)
  289. this.$http({
  290. url: this.$http.adornUrl(`/biz-service/projProduction/submitPlan`),
  291. method: 'post',
  292. data: this.$http.adornData(data)
  293. }).then(({ data }) => {
  294. if (data && data.code === '200') {
  295. this.$message({
  296. message: '操作成功',
  297. type: 'success',
  298. duration: 1500,
  299. onClose: () => {
  300. this.onChose()
  301. this.$emit('refreshDataList')
  302. }
  303. })
  304. } else {
  305. this.$message.error(data.msg)
  306. }
  307. })
  308. }
  309. })
  310. },
  311. handleExpandChange(row, expanded) {
  312. console.log(row, expanded)
  313. if (expanded) {
  314. this.expandedRowKeys.push(row.productId)
  315. } else {
  316. const index = this.expandedRowKeys.indexOf(row.productId)
  317. if (index !== -1) {
  318. this.expandedRowKeys.splice(index, 1)
  319. }
  320. }
  321. },
  322. loadingData(row, treeNode, resolve) {
  323. console.log('loadingData')
  324. // if (!this.treeMap.has(row.productId)) {
  325. // this.treeMap.set(row.productId, { row, treeNode, resolve })
  326. // }
  327. // row.children = row.proProductList
  328. resolve(row.proProductList)
  329. },
  330. }
  331. }
  332. </script>
  333. <style>
  334. .my-row {
  335. margin-bottom: 20px;
  336. }
  337. .radio-group-wrap {
  338. display: flex;
  339. align-items: flex-start;
  340. flex-direction: column;
  341. gap: 10px 0px; /* 行列间距控制 */
  342. }
  343. .attch-file {
  344. cursor: pointer;
  345. color: #3e8ef7;
  346. }
  347. </style>