index.vue 30 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064
  1. <template>
  2. <div class="app-container">
  3. <el-form
  4. :model="queryParams"
  5. ref="queryForm"
  6. :inline="true"
  7. v-show="showSearch"
  8. label-width="68px"
  9. >
  10. <el-form-item label="编号" prop="fNo">
  11. <el-input
  12. v-model="queryParams.fNo"
  13. placeholder="请输入编号"
  14. clearable
  15. size="small"
  16. @keyup.enter.native="handleQuery"
  17. />
  18. </el-form-item>
  19. <el-form-item label="名称" prop="fName">
  20. <el-input
  21. v-model="queryParams.fName"
  22. placeholder="请输入名称"
  23. clearable
  24. size="small"
  25. @keyup.enter.native="handleQuery"
  26. />
  27. </el-form-item>
  28. <el-form-item label="英文名称" prop="fEnam">
  29. <el-input
  30. v-model="queryParams.fEnam"
  31. placeholder="请输入英文名称"
  32. clearable
  33. size="small"
  34. @keyup.enter.native="handleQuery"
  35. />
  36. </el-form-item>
  37. <el-form-item label="规格" prop="fSpecs">
  38. <el-input
  39. v-model="queryParams.fSpecs"
  40. placeholder="请输入规格"
  41. clearable
  42. size="small"
  43. @keyup.enter.native="handleQuery"
  44. />
  45. </el-form-item>
  46. <el-form-item label="包装规格" prop="fPackagespecs">
  47. <el-input
  48. v-model="queryParams.fPackagespecs"
  49. placeholder="请输入包装规格"
  50. clearable
  51. size="small"
  52. @keyup.enter.native="handleQuery"
  53. />
  54. </el-form-item>
  55. <el-form-item label="颜色" prop="fColor">
  56. <el-input
  57. v-model="queryParams.fColor"
  58. placeholder="请输入颜色"
  59. clearable
  60. size="small"
  61. @keyup.enter.native="handleQuery"
  62. />
  63. </el-form-item>
  64. <el-form-item label="海关编码" prop="fHscode">
  65. <el-input
  66. v-model="queryParams.fHscode"
  67. placeholder="请输入海关编码"
  68. clearable
  69. size="small"
  70. @keyup.enter.native="handleQuery"
  71. />
  72. </el-form-item>
  73. <el-form-item label="包装类型" prop="fPackageid">
  74. <el-input
  75. v-model="queryParams.fPackageid"
  76. placeholder="请输入包装类型"
  77. clearable
  78. size="small"
  79. @keyup.enter.native="handleQuery"
  80. />
  81. </el-form-item>
  82. <el-form-item label="状态" prop="fStatus">
  83. <!--<el-select v-model="queryParams.fStatus" placeholder="请选择状态" clearable size="small">
  84. <el-option label="请选择字典生成" value="" />
  85. </el-select>-->
  86. <el-select
  87. v-model="queryParams.fStatus"
  88. placeholder="商品状态"
  89. clearable
  90. size="small"
  91. style="width: 240px"
  92. >
  93. <el-option
  94. v-for="dict in statusOptions"
  95. :key="dict.dictValue"
  96. :label="dict.dictLabel"
  97. :value="dict.dictValue"
  98. />
  99. </el-select>
  100. </el-form-item>
  101. <el-form-item>
  102. <el-button
  103. type="cyan"
  104. icon="el-icon-search"
  105. size="mini"
  106. @click="handleQuery"
  107. >搜索</el-button
  108. >
  109. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
  110. >重置</el-button
  111. >
  112. </el-form-item>
  113. </el-form>
  114. <el-row :gutter="10" class="mb8">
  115. <el-col :span="1.5">
  116. <el-button
  117. type="primary"
  118. icon="el-icon-plus"
  119. size="mini"
  120. @click="handleAdd"
  121. v-hasPermi="['basicdata:goods:add']"
  122. >新增</el-button
  123. >
  124. </el-col>
  125. <el-col :span="1.5">
  126. <el-button
  127. type="success"
  128. icon="el-icon-edit"
  129. size="mini"
  130. :disabled="single"
  131. @click="handleUpdate"
  132. v-hasPermi="['basicdata:goods:edit']"
  133. >修改</el-button
  134. >
  135. </el-col>
  136. <el-col :span="1.5">
  137. <el-button
  138. type="danger"
  139. icon="el-icon-delete"
  140. size="mini"
  141. :disabled="multiple"
  142. @click="handleDelete"
  143. v-hasPermi="['basicdata:goods:remove']"
  144. >删除</el-button
  145. >
  146. </el-col>
  147. <el-col :span="1.5">
  148. <el-button
  149. type="warning"
  150. icon="el-icon-download"
  151. size="mini"
  152. @click="handleExport"
  153. v-hasPermi="['basicdata:goods:export']"
  154. >导出</el-button
  155. >
  156. </el-col>
  157. <div class="tabSetting">
  158. <right-toolbar
  159. :showSearch.sync="showSearch"
  160. @queryTable="getList"
  161. ></right-toolbar>
  162. <div style="margin: 0 12px">
  163. <el-tooltip
  164. class="item"
  165. effect="dark"
  166. content="列设置"
  167. placement="top"
  168. >
  169. <el-button
  170. icon="el-icon-setting"
  171. size="mini"
  172. circle
  173. @click="showSetting = !showSetting"
  174. ></el-button>
  175. </el-tooltip>
  176. </div>
  177. </div>
  178. </el-row>
  179. <el-dialog title="自定义列显示" :visible.sync="showSetting" width="700px">
  180. <div>配置排序列数据(拖动调整顺序)</div>
  181. <div style="margin-left: 17px">
  182. <el-checkbox
  183. v-model="allCheck"
  184. label="全选"
  185. @change="allChecked"
  186. ></el-checkbox>
  187. </div>
  188. <div style="padding: 4px; display: flex; justify-content: center">
  189. <draggable
  190. v-model="setRowList"
  191. group="site"
  192. animation="300"
  193. @start="onStart"
  194. @end="onEnd"
  195. handle=".indraggable"
  196. >
  197. <transition-group>
  198. <div
  199. v-for="item in setRowList"
  200. :key="item.surface"
  201. class="listStyle"
  202. >
  203. <div style="width: 500px" class="indraggable">
  204. <div class="progress" :style="{ width: item.width + 'px' }">
  205. <el-checkbox
  206. :label="item.name"
  207. v-model="item.checked"
  208. :true-label="0"
  209. :false-label="1"
  210. >{{ item.name }}
  211. </el-checkbox>
  212. </div>
  213. </div>
  214. <el-input-number
  215. v-model.number="item.width"
  216. controls-position="right"
  217. :min="1"
  218. :max="500"
  219. size="mini"
  220. ></el-input-number>
  221. </div>
  222. </transition-group>
  223. </draggable>
  224. </div>
  225. <span slot="footer" class="dialog-footer">
  226. <el-button @click="showSetting = false">取 消</el-button>
  227. <el-button @click="delRow" type="danger">重 置</el-button>
  228. <el-button type="primary" @click="save()">确 定</el-button>
  229. </span>
  230. </el-dialog>
  231. <el-table
  232. v-loading="loading"
  233. :data="goodsList"
  234. @selection-change="handleSelectionChange"
  235. >
  236. <el-table-column type="selection" width="55" align="center" />
  237. <el-table-column type="index" label="序号" align="center" />
  238. <!--<el-table-column label="存储id" align="center" prop="fTypeid" />--><!-- 后期添加 -->
  239. <el-table-column
  240. v-for="(item, index) in getRowList"
  241. :key="index"
  242. :label="item.name"
  243. :width="item.width"
  244. :prop="item.label"
  245. align="center"
  246. :fixed="item.fixed"
  247. :show-overflow-tooltip="true"
  248. sortable
  249. >
  250. <template slot-scope="scope">
  251. <span v-if="item.label == 'ifCntrno'">
  252. <span v-if="scope.row.ifCntrno=='1'">是</span>
  253. <span v-else>否</span>
  254. </span>
  255. <span v-else>{{ scope.row[item.label] }}</span>
  256. </template>
  257. </el-table-column>
  258. <el-table-column label="状态" align="center" prop="fStatus">
  259. <template slot-scope="scope">
  260. <el-switch
  261. v-model="scope.row.fStatus"
  262. active-value="0"
  263. inactive-value="1"
  264. v-hasPermi="['basicdata:goods:edit']"
  265. @change="handleStatusChange(scope.row)"
  266. ></el-switch>
  267. </template>
  268. </el-table-column>
  269. <el-table-column
  270. label="备注"
  271. align="center"
  272. prop="remark"
  273. :show-overflow-tooltip="true"
  274. />
  275. <el-table-column
  276. label="操作"
  277. align="center"
  278. class-name="small-padding fixed-width"
  279. width="150"
  280. fixed="right"
  281. >
  282. <template slot-scope="scope">
  283. <el-button
  284. size="mini"
  285. type="text"
  286. icon="el-icon-edit"
  287. @click="handleUpdate(scope.row)"
  288. v-hasPermi="['basicdata:goods:edit']"
  289. >修改</el-button
  290. >
  291. <el-button
  292. size="mini"
  293. type="text"
  294. icon="el-icon-delete"
  295. @click="handleDelete(scope.row)"
  296. v-hasPermi="['basicdata:goods:remove']"
  297. >删除</el-button
  298. >
  299. </template>
  300. </el-table-column>
  301. </el-table>
  302. <pagination
  303. v-show="total > 0"
  304. :total="total"
  305. :page.sync="queryParams.pageNum"
  306. :limit.sync="queryParams.pageSize"
  307. @pagination="getList"
  308. />
  309. <!-- 添加或修改商品详情对话框 -->
  310. <el-dialog
  311. v-dialogDrag
  312. :fullscreen="dialogFull"
  313. width="80%"
  314. :title="title"
  315. :visible.sync="open"
  316. :close-on-click-modal="false"
  317. append-to-body
  318. >
  319. <template slot="title">
  320. <div class="avue-crud__dialog__header">
  321. <span class="el-dialog__title">
  322. <span
  323. style="
  324. display: inline-block;
  325. width: 3px;
  326. height: 20px;
  327. margin-right: 5px;
  328. float: left;
  329. margin-top: 2px;
  330. "
  331. ></span>
  332. 添加商品详情
  333. </span>
  334. <div class="avue-crud__dialog__menu enlarge" @click="full">
  335. <i
  336. style="
  337. cursor: pointer;
  338. display: block;
  339. width: 12px;
  340. height: 12px;
  341. border: 1px solid #909399;
  342. border-top: 3px solid #909399;
  343. margin-top: -3px;
  344. "
  345. ></i>
  346. </div>
  347. </div>
  348. </template>
  349. <el-form ref="form" :model="form" :rules="rules" label-width="80px">
  350. <!--<el-form-item label="存储id" prop="fTypeid">
  351. <el-input v-model="form.fTypeid" placeholder="请输入存储id" />
  352. </el-form-item>-->
  353. <el-row>
  354. <el-col :span="12">
  355. <el-form-item label="编号" prop="fNo">
  356. <el-input v-model="form.fNo" placeholder="请输入编号" />
  357. </el-form-item>
  358. </el-col>
  359. <el-col :span="12">
  360. <el-form-item label="名称" prop="fName">
  361. <el-input v-model="form.fName" placeholder="请输入名称" />
  362. </el-form-item>
  363. </el-col>
  364. </el-row>
  365. <el-row>
  366. <el-col :span="12">
  367. <el-form-item label="英文名称" prop="fEnam">
  368. <el-input v-model="form.fEnam" placeholder="请输入英文名称" />
  369. </el-form-item>
  370. </el-col>
  371. <el-col :span="12">
  372. <el-form-item label="规格" prop="fSpecs">
  373. <el-input v-model="form.fSpecs" placeholder="请输入规格" />
  374. </el-form-item>
  375. </el-col>
  376. </el-row>
  377. <el-row>
  378. <el-col :span="12">
  379. <el-form-item label="包装规格" prop="fPackagespecs">
  380. <el-input
  381. v-model="form.fPackagespecs"
  382. placeholder="请输入包装规格"
  383. />
  384. </el-form-item>
  385. </el-col>
  386. <el-col :span="12">
  387. <el-form-item label="颜色" prop="fColor">
  388. <el-input v-model="form.fColor" placeholder="请输入颜色" />
  389. </el-form-item>
  390. </el-col>
  391. </el-row>
  392. <el-row>
  393. <el-col :span="12">
  394. <el-form-item label="海关编码" prop="fHscode">
  395. <el-input v-model="form.fHscode" placeholder="请输入海关编码" />
  396. </el-form-item>
  397. </el-col>
  398. <el-col :span="12">
  399. <el-form-item label="包装类型" prop="fPackageid">
  400. <el-input
  401. v-model="form.fPackageid"
  402. placeholder="请输入包装类型"
  403. />
  404. </el-form-item>
  405. </el-col>
  406. </el-row>
  407. <el-row>
  408. <el-col :span="12">
  409. <el-form-item label="账册号" prop="fEmsNo">
  410. <el-input v-model="form.fEmsNo" placeholder="请输入账册号"/>
  411. </el-form-item>
  412. </el-col>
  413. <el-col :span="12">
  414. <el-form-item label="账册序号" prop="fEmsSeqNo">
  415. <el-input v-model="form.fEmsSeqNo" placeholder="请输入账册序号"/>
  416. </el-form-item>
  417. </el-col>
  418. </el-row>
  419. <el-row>
  420. <el-col :span="12">
  421. <el-form-item label="申报单位" prop="fWmsDclUnit">
  422. <el-input v-model="form.fWmsDclUnit" placeholder="请输入申报计量单位"/>
  423. </el-form-item>
  424. </el-col>
  425. <el-col :span="12">
  426. <el-form-item label="法定单位" prop="fWmsLawUnit">
  427. <el-input v-model="form.fWmsLawUnit" placeholder="请输入法定计量单位"/>
  428. </el-form-item>
  429. </el-col>
  430. </el-row>
  431. <el-row>
  432. <el-col :span="12">
  433. <el-form-item label="商品编码" prop="fGoodsTs">
  434. <el-input v-model="form.fGoodsTs" placeholder="请输入商品编码"/>
  435. </el-form-item>
  436. </el-col>
  437. </el-row>
  438. <el-row>
  439. <el-col :span="12">
  440. <el-form-item label="状态">
  441. <!--<el-radio-group v-model="form.fStatus">
  442. <el-radio label="1">请选择字典生成</el-radio>
  443. </el-radio-group>-->
  444. <el-radio-group v-model="form.fStatus">
  445. <el-radio
  446. v-for="dict in statusOptions"
  447. :key="dict.dictValue"
  448. :label="dict.dictValue"
  449. >{{ dict.dictLabel }}</el-radio
  450. >
  451. </el-radio-group>
  452. </el-form-item>
  453. </el-col>
  454. <el-col :span="12">
  455. <el-form-item label="按照箱号统计">
  456. <el-radio-group v-model="form.ifCntrno">
  457. <el-radio label="1">是</el-radio>
  458. <el-radio label="0">否</el-radio>
  459. </el-radio-group>
  460. </el-form-item>
  461. </el-col>
  462. </el-row>
  463. <el-form-item label="备注" prop="remark">
  464. <el-input
  465. v-model="form.remark"
  466. type="textarea"
  467. placeholder="请输入内容"
  468. />
  469. </el-form-item>
  470. <el-row>
  471. <el-col :span="12">
  472. <el-form-item label="商品类别" prop="fTypeid">
  473. <el-select v-model="form.fTypeid" placeholder="请选择商品类别">
  474. <el-option
  475. v-for="dict in fTypeidOptions"
  476. :key="dict.dictValue"
  477. :label="dict.dictLabel"
  478. :value="parseInt(dict.dictValue)"
  479. ></el-option>
  480. </el-select>
  481. </el-form-item>
  482. </el-col>
  483. </el-row>
  484. </el-form>
  485. <div slot="footer" class="dialog-footer">
  486. <el-button type="primary" @click="submitForm">确 定</el-button>
  487. <el-button @click="cancel">取 消</el-button>
  488. </div>
  489. </el-dialog>
  490. </div>
  491. </template>
  492. <script>
  493. import {
  494. listGoods,
  495. getGoods,
  496. delGoods,
  497. addGoods,
  498. updateGoods,
  499. changeGoodsStatus,
  500. exportGoods,
  501. } from "@/api/basicdata/goods";
  502. import Vue from "vue";
  503. import { addSet, select, resetModule } from "@/api/system/set";
  504. import Cookies from "js-cookie";
  505. import draggable from "vuedraggable";
  506. Vue.directive("dialogDrag", {
  507. bind(el, binding, vnode, oldVnode) {
  508. const dialogHeaderEl = el.querySelector(".el-dialog__header");
  509. const dragDom = el.querySelector(".el-dialog");
  510. const enlarge = el.querySelector(".enlarge");
  511. dialogHeaderEl.style.cursor = "move";
  512. // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);
  513. const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null);
  514. if (enlarge) {
  515. enlarge.onclick = (e) => {
  516. dragDom.style.top = "0px";
  517. dragDom.style.left = "0px";
  518. };
  519. }
  520. dialogHeaderEl.onmousedown = (e) => {
  521. // 鼠标按下,计算当前元素距离可视区的距离
  522. const disX = e.clientX - dialogHeaderEl.offsetLeft;
  523. const disY = e.clientY - dialogHeaderEl.offsetTop;
  524. // 获取到的值带px 正则匹配替换
  525. let styL, styT;
  526. // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px
  527. if (sty.left.includes("%")) {
  528. styL =
  529. +document.body.clientWidth * (+sty.left.replace(/\%/g, "") / 100);
  530. styT =
  531. +document.body.clientHeight * (+sty.top.replace(/\%/g, "") / 100);
  532. } else {
  533. styL = +sty.left.replace(/\px/g, "");
  534. styT = +sty.top.replace(/\px/g, "");
  535. }
  536. document.onmousemove = function (e) {
  537. // 通过事件委托,计算移动的距离
  538. const l = e.clientX - disX;
  539. const t = e.clientY - disY;
  540. // 移动当前元素
  541. if (t + styT >= 0) {
  542. dragDom.style.top = `${t + styT}px`;
  543. }
  544. dragDom.style.left = `${l + styL}px`;
  545. // 将此时的位置传出去
  546. // binding.value({x:e.pageX,y:e.pageY})
  547. };
  548. document.onmouseup = function (e) {
  549. document.onmousemove = null;
  550. document.onmouseup = null;
  551. };
  552. };
  553. },
  554. });
  555. export default {
  556. name: "Goods",
  557. components: { draggable },
  558. data() {
  559. return {
  560. //全屏放大
  561. dialogFull: false,
  562. // 遮罩层
  563. loading: true,
  564. // 选中数组
  565. ids: [],
  566. // 非单个禁用
  567. single: true,
  568. // 非多个禁用
  569. multiple: true,
  570. // 显示搜索条件
  571. showSearch: true,
  572. // 总条数
  573. total: 0,
  574. // 商品详情表格数据
  575. goodsList: [],
  576. // 弹出层标题
  577. title: "",
  578. // 是否显示弹出层
  579. open: false,
  580. // 备注字典
  581. fIdOptions: [],
  582. // 状态数据字典
  583. statusOptions: [],
  584. // 数据字典
  585. fTypeidOptions: [],
  586. // 删除状态字典
  587. delFlagOptions: [],
  588. // 查询参数
  589. queryParams: {
  590. pageNum: 1,
  591. pageSize: 10,
  592. fTypeid: null,
  593. fNo: null,
  594. fName: null,
  595. fEnam: null,
  596. fSpecs: null,
  597. fPackagespecs: null,
  598. fColor: null,
  599. fHscode: null,
  600. fPackageid: null,
  601. fStatus: null,
  602. },
  603. // 表单参数
  604. form: {},
  605. // 表单校验
  606. rules: {
  607. /*fTypeid: [
  608. { required: true, message: "存储id 显示名称 下拉选择类别,一个商品名称对应一个类别,对应t_goodtype的f_id不能为空", trigger: "blur" }
  609. ],*/
  610. fNo: [{ required: true, message: "编号不能为空", trigger: "blur" }],
  611. fName: [{ required: true, message: "名称不能为空", trigger: "blur" }],
  612. fTypeid: [
  613. { required: true, message: "商品类别不能为空", trigger: "blur" },
  614. ],
  615. },
  616. showSetting: false,
  617. drag: false,
  618. setRowList: [],
  619. getRowList: [],
  620. tableDate: [
  621. {
  622. surface: "1",
  623. label: "fNo",
  624. name: "编号",
  625. checked: 0,
  626. width: 100,
  627. },
  628. {
  629. surface: "2",
  630. label: "fName",
  631. name: "名称",
  632. checked: 0,
  633. width: 100,
  634. },
  635. {
  636. surface: "3",
  637. label: "fEnam",
  638. name: "英文名称",
  639. checked: 0,
  640. width: 100,
  641. },
  642. {
  643. surface: "4",
  644. label: "fTypeid",
  645. name: "商品类别",
  646. checked: 0,
  647. width: 100,
  648. },
  649. {
  650. surface: "5",
  651. label: "fSpecs",
  652. name: "规格",
  653. checked: 0,
  654. width: 100,
  655. },
  656. {
  657. surface: "6",
  658. label: "fPackagespecs",
  659. name: "包装规格",
  660. checked: 0,
  661. width: 100,
  662. },
  663. {
  664. surface: "7",
  665. label: "fColor",
  666. name: "颜色",
  667. checked: 0,
  668. width: 100,
  669. },
  670. {
  671. surface: "8",
  672. label: "fHscode",
  673. name: "海关编码",
  674. checked: 0,
  675. width: 100,
  676. },
  677. {
  678. surface: "9",
  679. label: "fPackageid",
  680. name: "包装类型",
  681. checked: 0,
  682. width: 100,
  683. },
  684. {
  685. surface: "10",
  686. label: "fEmsNo",
  687. name: "账册号",
  688. checked: 0,
  689. width: 100,
  690. },
  691. {
  692. surface: "11",
  693. label: "fEmsSeqNo",
  694. name: "账册序号",
  695. checked: 0,
  696. width: 100,
  697. },
  698. {
  699. surface: "12",
  700. label: "fGoodsTs",
  701. name: "商品编码",
  702. checked: 0,
  703. width: 100,
  704. },
  705. {
  706. surface: "13",
  707. label: "fEmsSeqNo",
  708. name: "申报单位",
  709. checked: 0,
  710. width: 100,
  711. },
  712. {
  713. surface: "14",
  714. label: "fWmsLawUnit",
  715. name: "法定单位",
  716. checked: 0,
  717. width: 100,
  718. },
  719. {
  720. surface: "15",
  721. label: "ifCntrno",
  722. name: "是否按照箱号统计",
  723. checked: 0,
  724. width: 150,
  725. },
  726. ],
  727. allCheck: false,
  728. };
  729. },
  730. created() {
  731. this.setRowList = this.tableDate;
  732. this.getRowList = this.tableDate;
  733. this.getDicts("data_goods_category").then((response) => {
  734. this.fTypeidOptions = response.data;
  735. });
  736. this.getDicts("data_customer_category").then((response) => {
  737. this.fIdOptions = response.data;
  738. });
  739. this.getDicts("data_delete_state").then((response) => {
  740. this.delFlagOptions = response.data;
  741. });
  742. this.getDicts("sys_normal_disable").then((response) => {
  743. this.statusOptions = response.data;
  744. });
  745. this.getRow();
  746. this.getList();
  747. },
  748. methods: {
  749. //列设置全选
  750. allChecked() {
  751. if (this.allCheck == true) {
  752. this.setRowList.map((e) => {
  753. return (e.checked = 0);
  754. });
  755. } else {
  756. this.setRowList.map((e) => {
  757. return (e.checked = 1);
  758. });
  759. }
  760. },
  761. //查询列数据
  762. getRow() {
  763. let that = this;
  764. this.data = {
  765. tableName: "商品信息",
  766. userId: Cookies.get("userName"),
  767. };
  768. select(this.data).then((res) => {
  769. if (res.data.length != 0) {
  770. this.getRowList = res.data.filter((e) => e.checked == 0);
  771. this.setRowList = res.data;
  772. this.setRowList = this.setRowList.reduce((res, item) => {
  773. res.push({
  774. surface: item.surface,
  775. label: item.label,
  776. name: item.name,
  777. checked: item.checked,
  778. width: item.width,
  779. fixed: item.fixed,
  780. });
  781. return res;
  782. }, []);
  783. }
  784. });
  785. },
  786. //重置列表
  787. delRow() {
  788. this.data = {
  789. tableName: "商品信息",
  790. userId: Cookies.get("userName"),
  791. };
  792. resetModule(this.data).then((res) => {
  793. if (res.code == 200) {
  794. this.showSetting = false;
  795. this.setRowList = this.tableDate;
  796. this.getRowList = this.tableDate;
  797. }
  798. });
  799. },
  800. //保存列设置
  801. save() {
  802. this.showSetting = false;
  803. this.data = {
  804. tableName: "商品信息",
  805. userId: Cookies.get("userName"),
  806. sysTableSetList: this.setRowList,
  807. };
  808. addSet(this.data).then((res) => {
  809. if (res.code == 200) {
  810. this.showSetting = false;
  811. this.getRowList = this.setRowList.filter((e) => e.checked == 0);
  812. }
  813. });
  814. },
  815. //开始拖拽事件
  816. onStart() {
  817. this.drag = true;
  818. },
  819. //拖拽结束事件
  820. onEnd() {
  821. this.drag = false;
  822. },
  823. full() {
  824. this.dialogFull = !this.dialogFull;
  825. },
  826. /** 查询商品详情列表 */
  827. getList() {
  828. this.loading = true;
  829. listGoods(this.queryParams).then((response) => {
  830. response.rows.map((e) => {
  831. this.fTypeidOptions.map((s) => {
  832. if (e.fTypeid == s.dictSort) {
  833. e.fTypeid = s.dictLabel;
  834. }
  835. });
  836. });
  837. console.log(response.rows);
  838. this.goodsList = response.rows;
  839. this.total = response.total;
  840. this.loading = false;
  841. });
  842. },
  843. // 名称字典翻译
  844. fIdFormat(row, column) {
  845. return this.selectDictLabel(this.fIdOptions, row.fId);
  846. },
  847. // 货物类别,字典翻译
  848. fTypeidFormat(row, column) {
  849. return this.selectDictLabel(this.fTypeidOptions, row.fTypeid);
  850. },
  851. // 删除状态字典翻译
  852. delFlagFormat(row, column) {
  853. return this.selectDictLabel(this.delFlagOptions, row.delFlag);
  854. },
  855. // 取消按钮
  856. cancel() {
  857. this.open = false;
  858. this.reset();
  859. },
  860. // 表单重置
  861. reset() {
  862. this.form = {
  863. fId: null,
  864. /* fTypeid: null, 下拉框 后期修改 */
  865. fNo: null,
  866. fName: null,
  867. fEnam: null,
  868. fSpecs: null,
  869. fPackagespecs: null,
  870. fColor: null,
  871. fHscode: null,
  872. fPackageid: null,
  873. fStatus: "0",
  874. delFlag: null,
  875. createBy: null,
  876. createTime: null,
  877. updateBy: null,
  878. updateTime: null,
  879. remark: null,
  880. ifCntrno: "0",
  881. };
  882. this.resetForm("form");
  883. },
  884. // 状态修改
  885. handleStatusChange(row) {
  886. let text = row.fStatus === "0" ? "启用" : "停用";
  887. this.$confirm('确认要"' + text + '""' + row.fName + '"吗?', "警告", {
  888. confirmButtonText: "确定",
  889. cancelButtonText: "取消",
  890. type: "warning",
  891. })
  892. .then(function () {
  893. return changeGoodsStatus(row.fId, row.fStatus);
  894. })
  895. .then(() => {
  896. this.msgSuccess(text + "成功");
  897. })
  898. .catch(function () {
  899. row.fStatus = row.fStatus === "0" ? "1" : "0";
  900. });
  901. },
  902. /** 搜索按钮操作 */
  903. handleQuery() {
  904. this.queryParams.pageNum = 1;
  905. this.getList();
  906. },
  907. /** 重置按钮操作 */
  908. resetQuery() {
  909. this.resetForm("queryForm");
  910. this.handleQuery();
  911. },
  912. // 多选框选中数据
  913. handleSelectionChange(selection) {
  914. this.ids = selection.map((item) => item.fId);
  915. this.single = selection.length !== 1;
  916. this.multiple = !selection.length;
  917. },
  918. /** 新增按钮操作 */
  919. handleAdd() {
  920. this.reset();
  921. this.open = true;
  922. this.title = "添加商品详情";
  923. },
  924. /** 修改按钮操作 */
  925. handleUpdate(row) {
  926. this.reset();
  927. const fId = row.fId || this.ids;
  928. getGoods(fId).then((response) => {
  929. this.form = response.data;
  930. this.open = true;
  931. this.title = "修改商品详情";
  932. });
  933. },
  934. /** 提交按钮 */
  935. submitForm() {
  936. this.$refs["form"].validate((valid) => {
  937. if (valid) {
  938. if (this.form.fId != null) {
  939. updateGoods(this.form).then((response) => {
  940. this.msgSuccess("修改成功");
  941. this.open = false;
  942. this.getList();
  943. });
  944. } else {
  945. addGoods(this.form).then((response) => {
  946. this.msgSuccess("新增成功");
  947. this.open = false;
  948. this.getList();
  949. });
  950. }
  951. }
  952. });
  953. },
  954. /** 删除按钮操作 */
  955. handleDelete(row) {
  956. const fIds = row.fId || this.ids;
  957. this.$confirm(
  958. '是否确认删除商品详情编号为"' + fIds + '"的数据项?',
  959. "警告",
  960. {
  961. confirmButtonText: "确定",
  962. cancelButtonText: "取消",
  963. type: "warning",
  964. }
  965. )
  966. .then(function () {
  967. return delGoods(fIds);
  968. })
  969. .then(() => {
  970. this.getList();
  971. this.msgSuccess("删除成功");
  972. });
  973. },
  974. /** 导出按钮操作 */
  975. handleExport() {
  976. const queryParams = this.queryParams;
  977. this.$confirm("是否确认导出所有商品详情数据项?", "警告", {
  978. confirmButtonText: "确定",
  979. cancelButtonText: "取消",
  980. type: "warning",
  981. })
  982. .then(function () {
  983. return exportGoods(queryParams);
  984. })
  985. .then((response) => {
  986. this.download(response.msg);
  987. });
  988. },
  989. },
  990. };
  991. </script>
  992. <style lang="scss">
  993. .avue-crud__dialog__header {
  994. display: -webkit-box;
  995. display: -ms-flexbox;
  996. display: flex;
  997. -webkit-box-align: center;
  998. -ms-flex-align: center;
  999. align-items: center;
  1000. -webkit-box-pack: justify;
  1001. -ms-flex-pack: justify;
  1002. justify-content: space-between;
  1003. }
  1004. .el-dialog__title {
  1005. color: rgba(0, 0, 0, 0.85);
  1006. font-weight: 500;
  1007. word-wrap: break-word;
  1008. }
  1009. .avue-crud__dialog__menu {
  1010. padding-right: 20px;
  1011. float: left;
  1012. }
  1013. .avue-crud__dialog__menu i {
  1014. color: #909399;
  1015. font-size: 15px;
  1016. }
  1017. .el-icon-full-screen {
  1018. cursor: pointer;
  1019. }
  1020. .el-icon-full-screen:before {
  1021. content: "\e719";
  1022. }
  1023. </style>
  1024. <style lang="scss" scoped>
  1025. .tabSetting {
  1026. display: flex;
  1027. justify-content: flex-end;
  1028. }
  1029. .listStyle {
  1030. display: flex;
  1031. border-top: 1px solid #dcdfe6;
  1032. border-left: 1px solid #dcdfe6;
  1033. border-right: 1px solid #dcdfe6;
  1034. }
  1035. .listStyle:last-child {
  1036. border-bottom: 1px solid #dcdfe6;
  1037. }
  1038. .progress {
  1039. display: flex;
  1040. align-items: center;
  1041. padding: 2px;
  1042. background-color: rgba(0, 0, 0, 0.05);
  1043. height: 100%;
  1044. }
  1045. </style>