add.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419
  1. <template>
  2. <ele-modal
  3. :title="dialogTitle"
  4. :visible.sync="visible"
  5. :before-close="handleClose"
  6. width="80%"
  7. custom-class="ele-dialog-form long-dialog-form"
  8. :centered="true"
  9. :close-on-click-modal="false"
  10. :maxable="true"
  11. append-to-body
  12. >
  13. <el-form label-width="110px" :model="formData">
  14. <el-row>
  15. <el-col :span="8">
  16. <el-form-item
  17. label="规则名称"
  18. prop="name"
  19. :rules="{
  20. required: true,
  21. message: '请选择规则名称',
  22. trigger: 'change'
  23. }"
  24. >
  25. <!-- <el-input v-model="formData.code" placeholder="请输入" /> -->
  26. <el-select
  27. style="width: 100%"
  28. v-model="formData.name"
  29. placeholder="请选择"
  30. @change="changeList"
  31. >
  32. <el-option
  33. v-for="(item, index) in listData"
  34. :key="index"
  35. :label="item.name"
  36. :value="index"
  37. >
  38. </el-option>
  39. </el-select>
  40. </el-form-item>
  41. </el-col>
  42. <el-col :span="8">
  43. <el-form-item
  44. label="记录表名称"
  45. prop="biaoName"
  46. :rules="{
  47. required: true,
  48. message: '请输入记录表名称',
  49. trigger: 'blur'
  50. }"
  51. >
  52. <el-input v-model="formData.biaoName" placeholder="请输入" />
  53. </el-form-item>
  54. </el-col>
  55. <el-col :span="8">
  56. <el-form-item label="记录表编码" prop="biaoCode">
  57. <el-input
  58. disabled
  59. v-model="formData.biaoCode"
  60. placeholder="请输入"
  61. />
  62. </el-form-item>
  63. </el-col>
  64. </el-row>
  65. <el-row>
  66. <el-col :span="8">
  67. <el-form-item label="车间区域" prop="quyu">
  68. <el-input v-model="formData.quyu" placeholder="请选择" />
  69. </el-form-item>
  70. </el-col>
  71. <el-col :span="8">
  72. <el-form-item label="工单" prop="workOrder">
  73. <el-input
  74. v-model="formData.workOrder"
  75. placeholder="请选择"
  76. @click.native="selectWork"
  77. />
  78. </el-form-item>
  79. </el-col>
  80. <el-col :span="8">
  81. <el-form-item label="工序名称" prop="gongxu">
  82. <el-input v-model="formData.gongxu" placeholder="请输入" />
  83. </el-form-item>
  84. </el-col>
  85. </el-row>
  86. <el-row>
  87. <el-col :span="8">
  88. <el-form-item label="产品名称" prop="chanp">
  89. <el-input v-model="formData.chanp" placeholder="请输入" />
  90. </el-form-item>
  91. </el-col>
  92. <el-col :span="8">
  93. <el-form-item label="产品批号" prop="branNo">
  94. <el-input v-model="formData.branNo" placeholder="请输入" />
  95. </el-form-item>
  96. </el-col>
  97. <el-col :span="8">
  98. <el-form-item label="产品型号" prop="xingh">
  99. <el-input v-model="formData.xingh" placeholder="请输入" />
  100. </el-form-item>
  101. </el-col>
  102. </el-row>
  103. <el-row>
  104. <el-col :span="8">
  105. <el-form-item label="产品规格" prop="xingh">
  106. <el-input v-model="formData.xingh" placeholder="请输入" />
  107. </el-form-item>
  108. </el-col>
  109. <el-col :span="8">
  110. <el-form-item
  111. label="清场完成时间"
  112. prop="time"
  113. :rules="{
  114. required: true,
  115. message: '请输入记录表名称',
  116. trigger: 'blur'
  117. }"
  118. >
  119. <el-date-picker
  120. style="width: 100%"
  121. v-model="formData.time"
  122. type="datetime"
  123. placeholder="选择"
  124. value-format="yyyy-MM-dd HH:mm:ss"
  125. ></el-date-picker>
  126. </el-form-item>
  127. </el-col>
  128. <el-col :span="8">
  129. <el-form-item
  130. label="清场有效期"
  131. prop="yxq"
  132. :rules="{
  133. required: true,
  134. message: '请输入记录表名称',
  135. trigger: 'blur'
  136. }"
  137. >
  138. <el-date-picker
  139. style="width: 100%"
  140. v-model="formData.yxq"
  141. type="datetime"
  142. placeholder="选择"
  143. value-format="yyyy-MM-dd HH:mm:ss"
  144. ></el-date-picker>
  145. </el-form-item>
  146. </el-col>
  147. </el-row>
  148. <el-row>
  149. <el-col :span="8">
  150. <el-form-item
  151. label="清场检查结论"
  152. prop="jielun"
  153. :rules="{
  154. required: true,
  155. message: '请选择清场检查结论',
  156. trigger: 'change'
  157. }"
  158. class="table_list"
  159. >
  160. <el-radio-group v-model="formData.jielun">
  161. <el-radio :label="1">合格</el-radio>
  162. <el-radio :label="2">不合格</el-radio>
  163. </el-radio-group>
  164. </el-form-item>
  165. </el-col>
  166. </el-row>
  167. <ele-pro-table
  168. ref="table"
  169. :columns="columns"
  170. :datasource="ruleItems"
  171. :toolkit="[]"
  172. :need-page="false"
  173. row-key="id"
  174. class="table_list"
  175. >
  176. <template v-slot:situation="{ row }">
  177. <el-radio-group v-model="row.situation">
  178. <el-radio :label="2">否</el-radio>
  179. <el-radio :label="1">是</el-radio>
  180. </el-radio-group>
  181. </template>
  182. <template v-slot:toolList="{ row }">
  183. <div
  184. style="display: inline-block"
  185. v-for="(item, idx) in row.toolList"
  186. :key="idx"
  187. >{{ item.name }}
  188. <span v-if="row.toolList && idx != row.toolList.length - 1"
  189. >,
  190. </span>
  191. </div>
  192. </template>
  193. <template v-slot:cleaners="{ row, $index }">
  194. <el-input
  195. placeholder="请选择"
  196. v-model="row.cleaners"
  197. @click.native="cleanersOpen(row, $index)"
  198. ></el-input>
  199. </template>
  200. <template v-slot:result="{ row }">
  201. <el-radio-group v-model="row.result">
  202. <el-radio :label="2">不合格</el-radio>
  203. <el-radio :label="1">合格</el-radio>
  204. </el-radio-group>
  205. </template>
  206. <template v-slot:describe="{ row }">
  207. <el-input
  208. type="textarea"
  209. :rows="2"
  210. placeholder="请输入内容"
  211. v-model="row.describe"
  212. >
  213. </el-input>
  214. </template>
  215. </ele-pro-table>
  216. </el-form>
  217. <template v-slot:footer>
  218. <el-button @click="handleClose">取消</el-button>
  219. <el-button type="primary" @click="preserve"> 保存 </el-button>
  220. </template>
  221. <Select ref="selectRef" @setPersonnel="setPersonnel" />
  222. </ele-modal>
  223. </template>
  224. <script>
  225. import Select from './select.vue';
  226. export default {
  227. components: { Select },
  228. data() {
  229. return {
  230. visible: false,
  231. dialogTitle: '新增',
  232. formData: {},
  233. listData: [
  234. {
  235. ruleItems: [
  236. {
  237. inspectionCode: 'ZJX20250808285',
  238. name: '顶棚清洁干净',
  239. textType: '8',
  240. defaultValue: '',
  241. maxValue: '',
  242. minValue: '',
  243. unitName: '',
  244. status: 1,
  245. inspectionStandard: '',
  246. unit: '',
  247. symbol: '',
  248. inspectionRemark: '',
  249. toolList: [],
  250. postscriptList: [],
  251. toolRemoveIds: [],
  252. postscriptRemoveIds: []
  253. },
  254. {
  255. inspectionCode: 'ZJX20250808286',
  256. name: '墙面清洁干净',
  257. textType: '8',
  258. defaultValue: '',
  259. maxValue: '',
  260. minValue: '',
  261. unitName: '',
  262. status: 1,
  263. inspectionStandard: '',
  264. unit: '',
  265. symbol: '',
  266. inspectionRemark: '就',
  267. toolList: [],
  268. postscriptList: [
  269. {
  270. sort: 1,
  271. content: '注意1'
  272. },
  273. {
  274. sort: 2,
  275. content: '注意2'
  276. },
  277. {
  278. sort: 3,
  279. content: '注意3'
  280. }
  281. ],
  282. toolRemoveIds: [],
  283. postscriptRemoveIds: []
  284. },
  285. {
  286. inspectionCode: 'ZJX20250808288',
  287. name: '出风口清洁干净',
  288. textType: '8',
  289. defaultValue: '',
  290. maxValue: '',
  291. minValue: '',
  292. unitName: '',
  293. status: 1,
  294. inspectionStandard: '',
  295. unit: '',
  296. symbol: '',
  297. inspectionRemark: '',
  298. toolList: [],
  299. postscriptList: [],
  300. toolRemoveIds: [],
  301. postscriptRemoveIds: []
  302. }
  303. ],
  304. status: 1,
  305. classification: 1,
  306. name: '清场清洁记录'
  307. }
  308. ],
  309. ruleItems: []
  310. };
  311. },
  312. computed: {
  313. columns() {
  314. return [
  315. {
  316. prop: 'name',
  317. label: '清场项目',
  318. align: 'center',
  319. minWidth: 130
  320. },
  321. {
  322. prop: 'toolList',
  323. slot: 'toolList',
  324. label: '清洁工具',
  325. align: 'center',
  326. minWidth: 150
  327. },
  328. {
  329. prop: 'situation',
  330. slot: 'situation',
  331. label: '清洁情况',
  332. align: 'center',
  333. minWidth: 130
  334. },
  335. {
  336. prop: 'cleaners',
  337. slot: 'cleaners',
  338. label: '清洁人',
  339. align: 'center',
  340. minWidth: 130
  341. },
  342. {
  343. prop: 'result',
  344. slot: 'result',
  345. label: '检查结果',
  346. align: 'center',
  347. minWidth: 160
  348. },
  349. {
  350. prop: 'describe',
  351. slot: 'describe',
  352. label: '异常描述',
  353. align: 'center',
  354. minWidth: 300
  355. }
  356. ];
  357. }
  358. },
  359. methods: {
  360. handleClose() {
  361. this.visible = false;
  362. },
  363. open() {
  364. this.visible = true;
  365. },
  366. cleanersOpen(row, index) {
  367. this.$refs.selectRef.open(row, index);
  368. },
  369. setPersonnel(name, index) {
  370. console.log(name, 'name');
  371. console.log(index, 'index');
  372. this.$set(this.ruleItems[index], 'cleaners', name);
  373. },
  374. // 选择工单
  375. selectWork() {},
  376. // 保存
  377. preserve() {},
  378. changeList(e) {
  379. this.ruleItems = this.listData[e].ruleItems;
  380. }
  381. }
  382. };
  383. </script>
  384. <style scoped lang="scss">
  385. ::v-deep .table_list {
  386. .el-radio__inner {
  387. border-radius: 2px; /* 改为方形,多选框的圆角通常很小 */
  388. width: 14px;
  389. height: 14px;
  390. }
  391. /* 选中状态 */
  392. .el-radio__input.is-checked .el-radio__inner {
  393. background: #409eff; /* 选中时的背景色 */
  394. border-color: #409eff;
  395. }
  396. /* 选中状态的内层(原本是圆形,现在改为打勾图标) */
  397. .el-radio__inner::after {
  398. width: 4px;
  399. height: 8px;
  400. border: 2px solid #fff;
  401. border-left: 0;
  402. border-top: 0;
  403. left: 3px;
  404. top: 1px;
  405. transform: rotate(45deg) scaleY(1);
  406. background: transparent; /* 去掉背景 */
  407. border-radius: 0;
  408. }
  409. .el-radio__input.is-disabled.is-checked .el-radio__inner::after {
  410. background-color: none !important;
  411. }
  412. }
  413. </style>