add.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400
  1. <template>
  2. <div id="addEquipment">
  3. <el-card style="position: relative;">
  4. <span>基本信息</span>
  5. <el-form :model="basicForm" :rules="basicRules" ref="basic" label-width="auto" :show-message="false">
  6. <el-row :gutter="10">
  7. <el-col :span="1.5">
  8. <el-form-item label="通用名称" prop="commonName">
  9. <el-input clearable :disabled="sonDisable" size="mini" v-model="basicForm.commonName">
  10. </el-input>
  11. </el-form-item>
  12. </el-col>
  13. <el-col :span="1.5">
  14. <el-form-item label="注册名" prop="registrationName">
  15. <el-input clearable :disabled="sonDisable" size="mini" v-model="basicForm.registrationName">
  16. </el-input>
  17. </el-form-item>
  18. </el-col>
  19. <el-col :span="1.5">
  20. <el-form-item label="设备类别" prop="deviceCategory">
  21. <el-input clearable :disabled="sonDisable" size="mini" v-model="basicForm.deviceCategory">
  22. </el-input>
  23. </el-form-item>
  24. </el-col>
  25. <el-col :span="1.5">
  26. <el-form-item label="适用科室" prop="departmentCode">
  27. <el-input clearable :disabled="sonDisable" size="mini" v-model="basicForm.departmentCode">
  28. </el-input>
  29. </el-form-item>
  30. </el-col>
  31. <el-col :span="1.5">
  32. <el-form-item label="厂家名称" prop="factoryName">
  33. <el-input clearable :disabled="sonDisable" size="mini" v-model="basicForm.factoryName">
  34. </el-input>
  35. </el-form-item>
  36. </el-col>
  37. <el-col :span="1.5">
  38. <el-form-item label="型号" prop="model">
  39. <el-input clearable :disabled="sonDisable" size="mini" v-model="basicForm.model">
  40. </el-input>
  41. </el-form-item>
  42. </el-col>
  43. <el-col :span="1.5">
  44. <el-form-item label="参考价格" prop="referencePrice">
  45. <el-input clearable :disabled="sonDisable" size="mini" v-model="basicForm.referencePrice">
  46. </el-input>
  47. </el-form-item>
  48. </el-col>
  49. </el-row>
  50. <el-row>
  51. <el-col :span="1.5">
  52. <el-form-item label="是否项目/厂家年度授权" prop="isProjectOrFactoryEmpower">
  53. <el-checkbox true-label= '0' false-label= '2' v-model="basicForm.isProjectOrFactoryEmpower"></el-checkbox>
  54. </el-form-item>
  55. </el-col>
  56. </el-row>
  57. <el-row>
  58. <el-col :span="12">
  59. <el-form-item label="文件上传" prop="sysMaterialDeviceOriginFileList">
  60. <el-upload
  61. :action="url"
  62. :headers="headers"
  63. :on-preview="handlePreview"
  64. :on-success='handleSuccess'
  65. :on-remove="handleRemove"
  66. :before-remove="beforeRemove"
  67. multiple
  68. :limit="1"
  69. :on-exceed="handleExceed"
  70. :file-list="basicForm.sysMaterialDeviceOriginFileList">
  71. <el-button size="small" type="primary" :disabled="sonDisable">点击上传</el-button>
  72. <!-- <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> -->
  73. </el-upload>
  74. </el-form-item>
  75. </el-col>
  76. </el-row>
  77. <el-row>
  78. <el-col :span="1.5">
  79. <el-form-item label="参数" prop="parameters">
  80. <el-input type="textarea" rows=4 style="width: 900px" clearable :disabled="sonDisable" size="mini" v-model="basicForm.parameters">
  81. </el-input>
  82. </el-form-item>
  83. </el-col>
  84. </el-row>
  85. <el-row>
  86. <el-col :span="1.5">
  87. <el-form-item label="备注" prop="remark">
  88. <el-input type="textarea" rows=4 style="width: 400px" clearable :disabled="sonDisable" size="mini" v-model="basicForm.remark">
  89. </el-input>
  90. </el-form-item>
  91. </el-col>
  92. </el-row>
  93. </el-form>
  94. <div class="btn_group">
  95. <el-button type="primary" size="mini" @click="editPage" v-if="sonPageStu == 'check'">编辑</el-button>
  96. <el-button type="primary" size="mini" @click="save" v-if="sonPageStu == 'add' || sonPageStu == 'edit'">保存</el-button>
  97. <el-button size="mini" plain @click="back">返回</el-button>
  98. </div>
  99. <div class="btn_grooup">
  100. <span>明细信息</span>
  101. <div>
  102. <el-button type="primary" size="mini" @click="addLine" v-if="!sonDisable">增行</el-button>
  103. <el-button type="primary" size="mini" @click="delLines" v-if="!sonDisable">删行</el-button>
  104. </div>
  105. </div>
  106. <ux-grid
  107. :data="basicForm.sysMaterialDeviceOriginItemList"
  108. border
  109. :cell-style="{ borderColor: '#c0c0c0' }"
  110. :header-cell-style="{ borderColor: '#c0c0c0' }"
  111. class="exporttable"
  112. height="410"
  113. max-height="410"
  114. style="font-size: 12px;"
  115. @selection-change="handleSelectionChange"
  116. ref="table"
  117. show-header-overflow="tooltip"
  118. show-overflow="tooltip"
  119. keep-source
  120. beautifyTable
  121. :checkbox-config="{highlight: true, trigger: 'row'}"
  122. :edit-config="{trigger: 'click', mode: 'row'}">
  123. >
  124. <ux-table-column resizable type="checkbox" width="50px" fixed="left"/>
  125. <!-- <ux-table-column resizable title="序号" type="index" align="center" width="50px"/> -->
  126. <ux-table-column resizable title="省份" align="center" field="province" edit-render>
  127. <template v-slot:edit="scope">
  128. <el-select size="mini" :disabled="sonDisable" v-model="scope.row.province" filterable clearable placeholder="请选择">
  129. <el-option
  130. v-for="item in options"
  131. :key="item.value"
  132. :label="item.label"
  133. :value="item.value">
  134. </el-option>
  135. </el-select>
  136. <!-- <el-input clearable :disabled="sonDisable" size="mini" v-model="scope.row.province"/> -->
  137. </template>
  138. </ux-table-column>
  139. <ux-table-column resizable title="大区负责人" align="center" field="largeZoneCommander" edit-render>
  140. <template v-slot:edit="scope">
  141. <el-input clearable :disabled="sonDisable" size="mini" v-model="scope.row.largeZoneCommander"/>
  142. </template>
  143. </ux-table-column>
  144. <ux-table-column resizable title="业务经理" align="center" field="serviceManager" edit-render>
  145. <template v-slot:edit="scope">
  146. <el-input clearable :disabled="sonDisable" size="mini" v-model="scope.row.serviceManager"/>
  147. </template>
  148. </ux-table-column>
  149. <ux-table-column resizable title="售后工程师" align="center" field="afterSalesEngineer" edit-render>
  150. <template v-slot:edit="scope">
  151. <el-input clearable :disabled="sonDisable" size="mini" v-model="scope.row.afterSalesEngineer"/>
  152. </template>
  153. </ux-table-column>
  154. </ux-grid>
  155. </el-card>
  156. </div>
  157. </template>
  158. <script>
  159. import { getToken } from "@/utils/auth";
  160. import { addEquipment, getEquipmentDetail, editEquipment } from '@/api/purchase/equipmentData.js'
  161. export default {
  162. components: {
  163. },
  164. props: ['pageStu','row', 'disable'],
  165. model: {
  166. prop: 'isList',
  167. event: 'jugislist'
  168. },
  169. data() {
  170. return {
  171. // 不能直接改变props传来的值
  172. sonPageStu: this.pageStu,
  173. sonDisable: this.disable,
  174. basicForm: {
  175. id: '',
  176. commonName: '',
  177. registrationName: '',
  178. deviceCategory: '',
  179. departmentCode: '',
  180. factoryName: '',
  181. model: '',
  182. referencePrice: '',
  183. parameters: '',
  184. isDeleteFile: '',
  185. sysMaterialDeviceOriginItemList: [],
  186. sysMaterialDeviceOriginFileList: [],
  187. isProjectOrFactoryEmpower: '',
  188. remark: '',
  189. },
  190. sonModel: {
  191. province: null,
  192. largeZoneCommander: null,
  193. serviceManager: null,
  194. afterSalesEngineer: null,
  195. delFlag: '0'
  196. },
  197. basicRules: {},
  198. ids:[],
  199. delDemandItemList:[],
  200. headers: { Authorization: "Bearer " + getToken() },
  201. url: process.env.VUE_APP_BASE_API + '/device/origin/upload',
  202. options: [
  203. {value: '黑龙江省', label: '黑龙江省'},
  204. {value: '吉林省', label: '吉林省'},
  205. {value: '辽宁省', label: '辽宁省'},
  206. {value: '河北省', label: '河北省'},
  207. {value: '甘肃省', label: '甘肃省'},
  208. {value: '青海省', label: '青海省'},
  209. {value: '陕西省', label: '陕西省'},
  210. {value: '河南省', label: '河南省'},
  211. {value: '山东省', label: '山东省'},
  212. {value: '山西省', label: '山西省'},
  213. {value: '安徽省', label: '安徽省'},
  214. {value: '湖北省', label: '湖北省'},
  215. {value: '湖南省', label: '湖南省'},
  216. {value: '江苏省', label: '江苏省'},
  217. {value: '四川省', label: '四川省'},
  218. {value: '贵州省', label: '贵州省'},
  219. {value: '云南省', label: '云南省'},
  220. {value: '浙江省', label: '浙江省'},
  221. {value: '广东省', label: '广东省'},
  222. {value: '江西省', label: '江西省'},
  223. {value: '福建省', label: '福建省'},
  224. {value: '台湾省', label: '台湾省'},
  225. {value: '海南省', label: '海南省'},
  226. {value: '新疆维吾尔自治区', label: '新疆维吾尔自治区'},
  227. {value: '内蒙古自治区', label: '内蒙古自治区'},
  228. {value: '宁夏回族自治区', label: '宁夏回族自治区'},
  229. {value: '广西壮族自治区', label: '广西壮族自治区'},
  230. {value: '西藏自治区', label: '西藏自治区'},
  231. {value: '北京市', label: '北京市'},
  232. {value: '上海市', label: '上海市'},
  233. {value: '天津市', label: '天津市'},
  234. {value: '重庆市', label: '重庆市'},
  235. {value: '香港特别行政区', label: '香港特别行政区'},
  236. {value: '澳门特别行政区', label: '澳门特别行政区'},
  237. ]
  238. }
  239. },
  240. created() {
  241. if(this.pageStu == 'check') {
  242. console.log('数据', this.row)
  243. this.getDetails(this.row)
  244. } else if(this.pageStu == 'edit') {
  245. this.getDetails(this.row)
  246. } else if (this.pageStu == 'add') {
  247. }
  248. },
  249. methods: {
  250. getDetails(row) {
  251. getEquipmentDetail(row.id).then(res => {
  252. if (res.code === 200) {
  253. this.basicForm = res.data
  254. }
  255. })
  256. },
  257. editPage() {
  258. this.sonPageStu = 'edit'
  259. this.sonDisable = false
  260. },
  261. async save() {
  262. // return false
  263. if(this.basicForm.sysMaterialDeviceOriginItemList.length !== 0) {
  264. if (this.sonPageStu == 'add') {
  265. await addEquipment(this.basicForm).then(res => {
  266. if(res.code === 200) {
  267. this.$modal.notifySuccess("新增保存成功");
  268. this.back()
  269. }
  270. })
  271. } else if (this.sonPageStu == 'edit') {
  272. let list = []
  273. list.push(...this.basicForm.sysMaterialDeviceOriginItemList, ...this.delDemandItemList)
  274. // 深拷贝一下参数对象
  275. let param = JSON.parse(JSON.stringify(this.basicForm))
  276. console.log('深拷贝对象',param);
  277. param.sysMaterialDeviceOriginItemList = list
  278. await editEquipment(param).then(res => {
  279. if(res.code === 200) {
  280. this.$modal.notifySuccess("编辑保存成功");
  281. this.sonPageStu = 'check'
  282. this.sonDisable = true
  283. this.getDetails(this.row)
  284. }
  285. })
  286. }
  287. } else {
  288. this.$modal.notifyWarning("请填写明细信息");
  289. }
  290. },
  291. back() {
  292. this.$emit('jugislist', true)
  293. this.$emit('refresh')
  294. },
  295. handleSelectionChange(selection) {
  296. this.ids = selection.map(item =>{
  297. return item.id
  298. })
  299. console.log('选中数组', this.ids)
  300. },
  301. addLine() {
  302. const newLine = {...this.sonModel}
  303. this.basicForm.sysMaterialDeviceOriginItemList.push(newLine)
  304. console.log(this.basicForm.sysMaterialDeviceOriginItemList)
  305. },
  306. delLines() {
  307. let delArr = this.$refs.table.getCheckboxRecords()
  308. if (delArr.length !== 0) {
  309. delArr.forEach(item => {
  310. item.delFlag = '2'
  311. })
  312. console.log('kk',this.basicForm.sysMaterialDeviceOriginItemList)
  313. let delList = []
  314. delList = this.basicForm.sysMaterialDeviceOriginItemList.filter(item => {
  315. return item.delFlag == '2'
  316. })
  317. this.basicForm.sysMaterialDeviceOriginItemList = this.basicForm.sysMaterialDeviceOriginItemList.filter(item => {
  318. return item.delFlag == '0'
  319. })
  320. this.delDemandItemList.push(...delList)
  321. } else {
  322. this.$modal.notifyWarning('请至少选择一条明细!')
  323. }
  324. },
  325. handleRemove(file, fileList) {
  326. console.log(file, fileList);
  327. // 编辑删除了文件给标识
  328. if (this.sonPageStu == 'edit') {
  329. this.basicForm.isDeleteFile = '0'
  330. }
  331. this.basicForm.sysMaterialDeviceOriginFileList = []
  332. },
  333. handlePreview(file) {
  334. console.log(file);
  335. let link = document.createElement("a")
  336. link.download = file.name
  337. link.href = file.url
  338. link.click()
  339. window.URL.revokeObjectURL(link.href)
  340. },
  341. handleSuccess(response, file, fileList) {
  342. console.log(response)
  343. if (this.sonPageStu == 'edit') {
  344. this.basicForm.isDeleteFile = '0'
  345. }
  346. this.basicForm.sysMaterialDeviceOriginFileList = response.data
  347. },
  348. handleExceed(files, fileList) {
  349. this.$message.warning(`当前限制选择1个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
  350. },
  351. beforeRemove(file, fileList) {
  352. if(this.sonPageStu == 'check') {
  353. this.$modal.notifyWarning("详情态不允许删除");
  354. return false
  355. } else {
  356. return this.$confirm(`确定移除 ${ file.name }?`);
  357. }
  358. }
  359. }
  360. }
  361. </script>
  362. <style lang="scss" scoped>
  363. .btn_group {
  364. // width: 100%;
  365. // margin: 20px 0;
  366. display: flex;
  367. justify-content: space-between;
  368. position: absolute;
  369. top: 10px;right: 20px;
  370. }
  371. .btn_grooup {
  372. margin-bottom: 10px;
  373. display: flex;
  374. justify-content: space-between;
  375. }
  376. </style>