日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

vue3實現多層級列表的項目實踐

瀏覽:25日期:2022-06-13 15:05:29
目錄需求背景解決效果index.vue需求背景

需要在統一個列表下,實現商品和規格得管理和聯動

解決效果

index.vue<!--/**?* @author: liuk?* @date: 2023/7/7?* @describe: 商品列表*/--><template>? <div class='container'>? ? <h1>商品列表</h1>? ? <div style='margin-bottom: 15px'>? ? ? <div class='creatbtn1'>? ? ? ? <el-button @click='editShop('')'>+&nbsp;新增商品</el-button>? ? ? </div>? ? </div>? ? <el-row justify='space-between' style='margin-bottom: 15px'>? ? ? <el-col :span='12'>? ? ? ? <el-radio-group v-model='fromData.putShelf' @change='getList' size='large'>? ? ? ? ? <el-radio-button label=''>全部</el-radio-button>? ? ? ? ? <el-radio-button label='1'>已發布</el-radio-button>? ? ? ? ? <el-radio-button label='0'>未發布</el-radio-button>? ? ? ? </el-radio-group>? ? ? </el-col>? ? ? <el-col :span='12'>? ? ? ? <el-form-item label='名稱'>? ? ? ? ? <el-input v-model='fromData.productName' placeholder='請輸入內容'? ? ? ? ? ? ? ? ? ? @keyup.enter='getList'>? ? ? ? ? ? <template #append>? ? ? ? ? ? ? <el-icon @click='getList'>? ? ? ? ? ? ? ? <Search/>? ? ? ? ? ? ? </el-icon>? ? ? ? ? ? </template>? ? ? ? ? </el-input>? ? ? ? ? <el-button type='danger' @click='resetBtn'>重置</el-button>? ? ? ? </el-form-item>? ? ? </el-col>? ? </el-row>? ? <el-table v-if='shopTableList.length' v-loading='loading' :data='shopTableList' border? ? ? ? ? ? ? ? ? ? ? ? ? ? @expand-change='expandChange' :row-key='(row) => row.id' :expand-row-keys='expands'>? ? ? <el-table-column min- type='expand'>? ? ? ? <template #default='props'>? ? ? ? ? <div>? ? ? ? ? ? <el-table :data='props.row.bMallGoodsSpecifications' border>? ? ? ? ? ? ? <el-table-column type='index' label='序號' />? ? ? ? ? ? ? <el-table-column label='圖片' prop='image'>? ? ? ? ? ? ? ? <template #default='scope'>? ? ? ? ? ? ? ? ? <image-upload v-model='scope.row.image' :limit='1'? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? :disabled='!scope.row.specificationEdit'? ? ? ? ? ? ? ? ? ></image-upload>? ? ? ? ? ? ? ? </template>? ? ? ? ? ? ? </el-table-column>? ? ? ? ? ? ? <el-table-column label='規格描述' prop='specificationDescription'>? ? ? ? ? ? ? ? <template #default='scope'>? ? ? ? ? ? ? ? ? <el-input v-model='scope.row.specificationDescription'? ? ? ? ? ? ? ? ? ? ? ? ? ? :disabled='!scope.row.specificationEdit'? ? ? ? ? ? ? ? ? ? ? ? ? ? />? ? ? ? ? ? ? ? </template>? ? ? ? ? ? ? </el-table-column>? ? ? ? ? ? ? <el-table-column label='規格' prop='specifications'>? ? ? ? ? ? ? ? <template #default='scope'>? ? ? ? ? ? ? ? ? <el-input v-model='scope.row.specifications'? ? ? ? ? ? ? ? ? ? ? ? ? ? :disabled='!scope.row.specificationEdit'? ? ? ? ? ? ? ? ? ? ? ? ? ? />? ? ? ? ? ? ? ? </template>? ? ? ? ? ? ? </el-table-column>? ? ? ? ? ? ? <el-table-column label='價格' prop='price'>? ? ? ? ? ? ? ? <template #header>? ? ? ? ? ? ? ? ? <span class='red'>*</span>? ? ? ? ? ? ? ? ? <el-icon>? ? ? ? ? ? ? ? ? ? <Edit/>? ? ? ? ? ? ? ? ? </el-icon>? ? ? ? ? ? ? ? ? 價格? ? ? ? ? ? ? ? </template>? ? ? ? ? ? ? ? <template #default='scope'>? ? ? ? ? ? ? ? ? <el-input v-model='scope.row.price'? ? ? ? ? ? ? ? ? ? ? ? ? ? :disabled='!scope.row.specificationEdit'? ? ? ? ? ? ? ? ? ? ? ? ? ? />? ? ? ? ? ? ? ? </template>? ? ? ? ? ? ? </el-table-column>? ? ? ? ? ? ? <el-table-column label='單位' prop='unitName'>? ? ? ? ? ? ? ? <template #default='scope'>? ? ? ? ? ? ? ? ? <el-select v-model='scope.row.unitId' :disabled='!scope.row.specificationEdit'>? ? ? ? ? ? ? ? ? ? <el-option v-for='(item,i) in units' :key='i' :label='item.label' :value='item.value'/>? ? ? ? ? ? ? ? ? </el-select>? ? ? ? ? ? ? ? </template>? ? ? ? ? ? ? </el-table-column>? ? ? ? ? ? ? <el-table-column label='劃線價' prop='crossedPrice'>? ? ? ? ? ? ? ? <template #header>? ? ? ? ? ? ? ? ? <el-icon>? ? ? ? ? ? ? ? ? ? <Edit/>? ? ? ? ? ? ? ? ? </el-icon>? ? ? ? ? ? ? ? ? 劃線價? ? ? ? ? ? ? ? </template>? ? ? ? ? ? ? ? <template #default='scope'>? ? ? ? ? ? ? ? ? <el-input v-model='scope.row.crossedPrice'? ? ? ? ? ? ? ? ? ? ? ? ? ? :disabled='!scope.row.specificationEdit'? ? ? ? ? ? ? ? ? ? ? ? ? ? />? ? ? ? ? ? ? ? </template>? ? ? ? ? ? ? </el-table-column>? ? ? ? ? ? ? <el-table-column label='庫存' prop='stock'>? ? ? ? ? ? ? ? <template #default='scope'>? ? ? ? ? ? ? ? ? <el-input v-model='scope.row.stock'? ? ? ? ? ? ? ? ? ? ? ? ? ? :disabled='!scope.row.specificationEdit'? ? ? ? ? ? ? ? ? ? ? ? ? ? />? ? ? ? ? ? ? ? </template>? ? ? ? ? ? ? </el-table-column>? ? ? ? ? ? ? <el-table-column label='可否調價' prop='adjustThePrice'>? ? ? ? ? ? ? ? <template #default='scope'>? ? ? ? ? ? ? ? ? <el-switch v-model='scope.row.adjustThePrice' :active-value='1' :inactive-value='0'? ? ? ? ? ? ? ? ? ? ? ? ? ? ?:disabled='!scope.row.specificationEdit'? ? ? ? ? ? ? ? ? ? ? ? ? ? ? />? ? ? ? ? ? ? ? </template>? ? ? ? ? ? ? </el-table-column>? ? ? ? ? ? ? <el-table-column fixed='right' label='操作' class-name='small-padding fixed-width'? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?min-width='210'>? ? ? ? ? ? ? ? <template #default='scope'>? ? ? ? ? ? ? ? ? <el-button v-show='!scope.row.specificationEdit' type='success'? ? ? ? ? ? ? ? ? ? ? ? ? ? ?@click='editSpecifications(scope.row,props)'>編輯? ? ? ? ? ? ? ? ? </el-button>? ? ? ? ? ? ? ? ? <el-button v-show='scope.row.specificationEdit' type='success'? ? ? ? ? ? ? ? ? ? ? ? ? ? ?@click='updateSpecification(scope.row)'>? ? ? ? ? ? ? ? ? ? 保存? ? ? ? ? ? ? ? ? </el-button>? ? ? ? ? ? ? ? ? <el-button v-show='scope.row.specificationEdit'? ? ? ? ? ? ? ? ? ? ? ? ? ? ?@click='scope.row.specificationEdit = false'>取消? ? ? ? ? ? ? ? ? </el-button>? ? ? ? ? ? ? ? ? <el-button v-show='!scope.row.specificationEdit' type='danger'? ? ? ? ? ? ? ? ? ? ? ? ? ? ?@click='delSpecifica(scope.row,props)'>刪除? ? ? ? ? ? ? ? ? </el-button>? ? ? ? ? ? ? ? </template>? ? ? ? ? ? ? </el-table-column>? ? ? ? ? ? </el-table>? ? ? ? ? </div>? ? ? ? </template>? ? ? </el-table-column>? ? ? <el-table-column min- type='index' label='序號'/>? ? ? <el-table-column min- label='商品名稱' prop='productName' sortable>? ? ? ? <template #header>? ? ? ? ? 商品名稱? ? ? ? ? <el-icon>? ? ? ? ? ? <QuestionFilled/>? ? ? ? ? </el-icon>? ? ? ? </template>? ? ? </el-table-column>? ? ? <el-table-column min- label='圖片' prop='productImage'>? ? ? ? <template #default='scope'>? ? ? ? ? <el-image ? ? ? ? ? ? ? ? ? ? :src='https://www.jb51.net/javascript/scope.row.productImage'? ? ? ? ? ? ? ? ? ? :zoom-rate='1.2'? ? ? ? ? ? ? ? ? ? :preview-src-list='[scope.row.productImage]'? ? ? ? ? ? ? ? ? ? :initial-index='4'? ? ? ? ? ? ? ? ? ? preview-teleported? ? ? ? ? ? ? ? ? ? fit='cover'/>? ? ? ? </template>? ? ? </el-table-column>? ? ? <el-table-column min- label='庫存策略' prop='inventoryStrategy'>? ? ? ? <template #default='scope'>? ? ? ? ? {{ formatInventoryStrategy(scope.row.inventoryStrategy) }}? ? ? ? </template>? ? ? </el-table-column>? ? ? <el-table-column min- label='順序' prop='sort' sortable>? ? ? ? <template #header>? ? ? ? ? 順序? ? ? ? ? <el-icon>? ? ? ? ? ? <QuestionFilled/>? ? ? ? ? </el-icon>? ? ? ? </template>? ? ? </el-table-column>? ? ? <el-table-column min- label='是否已發布' prop='putShelf'>? ? ? ? <template #default='scope'>? ? ? ? ? <el-switch? ? ? ? ? ? ? v-model='scope.row.putShelf' :active-value='1' :inactive-value='0'? ? ? ? ? ? ? />? ? ? ? </template>? ? ? </el-table-column>? ? ? <el-table-column min- label='是否靜態' prop='staticState'>? ? ? ? <template #default='scope'>? ? ? ? ? <el-switch v-model='scope.row.staticState' :active-value='1' :inactive-value='0'? ? ? ? ? ? ? ? ? ? ?:before-change='staticStateChange.bind(null, scope.row)'? ? ? ? ? ? ? ? ? ? ?:disabled='scope.row.staticState == 1'? ? ? ? ? ? ? ? ? ? ? />? ? ? ? </template>? ? ? </el-table-column>? ? ? <el-table-column min- label='SKU數量' prop='productNum'>? ? ? ? <template #default='scope'>? ? ? ? ? <span :class='{red:scope.row.productNum == 0}'>{{ scope.row.productNum }}</span>? ? ? ? </template>? ? ? </el-table-column>? ? ? <el-table-column min- label='價格' prop='productPrice'/>? ? ? <el-table-column label='操作' fixed='right' min- class-name='small-padding fixed-width'>? ? ? ? <template #default='scope'>? ? ? ? ? <el-button @click='addSpecif(scope.row,scope)'>增加規格</el-button>? ? ? ? ? <el-button type='primary' @click='editShop(scope.row.id)'>編輯</el-button>? ? ? ? ? <el-button type='danger' @click='delShop(scope.row)'>刪除</el-button>? ? ? ? </template>? ? ? </el-table-column>? ? </el-table>? ? <el-empty description='暫無商品' v-else/>? ? <pagination? ? ? ? v-show='pages.total>0'? ? ? ? :total='pages.total'? ? ? ? v-model:page='pages.pageNum'? ? ? ? v-model:limit='pages.pageSize'? ? ? ? @pagination='getList'? ? />? </div></template><script setup>import {listGoods, delGoods, previewGoods} from '@/api/retailmall/goods';import {updateSpecifications, addSpecifications, delSpecifications} from '@/api/retailmall/specifications';import {listUnits,} from '@/api/mall/units';import {useRoute, useRouter} from 'vue-router';import {onMounted} from 'vue';// Emitconst emit = defineEmits(['editShopOpen'])// routeconst route = useRoute()// storeimport useMallStore from '@/store/modules/mall'const mallStore = useMallStore()const router = useRouter()const {proxy} = getCurrentInstance();const model = reactive({? fromData: {},? pages: {? ? pageNum: 1,? ? pageSize: 10,? ? total: 0? },? expands: [],//表格展開行? shopTableList: [],//商品列表? loading: true,? units: [],//單位列表});const {fromData, expands, pages, shopTableList, loading, units} = toRefs(model);// 編輯商品const editShop = (id) => {? emit('editShopOpen')? mallStore.setCurGoodId(id)}// 增加規格const addSpecif = (row, props) => {? let params = {? ? commodityId: row.id,? ? crossedPrice: 0,? ? stock: 0,? ? price: 0,? ? specifications: 0,? ? specificationDescription: ''? }? addSpecifications(params).then(res => {? ? if (+res.code === 200) {? ? ? previewGoods(props.row.id).then((res) => {? ? ? ? if (+res.code === 200) {? ? ? ? ? model.expands = [] // 展開行? ? ? ? ? model.expands.push(row.id)? ? ? ? ? props.row.bMallGoodsSpecifications = res.data.bMallGoodsSpecifications? ? ? ? ? proxy.$message.success('新增成功')? ? ? ? }? ? ? })? ? }? })}// 修改規格const updateSpecification = (row) => {? updateSpecifications(row).then((res) => {? ? if (+res.code === 200) {? ? ? row.specificationEdit = false? ? ? proxy.$message.success('編輯成功')? ? }? })}// 表格展開變化 ?-- 只能展開一行const expandChange = (row, expandedRows) => {? if (expandedRows.length) {? ? model.expands = []? ? if (row) {? ? ? model.expands.push(row.id)? ? }? } else {? ? model.expands = []? }}// 刪除商品const delShop = (row) => {? proxy.$modal.confirm(`確定要刪除${row.productName}`).then(function () {? ? return delGoods(row.id)? }).then(() => {? ? getList();? ? proxy.$modal.msgSuccess('刪除成功');? })}// 是否靜態開關變化const staticStateChange = (item) => {? return new Promise((resolve, reject) => {? ? proxy.$modal.confirm('一旦商品開啟靜態,該商品不可進行任何操作(刪除編輯發布隱藏),是否確定要 修改 商品 ?').then(() => {? ? ? resolve(true)? ? })? })}// 編輯規格const editSpecifications = (row) => {? row.specificationEdit = true}// 刪除規格const delSpecifica = (row, props) => {? proxy.$modal.confirm(`確定要刪除${row.productName}`).then(function () {? ? return delSpecifications(row.id)? }).then(() => {? ? previewGoods(props.row.id).then((res) => {? ? ? props.row.bMallGoodsSpecifications = res.data.bMallGoodsSpecifications? ? })? ? proxy.$modal.msgSuccess('刪除成功');? })}// 獲取商品列表function getList() {? let params = {? ? ...model.fromData,? ? ...model.pages,? ? shopIds: [route.query.id],? ? total: undefined? }? model.loading = true;? listGoods(params).then(response => {? ? model.expands = [] // 不展開行? ? model.shopTableList = response.rows || {bMallGoodsSpecifications: []};? ? model.pages.total = response.total;? ? model.loading = false;? })}// 表單重置function reset() {? form.value = {};}// 獲取全部單位const getlistUnits = () => {? let params = {? ? pageNum: 1,? ? pageSize: 999? }? listUnits(params).then(res => {? ? model.units = res.rows.map((item) => {? ? ? return {? ? ? ? label: item.name,? ? ? ? value: item.id? ? ? }? ? })? })}// 重置const resetBtn = () => {? fromData.value = {}? getList()}onMounted(() => {? getList();? getlistUnits()})const formatInventoryStrategy = (val) => {? let str = ''? switch (val) {? ? case 0:? ? ? str = '無需庫存'? ? ? break? ? case 1:? ? ? str = '下單后減少'? ? ? break? ? case 2:? ? ? str = '支付后減少'? ? ? break? ? case 3:? ? ? str = '使用后減少'? ? ? break? }? return str}</script>

