baseInfo.vue 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473
  1. <template>
  2. <el-form ref="form1" :model="form" :rules="rules" label-width="120px">
  3. <el-row>
  4. <el-col :span="6">
  5. <el-form-item label="编码:" prop="code">
  6. <el-input clearable v-model="form.code" placeholder="请输入" disabled />
  7. </el-form-item>
  8. </el-col>
  9. <el-col :span="6">
  10. <el-form-item label="名称:" prop="name">
  11. <el-input clearable v-model="form.name" placeholder="请输入"
  12. :disabled="btnType == 'detail' || btnType == 'issued'" />
  13. </el-form-item>
  14. </el-col>
  15. <el-col :span="6">
  16. <el-form-item label="检验方式:" prop="qualityMode">
  17. <DictSelection dictName="取样类型" v-model="form.qualityMode" clearable
  18. :disabled="btnType == 'detail' || btnType == 'issued'"></DictSelection>
  19. </el-form-item>
  20. </el-col>
  21. <el-col :span="6">
  22. <!-- <el-form-item label="检验标准:" prop="inspectionStandards">-->
  23. <!-- <el-select v-model="form.inspectionStandards" placeholder="请选择" style="width: 100%" clearable></el-select>-->
  24. <!-- </el-form-item>-->
  25. <el-form-item label="检验标准" prop="inspectionStandards">
  26. <!-- 计量 计重 -->
  27. <el-select style="width: 100%" v-model="form.inspectionStandards" placeholder="请选择">
  28. <el-option v-for="item in inspectionStandardsList" :label="item.label" :value="item.value"
  29. :key="item.value">
  30. </el-option>
  31. </el-select>
  32. </el-form-item>
  33. </el-col>
  34. </el-row>
  35. <el-row>
  36. <el-col :span="6">
  37. <el-form-item label="自动派单:" prop="autoOrder">
  38. <el-select v-model="form.autoOrder" placeholder="请选择" style="width: 100%"
  39. :disabled="btnType == 'detail' || btnType == 'issued'" clearable>
  40. <el-option label="是" :value="1" />
  41. <el-option label="否" :value="0" />
  42. </el-select>
  43. </el-form-item>
  44. </el-col>
  45. <el-col :span="6">
  46. <el-form-item label="执行部门:" prop="groupId">
  47. <deptSelect :disabled="btnType == 'detail'" v-model="form.groupId" @changeGroup="searchDeptNodeClick" />
  48. </el-form-item>
  49. </el-col>
  50. <el-col :span="6">
  51. <el-form-item label="执行人员:" prop="executeId">
  52. <el-select :disabled="btnType == 'detail'" v-model="form.executeId" @change="changeExecutor" filterable
  53. style="width: 100%">
  54. <el-option v-for="item in executorList" :key="item.id" :value="item.id" :label="item.name"></el-option>
  55. </el-select>
  56. </el-form-item>
  57. </el-col>
  58. <el-col :span="6">
  59. <el-form-item label="开始时间:" prop="planStartTime">
  60. <el-date-picker :disabled="btnType == 'detail'" class="w100" v-model="form.planStartTime" type="date"
  61. value-format="yyyy-MM-dd" placeholder="请输入"></el-date-picker>
  62. </el-form-item>
  63. </el-col>
  64. </el-row>
  65. <div style="text-align: right;margin-bottom: 22px;">
  66. <div @click="toggleExpand">
  67. <div v-if="isExpanded"><i class="el-icon-arrow-up"></i>收起</div>
  68. <div v-if="!isExpanded"><i class="el-icon-arrow-down"></i>展开更多</div>
  69. </div>
  70. </div>
  71. <div v-if="isExpanded">
  72. <el-row>
  73. <el-col :span="6">
  74. <el-form-item label="结束时间:" prop="planEndTime">
  75. <el-date-picker :disabled="btnType == 'detail'" class="w100" v-model="form.planEndTime" type="date"
  76. value-format="yyyy-MM-dd" placeholder="请输入"></el-date-picker>
  77. </el-form-item>
  78. </el-col>
  79. <el-col :span="6">
  80. <el-form-item label="类型:" prop="type">
  81. <DictSelection dictName="质检计划类型" v-model="form.type" clearable @change="typeChange"
  82. :disabled="btnType == 'detail' || btnType == 'issued'"></DictSelection>
  83. </el-form-item>
  84. </el-col>
  85. <el-col :span="6">
  86. <el-form-item label="计划来源:" prop="planSource">
  87. <el-select v-model="form.planSource" placeholder="请选择" style="width: 100%" clearable
  88. @change="planSourceChange" :disabled="btnType == 'detail' || btnType == 'issued'">
  89. <el-option :label="item.label" v-for="item in sourceList" :key="item.value" :value="item.value" />
  90. </el-select>
  91. </el-form-item>
  92. </el-col>
  93. <el-col :span="6">
  94. <el-form-item label="来源编码:" prop="planSourceCode">
  95. <el-input v-model="form.planSourceCode" disabled />
  96. </el-form-item>
  97. </el-col>
  98. </el-row>
  99. <el-row>
  100. <el-col :span="6">
  101. <el-form-item label="名称:" prop=" productName">
  102. <el-input v-model="form.productName" disabled />
  103. </el-form-item>
  104. </el-col>
  105. <el-col :span="6">
  106. <el-form-item label="编码:" prop=" productCode">
  107. <el-input v-model="form.productCode" disabled />
  108. </el-form-item>
  109. </el-col>
  110. <el-col :span="6">
  111. <el-form-item label="批次号:" prop=" batchNo">
  112. <el-input v-model="form.batchNo" disabled />
  113. </el-form-item>
  114. </el-col>
  115. <el-col :span="6">
  116. <el-form-item label="规格:" prop=" specification">
  117. <el-input v-model="form.specification" disabled />
  118. </el-form-item>
  119. </el-col>
  120. </el-row>
  121. <el-row>
  122. <el-col :span="6">
  123. <el-form-item label="型号:" prop=" modelType">
  124. <el-input v-model="form.modelType" disabled />
  125. </el-form-item>
  126. </el-col>
  127. <el-col :span="6">
  128. <el-form-item label="牌号:" prop=" brandNo">
  129. <el-input v-model="form.brandNo" disabled />
  130. </el-form-item>
  131. </el-col>
  132. <el-col :span="6">
  133. <el-form-item label="数量:" prop=" productNumber">
  134. <el-input type="number" v-model="form.productNumber" disabled />
  135. </el-form-item>
  136. </el-col>
  137. <el-col :span="6">
  138. <el-form-item label="工序:" prop=" produceTaskName">
  139. <el-input v-model="form.produceTaskName" disabled />
  140. </el-form-item>
  141. </el-col>
  142. </el-row>
  143. <el-row>
  144. <el-col :span="6">
  145. <el-form-item label="合格品数量:" prop=" qualifiedNumber">
  146. <el-input type="number" v-model="form.qualifiedNumber" disabled />
  147. </el-form-item>
  148. </el-col>
  149. <el-col :span="6">
  150. <el-form-item label="不合格品数量:" prop=" unqualifiedNumber">
  151. <el-input type="number" v-model="form.unqualifiedNumber" disabled />
  152. </el-form-item>
  153. </el-col>
  154. <el-col :span="6">
  155. <el-form-item label="合格率:" prop="qualificationRate">
  156. <el-input type="number" v-model="form.qualificationRate"
  157. :disabled="btnType == 'detail' || btnType == 'issued'" />
  158. </el-form-item>
  159. </el-col>
  160. <el-col :span="6">
  161. <el-form-item label="总重量:" prop="totalWeight">
  162. <el-input type="number" v-model="form.totalWeight" :disabled="btnType == 'detail' || btnType == 'issued'" />
  163. </el-form-item>
  164. </el-col>
  165. </el-row>
  166. <el-row>
  167. <el-col :span="6" v-if="form.qualityMode == 2">
  168. <el-form-item label="取样数量:" prop="sampleNumber" :rules="{
  169. required: form.qualityMode == 2 ? true : false,
  170. message: '请输入取样数量',
  171. trigger: 'blur'
  172. }">
  173. <el-input type="number" v-model="form.sampleNumber" @change="handleChangeNumber"
  174. :disabled="btnType == 'detail' || btnType == 'issued'" />
  175. </el-form-item>
  176. </el-col>
  177. <el-col :span="6">
  178. <el-form-item label="抽样比例:" prop="sampleProportion">
  179. <el-input v-model="form.sampleProportion" :disabled="btnType == 'detail' || btnType == 'issued'">
  180. <template #append>%</template>
  181. </el-input>
  182. </el-form-item>
  183. </el-col>
  184. </el-row>
  185. <el-row>
  186. <el-col :span="24">
  187. <el-form-item label="备注:" prop="remark">
  188. <el-input type="textarea" v-model="form.remark" placeholder="请输入"
  189. :disabled="btnType == 'detail' || btnType == 'issued'" />
  190. </el-form-item>
  191. </el-col>
  192. </el-row>
  193. <el-row>
  194. <el-col :span="8">
  195. <el-form-item label="附件:" prop="accessory">
  196. <fileUpload v-model="form.accessory" />
  197. </el-form-item>
  198. </el-col>
  199. </el-row>
  200. </div>
  201. <warehousing ref="warehousingRef" @choose="handleChoose" />
  202. <productionPlan ref="productionPlanRef" @choose="handleChoose" />
  203. <workOrder ref="workOrderRef" @choose="handleChoose" />
  204. <produceOrder ref="produceOrderRef" @choose="handleChoose" />
  205. <EquipmentDialog ref="equipmentRefs" @choose="handleChoose" :type="1" :treeIds="['9', '1']" />
  206. </el-form>
  207. </template>
  208. <script>
  209. import deptSelect from '@/components/CommomSelect/dept-select.vue';
  210. import fileUpload from '@/components/addDoc/index.vue';
  211. import warehousing from './warehousing';
  212. import productionPlan from './productionPlan';
  213. import workOrder from './workOrder';
  214. import produceOrder from './produceOrder';
  215. import EquipmentDialog from '@/views/inspectionWork/components/EquipmentDialog';
  216. //接口
  217. import { getUserPage } from '@/api/system/organization';
  218. import { getByCode } from '@/api/system/dictionary-data';
  219. import { rules } from 'eslint-config-prettier';
  220. export default {
  221. components: {
  222. EquipmentDialog,
  223. produceOrder,
  224. workOrder,
  225. productionPlan,
  226. warehousing,
  227. deptSelect,
  228. fileUpload
  229. },
  230. props: {
  231. form: {
  232. type: Object,
  233. default: () => { }
  234. },
  235. btnType: {
  236. type: String,
  237. default: ''
  238. }
  239. },
  240. watch: {
  241. 'form.qualityMode': {
  242. handler(newVal) {
  243. if (newVal) {
  244. this.$emit('changeModel', newVal);
  245. } else {
  246. console.log('清空样品清单');
  247. this.$emit('table2');
  248. }
  249. },
  250. immediate: false
  251. },
  252. // 'form.autoOrder': {
  253. // handler(newVal) {
  254. // if (!newVal) {
  255. // this.form.groupId = '';
  256. // this.form.groupName = '';
  257. // this.form.executeId = '';
  258. // this.form.executeName = '';
  259. // }
  260. // },
  261. // immediate: false
  262. // },
  263. 'form.type': {
  264. handler(newVal) {
  265. if (!newVal) {
  266. this.form.planSource = '';
  267. this.form.planSourceCode = '';
  268. this.form.productName = '';
  269. this.form.productCode = '';
  270. this.form.batchNo = '';
  271. this.form.specification = '';
  272. this.form.modelType = '';
  273. this.form.brandNo = '';
  274. this.form.productNumber = '';
  275. this.form.qualifiedNumber = '';
  276. this.form.unqualifiedNumber = '';
  277. this.form.qualificationRate = '';
  278. this.form.totalWeight = '';
  279. this.form.sampleNumber = '';
  280. this.sourceList = [];
  281. this.$emit('resetTable');
  282. }
  283. },
  284. immediate: false
  285. },
  286. 'form.planSource': {
  287. handler(newVal) {
  288. if (!newVal) {
  289. this.form.planSource = '';
  290. this.form.planSourceCode = '';
  291. this.form.productName = '';
  292. this.form.productCode = '';
  293. this.form.batchNo = '';
  294. this.form.specification = '';
  295. this.form.modelType = '';
  296. this.form.brandNo = '';
  297. this.form.productNumber = '';
  298. this.form.qualifiedNumber = '';
  299. this.form.unqualifiedNumber = '';
  300. this.form.qualificationRate = '';
  301. this.form.totalWeight = '';
  302. this.form.sampleNumber = '';
  303. this.$emit('resetTable');
  304. }
  305. },
  306. immediate: false
  307. }
  308. },
  309. data() {
  310. return {
  311. executorList: [],
  312. sourceList: [],
  313. inspectionStandardsList: [],
  314. rules: {
  315. name: [{ required: true, message: '请输入', trigger: 'blur' }],
  316. qualityMode: [
  317. { required: true, message: '请选择检验方式', trigger: 'blur' }
  318. ],
  319. type: [{ required: true, message: '请选择类型', trigger: 'blur' }],
  320. groupId: [
  321. { required: true, message: '请选择执行部门', trigger: 'blur' }
  322. ],
  323. executeId: [
  324. { required: true, message: '请选择执行人员:', trigger: 'blur' }
  325. ]
  326. },
  327. isExpanded: false // 控制展开/收起状态
  328. };
  329. },
  330. created() {
  331. this.getDictListIqoCode('iqo_code');
  332. },
  333. methods: {
  334. toggleExpand() {
  335. this.isExpanded = !this.isExpanded;
  336. },
  337. async getDictListIqoCode(code) {
  338. let { data: res } = await getByCode(code);
  339. this.inspectionStandardsList = res.map((item) => {
  340. let values = Object.keys(item);
  341. return {
  342. value: Number(values[0]),
  343. label: item[values[0]]
  344. };
  345. });
  346. },
  347. //质检计划类型
  348. planChange(value) {
  349. if (value == 1) {
  350. this.sourceList = [{ label: '采购收货单', value: '1' }];
  351. } else if (value == 2) {
  352. this.sourceList = [
  353. { label: '生产计划', value: '2' },
  354. { label: '生产订单', value: '3' },
  355. { label: '生产工单', value: '4' }
  356. ];
  357. }
  358. },
  359. //选择部门(搜索)
  360. searchDeptNodeClick(info, row) {
  361. if (info) {
  362. const params = { groupId: info };
  363. this.getUserList(params);
  364. this.form.groupName = row.name;
  365. } else {
  366. this.form.executeGroupId = null;
  367. }
  368. },
  369. // 获取审核人列表、巡点检人员
  370. async getUserList(params) {
  371. try {
  372. let data = { pageNum: 1, size: -1 };
  373. // 如果传了参数就是获取巡点检人员数据
  374. if (params) {
  375. data = Object.assign(data, params);
  376. }
  377. const res = await getUserPage(data);
  378. this.executorList = res.list;
  379. } catch (error) { }
  380. },
  381. // 执行人选择
  382. changeExecutor(val) {
  383. if (val) {
  384. this.form.executeId = val;
  385. this.form.executeName = this.executorList.filter(
  386. (item) => item.id === val
  387. )[0].name;
  388. }
  389. },
  390. //计划来源选择
  391. planSourceChange(val) {
  392. if (val) {
  393. this.addProduct();
  394. }
  395. },
  396. addProduct() {
  397. if (this.form.planSource == 1) {
  398. this.$refs.warehousingRef.open();
  399. } else if (this.form.planSource == 2) {
  400. this.$refs.productionPlanRef.open();
  401. } else if (this.form.planSource == 3) {
  402. this.$refs.workOrderRef.open();
  403. } else if (this.form.planSource == 4) {
  404. this.$refs.produceOrderRef.open();
  405. } else {
  406. this.$refs.equipmentRefs.open();
  407. }
  408. },
  409. // 根据来源得到产品
  410. handleChoose(val) {
  411. if (!val) return;
  412. this.form.planSourceId = val.id;
  413. // this.form.planReceiveId = val.receiveId;
  414. this.form.planSourceCode = val.receiveNo;
  415. console.log(this.form.planSourceCode, 'this.form.planSourceCode')
  416. this.form.productName = val.productName;
  417. this.form.productCode = val.productCode;
  418. this.form.batchNo = val.batchNo;
  419. this.form.specification = val.specification;
  420. this.form.modelType = val.modelType;
  421. this.form.brandNo = val.brandNo;
  422. this.form.productNumber = val.totalCount;
  423. this.form.qualifiedNumber = val.qualifiedNumber;
  424. this.form.unqualifiedNumber = val.unqualifiedNumber;
  425. this.form.qualificationRate = val.qualificationRate;
  426. this.form.totalWeight = val.totalWeight;
  427. this.form.sampleNumber = val.sampleNumber;
  428. this.form.inspectionStandards = val.inspectionStandards;
  429. this.form.produceTaskName = val.produceTaskName;
  430. this.form.produceTaskId = val.produceTaskId;
  431. this.form.productId = val.productId;
  432. let receiveNo = val.receiveNo;
  433. let categoryCode = val.productCode;
  434. let categoryid = val.productId;
  435. let batchNo = val.batchNo;
  436. let productCategoryId = val.productCategoryId;
  437. let productCategoryName = val.productCategoryName;
  438. if (receiveNo && categoryCode && categoryid) {
  439. this.$emit('getList', receiveNo, categoryCode, productCategoryId, productCategoryName, categoryid, batchNo);
  440. }
  441. },
  442. handleChangeNumber(val) {
  443. this.form.sampleNumber = val;
  444. this.$emit('changeNumber', val);
  445. },
  446. typeChange(val) {
  447. if (val == 1) {
  448. this.sourceList = [{ label: '采购收货单', value: '1' }];
  449. } else if (val == 2) {
  450. this.sourceList = [
  451. { label: '生产计划', value: '2' },
  452. { label: '生产订单', value: '3' },
  453. { label: '生产工单', value: '4' }
  454. ];
  455. }
  456. }
  457. }
  458. };
  459. </script>
  460. <style lang="scss" scoped>
  461. ::v-deep .el-form-item .el-form-item--medium .more {
  462. margin: 0 !important;
  463. }
  464. </style>