edit.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449
  1. <!-- 用户编辑弹窗 -->
  2. <template>
  3. <el-dialog
  4. class="ele-dialog-form"
  5. :title="title"
  6. :visible.sync="visible"
  7. :before-close="handleClose"
  8. :close-on-click-modal="false"
  9. :close-on-press-escape="false"
  10. width="1000px"
  11. append-to-body
  12. >
  13. <el-form ref="form" :model="form" :rules="rules" label-width="100px">
  14. <el-row>
  15. <el-col :span="12">
  16. <el-form-item label="标准类型:" prop="type">
  17. <DictSelection
  18. dictName="质检标准类型"
  19. v-model="form.type"
  20. :disabled="type=='detail'"
  21. ></DictSelection>
  22. </el-form-item>
  23. </el-col>
  24. <el-col :span="12">
  25. <el-form-item label="标准名称:" prop="name">
  26. <el-input clearable v-model="form.name" placeholder="请输入" :disabled="type=='detail'" />
  27. </el-form-item>
  28. </el-col>
  29. <el-col :span="12">
  30. <el-form-item label="标准代码:" prop="standardCode">
  31. <el-input v-model="form.standardCode" :disabled="type=='detail'"></el-input>
  32. </el-form-item>
  33. </el-col>
  34. <el-col :span="12">
  35. <el-form-item label="版本号:" prop="version">
  36. <el-input v-model="form.version" :disabled="type=='detail'"></el-input>
  37. </el-form-item>
  38. </el-col>
  39. <el-col :span="12">
  40. <el-form-item label="状态:" prop="status">
  41. <el-select
  42. v-model="form.status"
  43. placeholder="请选择"
  44. style="width: 100%"
  45. :disabled="type=='detail'"
  46. >
  47. <el-option label="停用" :value="0" />
  48. <el-option label="启用" :value="1" />
  49. </el-select>
  50. </el-form-item>
  51. </el-col>
  52. <el-col :span="8">
  53. <el-form-item prop="imgUrl" label="附件">
  54. <fileUpload
  55. v-model="form.imgUrl"
  56. module="main"
  57. :showLib="false"
  58. :limit="1"
  59. :disabled="type=='detail'"
  60. />
  61. </el-form-item>
  62. </el-col>
  63. </el-row>
  64. <el-row>
  65. <el-col :span="24">
  66. <!-- <el-button
  67. style="margin-left: 100px"
  68. type="primary"
  69. @click="addParameter"
  70. >选择工艺参数标准</el-button
  71. > -->
  72. <el-tabs v-model="activeName" type="card">
  73. <el-tab-pane
  74. :label="item.name"
  75. :name="item.name"
  76. v-for="item in activeList"
  77. :key="item.name"
  78. >
  79. <el-table
  80. v-show="activeName == '质检项'"
  81. style="margin-top: 15px"
  82. :data="form.parameterStandards"
  83. border
  84. height="40vh"
  85. >
  86. <el-table-column
  87. :label="form.singleWeightDivision"
  88. align="center"
  89. >
  90. <el-table-column
  91. label="参数上限"
  92. align="center"
  93. v-if="form.parameterType == 3"
  94. >
  95. <template slot-scope="scope">
  96. <el-form-item label-width="0" prop="finalValue">
  97. <el-input
  98. clearable
  99. :disabled="type=='detail'"
  100. v-model="scope.row.finalValue"
  101. placeholder="请输入"
  102. />
  103. </el-form-item>
  104. </template>
  105. </el-table-column>
  106. <el-table-column
  107. label="参数下限"
  108. align="center"
  109. v-if="form.parameterType == 3"
  110. >
  111. <template slot-scope="scope">
  112. <el-form-item label-width="0" prop="initialValue">
  113. <el-input
  114. :disabled="type=='detail'"
  115. clearable
  116. v-model="scope.row.initialValue"
  117. placeholder="请输入"
  118. />
  119. </el-form-item>
  120. </template>
  121. </el-table-column>
  122. <el-table-column
  123. label="默认值"
  124. align="center"
  125. v-if="form.parameterType != 3"
  126. >
  127. <template slot-scope="scope">
  128. <el-form-item label-width="0" prop="defaultValue">
  129. <el-input
  130. clearable
  131. :disabled="type=='detail'"
  132. v-model="scope.row.defaultValue"
  133. placeholder="请输入"
  134. />
  135. </el-form-item>
  136. </template>
  137. </el-table-column>
  138. </el-table-column>
  139. <el-table-column :label="form.tolerance" align="center">
  140. <el-table-column label="质检标准" align="center">
  141. <template slot-scope="scope">
  142. <el-form-item label-width="0" prop="inspectionStandard">
  143. <el-input
  144. clearable
  145. v-model="scope.row.toleranceValue"
  146. placeholder="请输入"
  147. :disabled="type=='detail'"
  148. >
  149. <DictSelection
  150. style="width: 100px"
  151. slot="prepend"
  152. clearable
  153. :disabled="type=='detail'"
  154. dictName="数学字符"
  155. v-model="scope.row.symbol"
  156. ></DictSelection>
  157. </el-input>
  158. <!-- </el-form-item> -->
  159. </el-form-item>
  160. </template>
  161. </el-table-column>
  162. <el-table-column label="操作" align="center" width="80" v-if="type!='detail'">
  163. <template slot-scope="scope">
  164. <el-link
  165. type="danger"
  166. :underline="false"
  167. @click="handleDeleteItem(scope.$index, scope.row.id)"
  168. >
  169. 删除
  170. </el-link>
  171. </template>
  172. </el-table-column>
  173. </el-table-column>
  174. </el-table>
  175. <el-table
  176. v-show="activeName == '质检点'"
  177. style="margin-top: 15px"
  178. :data="form.linePoints"
  179. border
  180. height="40vh"
  181. >
  182. <el-table-column label="编码" align="center" prop="pointCode">
  183. <template slot-scope="scope">
  184. <el-link
  185. type="primary"
  186. :underline="false"
  187. @click="openEdit('detail', scope.row)"
  188. >
  189. {{ scope.row.pointCode }}
  190. </el-link>
  191. </template>
  192. </el-table-column>
  193. <el-table-column
  194. label="名称"
  195. align="center"
  196. prop="pointName"
  197. ></el-table-column>
  198. <el-table-column
  199. label="区域"
  200. align="center"
  201. prop="areaName"
  202. ></el-table-column>
  203. <el-table-column label="操作" align="center" width="80">
  204. <template slot-scope="scope">
  205. <el-link
  206. type="danger"
  207. :underline="false"
  208. v-if="type!='detail'"
  209. @click="handleDeleteItem(scope.$index, scope.row.id)"
  210. >
  211. 删除
  212. </el-link>
  213. </template>
  214. </el-table-column>
  215. </el-table>
  216. </el-tab-pane></el-tabs
  217. >
  218. <div class="add-product" @click="add" v-if="type!='detail'">
  219. <i class="el-icon-circle-plus-outline"></i>
  220. </div>
  221. </el-col>
  222. <!-- <inspectionProjectList v-if="visible" :linePoints="form.inspectionItems" ref="inspectionProjectRef" /> -->
  223. </el-row>
  224. </el-form>
  225. <template v-slot:footer>
  226. <el-button @click="handleClose">取消</el-button>
  227. <el-button type="primary" :loading="loading" @click="save" v-if="type!='detail'">
  228. 保存
  229. </el-button>
  230. </template>
  231. <standardDialog ref="standardDialogRef" @choose="choose" />
  232. <EquipmentDialog ref="equipmentDialogRef" @choose="choose" />
  233. <edit ref="edit" ></edit>
  234. </el-dialog>
  235. </template>
  236. <script>
  237. import { save, update, getById } from '@/api/inspectionStandard';
  238. import fileUpload from '@/components/upload/fileUpload';
  239. import standardDialog from './standardDialog';
  240. import EquipmentDialog from './EquipmentDialog';
  241. import edit from '@/views/inspectionPoint/components/edit';
  242. export default {
  243. components: {
  244. fileUpload,
  245. standardDialog,
  246. EquipmentDialog,edit
  247. },
  248. data() {
  249. const defaultForm = function () {
  250. return {
  251. id: '',
  252. name: '',
  253. status: '',
  254. type: '',
  255. version: '1.0',
  256. standardCode: '',
  257. inspectionId: '',
  258. singleWeightDivision: '',
  259. tolerance: '',
  260. parameterStandards: [],
  261. linePoints: [],
  262. parameterType: ''
  263. };
  264. };
  265. return {
  266. defaultForm,
  267. // 表单数据
  268. form: { ...defaultForm() },
  269. activeName: '质检项',
  270. activeList: [{ name: '质检项' }, { name: '质检点' }],
  271. // 表单验证规则
  272. rules: {
  273. name: [{ required: true, message: '请输入', trigger: 'blur' }],
  274. version: [{ required: true, message: '请输入', trigger: 'blur' }],
  275. type: {
  276. required: true,
  277. message: '请选择',
  278. trigger: 'change'
  279. },
  280. status: {
  281. required: true,
  282. message: '请选择',
  283. trigger: 'change'
  284. }
  285. },
  286. visible: false,
  287. type: null,
  288. title: null,
  289. loading: false
  290. };
  291. },
  292. created() {},
  293. methods: {
  294. open(type, row) {
  295. this.title = type == 'add' ? '新增' :'edit' ? '编辑':'详情';
  296. this.type = type;
  297. if (this.type != 'add') {
  298. row.linePoints=row.linePoints||[]
  299. if (!row.parameterStandards) {
  300. row.parameterStandards = [];
  301. } else {
  302. row.singleWeightDivision =
  303. row.parameterStandards[0]?.singleWeightDivision;
  304. row.tolerance = row.parameterStandards[0]?.tolerance;
  305. row.parameterType = row.parameterStandards[0]?.parameterType;
  306. }
  307. this.form = JSON.parse(JSON.stringify(row));
  308. }
  309. this.visible = true;
  310. },
  311. openEdit(type, row) {
  312. this.$refs.edit.open(type, row);
  313. },
  314. choose(data) {
  315. if (this.activeName == '质检点') {
  316. this.form.linePoints = data;
  317. return;
  318. }
  319. let obj = {
  320. finalValue: data.parameter?.maxValue,
  321. initialValue: data.parameter?.minValue,
  322. toleranceValue: data.project?.inspectionStandard,
  323. symbol: data.project?.symbol,
  324. singleWeightDivision:
  325. data.parameter?.name + ' ' + data.parameter?.unitName,
  326. tolerance: data.project?.inspectionName + ' ' + data.project?.unit,
  327. parameterType: data.parameter?.textType,
  328. defaultValue: data.parameter?.defaultValue
  329. };
  330. this.$set(this.form, 'singleWeightDivision', obj.singleWeightDivision);
  331. this.$set(this.form, 'tolerance', obj.tolerance);
  332. this.form.parameterType = obj.parameterType;
  333. this.form.parameterStandards.push(obj);
  334. },
  335. add() {
  336. if (this.activeName == '质检点') {
  337. this.$refs.equipmentDialogRef.open(this.form.linePoints.map(item=>item.id));
  338. return;
  339. }
  340. if (!this.form.parameterStandards.length) {
  341. this.$refs.standardDialogRef.open();
  342. return;
  343. }
  344. let obj = {
  345. finalValue: '',
  346. initialValue: '',
  347. toleranceValue: '',
  348. singleWeightDivision: '',
  349. tolerance: ''
  350. };
  351. this.form.parameterStandards.push(obj);
  352. },
  353. handleDeleteItem(index) {
  354. this.form.parameterStandards.splice(index, 1);
  355. },
  356. /* 保存编辑 */
  357. save() {
  358. this.$refs.form.validate((valid) => {
  359. if (!valid) {
  360. return false;
  361. }
  362. this.loading = true;
  363. if (this.type == 'add') {
  364. delete this.form.id;
  365. }
  366. // this.form.inspectionId = this.$refs.inspectionProjectRef.getValue();
  367. let URL = this.type == 'add' ? save : update;
  368. URL(this.form)
  369. .then((msg) => {
  370. this.loading = false;
  371. this.$message.success(msg);
  372. this.handleClose();
  373. this.$emit('done');
  374. })
  375. .catch((e) => {
  376. this.loading = false;
  377. });
  378. });
  379. },
  380. restForm() {
  381. this.form = { ...this.defaultForm() };
  382. this.$nextTick(() => {
  383. this.$refs.form.clearValidate();
  384. });
  385. },
  386. handleClose() {
  387. this.restForm();
  388. this.visible = false;
  389. }
  390. }
  391. };
  392. </script>
  393. <style lang="scss" scoped>
  394. .location-warp {
  395. display: flex;
  396. .detail {
  397. margin-left: 10px;
  398. }
  399. }
  400. :deep(
  401. .el-dialog:not(.ele-dialog-form)
  402. .el-dialog__body
  403. .el-form
  404. .el-form-item:last-child
  405. ) {
  406. margin-bottom: 22px;
  407. }
  408. :deep(
  409. .el-dialog:not(.ele-dialog-form)
  410. .el-dialog__body
  411. .el-form
  412. .el-table__body
  413. .el-table__row
  414. .el-form-item:last-child
  415. ) {
  416. margin-bottom: 0 !important;
  417. }
  418. .add-product {
  419. width: 100%;
  420. display: flex;
  421. align-items: center;
  422. justify-content: flex-end;
  423. font-size: 30px;
  424. color: #1890ff;
  425. margin: 10px 0;
  426. cursor: pointer;
  427. }
  428. </style>