到此這篇關于vue3實現多層級列表的項目實踐的文章就介紹到這了,更多相關vue3 多層級列表內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: JavaScript
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
成人精品久久| 日韩精品导航| 欧美性感美女一区二区| 国产精品久久久久久av公交车| 欧产日产国产精品视频| 欧美亚洲色图校园春色| 人人香蕉久久| 精品一区二区三区亚洲| 欧美日韩亚洲一区在线观看| 亚洲成av人片一区二区密柚| 国产精品成人a在线观看| 亚洲三区欧美一区国产二区| 亚洲一级网站| 91精品一区国产高清在线gif| 国产精品视频一区二区三区 | 日韩精品视频在线看| 亚洲精华国产欧美| 亚洲一区网站| 久久国产66| 午夜亚洲福利| 国产亚洲一区二区三区啪| 日本中文字幕不卡| 婷婷久久免费视频| 日本精品久久| 久久中文在线| 欧美日韩尤物久久| 国产一区亚洲| 中文字幕亚洲影视| 欧美极品中文字幕| 国产福利91精品一区二区| 91偷拍一区二区三区精品| 欧美三级网址| 亚洲专区视频| 日韩精品国产精品| 麻豆一区二区99久久久久| av日韩中文| 久色成人在线| 久久精品福利| 国产精品老牛| 久久91视频| 午夜日本精品| 精品欠久久久中文字幕加勒比| 私拍精品福利视频在线一区| 亚洲特色特黄| 日韩av中文字幕一区| 免费一二一二在线视频| 亚洲免费专区| 日韩av福利| 日韩国产欧美在线视频| 美女网站一区| 欧美国产另类| 亚洲精品乱码| 好吊日精品视频| 国产欧美一区二区精品久久久| 午夜国产一区二区| 久久人人99| 欧美不卡视频| 性感美女一区二区在线观看| 91欧美日韩| 欧美国产小视频| 欧美自拍一区| 国产精品白丝久久av网站 | 免费日韩av片| 久久中文字幕导航| 手机精品视频在线观看| 中国字幕a在线看韩国电影| 亚洲三级在线| 免费视频亚洲| 成人日韩av| 久久av免费看| 91亚洲无吗| 日韩综合一区二区三区| 精品一区二区三区视频在线播放| 播放一区二区| 国产欧美成人| 日韩激情中文字幕| 久久精品一本| 伊人国产精品| 91久久久久| 亚洲精品视频一二三区| 日韩毛片网站| 国产成人精品一区二区三区免费| 福利视频一区| 不卡中文一二三区| 欧美综合国产| 亚洲一区日韩| 99久久视频| 色偷偷偷在线视频播放| 日韩欧美激情电影| 亚洲精品888| 日韩在线免费| 欧美gv在线| 日韩在线视频精品| 久久久久久久久99精品大| 精品中文字幕一区二区三区| 国产精品天天看天天狠| 欧美中文一区| 欧美一区91| 国产精品亚洲四区在线观看| 国产欧美综合一区二区三区| 国产精品最新| 日韩国产欧美三级| 国产v日韩v欧美v| 好吊视频一区二区三区四区| 日韩精品成人| 午夜久久影院| 精品美女在线视频| 视频一区二区三区在线| 久久亚洲精精品中文字幕| 国产精品美女| 久久精品亚洲欧美日韩精品中文字幕| 亚洲欧美日韩视频二区| 精品国产精品久久一区免费式| 亚洲一区二区成人| 亚洲人成在线网站| 国产精品久久久一区二区| 精品在线91| 日韩欧美一区二区三区免费看| 视频一区视频二区在线观看| 水蜜桃久久夜色精品一区| 综合欧美亚洲| 国产精品毛片在线看| 久久久久久黄| 正在播放日韩精品| 国产一区精品福利| 国产精品久久久久久模特 | 欧美激情另类| 亚洲2区在线| 99综合视频| 精品国产欧美| 精品视频在线你懂得| 欧洲激情综合| 欧美国产不卡| 日韩三级视频| 黄色免费成人| 亚洲va在线| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 香蕉精品999视频一区二区| 免费亚洲一区| 欧美日韩伊人| 日韩一区二区三区精品视频第3页 日韩一区二区三区免费视频 | 国产精品久久久久av蜜臀| 亚洲精品极品| 亚洲欧美不卡| 日韩中文字幕91| 午夜日韩在线| 丝袜美腿亚洲色图| 在线看片日韩| 色8久久久久| 久久国产精品免费精品3p| 777久久精品| 国产乱人伦精品一区| 91精品丝袜国产高跟在线| 日本成人在线一区| 日韩专区在线视频| 亚洲精品一二| 国产精品极品| 成人久久久久| 日韩中文字幕1| 国产精品**亚洲精品| 精品久久一区| 日韩亚洲在线| 国产美女撒尿一区二区| 久久精品国产网站| 不卡中文一二三区| 日韩av一区二区三区| 成人午夜亚洲| 噜噜噜躁狠狠躁狠狠精品视频| 欧美精品导航| 五月综合激情| 国产欧美视频在线| 91精品国产调教在线观看| 综合激情在线| 色黄视频在线观看| 日韩欧美美女在线观看| 国产精品原创| 97久久亚洲| 在线视频精品| 亚洲欧洲美洲av| 日本不卡高清| 亚洲一级影院| 国模大尺度视频一区二区| 免费在线观看视频一区| 麻豆mv在线观看| 国产精品毛片| 99久久精品网站| 美女性感视频久久| 亚洲综合图色| 亚洲一区日韩| 亚洲欧洲美洲av| 精品亚洲免a| 久久av免费| 国产探花在线精品一区二区| 红杏一区二区三区| 国产欧美日韩一区二区三区在线| 亚洲一区二区三区高清| 亚洲精品成人| 亚洲一级在线| 国产视频一区三区| 欧美gv在线|