addPage.vue 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839
  1. <!--化学品存放-->
  2. <template>
  3. <div class="addPage studentChemicalInfo-add-page">
  4. <div class="addPage-min">
  5. <el-form :model="queryParamsData" ref="queryForm" :inline="true" label-width="68px">
  6. <el-form-item label="关键字" prop="searchValue">
  7. <el-input
  8. maxlength="20"
  9. v-model="queryParamsData.searchValue"
  10. placeholder="化学品名/别名/CAS号"
  11. style="width:260px;"
  12. clearable/>
  13. </el-form-item>
  14. <el-form-item label="化学品分类" prop="chemicalClassify" label-width="90px">
  15. <el-select v-model="queryParamsData.chemicalClassify" clearable placeholder="请选择化学品分类">
  16. <el-option
  17. v-for="item in optionsListOne"
  18. :key="item.id"
  19. :label="item.classifyName"
  20. :value="item.id">
  21. </el-option>
  22. </el-select>
  23. </el-form-item>
  24. <el-form-item label="属性" prop="classifyAttribute" label-width="50px">
  25. <el-select v-model="queryParamsData.classifyAttribute" clearable placeholder="请选择属性">
  26. <el-option
  27. v-for="item in optionsListTwo"
  28. :key="item.dictValue"
  29. :label="item.dictLabel"
  30. :value="item.dictValue">
  31. </el-option>
  32. </el-select>
  33. </el-form-item>
  34. <el-form-item style="float: right;">
  35. <el-col :span="1.5">
  36. <p class="reset-button-one"
  37. style="width:100px;margin-right:20px;"
  38. @click="backPage"
  39. >返回</p>
  40. <p class="inquire-button-one"
  41. style="width:100px;"
  42. @click="handleAdd"
  43. >确定</p>
  44. </el-col>
  45. </el-form-item>
  46. <el-form-item>
  47. <p class="inquire-button-one" @click="handleQuery" style="margin-right:10px;">查询</p>
  48. <p class="reset-button-one" @click="resetQuery">重置</p>
  49. </el-form-item>
  50. </el-form>
  51. <el-table v-loading="loading" border :data="tableList" ref="multipleTable" :row-key="getRowKeys"
  52. tooltip-effect="dark" @select-all="dialogCheck" @select="dialogCheck">
  53. <el-table-column type="selection" width="50" align="center" :reserve-selection="true"/>
  54. <el-table-column label="ID" align="center" prop="id" width="150" show-overflow-tooltip/>
  55. <el-table-column label="化学品名" align="center" prop="chemicalName" width="250" show-overflow-tooltip/>
  56. <el-table-column label="CAS号" align="center" prop="casNum" width="200" show-overflow-tooltip/>
  57. <el-table-column label="分类" align="center" prop="classifyName" width="250" show-overflow-tooltip/>
  58. <el-table-column label="属性" align="center" prop="classifyAttribute" show-overflow-tooltip/>
  59. <el-table-column label="形态" align="center" prop="chemicalShapeInfo" width="180" show-overflow-tooltip/>
  60. <el-table-column label="纯度" align="center" prop="purity" width="150" show-overflow-tooltip/>
  61. </el-table>
  62. <pagination :page-sizes="[20, 30, 40, 50]"
  63. v-show="total>0"
  64. :total="total"
  65. :page.sync="queryParams.pageNum"
  66. :limit.sync="queryParams.pageSize"
  67. @pagination="getList"
  68. />
  69. </div>
  70. <el-dialog title="化学品存放" :visible.sync="dialogType" v-if="dialogType" width="990px" append-to-body class="ChemicalInfo-addPage-dialog">
  71. <!--<p class="dialog-title">{{dialogDeptName}}</p>-->
  72. <el-form :model="dialogData" ref="dialogForm" :inline="true" :rules="rules" label-width="70px">
  73. <el-form-item label="实验室" prop="subId">
  74. <el-select
  75. style="width:485px;"
  76. v-model="dialogData.subId"
  77. filterable
  78. remote
  79. clearable
  80. @focus="selectFocus"
  81. reserve-keyword
  82. @change="selectClick"
  83. @clear="clearClick"
  84. placeholder="搜索选择实验室"
  85. :remote-method="getSelectList"
  86. :loading="loading">
  87. <el-option
  88. v-for="item in selectList"
  89. :key="item.id"
  90. :label="item.name"
  91. :value="item.id">
  92. </el-option>
  93. </el-select>
  94. </el-form-item>
  95. <p style="margin:0 0 20px 15px;font-weight:700;font-size:14px;" v-if="dialogData.maxList[0]&&dialogData.subId">设置要存放的化学品规格和数量</p>
  96. <p style="margin:0 0 0 70px;font-weight:700;font-size:14px;color:#FF6666;" v-if="!dialogData.maxList[0]&&dialogData.subId">该实验室未配置化学品柜</p>
  97. <div class="scrollbar-box" style="width:950px;margin:0 auto;max-height:500px;overflow-y: scroll" v-if="$store.state.settings.smartAlarmType == 1">
  98. <div class="for-max-big-box" v-for="(item,index) in dialogData.maxList">
  99. <div class="for-max-title-box">
  100. <p></p>
  101. <p>{{item.name}}</p>
  102. <p>{{selectioned.chemicalName}}可存放量:{{item.maxNum}}{{selectioned.chemicalUnit}}</p>
  103. </div>
  104. <div class="for-big-box" v-for="(bigItem,bigIndex) in item.chemicalJoinCabinetSonList">
  105. <p class="for-big-title-p">{{bigItem.lockName}}</p>
  106. <div class="for-big-for-max-box">
  107. <div class="for-big-for-max-title-box">
  108. <p>化学品存放规格</p>
  109. <p @click="addList(index,bigIndex)">+添加</p>
  110. </div>
  111. <div class="for-min-box" v-for="(minItem,minIndex) in bigItem.list">
  112. <el-form-item class="num-input-item" label="容器容量规格" label-width="120px" :prop="'maxList.'+ index +'.chemicalJoinCabinetSonList.'+bigIndex+'.list.'+minIndex+'.chemicalAmount'" :rules="rules.chemicalAmountLock">
  113. <div class="num-input-min-box">
  114. <el-input-number
  115. style="width:110px;"
  116. :min="0"
  117. :max="5000"
  118. :precision="2"
  119. :step="0.01"
  120. v-model="minItem.chemicalAmount"
  121. placeholder="请输入">
  122. </el-input-number>
  123. <p class="num-title-span">{{selectioned.chemicalUnit}}</p>
  124. </div>
  125. </el-form-item>
  126. <el-form-item class="num-input-item" label="容器重量规格" label-width="120px" :prop="'maxList.'+ index +'.chemicalJoinCabinetSonList.'+bigIndex+'.list.'+minIndex+'.tare'" :rules="rules.tareLock">
  127. <div class="num-input-min-box">
  128. <el-input-number
  129. style="width:110px;"
  130. :min="0"
  131. :max="5000"
  132. :precision="2"
  133. :step="0.01"
  134. v-model="minItem.tare"
  135. :disabled="selectioned.chemicalUnit!='g'"
  136. placeholder="请输入">
  137. </el-input-number>
  138. <p class="num-title-span">g</p>
  139. </div>
  140. </el-form-item>
  141. <el-form-item label="存放数量" label-width="90px" :prop="'maxList.'+ index +'.chemicalJoinCabinetSonList.'+bigIndex+'.list.'+minIndex+'.storageNum'" :rules="rules.storageNum" class="el-form-item-button-box">
  142. <el-input-number
  143. style="width:150px;"
  144. :min="1"
  145. :max="1000"
  146. :step="1"
  147. v-model="minItem.storageNum"
  148. placeholder="请输入">
  149. </el-input-number>
  150. </el-form-item>
  151. <span class="el-icon-delete" style="margin-left:30px;color:#999;line-height:40px;font-size:24px;cursor: pointer;" @click="delList(index,bigIndex,minIndex)"></span>
  152. </div>
  153. </div>
  154. </div>
  155. </div>
  156. </div>
  157. <div class="scrollbar-box" style="width:950px;margin:0 auto;max-height:500px;overflow-y: scroll" v-if="$store.state.settings.smartAlarmType == 0">
  158. <div class="for-max-big-box" v-for="(item,index) in dialogData.maxList">
  159. <div class="for-max-title-box">
  160. <p></p>
  161. <p>{{item.name}}</p>
  162. <p>{{selectioned.chemicalName}}可存放量:{{item.maxNum}}{{selectioned.chemicalUnit}}</p>
  163. </div>
  164. <div class="for-big-box">
  165. <div class="for-big-for-max-box">
  166. <div class="for-big-for-max-title-box">
  167. <p>化学品存放规格</p>
  168. <p @click="addList(index)">+添加</p>
  169. </div>
  170. <div class="for-min-box" v-for="(bigItem,bigIndex) in item.list">
  171. <el-form-item class="num-input-item" label="容器容量规格" label-width="120px" :prop="'maxList.'+ index +'.list.'+ bigIndex+'.chemicalAmount'" :rules="rules.chemicalAmount">
  172. <div class="num-input-min-box">
  173. <el-input-number
  174. style="width:110px;"
  175. :min="0"
  176. :max="5000"
  177. :precision="2"
  178. :step="0.01"
  179. v-model="bigItem.chemicalAmount"
  180. placeholder="请输入">
  181. </el-input-number>
  182. <p class="num-title-span">{{selectioned.chemicalUnit}}</p>
  183. </div>
  184. </el-form-item>
  185. <el-form-item class="num-input-item" label="容器重量规格" label-width="120px" :prop="'maxList.'+ index +'.list.'+ bigIndex+'.tare'" :rules="rules.tare">
  186. <div class="num-input-min-box">
  187. <el-input-number
  188. style="width:110px;"
  189. :min="0"
  190. :max="5000"
  191. :precision="2"
  192. :step="0.01"
  193. v-model="bigItem.tare"
  194. :disabled="selectioned.chemicalUnit!='g'"
  195. placeholder="请输入">
  196. </el-input-number>
  197. <p class="num-title-span">g</p>
  198. </div>
  199. </el-form-item>
  200. <el-form-item label="存放数量" label-width="90px" :prop="'maxList.'+ index +'.list.'+ bigIndex+'.storageNum'" :rules="rules.storageNum" class="el-form-item-button-box">
  201. <el-input-number
  202. style="width:150px;"
  203. :min="1"
  204. :max="1000"
  205. :step="1"
  206. v-model="bigItem.storageNum"
  207. placeholder="请输入">
  208. </el-input-number>
  209. </el-form-item>
  210. <span class="el-icon-delete" style="margin-left:30px;color:#999;line-height:40px;font-size:24px;cursor: pointer;" @click="delList(index,bigIndex)"></span>
  211. </div>
  212. </div>
  213. </div>
  214. </div>
  215. </div>
  216. </el-form>
  217. <div slot="footer" class="dialog-footer">
  218. <el-button @click="cancel">取 消</el-button>
  219. <el-button type="primary" @click="submitForm">确 定</el-button>
  220. </div>
  221. </el-dialog>
  222. </div>
  223. </template>
  224. <script>
  225. import { filterDept,getSubList,getCabinetBySubId,hxpChemicalJoinCabinet,getRestStockByManyCabinet,classifyList } from "@/api/medicUniversity-3_1/index";
  226. import { getHxpQueryByUser } from "@/api/studentApi/chemicalManagement/index";
  227. import { getLogoInfo } from "@/api/system/publicConfig";
  228. export default {
  229. name: "addPage",
  230. props:{
  231. listPropsData:{},
  232. },
  233. data() {
  234. const computingCapacity = (rule, value, callback) => {
  235. console.log('rule',rule)
  236. const list = rule.field.split('.');
  237. let index = parseFloat(list[1]);
  238. let index2 = parseFloat(list[3]);
  239. let max = parseFloat(this.dialogData.maxList[index].maxNum);
  240. let tare = parseFloat(this.dialogData.maxList[index].list[index2].tare);
  241. if(value>max){
  242. callback(new Error("超出该机柜可存放量"));
  243. }else if(value<tare){
  244. callback(new Error("容器容量规格不能小于容器重量规格"));
  245. }else{
  246. callback();
  247. }
  248. };
  249. const computingCapacityLock = (rule, value, callback) => {
  250. console.log('rule',rule)
  251. const list = rule.field.split('.');
  252. let index = parseFloat(list[1]);
  253. let index1 = parseFloat(list[3]);
  254. let index2 = parseFloat(list[5]);
  255. let max = parseFloat(this.dialogData.maxList[index].maxNum);
  256. let tare = parseFloat(this.dialogData.maxList[index].chemicalJoinCabinetSonList[index1].list[index2].tare);
  257. if(value>max){
  258. callback(new Error("超出该机柜可存放量"));
  259. }else if(value<tare){
  260. callback(new Error("容器容量规格不能小于容器重量规格"));
  261. }else{
  262. callback();
  263. }
  264. };
  265. const computingTare = (rule, value, callback) => {
  266. console.log('rule',rule)
  267. const list = rule.field.split('.');
  268. let index = parseFloat(list[1]);
  269. let index2 = parseFloat(list[3]);
  270. let chemicalAmount = parseFloat(this.dialogData.maxList[index].list[index2].chemicalAmount);
  271. if(value>chemicalAmount){
  272. callback(new Error("容器重量规格不能大于容器容量规格"));
  273. }else{
  274. callback();
  275. }
  276. };
  277. const computingTareLock = (rule, value, callback) => {
  278. console.log('rule',rule)
  279. const list = rule.field.split('.');
  280. let index = parseFloat(list[1]);
  281. let index1 = parseFloat(list[3]);
  282. let index2 = parseFloat(list[5]);
  283. let chemicalAmount = parseFloat(this.dialogData.maxList[index].chemicalJoinCabinetSonList[index1].list[index2].chemicalAmount);
  284. if(value>chemicalAmount){
  285. callback(new Error("容器重量规格不能大于容器容量规格"));
  286. }else{
  287. callback();
  288. }
  289. };
  290. return {
  291. //限制时间范围
  292. pickerBeginOption: {
  293. disabledDate: (time) => {
  294. return time.getTime() < Date.now()-1 * 24 * 60 * 60 * 1000
  295. }
  296. },
  297. loading:false,
  298. //数据数量
  299. total:0,
  300. tableList:[],
  301. //实验室列表
  302. optionsListOne:[],
  303. //状态列表
  304. optionsListTwo:[],
  305. // 搜索数据
  306. queryParamsData:{
  307. pageNum:1,
  308. pageSize:20,
  309. },
  310. // 搜索实际发送数据
  311. queryParams:{
  312. pageNum:1,
  313. pageSize:20,
  314. },
  315. dialogType:false,
  316. dialogData:{
  317. subId:"",
  318. chemicalId:"",
  319. maxList:[],
  320. },
  321. // 查询
  322. selectList:[],
  323. //校验
  324. rules:{
  325. subId:[
  326. { required: true, message: '请搜索选择实验室', trigger: 'blur' },
  327. ],
  328. chemicalAmount:[
  329. { required: true, message: '请输入容器容量', trigger: 'blur' },
  330. { required: true, message: "请输入容器容量", validator: this.spaceJudgment, trigger: "blur" },
  331. { required: true, validator: computingCapacity, trigger: "blur" },
  332. ],
  333. chemicalAmountLock:[
  334. { required: true, message: '请输入容器容量', trigger: 'blur' },
  335. { required: true, message: "请输入容器容量", validator: this.spaceJudgment, trigger: "blur" },
  336. { required: true, validator: computingCapacityLock, trigger: "blur" },
  337. ],
  338. tare:[
  339. { required: true, message: '请输入容器自重', trigger: 'blur' },
  340. { required: true, message: "请输入容器自重", validator: this.spaceJudgment, trigger: "blur" },
  341. { required: true, validator: computingTare, trigger: "blur" },
  342. ],
  343. tareLock:[
  344. { required: true, message: '请输入容器自重', trigger: 'blur' },
  345. { required: true, message: "请输入容器自重", validator: this.spaceJudgment, trigger: "blur" },
  346. { required: true, validator: computingTareLock, trigger: "blur" },
  347. ],
  348. storageNum:[
  349. { required: true, message: '请输入存放数量', trigger: 'blur' },
  350. { required: true, message: "请输入存放数量", validator: this.spaceJudgment, trigger: "blur" }
  351. ],
  352. },
  353. //查询历史记录
  354. recordList:[],
  355. dialogDeptName:"",
  356. dialogDeptId:"",
  357. //选中
  358. selectioned:{},
  359. };
  360. },
  361. created() {
  362. },
  363. mounted(){
  364. this.getList();
  365. this.getRecord();
  366. this.getDicts("hxp_classifyattribute").then(response => {
  367. this.optionsListTwo = response.data;
  368. })
  369. this.classifyList();
  370. },
  371. methods: {
  372. //获取化学品分类列表
  373. classifyList(){
  374. classifyList().then(response => {
  375. this.optionsListOne = response.rows;
  376. });
  377. },
  378. selectFocus(){
  379. if(!this.selectList[0]){
  380. this.getSubList();
  381. }
  382. },
  383. timeChange(){
  384. this.$forceUpdate();
  385. },
  386. //删除规格
  387. delList(index,bigIndex,minIndex){
  388. if(this.$store.state.settings.smartAlarmType == 1){
  389. this.dialogData.maxList[index].chemicalJoinCabinetSonList[bigIndex].list.splice(minIndex,1);
  390. }else{
  391. this.dialogData.maxList[index].list.splice(bigIndex,1);
  392. }
  393. },
  394. //新增规格
  395. addList(index,bigIndex){
  396. if(this.$store.state.settings.smartAlarmType == 1){
  397. this.dialogData.maxList[index].chemicalJoinCabinetSonList[bigIndex].list.push({chemicalAmount:"",tare:"",storageNum:1,})
  398. }else{
  399. this.dialogData.maxList[index].list.push({chemicalAmount:"",tare:"",storageNum:1,})
  400. }
  401. },
  402. // 提交
  403. submitForm(){
  404. let self = this;
  405. this.$refs["dialogForm"].validate(valid => {
  406. if (valid) {
  407. if(this.$store.state.settings.smartAlarmType == 0){
  408. for(let i=0;i<self.dialogData.maxList.length;i++){
  409. let maxNum = parseFloat(self.dialogData.maxList[i].maxNum);
  410. let num = 0;
  411. for(let o=0;o<self.dialogData.maxList[i].list.length;o++){
  412. num = num + parseFloat(self.dialogData.maxList[i].list[o].chemicalAmount)
  413. }
  414. if(num>maxNum){
  415. this.msgError(self.dialogData.maxList[i].name+' 总容器容量大于可存放量');
  416. return
  417. }
  418. }
  419. }else if(this.$store.state.settings.smartAlarmType == 1){
  420. for(let i=0;i<self.dialogData.maxList.length;i++){
  421. let maxNum = parseFloat(self.dialogData.maxList[i].maxNum);
  422. let num = 0;
  423. for(let o=0;o<self.dialogData.maxList[i].chemicalJoinCabinetSonList.length;o++){
  424. for(let x=0;x<self.dialogData.maxList[i].chemicalJoinCabinetSonList[o].list.length;x++){
  425. num = num + parseFloat(self.dialogData.maxList[i].chemicalJoinCabinetSonList[o].list[x].chemicalAmount)
  426. }
  427. }
  428. if(num>maxNum){
  429. this.msgError(self.dialogData.maxList[i].name+' 总容器容量大于可存放量');
  430. return
  431. }
  432. }
  433. }
  434. let obj = {
  435. subId:this.dialogData.subId,
  436. chemicalId:this.selectioned.id,
  437. chemicalJoinCabinetSonList:[],
  438. }
  439. if(this.$store.state.settings.smartAlarmType == 1){
  440. for(let i=0;i<self.dialogData.maxList.length;i++){
  441. for(let o=0;o<self.dialogData.maxList[i].chemicalJoinCabinetSonList.length;o++){
  442. for(let x=0;x<self.dialogData.maxList[i].chemicalJoinCabinetSonList[o].list.length;x++){
  443. let newObj = {
  444. cabinetId:self.dialogData.maxList[i].cabinetId,
  445. cabinetlockId:self.dialogData.maxList[i].chemicalJoinCabinetSonList[o].id,
  446. chemicalAmount:self.dialogData.maxList[i].chemicalJoinCabinetSonList[o].list[x].chemicalAmount,
  447. chemicalAmountUnit:self.selectioned.chemicalUnit,
  448. storageNum:self.dialogData.maxList[i].chemicalJoinCabinetSonList[o].list[x].storageNum,
  449. tare:self.dialogData.maxList[i].chemicalJoinCabinetSonList[o].list[x].tare,
  450. }
  451. obj.chemicalJoinCabinetSonList.push(newObj);
  452. }
  453. }
  454. }
  455. }else{
  456. for(let i=0;i<self.dialogData.maxList.length;i++){
  457. for(let o=0;o<self.dialogData.maxList[i].list.length;o++){
  458. console.log(self.dialogData.maxList[i].list[o]);
  459. let newObj = {
  460. cabinetId:self.dialogData.maxList[i].cabinetId,
  461. chemicalAmount:self.dialogData.maxList[i].list[o].chemicalAmount,
  462. chemicalAmountUnit:self.selectioned.chemicalUnit,
  463. storageNum:self.dialogData.maxList[i].list[o].storageNum,
  464. tare:self.dialogData.maxList[i].list[o].tare,
  465. }
  466. obj.chemicalJoinCabinetSonList.push(newObj);
  467. }
  468. }
  469. }
  470. if(obj.chemicalJoinCabinetSonList[0]){
  471. hxpChemicalJoinCabinet(obj).then(response => {
  472. self.dialogType = false;
  473. self.msgSuccess(response.msg)
  474. self.$parent.pageToggle(1);
  475. });
  476. }else{
  477. self.msgError('请添加规格')
  478. }
  479. }
  480. })
  481. },
  482. //取消
  483. cancel(){
  484. this.dialogType = false;
  485. },
  486. //选中触发
  487. selectClick(data){
  488. let self = this;
  489. if(data){
  490. for(let i=0;i<self.selectList.length;i++){
  491. if(data == self.selectList[i].id){
  492. let num = 0;
  493. for(let o=0;o<self.recordList.length;o++){
  494. if(data == self.recordList[o].id){
  495. num ++
  496. }
  497. }
  498. if(num == 0){
  499. if(self.recordList.length>9){
  500. self.recordList.splice(0,1)
  501. }
  502. self.recordList.push(self.selectList[i])
  503. this.$forceUpdate();
  504. localStorage.setItem('subRecord',JSON.stringify(self.recordList))
  505. break
  506. }
  507. }
  508. }
  509. let obj ={
  510. subId:data,
  511. cabinetStatus:1
  512. }
  513. getCabinetBySubId(obj).then(response => {
  514. let list = [];
  515. for(let i=0;i<response.data.length;i++){
  516. if(self.$store.state.settings.smartAlarmType == 1){
  517. if(response.data[i].cabinetLockList[0]){
  518. let obj ={
  519. name:response.data[i].cabinetName,
  520. cabinetId:response.data[i].id,
  521. chemicalJoinCabinetSonList:response.data[i].cabinetLockList
  522. };
  523. for(let o=0;o<obj.chemicalJoinCabinetSonList.length;o++){
  524. obj.chemicalJoinCabinetSonList[o].list = [];
  525. }
  526. list.push(obj);
  527. }
  528. }else{
  529. let obj ={
  530. name:response.data[i].cabinetName,
  531. cabinetId:response.data[i].id,
  532. list:[]
  533. };
  534. list.push(obj);
  535. }
  536. }
  537. let newObj = {
  538. chemicalId:self.selectioned.id,
  539. cabinetIds:"",
  540. }
  541. for(let i=0;i<list.length;i++){
  542. if(i==0){
  543. newObj.cabinetIds = list[i].cabinetId;
  544. }else{
  545. newObj.cabinetIds = newObj.cabinetIds +','+ list[i].cabinetId;
  546. }
  547. }
  548. if(list[0]){
  549. getRestStockByManyCabinet(newObj).then(response => {
  550. for(let i=0;i<response.data.length;i++){
  551. for(let o=0;o<list.length;o++){
  552. if(response.data[i].cabinetId == list[o].cabinetId){
  553. list[o].maxNum = response.data[i].restStock;
  554. }
  555. }
  556. }
  557. this.$set(this.dialogData,"maxList",list);
  558. })
  559. }else{
  560. this.$set(this.dialogData,"maxList",list);
  561. }
  562. });
  563. }
  564. },
  565. //清空触发
  566. clearClick(){
  567. // this.optionsUser = [];
  568. // this.getList();
  569. this.getRecord();
  570. this.dialogData.maxList = [];
  571. },
  572. //查询
  573. getSelectList(val){
  574. let self = this;
  575. let list = [];
  576. for(let i=0;i<self.selectListData.length;i++){
  577. if(self.selectListData[i].name.indexOf(val) != -1){
  578. list.push(self.selectListData[i]);
  579. }
  580. }
  581. this.selectList = JSON.parse(JSON.stringify(list))
  582. },
  583. //化学品存放
  584. handleAdd(){
  585. //查询当前院系
  586. filterDept().then(response => {
  587. if(!this.selectioned.id){
  588. this.msgError('请勾选化学品')
  589. return
  590. }
  591. let text = "";
  592. let idText = "";
  593. for(let i=0;i<response.data.length;i++){
  594. if(i==0){
  595. text = text + response.data[i].deptName;
  596. idText = idText + response.data[i].deptId;
  597. }else{
  598. text = text +'-'+ response.data[i].deptName;
  599. idText = idText +','+ response.data[i].deptId;
  600. }
  601. }
  602. this.$set(this,'dialogDeptName',text);
  603. this.$set(this,'dialogDeptId',idText);
  604. this.getSubList();
  605. });
  606. },
  607. backPage(){
  608. this.$parent.pageToggle(0);
  609. },
  610. //获取数据列表
  611. getList(){
  612. this.queryParamsData = JSON.parse(JSON.stringify(this.queryParams));
  613. // this.queryParamsData.chemicalId = this.listPropsData.id;
  614. getHxpQueryByUser(this.queryParamsData).then(response => {
  615. this.tableList = response.rows;
  616. this.total = response.total
  617. });
  618. },
  619. /** 搜索按钮操作 */
  620. handleQuery() {
  621. this.queryParamsData.pageNum = 1;
  622. this.queryParamsData.pageSize = 20;
  623. this.queryParams = JSON.parse(JSON.stringify(this.queryParamsData));
  624. this.getList();
  625. },
  626. /** 重置按钮操作 */
  627. resetQuery() {
  628. this.$set(this,'queryParamsData',{});
  629. this.$set(this,'queryParams',{});
  630. this.handleQuery();
  631. },
  632. //获取选择记录
  633. getRecord(){
  634. if(localStorage.getItem('subRecord')){
  635. //历史记录
  636. this.recordList = JSON.parse(localStorage.getItem('subRecord'));
  637. //当前列表
  638. this.selectList = JSON.parse(localStorage.getItem('subRecord'));
  639. }else{
  640. this.recordList = [];
  641. this.selectList = [];
  642. }
  643. },
  644. //根据所属院系或多个院系获取实验室列表
  645. getSubList(){
  646. let ids = this.dialogDeptId+'';
  647. getSubList(ids).then(response => {
  648. this.$set(this,'dialogData',{
  649. subId:"",
  650. chemicalId:"",
  651. maxList:[],
  652. });
  653. //当前列表
  654. this.selectList = JSON.parse(JSON.stringify(response.data));
  655. //原始列表数据
  656. this.selectListData = JSON.parse(JSON.stringify(response.data));
  657. this.dialogType = true;
  658. });
  659. },
  660. dialogCheck (selection, row) {
  661. console.log("selection",selection)
  662. console.log("row",row)
  663. this.$refs.multipleTable.clearSelection()
  664. if (selection.length === 0) {
  665. // 判断selection是否有值存在
  666. this.selectioned = {};
  667. }else{
  668. this.selectioned = row
  669. this.$refs.multipleTable.toggleRowSelection(row, true)
  670. }
  671. },
  672. /*===记录勾选数据===
  673. 需要再el-table 添加 :row-key="getRowKeys"
  674. 需要在selection 添加 :reserve-selection="true"
  675. */
  676. getRowKeys(row) {
  677. return row.id
  678. },
  679. }
  680. }
  681. </script>
  682. <style scoped lang="scss">
  683. .addPage{
  684. flex:1;
  685. display: flex;
  686. flex-direction: column;
  687. overflow: hidden;
  688. font-weight:500;
  689. p{
  690. margin:0;
  691. padding:0;
  692. }
  693. .addPage-min{
  694. flex:1;
  695. display: flex;
  696. flex-direction: column;
  697. overflow: hidden;
  698. padding:20px;
  699. }
  700. }
  701. </style>
  702. <style lang="scss">
  703. .ChemicalInfo-addPage-dialog{
  704. p{
  705. margin:0;
  706. }
  707. .dialog-title{
  708. margin-left:10px;
  709. margin-bottom:20px;
  710. font-weight:700;
  711. }
  712. .for-max-big-box{
  713. padding:20px;
  714. background: #f5f5f5;
  715. margin-bottom:12px;
  716. .for-max-title-box{
  717. display: flex;
  718. p:nth-child(1){
  719. background: #0045AF;
  720. width: 3px;
  721. height: 16px;
  722. }
  723. p:nth-child(2){
  724. flex:1;
  725. height: 16px;
  726. font-size: 16px;
  727. color: #333333;
  728. line-height: 16px;
  729. margin-left:12px;
  730. }
  731. p:nth-child(3){
  732. font-size:16px;
  733. line-height: 16px;
  734. color:#0183FA;
  735. }
  736. }
  737. .for-big-box{
  738. margin-top:20px;
  739. .for-big-title-p{
  740. height:50px;
  741. line-height:50px;
  742. padding:0 22px;
  743. font-size: 16px;
  744. color:#333333;
  745. background: #CCE6FE;
  746. }
  747. .for-big-for-max-box{
  748. border:1px solid #E0E0E0;
  749. .for-big-for-max-title-box{
  750. height:60px;
  751. display: flex;
  752. p:nth-child(1){
  753. flex:1;
  754. font-size:14px;
  755. line-height:60px;
  756. margin-left:22px;
  757. }
  758. p:nth-child(2){
  759. width:80px;
  760. height: 30px;
  761. line-height:30px;
  762. border-radius: 6px;
  763. border: 1px solid #0045AF;
  764. text-align: center;
  765. margin:16px 14px;
  766. color:#0045AF;
  767. font-size:12px;
  768. cursor: pointer;
  769. }
  770. }
  771. .for-min-box{
  772. margin-bottom:10px;
  773. }
  774. }
  775. }
  776. input::-webkit-outer-spin-button,
  777. input::-webkit-inner-spin-button {
  778. -webkit-appearance: none!important;
  779. }
  780. /* 在Firefox浏览器下 */
  781. input[type="number"]{
  782. -moz-appearance: textfield!important;
  783. }
  784. .el-form-item__label{
  785. font-weight:400;
  786. }
  787. .el-form-item-button-box{
  788. .el-input-number__decrease{
  789. height:38px;
  790. width:38px;
  791. line-height:38px;
  792. }
  793. .el-input-number__increase{
  794. height:38px;
  795. width:38px;
  796. line-height:38px;
  797. }
  798. }
  799. }
  800. }
  801. .studentChemicalInfo-add-page{
  802. .el-table__header-wrapper{
  803. .el-checkbox{
  804. display: none;
  805. }
  806. }
  807. }
  808. .num-input-item{
  809. .num-input-min-box{
  810. display: flex;
  811. .el-input-number__increase{
  812. display: none;
  813. }
  814. .el-input-number__decrease{
  815. display: none;
  816. }
  817. input{
  818. padding:0 20px!important;
  819. border-top-right-radius: 0;
  820. border-bottom-right-radius: 0;
  821. }
  822. .num-title-span{
  823. display: inline-block;
  824. width:40px;
  825. height:40px;
  826. text-align: center;
  827. border: 1px solid #DCDFE6;
  828. border-left:none;
  829. border-top-right-radius: 4px;
  830. border-bottom-right-radius: 4px;
  831. }
  832. }
  833. }
  834. </style>