addGongYi.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369
  1. <template>
  2. <div>
  3. <!-- 新增工艺资料弹窗 -->
  4. <el-dialog v-model="visible" :before-close="()=> visible = false" style="width: 70%;margin: 8px auto" :title="'新增工艺资料'" destroy-on-close>
  5. <el-form>
  6. <div>
  7. <div style="display: flex; gap: 0px;">
  8. <el-form-item label="印件编号:" class="mab" prop="keyOrder">
  9. <el-input v-model="form.yjno" id="印件编号" @keydown="add_gyzlent($event, '质量隐患', '印件编号', '工序编号')" style="width: 100px;"/>
  10. </el-form-item>
  11. <el-form-item label="工序编号:" class="mab" prop="keyOrder" label-width=" 90">
  12. <el-input v-model="form['工序']" id="工序编号" @keydown="add_gyzlent($event, '印件编号', '工序编号', '重点工序')" style="width: 100px;"/>
  13. </el-form-item>
  14. <el-form-item label="重点工序:" class="mab" prop="keyOrder" label-width=" 90">
  15. <el-select v-model="form['重点工序']" id="重点工序" @keydown="add_gyzlent($event, '', '重点工序', '开数')" style="width: 130px;">
  16. <el-option value=""></el-option>
  17. <el-option value="重点工序">重点工序</el-option>
  18. </el-select>
  19. </el-form-item>
  20. <el-form-item label="备选工序:" class="mab" prop="isBanciSelected" label-width=" 100">
  21. <el-checkbox v-model="form['备选工序']"></el-checkbox>
  22. </el-form-item>
  23. <el-form-item label="加工开数:" class="mab" prop="keyOrder" label-width=" 100">
  24. <el-input v-model="form['开数']" style="width: 80px;" id="开数" @keydown="add_gyzlent($event, '重点工序 ', '开数', '联数')" />
  25. </el-form-item>
  26. <el-form-item label="加工联数:" class="mab" prop="keyOrder" label-width=" 80">
  27. <el-input v-model="form['联数']" style="width: 80px;" id="联数" @keydown="add_gyzlent($event, '开数', '联数', '车间名称')" />
  28. </el-form-item>
  29. </div>
  30. <div style="display: flex; gap: 0px;">
  31. <el-form-item label="车间名称:" class="mab" prop="keyOrder">
  32. <el-input v-model="form['车间名称']" id="车间名称" style="width: 140px;" @keydown="add_gyzlent($event, '联数', '车间名称', '工序名称')"/>
  33. </el-form-item>
  34. <el-form-item label="工艺名称:" class="mab" prop="keyOrder" label-width=" 90">
  35. <el-input disabled v-model="form['工艺名称']" style="width: 140px;"/>
  36. </el-form-item>
  37. <el-form-item label="工序名称:" class="mab" prop="keyOrder" label-width=" 90">
  38. <el-input v-model="form['工序名称']" style="width: 300px;" id="工序名称" @keydown="add_gyzlent($event, '车间名称', '工序名称', '设备编号')" />
  39. </el-form-item>
  40. <el-form-item label="计损色数" class="mab" prop="keyOrder" label-width=" 80">
  41. <el-input disabled v-model="form['计损色数']" style="width: 90px;"/>
  42. </el-form-item>
  43. </div>
  44. <el-form-item label="设备编号:" class="mab" prop="remark">
  45. <el-select v-model="form['设备编号']" multiple
  46. id="设备编号" @keydown="add_gyzlent($event, '工序名称', '设备编号', '工序损耗')"
  47. style="flex: 1; height: auto;">
  48. <el-option
  49. @keydown.tab.prevent="sbbhclick"
  50. @click="sbbhclick"
  51. v-for="(item, index) in gdzl_MachineList_address"
  52. :key="index"
  53. :label="item.split('-->')[0].trim()"
  54. :value="item.split('-->')[0].trim()">
  55. {{ item }}
  56. </el-option>
  57. </el-select>
  58. </el-form-item>
  59. <el-form-item label="工序损耗:" class="mab" prop="keyOrder" >
  60. <el-input v-model="form['shdh']" style="width: 10%;" id="工序损耗" @keydown="add_gyzlent($event, '设备编号', '工序损耗', '装版工时')"/>
  61. <el-input disabled v-model="form['工序损耗名称']" style="width: 88.7%;margin-left: 10px"/>
  62. </el-form-item>
  63. <div style="display: flex; gap: 0px;">
  64. <el-form-item label="损耗系数:" class="mab" prop="keyOrder">
  65. <el-input disabled v-model="form['损耗系数']" style="flex: 1;" />
  66. </el-form-item>
  67. <el-form-item label="难度系数" class="mab" prop="keyOrder">
  68. <el-input disabled v-model="form['难度系数']" style="flex: 1;" />
  69. </el-form-item>
  70. <el-form-item label="装版工时:" class="mab" prop="keyOrder">
  71. <el-input v-model="form['装版工时']" style="flex: 1;" id="装版工时" @keydown="add_gyzlent($event, '工序损耗', '装版工时', '排产小时产能')"/>
  72. </el-form-item>
  73. <el-form-item label="排产小时产能:" class="mab" prop="keyOrder" label-width=" 120px">
  74. <el-input v-model="form['小时产能']" style="flex: 1;" id="排产小时产能" @keydown="add_gyzlent($event, '装版工时', '排产小时产能', '备注')"/>
  75. </el-form-item>
  76. <el-form-item label="印刷方式" class="mab" prop="keyOrder">
  77. <el-input disabled v-model="form['印刷方式']" style="flex: 1;"/>
  78. </el-form-item>
  79. <el-form-item label="版距" class="mab" prop="keyOrder">
  80. <el-input disabled v-model="form['版距']" style="flex: 1;"/>
  81. </el-form-item>
  82. </div>
  83. <el-form-item label="工序备注:" class="mab" prop="remark">
  84. <el-input type="textarea" resize="none" v-model="form['备注']" rows="3" clearable style="flex: 1;resize: none" id="备注" @keydown="add_gyzlent($event, '排产小时产能', '备注', '质量要求')"/>
  85. </el-form-item>
  86. <el-form-item label="质量要求:" class="mab" prop="remark">
  87. <el-input type="textarea" resize="none" v-model="form['质量要求']" rows="2" clearable style="flex: 1;resize: both;" id="质量要求" @keydown="add_gyzlent($event, '备注', '质量要求', '质量隐患')"/>
  88. </el-form-item>
  89. <el-form-item label="质量隐患:" class="mab" prop="remark">
  90. <el-input type="textarea" resize="none" v-model="form['质量隐患']" rows="2" clearable style="flex: 1;" id="质量隐患" @keydown="add_gyzlent($event, '质量要求', '质量隐患', '印件编号')"/>
  91. </el-form-item>
  92. </div>
  93. </el-form>
  94. <template #footer>
  95. <div class="dialog-footer" style="text-align: right;top: auto;">
  96. <el-button @click="add_gdgycloseDialog">取 消</el-button>
  97. <el-button type="primary" @click="add_gdgyenterDialog">确 定</el-button>
  98. </div>
  99. </template>
  100. </el-dialog>
  101. <el-dialog v-model="yjdisplay" :before-close="()=> yjdisplay = false" style="width: 800px;" :title="'可选列表'" destroy-on-close>
  102. <el-tree :data="yjList" :props="{children: 'children',label: 'name', value: 'no'}" @node-click="changeHandle"
  103. default-expand-all style="border: 1px solid #ececec; padding: 10px;height: 400px;overflow: auto;">
  104. </el-tree>
  105. </el-dialog>
  106. <el-dialog v-model="cjdisplay" :before-close="()=> cjdisplay = false" style="width: 800px;" :title="'车间选择'" destroy-on-close>
  107. <el-tree
  108. :data="cjList"
  109. :render-after-expand="false"
  110. @node-click="selectHandle"
  111. :props="{children: 'children',label: 'label', value: 'value'}"
  112. style="border: 1px solid #ececec; padding: 10px;height: 400px;overflow: auto;"
  113. node-key="value"
  114. :default-expanded-keys="['标准工艺']"
  115. >
  116. </el-tree>
  117. </el-dialog>
  118. <!-- 工序损耗列表-->
  119. <el-dialog v-model="gxshdisplay" :before-close="()=> gxshdisplay = false" style="width: 800px;" :title="'工序损耗'" destroy-on-close>
  120. <el-tree
  121. :data="gxshList"
  122. :render-after-expand="false"
  123. @node-click="gxshselectHandle"
  124. :props="{children: 'children',label: 'label', value: 'value'}"
  125. style="border: 1px solid #ececec; padding: 10px;height: 400px;overflow: auto;"
  126. node-key="value"
  127. :default-expanded-keys="form['车间名称']"
  128. >
  129. </el-tree>
  130. </el-dialog>
  131. </div>
  132. </template>
  133. <script setup>
  134. import {ref, reactive} from 'vue'
  135. import {gdzl_MachineList, PrintDetailList, WastageList,getDepartName, capacityList,
  136. } from "@/api/yunyin/yunying";
  137. const form = reactive({})
  138. const visible = ref(false)
  139. const yjdisplay = ref(false)
  140. const cjdisplay = ref(false)
  141. const gxshdisplay = ref(false)
  142. const id = ref()
  143. const gxList = ref([])
  144. const yjList = ref()
  145. const cjList = ref([
  146. {
  147. label: '标准工艺',
  148. value: '标准工艺',
  149. children: []
  150. }
  151. ])
  152. const gdzl_MachineList_address = ref()
  153. //新增工艺资料弹窗 键盘 input框跳转
  154. const add_gyzlent = async (event,id1,id2,id3) => {
  155. if (id2==='印件编号' && event.key==='Tab' || id2 === '印件编号' && event.key=== 'Enter') {
  156. const node = yjList.value.find(item => item.no ===form['yjno'])
  157. if (! node) {
  158. yjdisplay.value = true
  159. }
  160. document.getElementById(id3).focus()
  161. }
  162. if (id2 === '车间名称' && event.key==='Tab' || id2 === '车间名称' && event.key=== 'Enter') {
  163. document.getElementById(id3).focus()
  164. cjdisplay.value = true
  165. }
  166. if (id2 === '工序损耗' && event.key==='Tab' || id2 === '工序损耗' && event.key=== 'Enter' && form['车间名称']) {
  167. await getGxshList();
  168. if (gxshList.value[0].children.length > 1) {
  169. gxshdisplay.value = true
  170. }
  171. }
  172. if (event.keyCode === 13 || event.keyCode === 40) { // Enter 或向下箭头
  173. if(id3!=''){
  174. document.getElementById(id3).focus()
  175. }
  176. } else if (event.keyCode === 38) { // 向上箭头
  177. if(id1!=''){
  178. document.getElementById(id1).focus()
  179. }
  180. }else if (event.keyCode === 8) { // 删除箭头
  181. if(id1!='' && document.getElementById(id2).value==''){
  182. document.getElementById(id1).focus()
  183. }
  184. // console.log(document.getElementById(id2).value)
  185. }else if (event.keyCode === 37) { // 向左箭头
  186. if(id1!='' && document.getElementById(id2).selectionStart==0){
  187. document.getElementById(id1).focus()
  188. }
  189. }else if (event.keyCode === 39) { // 向右箭头
  190. if(id3!='' && document.getElementById(id2).selectionStart == document.getElementById(id2).value.length){
  191. document.getElementById(id3).focus()
  192. }
  193. }
  194. }
  195. const open = async (gdbh, gxlist) => {
  196. id.value = gdbh
  197. const res = await PrintDetailList({workOrder: id.value})
  198. const chejian = await getDepartName()
  199. cjList.value = [
  200. {
  201. label: '标准工艺',
  202. value: '标准工艺',
  203. children: []
  204. }
  205. ]
  206. initChejian(chejian.data['标准工艺'])
  207. yjList.value = res.data
  208. gxList.value = gxlist
  209. visible.value = true
  210. }
  211. //工序损耗列表
  212. const gxshList = ref([])
  213. const getGxshList = async ()=>{
  214. const WastageList_data = await WastageList({search: form['车间名称']})
  215. gxshList.value = [{
  216. label: form['车间名称'],
  217. value: form['车间名称'],
  218. children: []
  219. }]
  220. if (WastageList_data.data.length === 0) return
  221. if (WastageList_data.data.length > 1) {
  222. gxshList.value[0].children = WastageList_data.data.map(item => {
  223. return { label: `${item.编号} - ${item.名称}`, label2: item.名称, UniqId: item.UniqId, value: item.编号 }
  224. })
  225. } else {
  226. form['shdh'] = WastageList_data.data[0].编号;
  227. form['工序损耗名称'] = WastageList_data.data[0].名称;
  228. }
  229. }
  230. //点击工序损耗列表数据
  231. const gxshselectHandle = async (node)=>{
  232. form['shdh'] = node.value
  233. form['工序损耗名称'] = node.label2
  234. gxshdisplay.value = false
  235. }
  236. const selectHandle = async (node)=>{
  237. if (node.children && node.children.length> 0) return
  238. function findParentInTree(tree, targetValue) {
  239. for (let node of tree) {
  240. // 如果找到了目标值,返回当前节点作为上级
  241. if (node.value === targetValue) {
  242. return node;
  243. }
  244. // 如果当前节点有子节点,递归地在子节点中查找
  245. if (node.children && node.children.length > 0) {
  246. let parent = findParentInTree(node.children, targetValue);
  247. if (parent) return parent
  248. }
  249. }
  250. // 如果没有找到目标值或其上级,返回null
  251. return null;
  252. }
  253. const _node = findParentInTree(cjList.value, node.value)
  254. if(_node.parent){
  255. form['车间名称'] = _node.parent
  256. }else{
  257. form['车间名称'] = _node.label
  258. }
  259. form['工艺名称'] = _node.label
  260. form['设备编号'] = []
  261. //通过车间名称查询机台
  262. const MachineList_jitai = await gdzl_MachineList({address:form['车间名称']});
  263. gdzl_MachineList_address.value = MachineList_jitai.data;
  264. form['shdh'] = ''
  265. form['工序损耗名称'] = ''
  266. //通过车间名称查询工序损耗
  267. await getGxshList()
  268. cjdisplay.value = false
  269. }
  270. const initChejian = (data) => {
  271. Object.keys(data).map( (name, index)=>{
  272. const tmp = {
  273. label: name, value: name, children: []
  274. }
  275. data[name].map(item => {
  276. tmp.children.push({
  277. label: item, value: item,parent: name,
  278. })
  279. })
  280. cjList.value[0].children.push(tmp)
  281. })
  282. }
  283. const changeHandle = (v) => {
  284. const no = '0' + v.no
  285. let list = gxList.value.map(item => {
  286. const yj = item.split('-')[0]
  287. if (yj === no) return Number(item.split('-')[1])
  288. })
  289. form['yjno'] = v.no
  290. form['工序'] = (list.sort((a, b) => b-a)[0] + 1)
  291. yjdisplay.value = false
  292. }
  293. const sbbhclick = () => {
  294. _capacityList();
  295. }
  296. const _capacityList = async () => {
  297. if(gdgyformData['设备编号'] === ''){
  298. return false;
  299. }else{
  300. _capacityListsbbh.value = gdgyformData['设备编号'].join(' ');
  301. const editProductedit_machine = await capacityList({machine:_capacityListsbbh.value});
  302. gdgyformData['小时产能'] = editProductedit_machine.data;
  303. }
  304. };
  305. // //默认弹窗关闭
  306. // const add_gdgydialogFormVisible = ref(false)
  307. // const add_gdgyformData = reactive({});
  308. // //清空对象的属性值
  309. // const gdgy_clearFormData = () => {
  310. // Object.keys(add_gdgyformData).forEach(key => {
  311. // add_gdgyformData[key] = '';
  312. // });
  313. // };
  314. // //新增工艺资料弹窗
  315. // const addgdgy_onclick = () => {
  316. // if(_Gd_gdbh.value == null){
  317. // cgugdlist.value = false;
  318. // ElMessage({
  319. // type: 'warning',
  320. // message: '请选择具体的工单后,再操作此功能'
  321. // })
  322. // }else{
  323. // let gongxu = gytableData.value.map(item => {
  324. // return item['印件-工序']
  325. // })
  326. // addGongYiRef.value.open(_Gd_gdbh.value, gongxu)
  327. // }
  328. // }
  329. // //新增工艺资料确定
  330. // const add_gdgyenterDialog = async () => {
  331. // console.log(add_gdgyformData)
  332. // // const formattedData = {
  333. // // Yj_Gdbh: _Gd_gdbh.value,
  334. // // yj_Yjno: add_gdgyformData['yjno'],
  335. // // yj_Yjdh: add_gdgyformData['yjdh'],
  336. // // };
  337. // // console.log(formattedData)
  338. // // const ProcessDetailAdd_add = await ProcessDetailAdd(formattedData);
  339. // // console.log(ProcessDetailAdd_add)
  340. // // add_gdgydialogFormVisible.value = false
  341. // }
  342. // 新增工艺资料取消
  343. const add_gdgycloseDialog = () => {
  344. visible.value = false
  345. }
  346. defineExpose({ open })
  347. </script>
  348. <style scoped>
  349. </style>