123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833 |
- <template>
- <div class="m-container">
- <h2>
- <div class="squrt"></div>
- 商品列表
- </h2>
- <div class="m-core">
- <el-button
- type="primary"
- @click="onShopOperation('create')"
- v-permission="'/shopOperation'"
- style="margin-bottom: 20px"
- >添加</el-button
- >
- <!-- <el-upload
- v-permission="'import/goods'"
- style="display: inline-block; margin: 0 10px"
- action="/api-web/import/goods"
- :show-file-list="false"
- :before-upload="beforeUpload"
- accept=".xlsx,.xls"
- :headers="headers"
- :on-error="handleError"
- :on-success="handleSuccess"
- >
- <el-button type="primary" style="margin-bottom: 20px">商品导入</el-button>
- </el-upload> -->
- <!-- <el-upload v-permission="'export/goods'"
- style="display: inline-block; margin: 0 10px;"
- action="/api-web/export/goods"
- :show-file-list="false"
- :before-upload="beforeUpload"
- accept=".xlsx,.xls"
- :headers="headers"
- :on-error="handleError"
- :on-success="handleSuccess">
- <el-button >商品导出</el-button>
- </el-upload> -->
- <el-button
- v-permission="'export/goods'"
- type="primary"
- style="margin-bottom: 20px"
- @click="exportShopList"
- >商品导出</el-button
- >
- <!-- <el-button
- type="primary"
- style="margin-bottom: 20px"
- @click="onDownload"
- v-permission="'import/downloadTemplate'"
- >下载模板</el-button
- > -->
- <el-button
- type="primary"
- style="margin-bottom: 20px"
- v-permission="'goods/add/commonAdd'"
- @click="onShopComAdd"
- >添加组合商品</el-button
- >
- <!-- 搜索类型 -->
- <save-form
- :inline="true"
- class="searchForm"
- ref="searchForm"
- @submit="onSearch"
- @reset="onReset"
- :model="searchForm"
- >
- <el-form-item prop="search">
- <el-input
- v-model.trim="searchForm.search"
- clearable
- placeholder="商品编号/货号/商品名称"
- ></el-input>
- </el-form-item>
- <!-- <el-form-item prop="organId">
- <el-select
- v-model.trim="searchForm.organId"
- clearable
- placeholder="所属分部"
- >
- <el-option
- v-for="item in selects.branchs"
- :key="item.id"
- :label="item.name"
- :value="item.id.toString()"
- ></el-option>
- </el-select>
- </el-form-item> -->
- <!-- <el-form-item prop="studentShowOrganId">
- <el-select
- v-model.trim="searchForm.studentShowOrganId"
- clearable
- placeholder="学生端可见分部"
- >
- <el-option
- v-for="item in selects.branchs"
- :key="item.id"
- :label="item.name"
- :value="item.id.toString()"
- ></el-option>
- </el-select>
- </el-form-item> -->
- <el-form-item prop="educationShowOrganId">
- <el-select
- v-model.trim="searchForm.educationShowOrganId"
- clearable
- placeholder="管理端APP可售分部"
- >
- <el-option
- v-for="item in selects.branchs"
- :key="item.id"
- :label="item.name"
- :value="item.id.toString()"
- ></el-option>
- </el-select>
- </el-form-item>
- <el-form-item prop="courseFeeShowOrganId">
- <el-select
- v-model.trim="searchForm.courseFeeShowOrganId"
- clearable
- placeholder="课程收费团可售分部"
- >
- <el-option
- v-for="item in selects.branchs"
- :key="item.id"
- :label="item.name"
- :value="item.id.toString()"
- ></el-option>
- </el-select>
- </el-form-item>
- <el-form-item prop="memberFeeShowOrganId">
- <el-select
- v-model.trim="searchForm.memberFeeShowOrganId"
- clearable
- placeholder="会员收费团可见分部"
- >
- <el-option
- v-for="item in selects.branchs"
- :key="item.id"
- :label="item.name"
- :value="item.id.toString()"
- ></el-option>
- </el-select>
- </el-form-item>
- <el-form-item prop="replacementShowOrganId" v-if="tenantId==1">
- <el-select
- v-model.trim="searchForm.replacementShowOrganId"
- clearable
- placeholder="乐器置换可见分部"
- >
- <el-option
- v-for="item in selects.branchs"
- :key="item.id"
- :label="item.name"
- :value="item.id.toString()"
- ></el-option>
- </el-select>
- </el-form-item>
- <el-form-item prop="type">
- <el-select
- v-model.trim="searchForm.type"
- clearable
- placeholder="商品类型"
- >
- <el-option
- v-for="(item, index) in goodsType"
- :key="index"
- :label="item.label"
- :value="item.value"
- ></el-option>
- </el-select>
- </el-form-item>
- <el-form-item prop="goodsCategoryId">
- <el-select
- v-model.trim="searchForm.goodsCategoryId"
- clearable
- placeholder="商品分类"
- >
- <el-option
- v-for="(item, index) in categoryList"
- :key="index"
- :label="item.label"
- :value="item.value"
- ></el-option>
- </el-select>
- </el-form-item>
- <el-form-item prop="status">
- <el-select
- v-model.trim="searchForm.status"
- clearable
- placeholder="是否是上架"
- >
- <el-option label="是" value="1"></el-option>
- <el-option label="否" value="0"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item prop="groupGoods">
- <el-select
- v-model.trim="searchForm.groupGoods"
- clearable
- placeholder="是否是组合商品"
- >
- <el-option label="是" value="1"></el-option>
- <el-option label="否" value="0"></el-option>
- </el-select>
- </el-form-item>
- <!-- <el-form-item prop="clientShow">
- <el-select
- v-model.trim="searchForm.clientShow"
- clearable
- placeholder="学生端是否是展示"
- >
- <el-option label="是" value="1"></el-option>
- <el-option label="否" value="0"></el-option>
- </el-select>
- </el-form-item> -->
- <!-- <el-form-item prop="educationalShow">
- <el-select
- v-model.trim="searchForm.educationalShow"
- clearable
- placeholder="管理端是否是展示"
- >
- <el-option label="是" value="1"></el-option>
- <el-option label="否" value="0"></el-option>
- </el-select>
- </el-form-item> -->
- <!-- <el-form-item prop="musicGroupShow">
- <el-select
- v-model.trim="searchForm.musicGroupShow"
- clearable
- placeholder="乐团是否是展示"
- >
- <el-option label="是" value="1"></el-option>
- <el-option label="否" value="0"></el-option>
- </el-select>
- </el-form-item> -->
- <!-- <el-form-item prop="courseViewType">
- <el-select
- v-model.trim="searchForm.courseViewType"
- placeholder="乐团收费模式"
- clearable
- >
- <el-option label="课程收费" value="0"></el-option>
- <el-option label="系统收费" value="1"></el-option>
- <el-option label="团练宝收费" value="2"></el-option>
- </el-select>
- </el-form-item> -->
- <!-- <el-form-item prop="replacementShow">
- <el-select
- v-model.trim="searchForm.replacementShow"
- clearable
- placeholder="是否参与置换"
- >
- <el-option label="是" value="1"></el-option>
- <el-option label="否" value="0"></el-option>
- </el-select>
- </el-form-item> -->
- <!-- <el-form-item>
- <el-date-picker v-model.trim="orderDate" style="width:410px;" type="daterange" value-format="yyyy-MM-dd"
- @change="searchOrderDate" range-separator="至" :picker-options="{ firstDayOfWeek: 1 }" start-placeholder="开始日期"
- end-placeholder="结束日期"></el-date-picker>
- </el-form-item> -->
- <el-form-item>
- <el-button type="danger" native-type="submit">搜索</el-button>
- <el-button type="primary" native-type="reset">重置</el-button>
- </el-form-item>
- </save-form>
- <!-- 列表 -->
- <div class="tableWrap">
- <el-table
- :data="tableList"
- :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
- >
- <el-table-column align="center" prop="id" label="商品编号">
- </el-table-column>
- <el-table-column align="center" prop="sn" label="货号">
- </el-table-column>
- <el-table-column align="center" prop="brand" label="品牌">
- </el-table-column>
- <el-table-column
- align="center"
- prop="name"
- label="商品名称"
- width="150px"
- >
- <template slot-scope="scope">
- <overflow-text :text="scope.row.name" width="100%" />
- </template>
- </el-table-column>
- <el-table-column align="center" label="是否组合商品">
- <template slot-scope="scope">
- {{ scope.row.complementGoodsIdList ? "是" : "否" }}
- </template>
- </el-table-column>
- <!-- <el-table-column align="center" label="学员是否展示">
- <template slot-scope="scope">
- {{ scope.row.clientShow ? "是" : "否" }}
- </template>
- </el-table-column> -->
- <!-- <el-table-column align="center" label="教务端是否展示">
- <template slot-scope="scope">
- {{ scope.row.educationalShow ? "是" : "否" }}
- </template>
- </el-table-column> -->
- <!-- <el-table-column align="center" label="乐团是否展示">
- <template slot-scope="scope">
- {{ scope.row.musicGroupShow ? "是" : "否" }}
- </template>
- </el-table-column> -->
- <!-- <el-table-column align="center" label="乐团收费模式">
- <template slot-scope="scope">
- <Tooltip
- :content="scope.row.courseViewType | courseViewTypeFormat"
- />
- </template>
- </el-table-column> -->
- <el-table-column align="center" label="是否库存预警" v-if="tenantId==1">
- <template slot-scope="scope">
- <span v-if="!scope.row.complementGoodsIdList">
- {{ scope.row.stockWarning ? "是" : "否" }}
- </span>
- </template>
- </el-table-column>
- <!-- <el-table-column align="center" label="是否参与置换">
- <template slot-scope="scope">
- <span>
- {{ scope.row.replacementShow ? "是" : "否" }}
- </span>
- </template>
- </el-table-column> -->
- <el-table-column align="center" label="商品类型">
- <template slot-scope="scope">
- {{ scope.row.type | shopType }}
- </template>
- </el-table-column>
- <el-table-column
- align="center"
- prop="goodsCategoryName"
- label="商品分类"
- >
- </el-table-column>
- <el-table-column align="center" prop="specification" label="具体型号">
- <template slot-scope="scope">
- <span style="max-height: 64px; display: block">{{
- scope.row.specification
- }}</span>
- </template>
- </el-table-column>
- <el-table-column align="center" prop="stockCount" label="内部库存" v-if="tenantId==1">
- <template slot-scope="scope">
- <!-- 先判断是否是组合商品 -->
- <span v-if="scope.row.complementGoodsIdList">
- {{ scope.row.stockCount ? scope.row.stockCount : "" }}
- </span>
- <span v-else>{{ scope.row.stockCount }}</span>
- </template>
- </el-table-column>
- <el-table-column align="center" prop="taxStockCount" label="税务库存">
- <template slot-scope="scope">
- <!-- 先判断是否是组合商品 -->
- <span v-if="scope.row.complementGoodsIdList">
- {{ scope.row.taxStockCount ? scope.row.taxStockCount : "" }}
- </span>
- <span v-else>{{ scope.row.taxStockCount }}</span>
- </template>
- </el-table-column>
- <el-table-column align="center" prop="stockType" label="库存类型" v-if="tenantId==1">
- <template slot-scope="scope">
- {{ scope.row.stockType | stockTypeStatus }}
- </template>
- </el-table-column>
- <el-table-column align="center" prop="marketPrice" label="市场价(元)">
- <template slot-scope="scope">
- {{ scope.row.marketPrice | moneyFormat }}
- </template>
- </el-table-column>
- <el-table-column align="center" prop="marketPrice" label="零售价(元)">
- <template slot-scope="scope">
- {{ scope.row.discountPrice | moneyFormat }}
- </template>
- </el-table-column>
- <el-table-column
- align="center"
- prop="groupPurchasePrice"
- label="商品团购价(元)"
- >
- <template slot-scope="scope">
- {{ scope.row.groupPurchasePrice | moneyFormat }}
- </template>
- </el-table-column>
- <el-table-column
- align="center"
- cell-style="padding: 0"
- label="商品缩略图"
- >
- <template slot-scope="scope">
- <img class="shopImage" :src="scope.row.image" alt="" srcset="" />
- </template>
- </el-table-column>
- <!-- <el-table-column align="center" label="所属分部">
- <template slot-scope="scope">
- <div>
- <Tooltip :content="scope.row.organName" />
- </div>
- </template>
- </el-table-column> -->
- <el-table-column align="center" label="商品描述">
- <template slot-scope="scope">
- <Tooltip :content="scope.row.brief" />
- </template>
- </el-table-column>
- <el-table-column align="center" label="商品详情">
- <template slot-scope="scope">
- <Tooltip :content="scope.row.desc" />
- </template>
- </el-table-column>
- <el-table-column
- align="center"
- width="180px"
- label="操作"
- fixed="right"
- >
- <template slot-scope="scope">
- <!-- 组合商品没有进货清单按钮 v-permission="'/purchaseLlist'" -->
- <el-button
- v-if="
- !scope.row.complementGoodsIdList &&
- permission('/purchaseLlist')
- "
- @click="onPurchaseList(scope.row)"
- type="text"
- >进货清单</el-button
- >
- <el-button
- v-if="
- scope.row.status == 0 && permission('goods/updateGoodsStatus')
- "
- @click="onUpdate(scope.row, 0)"
- type="text"
- >上架</el-button
- >
- <el-button
- v-if="
- scope.row.status == 1 &&
- permission('goods/updateGoodsStatus/downGoods')
- "
- @click="onUpdate(scope.row, 1)"
- type="text"
- >下架</el-button
- >
- <el-button
- v-if="
- scope.row.status == 0 &&
- permission('/shopOperation/updateShop')
- "
- @click="onShopOperation('update', scope.row)"
- type="text"
- >修改</el-button
- >
- <el-button
- v-if="
- scope.row.status == 1 && permission('/shopOperation/shopLook')
- "
- @click="onShopOperation('look', scope.row)"
- type="text"
- >查看</el-button
- >
- <el-button
- v-if="permission('/shopOperation/copyShop')"
- @click="onShopOperation('copy', scope.row)"
- type="text"
- >复制</el-button
- >
- <!-- <el-button v-if="scope.row.status == 0"
- v-permission="'goods/del'"
- @click="onDelete(scope.row)"
- type="text">删除</el-button> -->
- </template>
- </el-table-column>
- </el-table>
- <pagination
- sync
- :total.sync="pageInfo.total"
- :page.sync="pageInfo.page"
- :limit.sync="pageInfo.limit"
- :page-sizes="pageInfo.page_size"
- @pagination="getList"
- />
- </div>
- </div>
- <el-dialog
- :title="addString[addType] + '组合商品'"
- v-if="routeShopStatus"
- :visible.sync="routeShopStatus"
- @close="onFormClose('ruleForm')"
- width="1000px"
- >
- <el-form :model="form" :rules="rules" ref="ruleForm" :inline="true">
- <el-alert
- title="基础信息"
- :closable="false"
- class="alert"
- type="info"
- />
- <el-form-item
- label="商品名称"
- prop="name"
- :label-width="formLabelWidth"
- >
- <el-input
- style="width: 220px !important"
- placeholder="请输入商品名称"
- type="text"
- :disabled="addDisabled"
- v-model.trim="form.name"
- ></el-input>
- </el-form-item>
- <el-form-item label="货号" prop="sn" :label-width="formLabelWidth">
- <el-input
- style="width: 220px !important"
- placeholder="请输入货号"
- type="text"
- :disabled="addDisabled"
- v-model.trim="form.sn"
- ></el-input>
- </el-form-item>
- <el-form-item label="品牌" prop="brand" :label-width="formLabelWidth">
- <el-input
- style="width: 220px !important"
- v-model.trim="form.brand"
- :disabled="addDisabled"
- placeholder="请输入品牌"
- ></el-input>
- </el-form-item>
- <!-- <el-form-item label="所属分部" :label-width="formLabelWidth" prop="organIdList">
- <select-all v-model.trim="form.organIdList"
- filterable
- placeholder="请选择所属分部"
- style="width: 100% !important"
- multiple
- :disabled="addDisabled || addType == 'update'"
- @change="onOrganChange"
- clearable>
- <el-option v-for="item in selects.branchs"
- :key="item.id"
- :label="item.name"
- :value="item.id.toString()"></el-option>
- </select-all>
- </el-form-item> -->
- <el-form-item
- label="商品类型"
- prop="type"
- :label-width="formLabelWidth"
- >
- <el-select
- v-model.trim="form.type"
- :disabled="addDisabled"
- style="width: 220px !important"
- placeholder="请选择商品类型"
- >
- <el-option
- v-for="(item, index) in goodsType"
- :key="index"
- :label="item.label"
- :value="item.value"
- ></el-option>
- </el-select>
- </el-form-item>
- <el-form-item
- label="商品分类"
- prop="goodsCategoryId"
- :label-width="formLabelWidth"
- >
- <el-select
- v-model.trim="form.goodsCategoryId"
- style="width: 220px !important"
- placeholder="请选择商品分类"
- :disabled="addDisabled"
- filterable
- >
- <el-option
- v-for="item in categoryList"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- >
- </el-option>
- </el-select>
- </el-form-item>
- <el-form-item
- label="商品型号"
- prop="specification"
- :label-width="formLabelWidth"
- >
- <el-input
- v-model.trim="form.specification"
- :disabled="addDisabled"
- style="width: 220px !important"
- placeholder="请输入商品型号"
- ></el-input>
- </el-form-item>
- <div v-for="(goodsList, index) in form.goodsList" :key="index">
- <el-form-item
- :label="'商品' + (index + 1)"
- :label-width="formLabelWidth"
- style="display: inline-block; width: 80% !important"
- :prop="'goodsList.' + index + '.id'"
- :rules="[
- { required: true, message: '请选择商品', trigger: 'change' },
- ]"
- >
- <el-select
- v-model.trim="goodsList.id"
- @change="onGoodsChange"
- filterable
- style="width: 220px !important"
- :disabled="addDisabled"
- placeholder="请选择商品"
- >
- <el-option
- v-for="(item, index) in selectGoodsList"
- :key="index"
- :disabled="item.disabled"
- :label="item.name"
- :value="item.id"
- ></el-option>
- </el-select>
- </el-form-item>
- <div v-if="!addDisabled" style="display: inline-block">
- <el-button
- icon="el-icon-minus"
- v-if="form.goodsList.length > 1"
- @click.prevent="removeGoodsList(goodsList)"
- circle
- ></el-button>
- <el-button
- icon="el-icon-plus"
- @click.prevent="addGoodsList"
- circle
- style="margin-left: 5px"
- ></el-button>
- </div>
- </div>
- <el-alert
- title="价格信息"
- :closable="false"
- class="alert"
- type="info"
- />
- <el-form-item
- label="市场价"
- class="hiddenStart"
- prop="marketPrice"
- :label-width="formLabelWidth"
- >
- <template slot="label">
- <p style="position: relative">
- <span style="color: #f56c6c; margin-right: 4px">*</span>
- 市场价
- <el-tooltip placement="top" popper-class="mTooltip">
- <div slot="content">
- 商品标价,仅在商品购买时做展示,不以该价格向学员销售商品
- </div>
- <i
- class="el-icon-question"
- style="
- font-size: 18px;
- color: #f56c6c;
- position: relative;
- top: 2px;
- "
- ></i>
- </el-tooltip>
- </p>
- </template>
- <el-input
- type="number"
- placeholder="请输入市场价"
- :disabled="addDisabled"
- @mousewheel.native.prevent
- v-model.trim="form.marketPrice"
- style="width: 220px !important"
- ></el-input>
- </el-form-item>
- <el-form-item
- label="零售价"
- class="hiddenStart"
- prop="discountPrice"
- :label-width="formLabelWidth"
- >
- <template slot="label">
- <p style="position: relative">
- <span style="color: #f56c6c; margin-right: 4px">*</span>
- 零售价
- <el-tooltip placement="top" popper-class="mTooltip">
- <div slot="content">
- 管理端APP、乐器维修时学员购买该商品的价格
- </div>
- <i
- class="el-icon-question"
- style="
- font-size: 18px;
- color: #f56c6c;
- position: relative;
- top: 2px;
- "
- ></i>
- </el-tooltip>
- </p>
- </template>
- <el-input
- type="number"
- placeholder="请输入零售价"
- :disabled="addDisabled"
- @mousewheel.native.prevent
- v-model.trim="form.discountPrice"
- style="width: 220px !important"
- ></el-input>
- </el-form-item>
- <el-form-item
- label="商品团购价"
- prop="groupPurchasePrice"
- class="hiddenStart"
- :label-width="formLabelWidth"
- >
- <template slot="label">
- <p style="position: relative">
- <span style="color: #f56c6c; margin-right: 4px">*</span>
- 团购价
- <el-tooltip placement="top" popper-class="mTooltip">
- <div slot="content">乐团报名缴费时学员购买该商品的价格</div>
- <i
- class="el-icon-question"
- style="
- font-size: 18px;
- color: #f56c6c;
- position: relative;
- top: 2px;
- "
- ></i>
- </el-tooltip>
- </p>
- </template>
- <el-input
- type="number"
- placeholder="请输入商品团购价"
- :disabled="addDisabled"
- @mousewheel.native.prevent
- v-model.trim="form.groupPurchasePrice"
- style="width: 220px !important"
- ></el-input>
- </el-form-item>
- <!-- <el-form-item
- label="学员是否展示"
- prop="clientShow"
- :label-width="formLabelWidth"
- >
- <el-select
- v-model="form.clientShow"
- style="width: 100% !important"
- :disabled="addDisabled"
- placeholder="请选择学员是否展示"
- >
- <el-option label="是" :value="1"></el-option>
- <el-option label="否" :value="0"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item
- label="教务端是否展示"
- prop="educationalShow"
- :label-width="formLabelWidth"
- >
- <el-select
- v-model="form.educationalShow"
- style="width: 100% !important"
- :disabled="addDisabled"
- placeholder="请选择教务端是否展示"
- >
- <el-option label="是" :value="1"></el-option>
- <el-option label="否" :value="0"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item
- label="乐团是否展示"
- prop="musicGroupShow"
- :label-width="formLabelWidth"
- >
- <el-select
- v-model="form.musicGroupShow"
- style="width: 100% !important"
- :disabled="addDisabled"
- placeholder="请选择乐团是否展示"
- >
- <el-option label="是" :value="1"></el-option>
- <el-option label="否" :value="0"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item
- label="乐团收费模式"
- :label-width="formLabelWidth"
- prop="courseViewType"
- >
- <select-all
- v-model.trim="form.courseViewType"
- filterable
- placeholder="请选择乐团收费模式"
- multiple
- :disabled="
- addDisabled ||
- (form.musicGroupShow != 0 && form.musicGroupShow != 1)
- "
- clearable
- >
- <el-option label="课程收费" value="0"></el-option>
- <el-option label="系统收费" value="1"></el-option>
- <el-option label="团练宝收费" value="2"></el-option>
- </select-all> -->
- <!-- <el-select
- v-model="form.courseViewType"
- multiple
- placeholder="请选择乐团收费模式"
- :disabled="addDisabled"
- >
- <el-option label="课程收费" :value="0"></el-option>
- <el-option label="系统收费" :value="1"></el-option>
- <el-option label="团练宝收费" :value="2"></el-option>
- </el-select> -->
- <!-- </el-form-item> -->
- <!-- <el-form-item
- label="是否参与置换"
- prop="replacementShow"
- :label-width="formLabelWidth"
- >
- <el-select
- v-model="form.replacementShow"
- style="width: 100% !important"
- :disabled="addDisabled"
- placeholder="是否参与置换"
- >
- <el-option label="是" :value="1"></el-option>
- <el-option label="否" :value="0"></el-option>
- </el-select>
- </el-form-item> -->
- <el-alert
- title="销售渠道"
- :closable="false"
- class="alert"
- type="info"
- />
- <!-- :disabled="pageDisabled || pageType == 'update'" -->
- <!-- <el-form-item
- label="学员可见分部"
- prop="studentShowOrganId"
- :label-width="formLabelWidth"
- >
- <select-all
- v-model.trim="form.studentShowOrganId"
- filterable
- placeholder="请选择学员可见分部"
- style="width: 400px !important"
- multiple
- clearable
- :disabled="addDisabled"
- >
- <el-option
- v-for="item in selects.branchs"
- :key="item.id"
- :label="item.name"
- :value="item.id.toString()"
- ></el-option>
- </select-all>
- </el-form-item> -->
- <!-- :disabled="pageDisabled || pageType == 'update'" -->
- <el-form-item
- label="管理端APP可售分部"
- prop="educationShowOrganId"
- :label-width="formLabelWidth"
- >
- <select-all
- v-model.trim="form.educationShowOrganId"
- filterable
- placeholder="管理端APP可售分部"
- style="width: 400px !important"
- multiple
- clearable
- :disabled="addDisabled"
- >
- <el-option
- v-for="item in selects.branchs"
- :key="item.id"
- :label="item.name"
- :value="item.id.toString()"
- ></el-option>
- </select-all>
- </el-form-item>
- <!-- :disabled="pageDisabled || pageType == 'update'" -->
- <el-form-item
- label="课程收费乐团可售分部"
- prop="courseFeeShowOrganId"
- :label-width="formLabelWidth"
- >
- <select-all
- v-model.trim="form.courseFeeShowOrganId"
- filterable
- placeholder="课程收费乐团可售分部"
- style="width: 400px !important"
- multiple
- clearable
- :disabled="addDisabled"
- >
- <el-option
- v-for="item in selects.branchs"
- :key="item.id"
- :label="item.name"
- :value="item.id.toString()"
- ></el-option>
- </select-all>
- </el-form-item>
- <!-- :disabled="pageDisabled || pageType == 'update'" -->
- <el-form-item
- label="会员收费乐团可售分部"
- prop="memberFeeShowOrganId"
- :label-width="formLabelWidth"
- >
- <select-all
- v-model.trim="form.memberFeeShowOrganId"
- filterable
- placeholder="请选择会员收费团可见分部"
- style="width: 400px !important"
- multiple
- clearable
- :disabled="addDisabled"
- >
- <el-option
- v-for="item in selects.branchs"
- :key="item.id"
- :label="item.name"
- :value="item.id.toString()"
- ></el-option>
- </select-all>
- </el-form-item>
- <!-- :disabled="pageDisabled || pageType == 'update'" -->
- <el-form-item v-if="tenantId==1"
- label="乐器置换可售分部"
- prop="replacementShowOrganId"
- :label-width="formLabelWidth"
- >
- <select-all
- v-model.trim="form.replacementShowOrganId"
- filterable
- placeholder="请选择乐器置换可售分部"
- style="width: 400px !important"
- multiple
- clearable
- :disabled="addDisabled"
- >
- <el-option
- v-for="item in selects.branchs"
- :key="item.id"
- :label="item.name"
- :value="item.id.toString()"
- ></el-option>
- </select-all>
- </el-form-item>
- <el-alert
- title="商品信息"
- :closable="false"
- class="alert"
- type="info"
- />
- <el-form-item
- label="商品图片"
- prop="image"
- :label-width="formLabelWidth"
- >
- <!-- <upload
- v-model="form.image"
- :imageWidthM="400"
- :disabled="addDisabled"
- :imageHeightM="400"
- ></upload> -->
- <image-cropper :options="cropperOptions" :disabled="addDisabled" :imgSize="2" :imageUrl="form.image" @crop-upload-success="cropSuccess" />
- <p style="color: red">
- 请上传大小2M以内,格式为jpg、png、gif图片
- </p>
- </el-form-item>
- <br />
- <el-form-item
- label="商品描述"
- prop="brief"
- :label-width="formLabelWidth"
- >
- <el-input
- type="textarea"
- :disabled="addDisabled"
- v-model.trim="form.brief"
- style="width: 400px"
- ></el-input>
- </el-form-item>
- <el-form-item
- label="商品详情"
- prop="desc"
- :label-width="formLabelWidth"
- >
- <el-input
- type="textarea"
- :disabled="addDisabled"
- v-model.trim="form.desc"
- style="width: 400px"
- ></el-input>
- </el-form-item>
- </el-form>
- <span slot="footer" v-if="!addDisabled" class="dialog-footer">
- <el-button @click="routeShopStatus = false">取 消</el-button>
- <el-button @click="onShopSubmit('ruleForm')" type="primary"
- >确 定</el-button
- >
- </span>
- </el-dialog>
- </div>
- </template>
- <script>
- import pagination from "@/components/Pagination/index";
- import Upload from "@/components/Upload/index";
- import {
- categoryListTree,
- goodsQuery,
- goodsAdd,
- goodsUpdate,
- goodsDelete,
- updateGoodsStatus,
- } from "@/api/businessManager";
- import qs from "qs";
- import cleanDeep from "clean-deep";
- import store from "@/store";
- import Tooltip from "@/components/Tooltip/index";
- import { Export } from "@/utils/downLoadFile";
- import { getToken, getTenantId } from "@/utils/auth";
- import { goodsType } from "@/utils/searchArray";
- import load from "@/utils/loading";
- import { permission } from "@/utils/directivePage";
- import ImageCropper from '@/components/ImageCropper'
- // import courseEvaluateVue from '@/views/teamDetail/componentCourse/courseEvaluate.vue';
- let validPrice = (rule, value, callback) => {
- if ((value == "" && typeof value == "string") || value == null) {
- callback(new Error("请输入金额"));
- } else if (value < 0) {
- callback(new Error("输入金额必须大于或等于0"));
- } else if (value >= 100000) {
- callback(new Error("输入金额必须小于100000"));
- } else {
- callback();
- }
- };
- let validStock = (rule, value, callback) => {
- if ((value == "" && typeof value == "string") || value == null) {
- callback(new Error("请输入库存"));
- } else if (value < 0) {
- callback(new Error("库存数量必须大于或等于0"));
- } else {
- callback();
- }
- };
- export default {
- components: {
- pagination,
- Tooltip,
- Upload,
- ImageCropper
- },
- name: "shopList",
- data() {
- return {
- goodsType: goodsType,
- categoryList: [],
- goodsLoading: false,
- organId: null,
- orderDate: null,
- searchForm: {
- search: null,
- groupGoods: null,
- organId: null,
- type: null,
- status: null,
- goodsCategoryId: null,
- startTime: null,
- endTime: null,
- status: null,
- clientShow: null,
- educationalShow: null,
- musicGroupShow: null,
- courseViewType: null,
- replacementShow: null,
- courseFeeShowOrganId:null,
- educationShowOrganId:null,
- memberFeeShowOrganId:null,
- replacementShowOrganId:null,
- studentShowOrganId:null
- },
- headers: {
- Authorization: getToken(),
- tenantId: getTenantId()
- },
- searchLsit: [],
- tableList: [],
- pageInfo: {
- // 分页规则
- limit: 10, // 限制显示条数
- page: 1, // 当前页
- total: 0, // 总条数
- page_size: [10, 20, 40, 50], // 选择限制显示条数
- },
- formLabelWidth: "160px",
- routeShopStatus: false,
- addType: "create",
- addString: {
- create: "添加",
- update: "修改",
- look: "查看",
- copy: "复制",
- },
- addDisabled: false,
- form: {
- sn: null,
- brand: null,
- supplyChannel: null,
- name: null,
- type: null,
- organIdList: [],
- goodsCategoryId: null,
- specification: null,
- marketPrice: null,
- discountPrice: null,
- groupPurchasePrice: null,
- clientShow: null,
- educationalShow: null,
- musicGroupShow: null,
- courseViewType: [],
- stockWarning: null,
- image: null,
- complementGoodsIdList: null,
- goodsList: [
- {
- id: null,
- },
- ],
- brief: null,
- desc: null,
- replacementShow: null,
- studentShowOrganId: null,
- educationShowOrganId: null,
- courseFeeShowOrganId: null,
- memberFeeShowOrganId: null,
- replacementShowOrganId: null,
- },
- goodsTree: [], // 选择商品列表
- rules: {
- sn: [
- {
- required: true,
- message: "请输入商品货号",
- trigger: "blur",
- },
- ],
- brand: [
- {
- required: true,
- message: "请输入品牌",
- trigger: "blur",
- },
- {
- min: 2,
- max: 30,
- message: "长度在 2 到 30 个字符",
- trigger: "blur",
- },
- ],
- supplyChannel: [
- {
- required: true,
- message: "请输入备查货号",
- trigger: "blur",
- },
- ],
- name: [
- {
- required: true,
- message: "请输入商品名称",
- trigger: "blur",
- },
- {
- min: 2,
- max: 30,
- message: "长度在 2 到 30 个字符",
- trigger: "blur",
- },
- ],
- type: [
- {
- required: true,
- message: "请选择商品分类",
- trigger: "change",
- },
- ],
- organIdList: [
- {
- required: true,
- message: "请选择所属分部",
- trigger: "change",
- },
- ],
- goodsCategoryId: [
- {
- required: true,
- message: "请选择商品类型",
- trigger: "change",
- },
- ],
- specification: [
- {
- required: true,
- message: "请输入商品型号",
- trigger: "blur",
- },
- {
- min: 2,
- max: 30,
- message: "长度在 2 到 30 个字符",
- trigger: "blur",
- },
- ],
- marketPrice: [
- {
- required: true,
- validator: validPrice,
- trigger: "blur",
- },
- ],
- discountPrice: [
- {
- required: true,
- validator: validPrice,
- trigger: "blur",
- },
- ],
- groupPurchasePrice: [
- {
- required: true,
- validator: validPrice,
- trigger: "blur",
- },
- ],
- clientShow: [
- {
- required: true,
- message: "请选择学员是否展示",
- trigger: "change",
- },
- ],
- educationalShow: [
- {
- required: true,
- message: "请选择教务端是否展示",
- trigger: "change",
- },
- ],
- musicGroupShow: [
- {
- required: true,
- message: "请选择乐团是否展示",
- trigger: "change",
- },
- ],
- courseViewType: [
- { required: true, message: "请选乐团收费模式", trigger: "change" },
- ],
- replacementShow: [
- {
- required: true,
- message: "请选择是否参与置换",
- trigger: "change",
- },
- ],
- stockWarning: [
- {
- required: true,
- message: "请选择是否库存预警",
- trigger: "change",
- },
- ],
- image: [
- {
- required: true,
- message: "请选择图片",
- trigger: "blur",
- },
- ],
- brief: [
- {
- required: true,
- message: "请输入商品描述",
- trigger: "blur",
- },
- ],
- desc: [
- {
- required: true,
- message: "请输入商品详情",
- trigger: "blur",
- },
- ],
- },
- selectGoodsList: [],
- tenantId:'',
- cropperOptions: {
- autoCrop: true, //是否默认生成截图框
- autoCropWidth: 300, //默认生成截图框宽度
- autoCropHeight: 300, //默认生成截图框高度
- fixedBox: true, //是否固定截图框大小 不允许改变
- previewsCircle: false, //预览图是否是圆形
- title: '商品图片', //模态框上显示的标题
- },
- };
- },
- async mounted() {
- // 获取分部
- this.tenantId = this.$helpers.tenantId
- await this.$store.dispatch("setBranchs");
- this.init();
- },
- methods: {
- permission(str) {
- return permission(str);
- },
- init() {
- this.getList();
- this.getCategory();
- },
- getCategory() {
- let params = {
- delFlag: 0,
- rows: 9999,
- };
- categoryListTree(params).then((res) => {
- let result = res.data;
- if (res.code == 200) {
- let tempArray = [];
- result.rows.forEach((row) => {
- tempArray.push({
- label: row.name,
- value: row.id,
- });
- });
- this.categoryList = tempArray;
- }
- });
- },
- cropSuccess(data) {
- this.form.image = data.data.url;
- },
- async onUpdate(row, type) {
- let title = type == 1 ? "你是否下架该商品?" : "你是否上架该商品?";
- this.$confirm(title, "提示", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning",
- })
- .then(async () => {
- await updateGoodsStatus({
- goodsId: row.id,
- status: row.status ? 0 : 1,
- }).then((res) => {
- this.messageTips(row.status ? "下架" : "上架", res);
- });
- })
- .catch(() => {});
- },
- onPurchaseList(row) {
- this.$router.push({
- path: "/shopManager/purchaseLlist",
- query: {
- name: row.name,
- goodsId: row.id,
- },
- });
- },
- onDelete(row) {
- this.$confirm("您确定删除该商品吗?", "提示", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning",
- })
- .then(() => {
- goodsDelete(row.id).then((res) => {
- this.messageTips("删除", res);
- });
- })
- .catch(() => {});
- },
- searchOrderDate(value) {
- if (value) {
- this.searchForm.startTime = value[0];
- this.searchForm.endTime = value[1];
- } else {
- this.searchForm.startTime = null;
- this.searchForm.endTime = null;
- }
- },
- messageTips(title, res) {
- if (res.code == 200) {
- this.$message.success(title + "成功");
- this.typeStatus = false;
- this.getList();
- } else {
- this.$message.error(res.msg);
- }
- },
- getList() {
- let params = Object.assign({}, this.searchForm);
- params.organId = this.organId;
- params.rows = this.pageInfo.limit;
- params.page = this.pageInfo.page;
- goodsQuery(params).then((res) => {
- if (res.code == 200 && res.data) {
- this.tableList = res.data.rows;
- this.pageInfo.total = res.data.total;
- }
- });
- },
- getAllGoodsList(organId) {
- // 获取所有商品
- goodsQuery({
- rows: 9999,
- page: 1,
- groupGoods: 0,
- organId,
- status: 1,
- }).then((res) => {
- if (res.code == 200 && res.data) {
- this.selectGoodsList = res.data.rows;
- }
- });
- },
- onSearch() {
- this.pageInfo.page = 1;
- this.getList();
- },
- onReset() {
- // 重置
- this.$refs.searchForm.resetFields();
- this.getList();
- },
- onShopComAdd() {
- this.form = {
- sn: null,
- brand: null,
- supplyChannel: null,
- name: null,
- type: null,
- goodsCategoryId: null,
- specification: null,
- marketPrice: null,
- discountPrice: null,
- groupPurchasePrice: null,
- clientShow: null,
- educationalShow: null,
- musicGroupShow: null,
- organIdList: [],
- courseViewType: [],
- stockWarning: null,
- image: null,
- complementGoodsIdList: null,
- goodsList: [
- {
- id: null,
- },
- ],
- brief: null,
- desc: null,
- replacementShow: null,
- };
- this.onValidGoodsStatus();
- this.routeShopStatus = true;
- this.addType = "create";
- this.addDisabled = false;
- this.$nextTick((res) => {
- if (this.$refs["ruleForm"]) {
- this.$refs["ruleForm"].resetFields();
- }
- });
- },
- onOrganChange(val) {
- if (val && val.length > 0) {
- // 获取所有商品
- this.getAllGoodsList(val.join(","));
- }
- },
- async onValidGoodsStatus() {
- // 更新商品选择状态
- await this.getAllGoodsList();
- console.log(this.form.goodsList);
- let goodsList = this.form.goodsList;
- let tempIds = [];
- goodsList.forEach((item) => {
- tempIds.push(item.id);
- });
- this.selectGoodsList.forEach((item) => {
- item.disabled = false;
- if (tempIds.includes(item.id)) {
- item.disabled = true;
- }
- });
- },
- onShopOperation(type, row) {
- // 添加或修改
- let params = {
- type: type,
- };
- if (row) {
- params.id = row.id;
- }
- let paramInfo = JSON.stringify(params);
- this.addType = type;
- this.addDisabled = type == "look" ? true : false;
- // 判断是否是修改组合商品
- if (
- (type == "update" || type == "look" || type == "copy") &&
- row.complementGoodsIdList
- ) {
- this.routeShopStatus = true;
- let form = this.form;
- for (let i in form) {
- form[i] = row[i];
- }
- let ids = row.complementGoodsIdList.split(",");
- let goodsList = [];
- ids.forEach((item) => {
- goodsList.push({
- id: Number(item),
- });
- });
- form.goodsList = goodsList;
- form.id = row.id;
- if (row.courseViewType) {
- form.courseViewType = row.courseViewType.split(",");
- }
- if (row.studentShowOrganId) {
- form.studentShowOrganId = row.studentShowOrganId.split(",");
- }
- if (row.educationShowOrganId) {
- form.educationShowOrganId = row.educationShowOrganId.split(",");
- }
- if (row.courseFeeShowOrganId) {
- form.courseFeeShowOrganId = row.courseFeeShowOrganId.split(",");
- }
- if (row.memberFeeShowOrganId) {
- form.memberFeeShowOrganId = row.memberFeeShowOrganId.split(",");
- }
- if (row.replacementShowOrganId) {
- form.replacementShowOrganId = row.replacementShowOrganId.split(",");
- }
- // if (row.organIdList) {
- // form.organIdList = row.organIdList.split(",");
- // }
- this.getAllGoodsList();
- this.onValidGoodsStatus();
- } else {
- let pageTitle = "添加";
- if (type == "update") {
- pageTitle = "修改";
- } else if (type == "look") {
- pageTitle = "查看";
- } else if (type == "copy") {
- pageTitle = "复制";
- }
- this.$router.push(
- {
- path: "/shopManager/shopOperation",
- query: {
- paramInfo,
- },
- },
- (route) => {
- route.meta.title = pageTitle + "商品";
- }
- );
- }
- },
- beforeUpload(file) {
- // console.log(file.type)
- // const isJPG = file.type === '.xlsx' || file.type === '.xls';
- // // const isLt2M = file.size / 1024 / 1024 < 2;
- // if (!isJPG) {
- // this.$message.error('上传头像图片只能是 JPG 格式!');
- // }
- // return isJPG;
- // this.goodsLoading = true
- load.startLoading();
- },
- handleSuccess(response, file, fileList) {
- // 导入商品
- // 报表导出
- load.endLoading();
- if (response.code == 200) {
- this.$message.success("导入成功");
- this.getList();
- } else {
- this.$message.error(response.msg);
- }
- },
- handleError(err, file, fileList) {
- load.endLoading();
- },
- onDownload() {
- // 下载模板
- // // 报表导出
- Export(this, {
- url: "/api-web/import/downloadTemplate",
- params: {
- templateType: "GOODS",
- },
- fileName: "商品导入模板.xls",
- });
- },
- exportShopList() {
- Export(
- this,
- {
- url: "/api-web/export/goods",
- params: qs.stringify(cleanDeep(this.searchForm)),
- fileName: "商品导出.xls",
- method: "post",
- },
- "确定导出商品"
- );
- },
- onFormClose(formName) {
- // 关闭弹窗重置验证
- this.$refs[formName].resetFields();
- },
- onGoodsChange() {
- let selectGoodsList = this.selectGoodsList;
- let goodsList = this.form.goodsList;
- let tempIds = [];
- goodsList.forEach((item) => {
- if (item.id) {
- tempIds.push(item.id);
- }
- });
- selectGoodsList.forEach((item) => {
- if (tempIds.includes(item.id)) {
- item.disabled = true;
- } else {
- item.disabled = false;
- }
- });
- this.calcPrice();
- },
- removeGoodsList(item) {
- let tempId = item.id;
- let selectGoodsList = this.selectGoodsList;
- selectGoodsList.forEach((item) => {
- if (item.id == tempId) {
- item.disabled = false;
- }
- });
- const index = this.form.goodsList.indexOf(item);
- if (index !== -1) {
- this.form.goodsList.splice(index, 1);
- }
- this.calcPrice();
- },
- addGoodsList() {
- this.form.goodsList.push({
- id: null,
- });
- },
- onShopSubmit(formName) {
- this.$refs[formName].validate((valid) => {
- if (valid) {
- let form = Object.assign({}, this.form);
- let tempIds = [];
- form.goodsList.forEach((item) => {
- if (item.id) {
- tempIds.push(item.id);
- }
- });
- form.complementGoodsIdList = tempIds.join(",");
- // form.courseViewType = form.courseViewType.join(",");
- // form.organIdList = form.courseViewType.join(",");
- if (form.studentShowOrganId) {
- form.studentShowOrganId = form.studentShowOrganId.join(",");
- }
- if (form.educationShowOrganId) {
- form.educationShowOrganId = form.educationShowOrganId.join(",");
- }
- if (form.courseFeeShowOrganId) {
- form.courseFeeShowOrganId = form.courseFeeShowOrganId.join(",");
- }
- if (form.memberFeeShowOrganId) {
- form.memberFeeShowOrganId = form.memberFeeShowOrganId.join(",");
- }
- if (form.replacementShowOrganId) {
- form.replacementShowOrganId = form.replacementShowOrganId.join(",");
- }
- if(!form.studentShowOrganId&&!form.educationShowOrganId&&!form.courseFeeShowOrganId&&!form.courseFeeShowOrganId&&!form.replacementShowOrganId){
- this.$message.error('请至少选择一个可见分部')
- return
- }
- form.goodsList = null;
- if (this.addType == "create" || this.addType == "copy") {
- if (this.form.id) {
- // 判断有没有Id,如果有则删除
- delete this.form.id;
- }
- form.status = "NO"; // 默认上架
- goodsAdd(cleanDeep(form)).then((res) => {
- this.messageTips("保存", res);
- });
- } else if (this.addType == "update") {
- goodsUpdate(cleanDeep(form)).then((res) => {
- this.messageTips("保存", res);
- });
- }
- } else {
- this.$nextTick(() => {
- let isError = document.getElementsByClassName("is-error");
- isError[0].scrollIntoView({
- block: "center",
- behavior: "smooth",
- });
- });
- return false;
- }
- });
- },
- messageTips(title, res) {
- if (res.code == 200) {
- this.$message.success(title + "成功");
- this.getList();
- this.routeShopStatus = false;
- } else {
- this.$message.error(res.msg);
- }
- },
- calcPrice() {
- let selectGoodsList = this.selectGoodsList;
- let form = this.form;
- let goodsList = form.goodsList;
- let tempIds = [];
- goodsList.forEach((item) => {
- if (item.id) {
- tempIds.push(item.id);
- }
- });
- let groupPurchasePrice = 0,
- marketPrice = 0,
- discountPrice = 0;
- selectGoodsList.forEach((item) => {
- if (tempIds.includes(item.id)) {
- groupPurchasePrice += item.groupPurchasePrice;
- marketPrice += item.marketPrice;
- discountPrice += item.discountPrice;
- }
- });
- form.groupPurchasePrice = Number(groupPurchasePrice.toFixed(2));
- form.discountPrice = Number(discountPrice.toFixed(2));
- form.marketPrice = Number(marketPrice.toFixed(2));
- },
- },
- filters: {
- courseViewTypeFormat(value) {
- let template = ["课程收费", "AMR收费", "会员收费"];
- if (!value) {
- return "";
- }
- let ids = value.split(",");
- let str = [];
- ids.forEach((item) => {
- str.push(template[item]);
- });
- return str.join(",");
- },
- },
- };
- </script>
- <style lang="scss" scoped>
- .alert {
- margin-bottom: 22px;
- }
- .shopImage {
- width: 60px;
- height: 60px;
- }
- .shopDesc {
- max-height: 70px;
- overflow: hidden;
- }
- .el-select__tags .el-tag.el-tag--info.el-tag--small.el-tag--light {
- max-width: 95px;
- }
- .hiddenStart {
- /deep/.el-form-item__label:before {
- content: "" !important;
- position: absolute;
- color: transparent;
- margin-right: 4px;
- }
- }
- </style>
|