index.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799
  1. <template>
  2. <div class="goodsCost pagePadding">
  3. <ex-table
  4. v-loading="loading"
  5. v-if="powers && powers.length > 0 && powers.some((item) => item == '001')"
  6. :table="table"
  7. :data="tableData"
  8. :columns="columns"
  9. :page="pageInfo"
  10. :size="size"
  11. @page-curr-change="handlePageChange"
  12. @page-size-change="handleSizeChange"
  13. @screen-reset="
  14. pageInfo.curr = 1;
  15. parmValue.page = 1;
  16. searchList();
  17. "
  18. @screen-submit="
  19. pageInfo.curr = 1;
  20. parmValue.page = 1;
  21. searchList();
  22. "
  23. @selection="selection_change"
  24. >
  25. <template #table-header="{}">
  26. <div style="width: 100%">
  27. <el-row style="padding: 0 0 10px 80px">
  28. <el-col :span="6" style="width: 303px">
  29. <period-date-picker
  30. :type="1"
  31. :width="'135px'"
  32. :size="searchSize"
  33. :start="parmValue.start"
  34. :end="parmValue.end"
  35. @timeReturned="handleTime"
  36. />
  37. </el-col>
  38. <el-col :span="4" style="width: 135px">
  39. <search-brand
  40. :value="brandid"
  41. :disabled="false"
  42. :size="'mini'"
  43. :isDetail="true"
  44. :names="parmValue.supplierName"
  45. :placeholder="'商品品牌'"
  46. @searchChange="brandidsearchChange"
  47. />
  48. </el-col>
  49. <el-col :span="6" style="width: 310px; padding: 0 0 0 10px">
  50. <good-class
  51. :value="parmValue.cat_id"
  52. @handleChange="goods_class_change"
  53. :disabled="false"
  54. :size="searchSize"
  55. :isDetail="false"
  56. :placeholder="'分类'"
  57. />
  58. </el-col>
  59. <el-col
  60. :span="3"
  61. class="fr"
  62. style="width: 66px; padding: 0 0 0 10px"
  63. >
  64. <el-button type="primary" :size="searchSize" @click="searchList">
  65. 刷新
  66. </el-button>
  67. </el-col>
  68. <el-col
  69. :span="3"
  70. class="fr"
  71. style="width: 66px; padding: 0 0 0 10px"
  72. >
  73. <el-button type="warning" :size="searchSize" @click="restSearch">
  74. 重置
  75. </el-button>
  76. </el-col>
  77. </el-row>
  78. <el-row>
  79. <el-col :span="4" style="width: 226px">
  80. <el-select
  81. v-model="parmValue.status"
  82. filterable
  83. clearable
  84. :size="searchSize"
  85. placeholder="状态"
  86. style="width: 100%"
  87. @change="
  88. pageInfo.curr = 1;
  89. parmValue.page = 1;
  90. searchList();
  91. "
  92. >
  93. <el-option
  94. v-for="item in statusList"
  95. :key="'status' + item.code"
  96. :label="item.name"
  97. :value="item.code"
  98. />
  99. </el-select>
  100. </el-col>
  101. <el-col :span="4" style="width: 145px; padding: 0 0 0 10px">
  102. <el-select
  103. v-model="parmValue.isonline"
  104. filterable
  105. clearable
  106. :size="searchSize"
  107. placeholder="是否上线"
  108. style="width: 100%"
  109. @change="
  110. pageInfo.curr = 1;
  111. parmValue.page = 1;
  112. searchList();
  113. "
  114. >
  115. <el-option
  116. v-for="item in isonlineoptions"
  117. :key="'isonline' + item.id"
  118. :label="item.name"
  119. :value="item.id"
  120. />
  121. </el-select>
  122. </el-col>
  123. <el-col :span="4" style="width: 420px; padding: 0 0 0 10px">
  124. <el-input
  125. :size="searchSize"
  126. v-model="sinput"
  127. :maxlength="40"
  128. @blur="
  129. pageInfo.curr = 1;
  130. parmValue.page = 1;
  131. searchList();
  132. "
  133. placeholder="关键字"
  134. ><el-select
  135. v-model="select"
  136. slot="prepend"
  137. style="width: 135px"
  138. @change="
  139. pageInfo.curr = 1;
  140. parmValue.page = 1;
  141. searchList();
  142. "
  143. placeholder="关键字类型"
  144. >
  145. <el-option label="商品编号" value="1" />
  146. <el-option label="商品名称" value="2" />
  147. <el-option label="业务企业编号" value="3" />
  148. <el-option label="供应商编号" value="4" />
  149. <el-option label="创建人部门" value="5" />
  150. </el-select
  151. ></el-input>
  152. </el-col>
  153. <el-col
  154. :span="3"
  155. class="fr"
  156. style="width: 66px; padding: 0 0 0 10px"
  157. v-if="powers.some((item) => item == '003')"
  158. >
  159. <el-button
  160. :size="searchSize"
  161. type="success"
  162. style="float: right"
  163. @click="
  164. routeGoto('goodsCostDetail', { id: 'add', type: 'add' })
  165. "
  166. >
  167. 添加
  168. </el-button>
  169. </el-col>
  170. <el-col
  171. :span="3"
  172. class="fr"
  173. style="width: 110px; padding: 0 0 0 10px"
  174. v-if="powers.some((item) => item == '055')"
  175. >
  176. <el-button
  177. :size="searchSize"
  178. type="warning"
  179. style="float: right"
  180. @click="add_online"
  181. >
  182. <i class="el-icon-circle-plus-outline"></i>
  183. <span>商品上线</span>
  184. </el-button>
  185. </el-col>
  186. </el-row>
  187. </div></template
  188. >
  189. <template #good_thumb_img="{ scope }">
  190. <div
  191. v-if="scope.row.good_thumb_img"
  192. style="width: 20px; height: 20px"
  193. class="hover"
  194. v-viewer
  195. >
  196. <img
  197. :src="scope.row.good_thumb_img"
  198. style="display: inline-block; width: 100%; height: 100%"
  199. alt=""
  200. />
  201. </div>
  202. </template>
  203. <template #status="{ scope }">
  204. <el-tag
  205. :size="tablebtnSize"
  206. :type="
  207. (statusList.find((item) => item.code == scope.row.status) || {})
  208. .type || '--'
  209. "
  210. v-text="
  211. (statusList.find((item) => item.code == scope.row.status) || {})
  212. .name || '--'
  213. "
  214. ></el-tag>
  215. </template>
  216. <template #isonline="{ scope }">
  217. <el-tag
  218. :size="tablebtnSize"
  219. :type="scope.row.is_online == '0' ? 'warning' : ''"
  220. v-text="
  221. (
  222. isonlineoptions.find((item) => item.id == scope.row.is_online) ||
  223. {}
  224. ).name || '--'
  225. "
  226. ></el-tag>
  227. </template>
  228. <template #operation="{ scope }">
  229. <el-tooltip
  230. v-if="
  231. powers.some((item) => item == '007') && scope.row.status !== '8'
  232. "
  233. effect="dark"
  234. content="详情"
  235. placement="top"
  236. >
  237. <i
  238. class="el-icon-view tb-icon"
  239. @click="getRouter('goodsCostDetail', scope.row.spuCode )"
  240. ></i>
  241. </el-tooltip>
  242. <el-tooltip
  243. v-if="
  244. (powers.some((item) => item == '005') &&
  245. scope.row.status === '7') ||
  246. (powers.some((item) => item == '005') &&
  247. scope.row.status === '6') ||
  248. (powers.some((item) => item == '005') && scope.row.status === '8')
  249. "
  250. effect="dark"
  251. content="修改"
  252. placement="top"
  253. >
  254. <i
  255. class="el-icon-edit tb-icon"
  256. @click="
  257. routeGoto('goodsCostDetail', {
  258. id: scope.row.spuCode,
  259. type: 'edit',
  260. })
  261. "
  262. ></i>
  263. </el-tooltip>
  264. <el-tooltip
  265. v-if="
  266. (powers.some((item) => item == '054') &&
  267. scope.row.status === '1') ||
  268. (powers.some((item) => item == '054') && scope.row.status === '4')
  269. "
  270. effect="dark"
  271. content="修改基础信息"
  272. placement="top"
  273. >
  274. <i
  275. class="el-icon-c-scale-to-original tb-icon"
  276. @click="
  277. wantto(
  278. scope.row.is_online,
  279. scope.row.spuCode,
  280. scope.row.status,
  281. '2'
  282. )
  283. "
  284. ></i>
  285. </el-tooltip>
  286. <el-tooltip
  287. v-if="
  288. (powers.some((item) => item == '053') &&
  289. scope.row.status === '1') ||
  290. (powers.some((item) => item == '053') && scope.row.status === '5')
  291. "
  292. effect="dark"
  293. content="修改成本信息"
  294. placement="top"
  295. >
  296. <i
  297. class="el-icon-coin tb-icon"
  298. @click="
  299. wantto(
  300. scope.row.is_online,
  301. scope.row.spuCode,
  302. scope.row.status,
  303. '3'
  304. )
  305. "
  306. ></i>
  307. </el-tooltip>
  308. <el-tooltip
  309. v-if="
  310. powers.some((item) => item == '010') &&
  311. !(scope.row.status === '7' || scope.row.status === '8')
  312. "
  313. effect="dark"
  314. content="复制商品"
  315. placement="top"
  316. >
  317. <i
  318. class="el-icon-document-copy tb-icon"
  319. @click="good_copy(scope.row.spuCode)"
  320. ></i>
  321. </el-tooltip>
  322. <el-tooltip
  323. v-if="powers.some((item) => item == '006')"
  324. effect="dark"
  325. content="删除"
  326. placement="top"
  327. >
  328. <i
  329. class="el-icon-delete tb-icon"
  330. @click="deleteItem(scope.row.spuCode)"
  331. ></i>
  332. </el-tooltip>
  333. </template>
  334. </ex-table>
  335. <no-auth v-else></no-auth>
  336. <add-edit
  337. :id="''"
  338. :sitem="changeList"
  339. :show-model="showModel"
  340. :is-detail="false"
  341. @refresh="showModel = false"
  342. @cancel="showModel = false"
  343. />
  344. </div>
  345. </template>
  346. <script>
  347. import asyncRequest from "@/apis/service/goodStore/goodsCost";
  348. import mixinPage from "@/mixins/elPaginationHandle";
  349. import { mapGetters } from "vuex";
  350. import resToken from "@/mixins/resToken";
  351. import { listCol, options1 } from "./columns";
  352. import addEdit from "./components/addEdit";
  353. export default {
  354. name: "goodsCost",
  355. mixins: [mixinPage, resToken],
  356. components: {
  357. addEdit,
  358. },
  359. computed: {
  360. //组件SIZE设置
  361. ...mapGetters(["tablebtnSize", "searchSize", "size"]),
  362. powers() {
  363. let tran =
  364. this.$store.getters.btnList.find(
  365. (item) => item.menu_route == "goodsCost"
  366. ) || {};
  367. if (tran && tran.action && tran.action.length > 0) {
  368. return tran.action;
  369. } else {
  370. return [];
  371. }
  372. },
  373. },
  374. data() {
  375. return {
  376. statusList: [
  377. {
  378. code: "0",
  379. name: "新建待审核",
  380. type: "",
  381. },
  382. {
  383. code: "1",
  384. name: "审核通过",
  385. type: "success",
  386. },
  387. {
  388. code: "2",
  389. name: "基础修改待审核",
  390. type: "",
  391. },
  392. {
  393. code: "3",
  394. name: "成本修改待审核",
  395. type: "",
  396. },
  397. {
  398. code: "4",
  399. name: "基础修改驳回",
  400. type: "danger",
  401. },
  402. {
  403. code: "5",
  404. name: "成本修改驳回",
  405. type: "danger",
  406. },
  407. {
  408. code: "6",
  409. name: "新建审核驳回",
  410. type: "danger",
  411. },
  412. {
  413. code: "7",
  414. name: "复制商品待编辑",
  415. type: "info",
  416. },
  417. {
  418. code: "8",
  419. name: "咨询商品待编辑",
  420. type: "info",
  421. },
  422. ],
  423. isonlineoptions: [
  424. { id: "0", name: "未上线" },
  425. { id: "1", name: "已上线" },
  426. ],
  427. showModel: false,
  428. options1: options1,
  429. loading: false,
  430. changeList: [],
  431. parmValue: {
  432. page: 1, // 页码
  433. size: 15, // 每页显示条数
  434. start: "",
  435. end: "",
  436. status: "",
  437. good_name: "",
  438. spucode: "",
  439. cat_id: [],
  440. brandid: "",
  441. good_type: "",
  442. companyNo: "",
  443. supplierNo: "",
  444. isonline: "",
  445. company_name: "", //创建人部门
  446. // creater: "",
  447. },
  448. sinput: "",
  449. select: "",
  450. // 表格 - 数据
  451. tableData: [],
  452. // 表格 - 参数
  453. table: {
  454. stripe: true,
  455. border: true,
  456. _defaultHeader_: ["setcol"],
  457. },
  458. // 表格 - 分页
  459. pageInfo: {
  460. size: 15,
  461. curr: 1,
  462. total: 0,
  463. },
  464. // 表格 - 列参数
  465. columns: listCol,
  466. supplierNo: [],
  467. brandid: [],
  468. };
  469. },
  470. mounted() {
  471. const { back } = this.$route.query;
  472. if (back) {
  473. this.parmValue = JSON.parse(back);
  474. console.log(this.parmValue)
  475. const {page,size}=this.parmValue;
  476. // this.parmValue.start = start || last_start;
  477. // this.parmValue.end = end || last_end;
  478. if(this.parmValue.brandid.length>0){
  479. this.brandid = [this.parmValue.brandid] ;
  480. }
  481. this.pageInfo= {
  482. size: size,
  483. curr: page,
  484. total: 0,
  485. }
  486. //多选条件
  487. this.select = this.parmValue.select;
  488. // this.sselect = this.parmValue.sselect;
  489. this.sinput = this.parmValue.sinput
  490. }else{
  491. this.select = "1";
  492. // this.sselect = "创建时间"
  493. }
  494. this.select = "1";
  495. this.supplierNo = [];
  496. this.searchList();
  497. },
  498. methods: {
  499. getRouter(toRouter, queryId){
  500. if (toRouter && queryId) {
  501. let model = {
  502. id: queryId,
  503. type: 'view',
  504. };
  505. //有多选框的条件
  506. this.parmValue.select = this.select ;
  507. // this.parmValue.sselect = this.sselect ;
  508. this.parmValue.sinput= this.sinput;
  509. //
  510. console.log(this.parmValue)
  511. let routerModel = {
  512. options: JSON.parse(JSON.stringify(this.parmValue)),
  513. router: this.$route.path,
  514. };
  515. model.preModel = JSON.stringify(routerModel);
  516. this.routeGoto(toRouter, model);
  517. } else {
  518. this.$message.warning("暂未找到相关流程!");
  519. }
  520. },
  521. restSearch() {
  522. this.select = "1";
  523. this.sinput = ""
  524. this.supplierNo = [];
  525. this.brandid = [];
  526. // 表格 - 分页
  527. this.pageInfo = {
  528. size: 15,
  529. curr: 1,
  530. total: 0,
  531. };
  532. this.parmValue = {
  533. page: 1, // 页码
  534. size: 15, // 每页显示条数
  535. start: "",
  536. end: "",
  537. status: "",
  538. good_name: "",
  539. company_name: "", //创建人部门
  540. spucode: "",
  541. cat_id: [],
  542. brandid: "",
  543. good_type: "",
  544. isonline: "",
  545. companyNo: "",
  546. supplierNo: "",
  547. };
  548. this.searchList();
  549. },
  550. wantto(isonline, code, ntype, wtype) {
  551. console.log(isonline);
  552. if (isonline + "" === "1") {
  553. this.$message.warning("已上线的商品需要下线才能修改!");
  554. return;
  555. }
  556. if (ntype === "0") {
  557. this.$message.warning("新建商品成正在审核中,请审核结束后再修改!");
  558. return;
  559. }
  560. if (ntype === "2") {
  561. if (wtype === "2") {
  562. this.$message.warning("商品基础信息已修改,请等待审核结果!");
  563. return;
  564. }
  565. if (wtype === "3") {
  566. this.$message.warning(
  567. "商品基础信息修改流程正在审核中,请审核结束后再修改!"
  568. );
  569. return;
  570. }
  571. }
  572. if (ntype === "3") {
  573. if (wtype === "3") {
  574. this.$message.warning("商品成本信息已修改,请等待审核结果!");
  575. return;
  576. }
  577. if (wtype === "2") {
  578. this.$message.warning(
  579. "商品成信息修改流程正在审核中,请审核结束后再修改!"
  580. );
  581. return;
  582. }
  583. }
  584. console.log(ntype + "----" + wtype);
  585. this.routeGoto("goodsCostDetail", {
  586. id: code,
  587. type: wtype === "2" ? "editBase" : wtype === "3" ? "editCoin" : "",
  588. });
  589. },
  590. selection_change(e) {
  591. const { list } = e;
  592. this.changeList = list.length > 0 ? JSON.parse(JSON.stringify(list)) : [];
  593. },
  594. //商品品牌选择
  595. async brandidsearchChange(e) {
  596. const { id, code, label } = e;
  597. if (id) {
  598. this.brandid = [id];
  599. this.parmValue.brandid = id;
  600. this.parmValue.supplierName = label;
  601. } else {
  602. this.brandid = [];
  603. this.parmValue.brandid = "";
  604. this.parmValue.supplierName = "";
  605. }
  606. // this.parmValue.brandid = this.brandid.toString();
  607. this.pageInfo.curr = 1;
  608. this.parmValue.page = 1;
  609. await this.searchList();
  610. },
  611. // 时间
  612. async handleTime(e) {
  613. this.parmValue.start = e.startTime || "";
  614. this.parmValue.end = e.endTime || "";
  615. if (
  616. (this.parmValue.start !== "" && this.parmValue.end !== "") ||
  617. (this.parmValue.start === "" && this.parmValue.end === "")
  618. ) {
  619. this.pageInfo.curr = 1;
  620. this.parmValue.page = 1;
  621. await this.searchList();
  622. }
  623. },
  624. async good_copy(spuCode) {
  625. await this.$confirm(`确定要复制该商品?`, {
  626. confirmButtonText: "确定",
  627. cancelButtonText: "取消",
  628. type: "warning",
  629. })
  630. .then(async () => {
  631. this.loading = true;
  632. const model = {
  633. spuCode: spuCode,
  634. };
  635. const res = await asyncRequest.copy(model);
  636. if (res && res.code === 0) {
  637. this.loading = false;
  638. this.$notify.success({
  639. title: "复制商品成功!",
  640. message: "",
  641. });
  642. await this.searchList();
  643. } else if (res && res.code >= 100 && res.code <= 104) {
  644. await this.logout();
  645. } else {
  646. this.loading = false;
  647. this.$message.warning(res.message);
  648. }
  649. })
  650. .catch(() => {
  651. console.log("取消");
  652. });
  653. },
  654. /**
  655. * 启用/禁用
  656. * @param {String} id id
  657. * @param {String} status 0-禁用 1-启用
  658. */
  659. async changeStatus(id, status) {
  660. await this.$confirm(`确定要改为${status === "1" ? "禁用" : "启用"}?`, {
  661. confirmButtonText: "确定",
  662. cancelButtonText: "取消",
  663. type: "warning",
  664. })
  665. .then(async () => {
  666. this.loading = true;
  667. const model = {
  668. id: id,
  669. status: status === "1" ? "0" : "1",
  670. };
  671. const res = await asyncRequest.status(model);
  672. if (res && res.code === 0) {
  673. this.loading = false;
  674. this.$notify.success({
  675. title: "状态修改成功!",
  676. message: "",
  677. });
  678. await this.searchList();
  679. } else if (res && res.code >= 100 && res.code <= 104) {
  680. await this.logout();
  681. } else {
  682. this.loading = false;
  683. this.$message.warning(res.message);
  684. }
  685. })
  686. .catch(() => {
  687. console.log("取消");
  688. });
  689. },
  690. async deleteItem(code) {
  691. await this.$confirm("确定要删除?", {
  692. confirmButtonText: "确定",
  693. cancelButtonText: "取消",
  694. type: "warning",
  695. })
  696. .then(async () => {
  697. const model = {
  698. codes: [code],
  699. };
  700. const res = await asyncRequest.delete(model);
  701. if (res && res.code === 0) {
  702. this.$notify.success({
  703. title: "删除成功",
  704. message: "",
  705. });
  706. this.searchList();
  707. } else if (res && res.code >= 100 && res.code <= 104) {
  708. await this.logout();
  709. } else {
  710. this.$message.warning(res.message);
  711. }
  712. })
  713. .catch(() => {
  714. console.log("取消");
  715. });
  716. },
  717. // 刷新表格
  718. async searchList() {
  719. if (
  720. (this.parmValue.start !== "" && this.parmValue.end === "") ||
  721. (this.parmValue.start === "" && this.parmValue.end !== "")
  722. ) {
  723. this.$message.warning("时间区间不完整!");
  724. return;
  725. }
  726. this.loading = true;
  727. let item = JSON.parse(JSON.stringify(this.parmValue));
  728. item.spucode = this.select === "1" ? this.sinput : "";
  729. item.good_name = this.select === "2" ? this.sinput : "";
  730. item.companyNo = this.select === "3" ? this.sinput : "";
  731. item.supplierNo = this.select === "4" ? this.sinput : "";
  732. item.company_name = this.select === "5" ? this.sinput : ""; // 部门
  733. item.cat_id =
  734. item.cat_id.length > 0 ? item.cat_id[item.cat_id.length - 1] : "";
  735. const res = await asyncRequest.list(item);
  736. if (res && res.code === 0 && res.data) {
  737. this.tableData = res.data.list;
  738. this.tableData.forEach((a) => {
  739. a.cat_name = "";
  740. let list = a.cat_info || [];
  741. list.forEach((b, i) => {
  742. a.cat_name += i == 0 ? b.name : "/" + b.name;
  743. });
  744. });
  745. this.pageInfo.total = Number(res.data.count);
  746. } else if (res && res.code >= 100 && res.code <= 104) {
  747. await this.logout();
  748. } else {
  749. this.tableData = [];
  750. this.pageInfo.total = 0;
  751. }
  752. this.loading = false;
  753. },
  754. //商品分类选择
  755. async goods_class_change(e) {
  756. this.parmValue.cat_id = e;
  757. this.pageInfo.curr = 1;
  758. this.parmValue.page = 1;
  759. await this.searchList();
  760. },
  761. add_online() {
  762. if (this.changeList.length === 0) {
  763. this.$message.warning("至少选择一个商品!");
  764. return;
  765. }
  766. if (this.changeList.length > 100) {
  767. this.$message.warning("商品数量不能超过100!");
  768. return;
  769. }
  770. let isok = true;
  771. this.changeList.forEach((e) => {
  772. if (e.status !== "1") {
  773. isok = false;
  774. }
  775. });
  776. if (!isok) {
  777. this.$message.warning("只有审核通过的商品可以上线!");
  778. return;
  779. }
  780. this.showModel = true;
  781. },
  782. },
  783. };
  784. </script>
  785. <style lang="scss" scoped>
  786. </style>