addGongYi.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489
  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 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 v-model="form['损耗系数']" style="flex: 1;" id="损耗系数" @keydown="add_gyzlent($event, '工序损耗', '损耗系数', '难度系数')"/>
  66. </el-form-item>
  67. <el-form-item label="难度系数" class="mab" prop="keyOrder">
  68. <el-input v-model="form['难度系数']" style="flex: 1;" id="难度系数" @keydown="add_gyzlent($event, '损耗系数', '难度系数', '装版工时')"/>
  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. >
  115. </el-tree>
  116. <!-- :default-expanded-keys="['标准工艺']"-->
  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. <!-- 新增查询标准损耗 -->
  132. <el-dialog v-model="shxsdisplay" :before-close="() => shxsdisplay = false">
  133. <el-form>
  134. <div>
  135. <!-- <el-form-item label="关键字:" class="mab" prop="keyOrder">
  136. <el-space>
  137. <el-input v-model="gymc_keyword" style="width: 100%;"/>
  138. <el-button @click="searchHandle(gymc_keyword)">刷新</el-button>
  139. </el-space>
  140. </el-form-item> -->
  141. <div style="border:1px solid #eee; width:100%; height: 400px; overflow-y: auto">
  142. <el-tree :data="getSHListdata" :props="defaultProps" @node-click="selectSHNode" />
  143. </div>
  144. </div>
  145. </el-form>
  146. </el-dialog>
  147. </div>
  148. </template>
  149. <script setup>
  150. import {ref, reactive,onMounted} from 'vue'
  151. import {
  152. gdzl_MachineList,
  153. PrintDetailList,
  154. WastageList,
  155. getDepartName,
  156. capacityList,
  157. ProcessDetailAdd,
  158. workOrderListDetail,
  159. getLossCode, getCouplet,
  160. } from '@/api/yunyin/yunying'
  161. import { ElMessage } from 'element-plus'
  162. const form = reactive({})
  163. const visible = ref(false)
  164. const yjdisplay = ref(false)
  165. const shxsdisplay = ref(false)
  166. const cjdisplay = ref(false)
  167. const gxshdisplay = ref(false)
  168. const id = ref()
  169. const gxList = ref([])
  170. const yjList = ref()
  171. const cjList = ref([])
  172. const gdzl_MachineList_address = ref()
  173. import { useUserStore } from '@/pinia/modules/user'
  174. const userStore = useUserStore()
  175. const _username = ref('')
  176. _username.value = userStore.userInfo.userName + '/' + userStore.userInfo.nickName
  177. //新增工艺资料弹窗 键盘 input框跳转
  178. const add_gyzlent = async (event,id1,id2,id3) => {
  179. if (id2==='印件编号' && event.key==='Tab' || id2 === '印件编号' && event.key=== 'Enter') {
  180. console.log(id.value)
  181. console.log(form['yjno'])
  182. const response = await getCouplet({ gdbh:id.value,yjno:form['yjno']});
  183. console.log(response)
  184. form['开数'] = response.data['开数']
  185. form['联数'] = response.data['联数']
  186. form['工序'] = response.data['工序号']
  187. if(yjList.value !== undefined){
  188. const node = yjList.value.find(item => item.no ===form['yjno'])
  189. if (! node) {
  190. yjdisplay.value = true
  191. }
  192. document.getElementById(id3).focus()
  193. }
  194. }
  195. if (id2 === '车间名称' && event.key==='Enter' || id2 === '车间名称' && event.key==='Tab') {
  196. document.getElementById(id3).focus()
  197. cjdisplay.value = true
  198. }
  199. // if (id2 === '损耗系数' && event.key==='Tab') {
  200. // document.getElementById(id3).focus()
  201. // }
  202. if (id2 === '工序损耗' && event.key==='Enter' || id2 === '工序损耗' && event.key==='Tab') {
  203. if(form['车间名称']){
  204. await getGxshList();
  205. _getSH()
  206. shxsdisplay.value = true
  207. }
  208. }
  209. if (id2 === '工序名称' && event.key==='Tab' || event.key==='Enter') {
  210. if(form['工艺名称'] === undefined){
  211. form['工艺名称'] = '';
  212. }
  213. if(form['工序名称'] === undefined){
  214. form['工序名称'] = '';
  215. }
  216. form['工序损耗名称'] = `${form['工艺名称']} ${form['工序名称']}`;
  217. }
  218. if (event.keyCode === 13 || event.keyCode === 40) { // Enter 或向下箭头
  219. if(id3!=''){
  220. document.getElementById(id3).focus()
  221. }
  222. } else if (event.keyCode === 38) { // 向上箭头
  223. if(id1!=''){
  224. document.getElementById(id1).focus()
  225. }
  226. }else if (event.keyCode === 8) { // 删除箭头
  227. if(id1!='' && document.getElementById(id2).value==''){
  228. document.getElementById(id1).focus()
  229. }
  230. }else if (event.keyCode === 37) { // 向左箭头
  231. if(id1!='' && document.getElementById(id2).selectionStart==0){
  232. document.getElementById(id1).focus()
  233. }
  234. }else if (event.keyCode === 39) { // 向右箭头
  235. if(id3!='' && document.getElementById(id2).selectionStart == document.getElementById(id2).value.length){
  236. document.getElementById(id3).focus()
  237. }
  238. }
  239. }
  240. const getSHListdata = ref([]);
  241. const _shdh = ref('');
  242. const InSH = async (value) => {
  243. if(form['工艺名称']){
  244. const response = await getLossCode({ code:form['工艺名称']});
  245. console.log(response)
  246. if(response.code===0){
  247. form['shdh']=response.data[0].sys_bh
  248. // form.工序损耗名称= node.sys_mc
  249. form['工序损耗名称'] = `${response.data[0].sys_mc} ${form['工序名称']}`;
  250. form.损耗系数='1.00'
  251. form.难度系数='1.00'
  252. }
  253. }
  254. }
  255. //填充树形结构
  256. const _getSH = async () => {
  257. const response = await getLossCode({ code:'' });
  258. if (response.code === 0) {
  259. const data = response.data;
  260. const treeData = [];
  261. const map = {};
  262. // 构建树形结构
  263. data.forEach(item => {
  264. map[item.sys_bh] = { ...item, children: [], label: `${item.sys_bh}---${item.sys_mc}---${item.sys_rate0}---${item.sys_rate1}` };
  265. });
  266. data.forEach(item => {
  267. if (item.sys_bh.length === 3) {
  268. map[item.sys_bh].level = 1;
  269. treeData.push(map[item.sys_bh]);
  270. } else {
  271. map[item.sys_bh].level = 2;
  272. map[item.sys_bh.substring(0, 3)].children.push(map[item.sys_bh]);
  273. }
  274. });
  275. getSHListdata.value = treeData;
  276. shxsdisplay.value = true;
  277. } else {
  278. // 处理错误情况
  279. console.error('获取损耗列表失败');
  280. }
  281. };
  282. //损耗树形结构点击
  283. const selectSHNode = (node,check) => {
  284. console.log(node.level)
  285. if(node.level==1){
  286. console.log(node.label)
  287. }
  288. if(node.level==2){
  289. if(form['工艺名称'] === undefined){
  290. form['工艺名称'] = '';
  291. }
  292. if(form['工序名称'] === undefined){
  293. form['工序名称'] = '';
  294. }
  295. form['shdh']=node.sys_bh
  296. // form.工序损耗名称= node.sys_mc
  297. form['工序损耗名称'] = `${node.sys_mc} ${form['工序名称']}`;
  298. form.损耗系数='1.00'
  299. form.难度系数='1.00'
  300. shxsdisplay.value = false;
  301. }
  302. }
  303. const open = async (gdbh, gxlist) => {
  304. Object.keys(form).forEach(key => {
  305. form[key] = '';
  306. });
  307. visible.value = true
  308. id.value = gdbh
  309. const res = await PrintDetailList({workOrder: id.value})
  310. const apiData = await getDepartName()
  311. console.log(apiData)
  312. function transformDataToTreeFormat(data) {
  313. return Object.entries(data).map(([key, value]) => {
  314. // key是车间名称,value是车间内的操作列表
  315. const children = Object.entries(value).map(([workshop, operations]) => ({
  316. label: workshop,
  317. children: operations.map(operation => ({
  318. label: operation,
  319. value: operation // 可以根据需要添加更多属性
  320. }))
  321. }));
  322. return { label: key, children };
  323. });
  324. }
  325. // 使用ref来管理转换后的数据
  326. cjList.value = ref(transformDataToTreeFormat(apiData.data));
  327. yjList.value = res.data
  328. gxList.value = gxlist
  329. }
  330. //工序损耗列表
  331. const gxshList = ref([])
  332. const getGxshList = async ()=>{
  333. const WastageList_data = await WastageList({process: form.工艺名称})
  334. console.log(WastageList_data)
  335. if(WastageList_data.data === null || WastageList_data.data === ''){
  336. form['shdh'] = '';
  337. ElMessage({
  338. type: 'warning',
  339. message: '未获取到工序损耗'
  340. })
  341. }
  342. // const response = await getLossCode({ code: WastageList_data.data });
  343. // console.log(response)
  344. form['shdh'] = WastageList_data.data
  345. }
  346. //点击工序损耗列表数据
  347. const gxshselectHandle = async (node)=>{
  348. if(node.label2){
  349. form['shdh'] = node.value
  350. form['工序损耗名称'] = node.label2
  351. gxshdisplay.value = false
  352. }
  353. }
  354. const selectHandle = async (node)=>{
  355. console.log(node)
  356. if(node.value){
  357. form['工艺名称'] = node.value
  358. form['工序损耗名称'] = node.value
  359. cjdisplay.value = false
  360. }else{
  361. form['车间名称'] = node.label
  362. return false;
  363. }
  364. form['设备编号'] = []
  365. //通过车间名称查询机台
  366. const MachineList_jitai = await gdzl_MachineList({address:form['车间名称']});
  367. gdzl_MachineList_address.value = MachineList_jitai.data;
  368. form['shdh'] = ''
  369. //通过车间名称查询工序损耗
  370. // await getGxshList()
  371. if(form['工艺名称'] === undefined){
  372. form['工艺名称'] = '';
  373. }
  374. if(form['工序名称'] === undefined){
  375. form['工序名称'] = '';
  376. }
  377. await InSH()
  378. }
  379. const changeHandle = (v) => {
  380. const no = '0' + v.no
  381. let list = gxList.value.map(item => {
  382. const yj = item.split('-')[0]
  383. if (yj === no) return Number(item.split('-')[1])
  384. })
  385. form['yjno'] = v.no
  386. form['工序'] = (list.sort((a, b) => b-a)[0] + 1)
  387. yjdisplay.value = false
  388. }
  389. const _capacityListsbbh = ref(null)
  390. const sbbhclick = () => {
  391. _capacityList();
  392. }
  393. const _capacityList = async () => {
  394. console.log(111)
  395. if(form['设备编号'] === ''){
  396. return false;
  397. }else{
  398. _capacityListsbbh.value = form['设备编号'].join(' ');
  399. const editProductedit_machine = await capacityList({machine:_capacityListsbbh.value});
  400. form['小时产能'] = editProductedit_machine.data;
  401. }
  402. };
  403. const sbbh = ref(null)
  404. const gongdanziliao = ref(null)
  405. //新增工艺资料确定
  406. const add_gdgyenterDialog = async () => {
  407. if(!form['yjno']){
  408. ElMessage({ type: 'warning', message: '印件编号不能为空' });return;
  409. }
  410. if(!form['工序']){
  411. ElMessage({ type: 'warning', message: '工序编号不能为空' });return;
  412. }
  413. if(!form['车间名称']){
  414. ElMessage({ type: 'warning', message: '车间名称不能为空' });return;
  415. }
  416. if(!form['设备编号']){
  417. ElMessage({ type: 'warning', message: '设备编号不能为空' });return;
  418. }
  419. // console.log(form)
  420. sbbh.value = form['设备编号'].join(' ');
  421. const formattedData = {
  422. Gy0_gdbh: id.value,
  423. Gy0_方案: 'A',
  424. Gy0_yjno: form['yjno'] ? form['yjno'] : "",
  425. Gy0_gxh: form['工序'] ? form['工序'] : "",
  426. Gy0_gxmc:form['工艺名称'] ? form['工艺名称'] : "",
  427. Add_gxmc:form['工序名称'] ? form['工序名称'] : "",
  428. 重点工序: form['重点工序'] ? form['重点工序'] : "",
  429. 备选工序: form['备选工序'] ? "1" : "0",
  430. Gy0_sbbh: sbbh.value ? sbbh.value : "",
  431. Gy0_sbmc: "",
  432. Gy0_SITE: form['车间名称'] ? form['车间名称'] : "",
  433. Gy0_ks: form['开数'] ? form['开数'] : "",
  434. Gy0_ls: form['联数'] ? form['联数'] : "",
  435. Gy0_ms: form['计损色数'] ? form['计损色数'] : 0,
  436. Sys_id : _username.value,
  437. 工价系数: form['难度系数'] ? form['难度系数'] : 0,
  438. 损耗系数: form['损耗系数'] ? form['损耗系数'] : 0,
  439. Gy0_shdh: form['shdh'] ? form['shdh'] : "",
  440. Gy0_Rate1: "",
  441. Gy0_辅助工时: form['装版工时'] ? form['装版工时'] : "",
  442. Gy0_小时产能: form['小时产能'] ? form['小时产能'] : "",
  443. 工序备注: form['备注'] ? form['备注'] : "",
  444. 质量要求: form['质量要求'] ? form['质量要求'] : "",
  445. 质量隐患: form['质量隐患'] ? form['质量隐患'] : "",
  446. };
  447. console.log(formattedData)
  448. const ProcessDetailAdd_add = await ProcessDetailAdd(formattedData);
  449. console.log(ProcessDetailAdd_add)
  450. if (ProcessDetailAdd_add.code === 0) {
  451. ElMessage({type: 'success', message: '新增成功'})
  452. visible.value = false
  453. const workOrderListDetail_data = await workOrderListDetail({Gd_gdbh:id.value});
  454. gytableData.value = workOrderListDetail_data.data.processList;
  455. } else {
  456. ElMessage({type: 'error',message: '新增失败'})
  457. }
  458. }
  459. // 新增工艺资料取消
  460. const add_gdgycloseDialog = () => {
  461. visible.value = false
  462. }
  463. defineExpose({ open })
  464. </script>
  465. <style scoped>
  466. </style>