index.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383
  1. <!--学生采购申请-->
  2. <template>
  3. <div class="app-container studentPurchaseRequisition">
  4. <div class="studentPurchaseRequisition-page" v-if="pageType == 1">
  5. <div class="usageRecord-min">
  6. <el-form :model="queryParamsData" ref="queryForm" :inline="true" label-width="68px">
  7. <el-form-item label="关键字" prop="searchValue">
  8. <el-input
  9. maxlength="20"
  10. v-model="queryParamsData.searchValue"
  11. placeholder="编号/姓名/化学品名/实验室"
  12. clearable
  13. size="small"/>
  14. </el-form-item>
  15. <el-form-item label="状态" prop="approvalStatus" label-width="44px">
  16. <el-select v-model="queryParamsData.approvalStatus" clearable placeholder="请选择状态" style="width: 140px">
  17. <el-option label="审批中" value="0"></el-option>
  18. <el-option label="已通过" value="1"></el-option>
  19. <el-option label="已拒绝" value="2"></el-option>
  20. <el-option label="已撤销" value="3"></el-option>
  21. </el-select>
  22. </el-form-item>
  23. <el-form-item label="申请时间" prop="terminalStatus">
  24. <el-date-picker
  25. :clearable="false"
  26. v-model="dateRangeOne"
  27. size="small"
  28. style="width: 220px"
  29. value-format="yyyy-MM-dd"
  30. type="daterange"
  31. range-separator="-"
  32. start-placeholder="开始日期"
  33. end-placeholder="结束日期"
  34. ></el-date-picker>
  35. </el-form-item>
  36. <el-form-item label="完成时间" prop="terminalStatus">
  37. <el-date-picker
  38. :clearable="false"
  39. v-model="dateRangeTwo"
  40. size="small"
  41. style="width: 220px"
  42. value-format="yyyy-MM-dd"
  43. type="daterange"
  44. range-separator="-"
  45. start-placeholder="开始日期"
  46. end-placeholder="结束日期"
  47. ></el-date-picker>
  48. </el-form-item>
  49. <el-form-item style="float: right;">
  50. <el-col :span="1.5">
  51. <p class="inquire-button-one"
  52. style="width:100px;"
  53. @click="pageToggle(3)"
  54. >申购</p>
  55. </el-col>
  56. </el-form-item>
  57. <el-form-item style="float: right;">
  58. <el-col :span="1.5">
  59. <p class="add-button-one-90"
  60. style="width:100px;"
  61. @click="pageToggle(2)"
  62. >草稿箱</p>
  63. </el-col>
  64. </el-form-item>
  65. <el-form-item>
  66. <p class="inquire-button-one" @click="handleQuery" style="margin-right:10px;">查询</p>
  67. <p class="reset-button-one" @click="resetQuery">重置</p>
  68. </el-form-item>
  69. </el-form>
  70. <el-table v-loading="loading" border :data="tableList">
  71. <el-table-column label="申购编号" align="center" prop="applyNum" show-overflow-tooltip/>
  72. <el-table-column label="实验室" align="center" prop="subName" show-overflow-tooltip/>
  73. <el-table-column label="申购信息" align="center" prop="chemicalNames" show-overflow-tooltip/>
  74. <el-table-column label="申请时间" align="center" prop="createTime" show-overflow-tooltip/>
  75. <el-table-column label="完成时间" align="center" prop="overTime" show-overflow-tooltip/>
  76. <el-table-column label="状态" align="center" prop="approvalContent" width="160px"/>
  77. <el-table-column label="审批人" align="center" prop="status" width="100px">
  78. <template slot-scope="scope">
  79. <div>
  80. <el-tooltip class="item" effect="dark" :content="scope.row.dqName?'当前:'+scope.row.dqName:'当前:无'" placement="top">
  81. <div style="display: flex">
  82. <p>当前:</p>
  83. <p style="flex:1;text-align: left;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">{{scope.row.dqName?scope.row.dqName:'无'}}</p>
  84. </div>
  85. </el-tooltip>
  86. <el-tooltip class="item" effect="dark" :content="scope.row.lsName?'历史:'+scope.row.lsName:'历史:无'" placement="top">
  87. <div style="display: flex">
  88. <p>历史:</p>
  89. <p style="flex:1;text-align: left;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">{{scope.row.lsName?scope.row.lsName:'无'}}</p>
  90. </div>
  91. </el-tooltip>
  92. </div>
  93. </template>
  94. </el-table-column>
  95. <el-table-column label="操作" align="center" prop="createTime" width="230px">
  96. <template slot-scope="scope">
  97. <div class="button-box">
  98. <p class="table-min-button" v-show="scope.row.approvalStatus == 2 || scope.row.approvalStatus == 3" style="margin-right:10px;" @click="pageToggle(5,scope.row)">编辑</p>
  99. <p class="table-min-button" v-show="scope.row.approvalStatus == 0 && !scope.row.lsName" style="margin-right:10px;" @click="approvalRevoke(scope.row)">撤销</p>
  100. <p class="table-min-button" style="margin-right:10px;" @click="pageToggle(7,scope.row)">审批单</p>
  101. <p class="table-min-button" v-show="scope.row.approvalStatus == 2 || scope.row.approvalStatus == 3" @click="delHxpapply(scope.row)">删除</p>
  102. </div>
  103. </template>
  104. </el-table-column>
  105. </el-table>
  106. <pagination :page-sizes="[20, 30, 40, 50]"
  107. v-show="total>0"
  108. :total="total"
  109. :page.sync="queryParams.pageNum"
  110. :limit.sync="queryParams.pageSize"
  111. @pagination="getList"
  112. />
  113. </div>
  114. </div>
  115. <draft-Page v-if="pageType == 2"></draft-Page>
  116. <list-Page :listPagePropsData="listPagePropsData" v-if="pageType == 3"></list-Page>
  117. <approval-page :approvalPagePropsData="approvalPagePropsData" v-if="pageType == 4"></approval-page>
  118. <edit-page :editPagePropsData="editPagePropsData" v-if="pageType == 5"></edit-page>
  119. </div>
  120. </template>
  121. <script>
  122. import { getHxpapplyMyList,approvalRevoke,getHxpapply,delHxpapply } from "@/api/studentApi/chemicalManagement/index";
  123. import draftPage from "./draftPage.vue"
  124. import listPage from "./listPage.vue"
  125. import approvalPage from "./approvalPage.vue"
  126. import editPage from "./editPage.vue"
  127. export default {
  128. name: "index",
  129. components: {
  130. draftPage,
  131. listPage,
  132. approvalPage,
  133. editPage
  134. },
  135. data() {
  136. return {
  137. // 传参数据
  138. listPagePropsData:{},
  139. approvalPagePropsData:{},
  140. editPagePropsData:{},
  141. pageType:1,
  142. // 申请时间
  143. dateRangeOne:[],
  144. // 完成时间
  145. dateRangeTwo:[],
  146. // 搜索实际发送数据
  147. queryParams:{
  148. pageNum:1,
  149. pageSize:20,
  150. },
  151. queryParamsData:{
  152. pageNum:1,
  153. pageSize:20,
  154. },
  155. //数据数量
  156. total:0,
  157. tableList:[],
  158. loading:false,
  159. };
  160. },
  161. created() {
  162. },
  163. mounted(){
  164. this.getList();
  165. },
  166. methods: {
  167. //操作
  168. pageToggle(type,row){
  169. if(type == 0){
  170. //返回列表
  171. this.pageType = 1;
  172. }else if(type == 1){
  173. //返回列表重置搜索项
  174. this.pageType = 1;
  175. this.resetQuery();
  176. }else if(type == 2){
  177. //去草稿箱
  178. this.pageType = 2
  179. }else if(type == 3){
  180. //新增-去选择列表
  181. this.pageType = 3
  182. }else if(type == 4){
  183. //查看详情
  184. this.pageType = 4
  185. }else if(type == 5){
  186. //编辑
  187. getHxpapply(row.id).then(response => {
  188. console.log("row,id",row.id);
  189. let maxObj = {
  190. id:row.id,
  191. subId:parseInt(response.data.subId),
  192. applyReason:response.data.applyReason,
  193. maxList:[],
  194. }
  195. for(let i=0;i<response.data.actHxpapplyDetailList.length;i++){
  196. let num = 0;
  197. for(let o=0;o<maxObj.maxList.length;o++){
  198. if(maxObj.maxList[o].chemicalId == response.data.actHxpapplyDetailList[i].chemicalId){
  199. num++
  200. }
  201. }
  202. if(num == 0){
  203. let obj = {
  204. chemicalId:parseInt(response.data.actHxpapplyDetailList[i].chemicalId),
  205. chemicalName:response.data.actHxpapplyDetailList[i].chemicalName,
  206. list:[],
  207. }
  208. maxObj.maxList.push(obj);
  209. }
  210. }
  211. for(let i=0;i<response.data.actHxpapplyDetailList.length;i++){
  212. for(let o=0;o<maxObj.maxList.length;o++){
  213. if(maxObj.maxList[o].chemicalId == response.data.actHxpapplyDetailList[i].chemicalId){
  214. let minObj = {
  215. cabinetId:parseInt(response.data.actHxpapplyDetailList[i].cabinetId),
  216. applyNum:parseInt(response.data.actHxpapplyDetailList[i].applyNum),
  217. applyText:response.data.actHxpapplyDetailList[i].remainingStorage,
  218. };
  219. maxObj.maxList[o].list.push(minObj);
  220. }
  221. }
  222. }
  223. this.$set(this,'editPagePropsData',maxObj);
  224. this.pageType = 5;
  225. });
  226. }else if(type == 6){
  227. //审批
  228. let obj = {
  229. id:row.id,
  230. type:1,
  231. userType:row.userType
  232. };
  233. this.$set(this,'approvalPagePropsData',obj);
  234. this.pageType = 4;
  235. }else if(type == 7){
  236. //审批单
  237. let obj = {
  238. id:row.id,
  239. type:2,
  240. userType:row.userType
  241. };
  242. this.$set(this,'approvalPagePropsData',obj);
  243. this.pageType = 4;
  244. }
  245. },
  246. //撤销
  247. approvalRevoke(row){
  248. let self = this;
  249. this.$confirm('是否确认撤销?', "警告", {
  250. confirmButtonText: "确定",
  251. cancelButtonText: "取消",
  252. type: "warning"
  253. }).then(function() {
  254. approvalRevoke({taskId:row.id}).then(response => {
  255. self.msgSuccess(response.msg);
  256. self.resetQuery();
  257. });
  258. }).then(() => {
  259. }).catch(() => {});
  260. },
  261. //删除
  262. delHxpapply(row){
  263. let self = this;
  264. this.$confirm('是否确认删除?', "警告", {
  265. confirmButtonText: "确定",
  266. cancelButtonText: "取消",
  267. type: "warning"
  268. }).then(function() {
  269. delHxpapply(row.id).then(response => {
  270. self.msgSuccess(response.msg);
  271. self.resetQuery();
  272. });
  273. }).then(() => {
  274. }).catch(() => {});
  275. },
  276. //获取数据列表
  277. getList(){
  278. this.queryParamsData = JSON.parse(JSON.stringify(this.queryParams));
  279. if(this.dateRangeOne[0]){
  280. this.queryParamsData.beginCreateTime = this.dateRangeOne[0];
  281. this.queryParamsData.endCreateTime = this.dateRangeOne[1];
  282. }else {
  283. this.queryParamsData.beginCreateTime = null
  284. this.queryParamsData.endCreateTime = null
  285. }
  286. if(this.dateRangeTwo[0]){
  287. this.queryParamsData.beginOverTime = this.dateRangeTwo[0];
  288. this.queryParamsData.endOverTime = this.dateRangeTwo[1];
  289. }else {
  290. this.queryParamsData.beginOverTime = null
  291. this.queryParamsData.endOverTime = null
  292. }
  293. getHxpapplyMyList(this.queryParamsData).then(response => {
  294. let userId = localStorage.getItem('userId')
  295. this.total = response.total;
  296. for(let i=0;i<response.rows.length;i++){
  297. response.rows[i].lsName = "";
  298. response.rows[i].dqName = "";
  299. for(let o=0;o<response.rows[i].currentUserList.length;o++){
  300. if( response.rows[i].currentUserList[o].id == userId){
  301. if(o == 0){
  302. response.rows[i].lsName = response.rows[i].lsName + '我';
  303. }else{
  304. response.rows[i].lsName = response.rows[i].lsName + '、我';
  305. }
  306. }else{
  307. if(o == 0){
  308. response.rows[i].lsName = response.rows[i].lsName + response.rows[i].currentUserList[o].name;
  309. }else{
  310. response.rows[i].lsName = response.rows[i].lsName + '、' + response.rows[i].currentUserList[o].name;
  311. }
  312. }
  313. }
  314. for(let o=0;o<response.rows[i].historyUserList.length;o++){
  315. if( response.rows[i].historyUserList[o].id == userId){
  316. if(o == 0){
  317. response.rows[i].dqName = response.rows[i].dqName + '我';
  318. }else{
  319. response.rows[i].dqName = response.rows[i].dqName + '、我';
  320. }
  321. }else{
  322. if(o == 0){
  323. response.rows[i].dqName = response.rows[i].dqName + response.rows[i].historyUserList[o].name;
  324. }else{
  325. response.rows[i].dqName = response.rows[i].dqName + '、'+ response.rows[i].historyUserList[o].name;
  326. }
  327. }
  328. }
  329. }
  330. this.tableList = response.rows;
  331. });
  332. },
  333. /** 搜索按钮操作 */
  334. handleQuery() {
  335. this.queryParamsData.pageNum = 1;
  336. this.queryParamsData.pageSize = 20;
  337. this.queryParams = JSON.parse(JSON.stringify(this.queryParamsData));
  338. this.getList();
  339. },
  340. /** 重置按钮操作 */
  341. resetQuery() {
  342. this.$set(this,'queryParamsData',{});
  343. this.$set(this,'queryParams',{});
  344. this.$set(this,'dateRangeOne',[]);
  345. this.$set(this,'dateRangeTwo',[]);
  346. this.handleQuery();
  347. },
  348. },
  349. }
  350. </script>
  351. <style scoped lang="scss">
  352. .studentPurchaseRequisition{
  353. flex:1;
  354. display: flex;
  355. flex-direction: column;
  356. overflow: hidden!important;
  357. p{
  358. margin:0;
  359. padding:0;
  360. }
  361. .studentPurchaseRequisition-page{
  362. flex:1;
  363. display: flex;
  364. flex-direction: column;
  365. overflow: hidden!important;
  366. .usageRecord-min{
  367. flex:1;
  368. display: flex;
  369. flex-direction: column;
  370. overflow: hidden;
  371. padding:20px;
  372. .button-box{
  373. display: flex;
  374. }
  375. }
  376. }
  377. }
  378. </style>