index.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422
  1. <template>
  2. <div>
  3. <van-nav-bar
  4. title="应急物资"
  5. left-arrow
  6. placeholder
  7. @click-left="goback"
  8. :fixed="true"
  9. @click-right="bjclick"
  10. >
  11. <template #right>
  12. <span v-if="!isbj" class="bjbtn">办结</span>
  13. </template>
  14. </van-nav-bar>
  15. <div v-if="!isempt">
  16. <div class="content">
  17. <div>
  18. <van-cell-group>
  19. <van-field
  20. v-model="whdata.value.name"
  21. label="仓库名称"
  22. input-align="right"
  23. :readonly="true"
  24. placeholder="请输入仓库命名"
  25. />
  26. <!-- <van-field
  27. v-model="whdata.value.manageUnit"
  28. label="管理单位"
  29. input-align="right"
  30. :readonly="true"
  31. placeholder="请输入管理单位"
  32. />
  33. <van-field
  34. v-model="whdata.value.contactName"
  35. :readonly="true"
  36. label="联系人"
  37. input-align="right"
  38. placeholder="请输入联系人"
  39. />
  40. <van-field
  41. v-model="whdata.value.contactPhone"
  42. label="联系方式"
  43. :readonly="true"
  44. input-align="right"
  45. placeholder="请输入联系方式"
  46. /> -->
  47. </van-cell-group>
  48. </div>
  49. <div style="text-align: right;background: #fff;position: relative;height:55px" class="addnewwz" v-if="isedit">
  50. <van-row>
  51. <van-col span="16">
  52. <van-search v-model="searchv" placeholder="请输入物资关键词" />
  53. </van-col>
  54. <van-col span="8">
  55. <van-button
  56. @click="addwz"
  57. icon="plus"
  58. style="color: #0b33a8; background: rgba(0, 0, 0, 0); border: none;margin-top:6px"
  59. >新增物资</van-button
  60. >
  61. </van-col>
  62. </van-row>
  63. </div>
  64. <div style="margin:10px 0px;background:#fff;font-size:14px;padding:10px 10px;position:relative" @click="godetail(item)" v-for="(item, index) in (wzdata.aar.filter(ii => searchv===''||ii.name.indexOf(searchv)!=-1))" v-bind:key="'good'+index">
  65. <div>
  66. <div style="font-size:14px;"><span style="color:#646566">物资名称:</span>{{item.name}} (<span style="font-size:12px;">规格:{{item.size}}</span><span style="font-size:12px;margin-left:10px">型号:{{item.model}}</span>)</div>
  67. <div style="margin-top:10px">
  68. <div style="font-size:14px;display:inline-block"><span style="color:#646566">可用数量:</span>{{item.availableNum}}{{item.unit}}</div>
  69. <div style="font-size:14px;display:inline-block;margin-left:20px" ><span style="color:#646566">仓储数量:</span>{{item.num}}{{item.unit}}</div>
  70. </div>
  71. <div style="position: absolute;right: 10px;top: 50%;margin-top: -6px;">
  72. <van-icon name="arrow" />
  73. </div>
  74. </div>
  75. </div>
  76. <!-- <div v-for="(item, index) in wzdata.aar" v-bind:key="index" >
  77. <div class="cell-header">
  78. <span>应急物资({{ index + 1 }})</span>
  79. <div style="float: right" @click="deletewz(index)" v-if="isedit">删除</div>
  80. </div>
  81. <van-cell-group style="">
  82. <van-field
  83. v-model="item.name"
  84. label="名称"
  85. :readonly="!isedit"
  86. input-align="right"
  87. placeholder="请选择名称"
  88. >
  89. <template #button>
  90. <van-button size="small" @click="selectwz(index)" type="primary" style="color:white">选择</van-button>
  91. </template>
  92. </van-field>
  93. <van-field
  94. v-model="item.model"
  95. label="型号"
  96. :readonly="!isedit"
  97. input-align="right"
  98. placeholder="请输入型号"
  99. />
  100. <van-field
  101. v-model="item.size"
  102. label="规格"
  103. :readonly="!isedit"
  104. input-align="right"
  105. placeholder="请输入规格"
  106. />
  107. <van-field
  108. v-model="item.num"
  109. label="仓储数量"
  110. :readonly="!isedit"
  111. type="number"
  112. input-align="right"
  113. placeholder="请输入数量"
  114. />
  115. <van-field
  116. v-model="item.availableNum"
  117. label="可用数量"
  118. :readonly="!isedit"
  119. type="number"
  120. input-align="right"
  121. placeholder="请输入数量"
  122. />
  123. <van-field
  124. v-model="item.unit"
  125. label="单位"
  126. :readonly="!isedit"
  127. input-align="right"
  128. placeholder="请输入单位"
  129. />
  130. <van-field name="uploader" label="图片" input-align="right">
  131. <template #input>
  132. <van-uploader :max-count="1" v-model='item.pic' :before-read="beforeRead" :disabled="!isedit" />
  133. </template>
  134. </van-field>
  135. </van-cell-group>
  136. </div> -->
  137. </div>
  138. <div style="" v-if="false">
  139. <van-sticky :offset-bottom="20" position="bottom" >
  140. <div style="background:#fff;width:100%;width: 100%;padding: 20px 10px;text-align: center;">
  141. </div>
  142. </van-sticky>
  143. </div>
  144. <!-- <van-popup v-model:show="showPicker" position="bottom">
  145. <van-picker
  146. :columns="goodlist"
  147. :default-index ="indexp"
  148. @confirm="onConfirm"
  149. @cancel="showPicker = false"
  150. />
  151. </van-popup> -->
  152. </div>
  153. <div v-if="isempt">
  154. <van-cell-group>
  155. <van-field
  156. v-model="whdata.value.name"
  157. label="仓库名称"
  158. input-align="right"
  159. :readonly="true"
  160. placeholder="请输入仓库命名"
  161. /></van-cell-group>
  162. <van-empty v-if="isempt" description="无物资" />
  163. <van-button
  164. type="primary"
  165. block
  166. style="border-radius: 30px;width: 80%;margin: auto;"
  167. @click="addwz"
  168. >新增物资</van-button
  169. >
  170. </div>
  171. </div>
  172. </template>
  173. <script setup>
  174. import { ref, reactive, onUpdated,onMounted,watch } from 'vue';
  175. import { RouterView, useRoute, useRouter } from 'vue-router';
  176. import {
  177. api_getresource,
  178. api_getresourcedetail,
  179. api_putresource,
  180. api_bj,api_isbj,
  181. api_addresourcegood,
  182. api_putresourcegood,
  183. api_delresourcegood
  184. } from '@/service/warehouse';
  185. import { Toast, Notify,Dialog } from 'vant';
  186. import { BaseMediaUrl } from '@/utils';
  187. import { upload } from '@/api/common';
  188. import { cloneDeep } from 'lodash';
  189. import { useCommonStore } from '@/store';
  190. import router from '@/router';
  191. const whdata = reactive({
  192. value: { name: '', manageUnit: '', contactName: '', contactPhone: '' },
  193. });
  194. const searchv = ref("")
  195. const isedit = ref(true);
  196. const isempt = ref(true);
  197. // let deletwzarr = [];
  198. const wzdata = reactive({ aar: [] });
  199. const godetail =(item)=>{
  200. localStorage.setItem("wzdata",JSON.stringify(item));
  201. router.push("/warehouse/detailgoods");
  202. // window.location.reload();
  203. }
  204. const addwz = ()=>{
  205. localStorage.setItem("wzdata",JSON.stringify({
  206. name: '',
  207. id:"",
  208. model: '',
  209. size: '',
  210. num: 0,
  211. unit: '',
  212. availableNum: 0,
  213. pic:"",
  214. resourceId:whdata.value.id
  215. }));
  216. router.push("/warehouse/detailgoods");
  217. // window.location.reload();
  218. }
  219. const bjclick = () => {
  220. if(isbj.value){
  221. return;
  222. }
  223. Dialog.confirm({
  224. title: '提示',
  225. confirmButtonText: '办结',
  226. message: '确认是否办结?',
  227. })
  228. .then(() => {
  229. // on confirm
  230. Toast.loading({
  231. message: '加载中...',
  232. duration: 0,
  233. forbidClick: true,
  234. });
  235. api_bj({ taskId: route.query.taskid }).then((res) => {
  236. Toast.clear();
  237. try {
  238. Toast.message("成功")
  239. uni.navigateBack();
  240. } catch (E) {
  241. }
  242. });
  243. Toast.clear();
  244. })
  245. .catch(() => {
  246. // on cancel
  247. Toast.clear();
  248. });
  249. };
  250. const goback = () => {
  251. try {
  252. uni.navigateBack();
  253. } catch (E) {}
  254. //window.history.back();
  255. };
  256. const isbj = ref(true);
  257. const route = useRoute();
  258. onMounted(()=>{
  259. try{
  260. var p = JSON.parse(localStorage.getItem('cck'));
  261. if(p){
  262. whdata.value = p;
  263. }
  264. }catch(r){
  265. }
  266. isedit.value = localStorage.getItem("cedit")=="true"?true:false;
  267. getdata();
  268. try{
  269. var taskid = route.query.taskid;
  270. if(taskid){
  271. api_isbj(taskid).then((res)=>{
  272. isbj.value = !res.data;
  273. })
  274. }
  275. }catch(e){}
  276. })
  277. const getdata = () => {
  278. Toast.loading({
  279. message: '加载中...',
  280. duration: 0,
  281. forbidClick: true,
  282. });
  283. api_getresource({
  284. resourceType: 1,
  285. })
  286. .then((res) => {
  287. Toast.clear();
  288. if (res.rows.length > 0) {
  289. isempt.value = false;
  290. // whdata.value = res.rows.find(i=>i.id=="1481549762984415233")
  291. if(whdata.value.id==undefined||whdata.value.id==null||whdata.value.id==""){
  292. whdata.value = res.rows[0];
  293. }
  294. if(whdata.value.name==undefined||whdata.value.name==null||whdata.value.name==""){
  295. whdata.value.name ="";
  296. }
  297. api_getresourcedetail(whdata.value.id).then((res1) => {
  298. if (res1.data==null||
  299. res1.data.resourceDetailList == null ||
  300. res1.data.resourceDetailList.length == 0
  301. ) {
  302. // debugger
  303. isempt.value = true;
  304. // Toast('仓库还没有物资,请添加物资!');
  305. } else {
  306. isempt.value = false;
  307. // res1.data.resourceDetailList.map(item=>{
  308. // if(item.pic!="" && item.pic!=null){
  309. // item.pic = [{url:BaseMediaUrl+item.pic, deletable: isedit.value,}]
  310. // }else{
  311. // item.pic = []
  312. // }
  313. // })
  314. wzdata.aar = cloneDeep( res1.data.resourceDetailList);
  315. // console.log(whdata)
  316. }
  317. });
  318. } else {
  319. Toast('未获取到仓库信息,请联系管理员!');
  320. }
  321. })
  322. .catch((eer) => {
  323. Toast.clear();
  324. });
  325. };
  326. </script>
  327. <style lang="scss">
  328. .content label,
  329. .content span {
  330. // font-size: 12px;
  331. // font-family: PingFangSC, PingFangSC-Regular;
  332. // color: #fff;
  333. }
  334. .addnewwz .van-search__content{
  335. height: 100%;
  336. }
  337. .addnewwz .van-button__content span{
  338. color: rgb(11, 51, 168);
  339. font-size: 12px;
  340. }
  341. .van-field__button .van-button__content span{
  342. color: #fff;
  343. font-size: 12px;
  344. }
  345. .bjbtn {
  346. font-size: 14px;
  347. font-weight: 500;
  348. color: #ffffff;
  349. font-size: 13px;
  350. font-weight: 500;
  351. background: #bb0000;
  352. padding: 3px 8px;
  353. border-radius: 2px;
  354. }
  355. .content {
  356. .cell-header {
  357. font-family: PingFangSC, PingFangSC-Regular;
  358. font-weight: 400;
  359. line-height: 42px;
  360. padding: 0px 15px;
  361. span {
  362. font-size: 12px;
  363. }
  364. div {
  365. font-size: 14px;
  366. color: #0b33a8;
  367. }
  368. }
  369. }
  370. :root{
  371. --van-disabled-opacity:1
  372. }
  373. </style>