fault-page.vue 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. <template>
  2. <div class="fault" v-if="faultDetails!=null">
  3. <div class="title-fault" >
  4. 产品名称:&nbsp;&nbsp;{{faultDetails.materialName}}
  5. </div>
  6. <div class="title-fault">
  7. 产品编码:&nbsp;&nbsp;{{faultDetails.materialCode}}
  8. </div>
  9. </div>
  10. <div class="mainContentBox">
  11. <avue-crud
  12. ref="crudRef"
  13. v-model:search="search"
  14. v-model="form"
  15. :data="data"
  16. :option="option"
  17. v-model:page="page"
  18. @row-save="createRow"
  19. @row-update="updateRow"
  20. @row-del="deleteRow"
  21. @search-change="searchChange"
  22. @search-reset="resetChange"
  23. @selection-change="selectionChange"
  24. >
  25. </avue-crud>
  26. </div>
  27. <div class="fault">
  28. <div class="image-title">图片</div>
  29. <div v-for="(image, index) in faultImg" :key="index" class="fault-image">
  30. <!-- 使用v-for循环渲染图片列表 -->
  31. <img :src="dictDataUtil.img_url+image.fileUrl" alt="图片" width="150px" class="fault-img">
  32. </div>
  33. </div>
  34. <div class="fault" v-if="faultDetails!=null">
  35. <div class="fault-detail" >序列号:&nbsp;&nbsp;{{faultDetails.seqNo}}</div>
  36. <div class="fault-detail">故障描述:&nbsp;&nbsp;{{faultDetails.remark}}</div>
  37. <div class="title-fault" style="margin-top: 10px">
  38. 报故人:&nbsp;&nbsp;{{faultDetails.creator}}
  39. </div>
  40. <div class="title-fault" style="margin-top: 10px">
  41. 报故工位:&nbsp;&nbsp;{{faultDetails.stationName}}
  42. </div>
  43. <div class="title-fault" style="margin-top: 10px;margin-bottom: 10px">
  44. 报故数量:&nbsp;&nbsp;{{faultDetails.unqualifiedNum}}
  45. </div>
  46. <div class="title-fault" style="margin-top: 10px;margin-bottom: 10px" v-if="faultDetails.disposalMeasures!=='0'">
  47. 处理结果:&nbsp;&nbsp;{{faultDetails.disposalMeasures}}
  48. </div>
  49. </div>
  50. <div class="mainContentBox">
  51. <avue-crud
  52. ref="formRef"
  53. v-model="form"
  54. :data="data2"
  55. :option="option2"
  56. >
  57. <template #processInfo="{row,index,type}">
  58. <el-select v-model="value" placeholder="请选择" @click="getFaults(row)" @change="listData(row)">
  59. <el-option
  60. v-for="item in optionFault"
  61. :key="item.value"
  62. :label="item.operationName"
  63. :value="item.id"
  64. >
  65. </el-option>
  66. </el-select>
  67. </template>
  68. </avue-crud>
  69. </div>
  70. <div style="overflow: hidden">
  71. <div class="detail-footer">
  72. <el-button type="primary" @click="onHandle"> 确定 </el-button>
  73. <el-button @click="cancelWindow">取消</el-button>
  74. </div>
  75. </div>
  76. </template>
  77. <script setup>
  78. import { ref, getCurrentInstance } from "vue";
  79. import { useCrud } from "@/hooks/userCrud";
  80. import ButtonPermKeys from "@/common/configs/buttonPermission";
  81. import { useCommonStoreHook, useDictionaryStoreHook } from "@/store";
  82. const { isShowTable, tableType } = toRefs(useCommonStoreHook());
  83. import {getFault,getFaultDetails,getSeqNoList,getProcessInfoList,rework} from "@/api/fault"
  84. import dictDataUtil from "@/common/configs/dictDataUtil";
  85. // 数据字典相关
  86. const { dicts } = useDictionaryStoreHook();
  87. const test = () => {
  88. isShowTable.value = true;
  89. tableType.value = tableType.value == 1 ? 2 : 1;
  90. };
  91. const props = defineProps({
  92. faultId: {
  93. type: String,
  94. default: () => {
  95. return 0;
  96. }
  97. },
  98. dial:{
  99. type:Object,
  100. default:()=>{
  101. return {};
  102. }
  103. }
  104. })
  105. // 传入一个url,后面不带/
  106. const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
  107. useCrud({
  108. src: "/api/v1/process/escalationDefects",
  109. });
  110. const { dataNoPageList, createRow, updateRow, deleteRow, searchChange, resetChange } =
  111. Methords; //增删改查
  112. const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
  113. const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
  114. // checkBtnPerm(ButtonPermKeys.PLAN.BTNS.order_add) :permission="permission"
  115. // const permission = reactive({
  116. // delBtn: checkPerm(buttonPermission.PLAN.BTNS.order_del),
  117. // addBtn: checkPerm(buttonPermission.PLAN.BTNS.order_add),
  118. // editBtn: checkPerm(buttonPermission.PLAN.BTNS.order_edit),
  119. // menu: true,
  120. // });
  121. const radio1=ref('repair');
  122. const crudRef = ref(null); //crudRef.value 获取avue-crud对象
  123. const router = useRouter();
  124. const formRef=ref(null);
  125. const data2=ref([]);
  126. const faultImg=ref(null);
  127. const formData=ref({});
  128. const formFault=ref({});
  129. const faultDetails=ref(null);
  130. const postDetail=ref([]);
  131. onMounted(() => {
  132. // console.log("crudRef", crudRef)
  133. search.value.escalationFaultId=props.faultId;
  134. dataNoPageList();
  135. formData.value.escalationFaultId=props.faultId;
  136. formFault.value.escalationFaultId=props.faultId;
  137. getFault(formData.value).then((data) => {
  138. faultImg.value=data.data;
  139. });
  140. getFaultDetails(props.faultId).then((data) => {
  141. faultDetails.value=data.data;
  142. for(let i=0;i<dicts.disposal_measures_type.length;i++){
  143. if(faultDetails.value.disposalMeasures===dicts.disposal_measures_type[i].dictValue){
  144. faultDetails.value.disposalMeasures=dicts.disposal_measures_type[i].dictLabel;
  145. }
  146. }
  147. });
  148. getSeqNoList(formFault.value).then((data) => {
  149. data2.value=data.data;
  150. for(let i=0;i<data2.value.length;i++){
  151. data2.value[i].$cellEdit=true;
  152. }
  153. postDetail.value=Array.from(data2.value);
  154. });
  155. });
  156. const listData=(row)=>{
  157. for(let i=0;i<postDetail.value.length;i++){
  158. if(postDetail.value[i].seqNo===row.seqNo){
  159. postDetail.value[i].reworkProcessId=value.value;
  160. }
  161. }
  162. }
  163. const faultHandle=ref({});
  164. const onHandle=()=>{
  165. for(let i=0;i<postDetail.value.length;i++){
  166. if(undefined===postDetail.value[i].reworkProcessId){
  167. ElMessage({
  168. message:postDetail.value[i].seqNo+"没选择返工工序",
  169. type: "error",
  170. });
  171. return;
  172. }
  173. }
  174. rework(postDetail.value).then(
  175. (data)=> {
  176. if (data.code === "200") {
  177. ElMessage({
  178. message: data.msg,
  179. type: "success",
  180. });
  181. props.dia.visible = false;
  182. }
  183. else {
  184. ElMessage({
  185. message: data.msg,
  186. type: "error",
  187. });
  188. }
  189. }
  190. )
  191. }
  192. // 设置表格列或者其他自定义的option
  193. option.value = Object.assign(option.value, {
  194. addBtn: false,
  195. editBtn:false,
  196. delBtn:false,
  197. viewBtn:false,
  198. menu:false,
  199. column: [
  200. {
  201. label: "缺陷大类",
  202. prop: "bugType",
  203. dicData:dicts.defect_mana,
  204. props: { label: "dictLabel", value: "dictValue" },
  205. },
  206. {
  207. label: "缺陷小类",
  208. prop: "bugName",
  209. },
  210. ],
  211. });
  212. const optionFault=ref([]);
  213. const getFaults=(row)=>{
  214. console.log("row",row);
  215. getProcessInfoList(row.seqNo).then(
  216. (data)=>{
  217. optionFault.value=data.data;
  218. }
  219. )
  220. }
  221. const option2=ref(null);
  222. const value=ref(null);
  223. // 设置表格列或者其他自定义的option
  224. option2.value = {
  225. addBtn: false,
  226. editBtn:false,
  227. delBtn:false,
  228. viewBtn:false,
  229. submitBtn:false,
  230. emptyBtn:false,
  231. menu:false,
  232. slot:true,
  233. column: [
  234. {
  235. label: "跟踪卡号",
  236. prop: "seqNo",
  237. labelWidth:130,
  238. },
  239. {
  240. label: "返工工序",
  241. prop: "processInfo",
  242. labelWidth:130,
  243. type:"select",
  244. },
  245. ],
  246. };
  247. const cancelWindow=()=>{
  248. console.info(props);
  249. props.dial.visible=false;
  250. }
  251. </script>
  252. <style>
  253. .title-fault{
  254. float: left;
  255. width: 300px;
  256. }
  257. .fault{
  258. margin-left: 15px;
  259. margin-top: 10px;
  260. display: block;
  261. overflow: hidden;
  262. }
  263. .fault-image{
  264. width: 150px;
  265. float: left;
  266. margin-left: 10px;
  267. overflow: hidden;
  268. }
  269. .image-title{
  270. margin-bottom: 15px;
  271. }
  272. .fault-img{
  273. display: inline-block;
  274. }
  275. .fault-detail{
  276. margin-top: 20px;
  277. }
  278. .detail-footer{
  279. float: right;
  280. overflow: hidden;
  281. }
  282. </style>