user-edit.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537
  1. <!-- 用户编辑弹窗 -->
  2. <template>
  3. <ele-modal
  4. width="1000px"
  5. :visible="visible"
  6. :append-to-body="true"
  7. :close-on-click-modal="false"
  8. custom-class="ele-dialog-form"
  9. :title="isUpdate ? '修改质检项' : '新建质检项'"
  10. @update:visible="updateVisible"
  11. >
  12. <header-title title="基本信息"></header-title>
  13. <el-form ref="form" :model="form" :rules="rules" label-width="120px">
  14. <el-row>
  15. <el-col :span="12">
  16. <el-form-item label="标准名称:" prop="qualityStandardId">
  17. <el-select
  18. v-model="form.qualityStandardId"
  19. placeholder="请选择"
  20. filterable
  21. style="width: 100%"
  22. >
  23. <el-option
  24. :label="item.name"
  25. v-for="item in qualityStandardList"
  26. :key="item.id"
  27. :value="item.id"
  28. />
  29. </el-select>
  30. </el-form-item>
  31. </el-col>
  32. <el-col :span="12">
  33. <el-form-item label="参数编码:" prop="inspectionCode">
  34. <el-input
  35. clearable
  36. disabled
  37. v-model="form.inspectionCode"
  38. placeholder="请输入"
  39. />
  40. </el-form-item>
  41. </el-col>
  42. </el-row>
  43. <el-row>
  44. <el-col :span="12">
  45. <el-form-item label="参数名称:" prop="inspectionName">
  46. <el-input
  47. v-model="form.inspectionName"
  48. clearable
  49. placeholder="请输入"
  50. />
  51. </el-form-item>
  52. </el-col>
  53. <el-col :span="12">
  54. <el-form-item label="参数类型:" prop="textType">
  55. <el-select
  56. v-model="form.textType"
  57. placeholder="请选择"
  58. class="ele-block"
  59. >
  60. <el-option label="数值" :value="'1'" />
  61. <el-option label="选择" :value="'2'" />
  62. <el-option label="上下限" :value="'3'" />
  63. <el-option label="规格" :value="'4'" />
  64. <el-option label="时间" :value="'5'" />
  65. <el-option label="范围" :value="'6'" />
  66. <el-option label="文本" :value="'7'" />
  67. </el-select>
  68. </el-form-item>
  69. </el-col>
  70. <el-col
  71. :span="12"
  72. v-if="
  73. form.textType == 1 ||
  74. form.textType == 3 ||
  75. form.textType == 4 ||
  76. form.textType == 5 ||
  77. form.textType == 7
  78. "
  79. >
  80. <el-form-item label="默认值:">
  81. <el-input
  82. v-model="form.defaultValue"
  83. placeholder="请输入"
  84. ></el-input>
  85. </el-form-item>
  86. </el-col>
  87. <el-col :span="12" v-if="form.textType == 2">
  88. <el-form-item label="默认值:" prop="defaultValue">
  89. <el-select
  90. v-model="form.defaultValue"
  91. placeholder="请选择"
  92. class="ele-block"
  93. >
  94. <el-option label="TRUE" :value="'TRUE'" />
  95. <el-option label="FALSE" :value="'FALSE'" />
  96. </el-select>
  97. </el-form-item>
  98. </el-col>
  99. <el-col :span="12" v-if="form.textType == 6">
  100. <el-form-item label="默认值:">
  101. <el-input
  102. v-model="form.defaultValue"
  103. placeholder="案例: 12.7≤IC<19.05 ;IC<12.7"
  104. ></el-input>
  105. </el-form-item>
  106. </el-col>
  107. <el-col :span="12" v-if="form.textType == 3">
  108. <el-form-item label="参数上限:">
  109. <el-input placeholder="请输入" v-model="form.maxValue" />
  110. </el-form-item>
  111. </el-col>
  112. <el-col :span="12" v-if="form.textType == 3">
  113. <el-form-item label="参数下限:">
  114. <el-input placeholder="请输入" v-model="form.minValue" />
  115. </el-form-item>
  116. </el-col>
  117. <el-col :span="12" v-if="form.textType != 2 && form.textType != 5">
  118. <el-form-item
  119. label="参数单位:"
  120. prop="unitName"
  121. :rules="[
  122. {
  123. required: form.textType == 7 ? false : true,
  124. message: '请选择参数单位',
  125. trigger: 'change'
  126. }
  127. ]"
  128. >
  129. <DictSelection
  130. dictName="工艺参数单位"
  131. clearable
  132. filterable
  133. v-model="form.unitName"
  134. >
  135. </DictSelection>
  136. </el-form-item>
  137. </el-col>
  138. <el-col :span="12" v-if="form.textType == 5">
  139. <el-form-item label="参数单位:" prop=""> h(小时) </el-form-item>
  140. </el-col>
  141. <el-col :span="24">
  142. <el-form-item label="工艺要求:" prop="inspectionStandard">
  143. <DictSelection
  144. style="width: 100px"
  145. clearable
  146. dictName="数学字符"
  147. v-model="form.symbol"
  148. ></DictSelection>
  149. <el-input v-model="form.inspectionStandard" type="textarea" style="width:calc(100% - 100px)">
  150. </el-input>
  151. </el-form-item>
  152. </el-col>
  153. <el-col :span="12">
  154. <el-form-item label="单位:" prop="unit">
  155. <DictSelection
  156. clearable
  157. dictName="质检项标准单位"
  158. v-model="form.unit"
  159. ></DictSelection>
  160. </el-form-item>
  161. </el-col>
  162. <el-col :span="12">
  163. <el-form-item label="状态:" prop="status">
  164. <el-select
  165. v-model="form.status"
  166. placeholder="请选择"
  167. style="width: 100%"
  168. >
  169. <el-option label="停用" :value="0" />
  170. <el-option label="启用" :value="1" />
  171. </el-select>
  172. </el-form-item>
  173. </el-col>
  174. <el-col :span="24">
  175. <el-form-item label="备注:" prop="inspectionRemark">
  176. <el-input placeholder="请输入" v-model="form.inspectionRemark" type="textarea" style="height: 100px;" />
  177. </el-form-item>
  178. </el-col>
  179. <el-col :span="12">
  180. <el-form-item label="附件:" prop="imgUrl">
  181. <fileUpload v-model="form.imgUrl" type="add" />
  182. </el-form-item>
  183. </el-col>
  184. </el-row>
  185. <headerTitle title="质检工具">
  186. <el-button type="primary" size="small" @click="handleAdd"
  187. >新增</el-button
  188. >
  189. </headerTitle>
  190. <el-table
  191. ref="multipleTable"
  192. :data="form.toolList"
  193. tooltip-effect="dark"
  194. style="width: 100%"
  195. stripe
  196. :header-cell-style="{ background: '#EEEEEE', border: 'none' }"
  197. >
  198. <el-table-column label="设备名称" prop="code" min-width="120">
  199. <template slot-scope="{ row }">
  200. {{ row.name }}
  201. </template></el-table-column
  202. >
  203. <el-table-column label="设备编码" prop="code" min-width="120">
  204. <template slot-scope="{ row }">
  205. {{ row.code }}
  206. </template></el-table-column
  207. >
  208. <el-table-column label="牌号" prop="brandNum" min-width="120">
  209. <template slot-scope="{ row }">
  210. {{ row.brandNum }}
  211. </template></el-table-column
  212. >
  213. <el-table-column label="型号" prop="modelType" min-width="120">
  214. <template slot-scope="{ row }">
  215. {{ row.modelType }}
  216. </template></el-table-column
  217. >
  218. <el-table-column label="操作" fixed="right">
  219. <template slot-scope="{ $index, row }">
  220. <el-button type="text" @click="removeItem($index, row)"
  221. >删除设备</el-button
  222. >
  223. </template>
  224. </el-table-column>
  225. </el-table>
  226. <headerTitle title="注意事项">
  227. <el-button type="primary" size="small" @click="addPostscript"
  228. >新增</el-button
  229. >
  230. </headerTitle>
  231. <el-table
  232. ref="multipleTable"
  233. :data="form.postscriptList"
  234. tooltip-effect="dark"
  235. style="width: 100%"
  236. stripe
  237. :header-cell-style="{ background: '#EEEEEE', border: 'none' }"
  238. >
  239. <el-table-column label="排序" prop="" width="100">
  240. <template slot-scope="{ row }">
  241. <el-input
  242. placeholder="请输入"
  243. type="number"
  244. v-model.number="row.sort"
  245. clearable
  246. ></el-input> </template
  247. ></el-table-column>
  248. <el-table-column label="注意事项" prop="" min-width="120">
  249. <template slot-scope="{ row }">
  250. <el-input
  251. placeholder="请输入"
  252. type="textarea"
  253. :rows="1"
  254. v-model="row.content"
  255. clearable
  256. ></el-input> </template
  257. ></el-table-column>
  258. <el-table-column label="操作" fixed="right" width="100">
  259. <template slot-scope="{ $index, row }">
  260. <el-button type="text" @click="removePostscript($index, row)"
  261. >删除</el-button
  262. >
  263. </template>
  264. </el-table-column>
  265. </el-table>
  266. </el-form>
  267. <template v-slot:footer>
  268. <el-button @click="updateVisible(false)">取消</el-button>
  269. <el-button type="primary" :loading="loading" @click="save">
  270. 保存
  271. </el-button>
  272. </template>
  273. <ProductModal ref="productRefs" @chooseModal="chooseModal" />
  274. </ele-modal>
  275. </template>
  276. <script>
  277. import { save, update, getById } from '@/api/inspectionProject';
  278. import { getCode } from '@/api/login';
  279. import { getList } from '@/api/inspectionStandard';
  280. import ProductModal from './ProductModal.vue';
  281. import fileUpload from '@/components/addDoc/index.vue';
  282. export default {
  283. components: {
  284. ProductModal,
  285. fileUpload
  286. },
  287. props: {
  288. // 弹窗是否打开
  289. visible: Boolean,
  290. // 修改回显的数据
  291. data: Object
  292. },
  293. data() {
  294. const defaultForm = {
  295. id: null,
  296. qualityStandardId: '',
  297. inspectionCode: '',
  298. inspectionName: '',
  299. textType: '1',
  300. defaultValue: '',
  301. maxValue: '',
  302. minValue: '',
  303. unitName: '',
  304. status: 1,
  305. inspectionStandard: '',
  306. unit: '',
  307. symbol: '',
  308. inspectionRemark: '',
  309. imgUrl: [],
  310. toolList: [],
  311. postscriptList: [],
  312. toolRemoveIds: [],
  313. postscriptRemoveIds: []
  314. };
  315. return {
  316. defaultForm,
  317. // 表单数据
  318. form: { ...defaultForm },
  319. qualityStandardList: [],
  320. // 表单验证规则
  321. rules: {
  322. qualityStandardId: [
  323. { required: true, message: '请选择质检标准', trigger: 'blur' }
  324. ],
  325. inspectionName: [
  326. { required: true, message: '请输入质检名称', trigger: 'blur' }
  327. ],
  328. inspectionCode: [
  329. { required: true, message: '请输入质检编码', trigger: 'blur' }
  330. ],
  331. // unitName:
  332. textType: [
  333. { required: true, message: '请选择参数类型', trigger: 'blur' }
  334. ],
  335. inspectionStandard: [
  336. {
  337. required: true,
  338. message: '请输入',
  339. trigger: 'blur'
  340. }
  341. ]
  342. },
  343. // 提交状态
  344. loading: false,
  345. // 是否是修改
  346. isUpdate: false
  347. };
  348. },
  349. computed: {
  350. // 是否开启响应式布局
  351. styleResponsive() {
  352. return this.$store.state.theme.styleResponsive;
  353. }
  354. },
  355. created() {
  356. this.getListFn();
  357. },
  358. methods: {
  359. /* 保存编辑 */
  360. save() {
  361. this.$refs.form.validate((valid) => {
  362. if (!valid) {
  363. return false;
  364. }
  365. this.loading = true;
  366. if (!this.isUpdate) {
  367. delete this.form.id;
  368. }
  369. const saveOrUpdate = this.isUpdate ? update : save;
  370. const defaultValue = Number(this.form.defaultValue);
  371. const maxValue = Number(this.form.maxValue);
  372. const minValue = Number(this.form.minValue);
  373. if ((defaultValue != '') & (maxValue != '')) {
  374. if (defaultValue > maxValue || defaultValue == maxValue) {
  375. this.loading = false;
  376. return this.$message.warning('默认值应小于参数上限');
  377. }
  378. }
  379. if ((defaultValue != '') & (minValue != '')) {
  380. if (defaultValue < minValue || defaultValue == minValue) {
  381. this.loading = false;
  382. return this.$message.warning('默认值应大于参数下限');
  383. }
  384. }
  385. if ((maxValue != '') & (minValue != '')) {
  386. if (maxValue < minValue || maxValue == minValue) {
  387. this.loading = false;
  388. return this.$message.warning('参数上限应大于参数下限');
  389. }
  390. }
  391. if (this.form.textType == 5) {
  392. this.form.unitName = 'h';
  393. }
  394. saveOrUpdate(this.form)
  395. .then((msg) => {
  396. this.loading = false;
  397. this.form = {};
  398. const info = this.isUpdate ? '修改成功' : '新增成功';
  399. this.$message.success(info);
  400. this.updateVisible(false);
  401. this.$emit('done');
  402. })
  403. .catch((e) => {
  404. this.loading = false;
  405. });
  406. });
  407. },
  408. /* 更新visible */
  409. updateVisible(value) {
  410. this.$emit('update:visible', value);
  411. },
  412. getListFn() {
  413. let param = {
  414. pageNum: 1,
  415. size: -1
  416. };
  417. getList(param).then((res) => {
  418. this.qualityStandardList = res.list;
  419. });
  420. },
  421. handleAdd() {
  422. this.$refs.productRefs.open(this.form.toolList);
  423. },
  424. chooseModal(data) {
  425. this.form.toolList = [...this.form.toolList, ...data];
  426. },
  427. removeItem(idx, row) {
  428. this.$confirm(`是否删除这个设备?`).then(async () => {
  429. this.form.toolList.splice(idx, 1);
  430. if (row.id) {
  431. this.form.toolRemoveIds.push(row.id);
  432. }
  433. });
  434. },
  435. addPostscript() {
  436. this.form.postscriptList.push({ sort: null, content: '' });
  437. },
  438. removePostscript(idx, row) {
  439. this.$confirm(`是否删除这个注意事项?`).then(async () => {
  440. this.form.postscriptList.splice(idx, 1);
  441. if (row.id) {
  442. this.form.postscriptRemoveIds.push(row.id);
  443. }
  444. });
  445. }
  446. },
  447. watch: {
  448. async visible(visible) {
  449. if (visible) {
  450. if (this.data) {
  451. const res = await getById(this.data.id);
  452. this.$util.assignObject(this.form, {
  453. ...res.data
  454. });
  455. this.isUpdate = true;
  456. } else {
  457. const code = await getCode('inspection_code');
  458. this.form.inspectionCode = code;
  459. this.isUpdate = false;
  460. }
  461. } else {
  462. this.$refs.form.clearValidate();
  463. this.form = { ...this.defaultForm };
  464. }
  465. }
  466. }
  467. };
  468. </script>
  469. <style lang="scss" scoped>
  470. .btn_case {
  471. display: flex;
  472. align-items: center;
  473. justify-content: space-between;
  474. margin: 6px 0;
  475. span {
  476. display: inline-block;
  477. margin: 0 10px;
  478. font-size: 18px;
  479. cursor: pointer;
  480. }
  481. }
  482. </style>