123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894 |
- <template>
- <div class="addGoods app-container">
- <el-form
- :model="setQuery"
- ref="setQuery"
- :rules="rules"
- v-loading="loading"
- label-width="150px"
- >
- <el-form-item label="商品图片:">
- <Upload
- disabled
- width="100px"
- height="100px"
- type="goodsImg"
- :imgUrl="setQuery.goodsImg"
- @uploadEnd="uploadEnd"
- ></Upload>
- </el-form-item>
- <el-form-item label="商品名称:" prop="goodsName">
- <el-input
- disabled
- v-model="setQuery.goodsName"
- class="item-width-300"
- ></el-input>
- </el-form-item>
- <el-form-item label="商品类型:" prop="goodsType">
- <el-select
- disabled
- v-model="setQuery.goodsType"
- class="item-width-300"
- placeholder="请选择商品类型"
- >
- <el-option
- v-for="item in options"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- >
- </el-option>
- </el-select>
- </el-form-item>
- <template v-if="setQuery.goodsType == 1">
- <el-form-item label="优惠券类型:" prop="goodsCode">
- <el-select
- disabled
- v-model="setQuery.goodsCode"
- class="item-width-300"
- placeholder="请选择优惠券类型"
- >
- <el-option
- v-for="item in options1"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- >
- </el-option>
- </el-select>
- </el-form-item>
- <el-form-item
- v-if="setQuery.goodsCode == 102"
- label="立减额度:"
- prop="discount"
- >
- <el-input
- disabled
- v-model.number="setQuery.discount"
- :maxlength="18"
- class="item-width-300"
- >
- <template slot="append">元</template>
- </el-input>
- </el-form-item>
- <el-form-item
- v-else-if="setQuery.goodsCode == 103"
- label="折扣率:"
- prop="discount"
- >
- <el-input
- disabled
- v-model.number="setQuery.discount"
- :maxlength="18"
- class="item-width-300"
- >
- <template slot="append">%</template>
- </el-input>
- </el-form-item>
- <el-form-item
- v-else-if="setQuery.goodsCode == 104"
- label="满减规则:"
- prop="discount"
- >
- <el-input
- disabled
- v-model.number="setQuery.condition"
- :maxlength="18"
- class="item-width-150"
- >
- </el-input>
- 减
- <el-input
- disabled
- v-model.number="setQuery.discount"
- :maxlength="18"
- class="item-width-100"
- >
- </el-input>
- </el-form-item>
- </template>
- <!-- 研学 -->
- <template v-else-if="setQuery.goodsType == 6">
- <el-form-item label="研学栏目:" prop="columnId">
- <el-cascader
- disabled
- class="item-width-300"
- v-model="setQuery.columnId"
- show-all-levels
- :options="columnOptions"
- :props="{ value: 'id', label: 'columnName', children: 'pages' }"
- clearable
- ></el-cascader>
- </el-form-item>
- </template>
- <el-form-item label="售价:" prop="realPrice">
- <el-input
- disabled
- v-model.number="setQuery.realPrice"
- :maxlength="18"
- class="item-width-300"
- >
- <template slot="append">元</template>
- </el-input>
- </el-form-item>
- <el-form-item
- label="库存:"
- v-if="setQuery.goodsCode == 101"
- prop="exchangeCodeDataCode"
- >
- <el-select
- disabled
- v-model="setQuery.exchangeCodeDataCode"
- class="item-width-300"
- placeholder="请选择库存"
- >
- <el-option
- v-for="item in options2"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- >
- </el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="库存:" v-else prop="stockCount">
- <el-input
- disabled
- v-model.number="setQuery.stockCount"
- :maxlength="18"
- class="item-width-300"
- >
- </el-input>
- </el-form-item>
- <template
- v-if="
- setQuery.goodsCode == 102 ||
- setQuery.goodsCode == 103 ||
- setQuery.goodsCode == 104
- "
- >
- <el-form-item disabled label="有效期限制:" prop="validType">
- <el-radio disabled v-model="setQuery.validType" :label="1"
- >不限制</el-radio
- >
- <el-radio disabled v-model="setQuery.validType" :label="2"
- >限制</el-radio
- >
- <div v-show="setQuery.validType == 2">
- <el-date-picker
- disabled
- v-model="date1"
- type="datetimerange"
- class="item-width-400"
- value-format="yyyy-MM-dd HH:mm:ss"
- :picker-options="pickerOptions"
- range-separator="至"
- start-placeholder="开始日期"
- end-placeholder="结束日期"
- align="right"
- >
- </el-date-picker>
- </div>
- </el-form-item>
- <el-form-item disabled label="使用限制时间:" prop="shopName">
- <div class="tabs">
- <div
- class="tab"
- v-for="(item, index) in tabs"
- :class="[setQuery.useType == index + 1 ? 'active' : '']"
- :key="item"
- @click="handleTab(index + 1)"
- >
- {{ item }}
- </div>
- </div>
- <el-date-picker
- disabled
- v-show="setQuery.useType == 2"
- v-model="date"
- type="datetimerange"
- class="item-width-400"
- value-format="yyyy-MM-dd HH:mm:ss"
- :picker-options="pickerOptions"
- range-separator="至"
- start-placeholder="开始日期"
- end-placeholder="结束日期"
- align="right"
- >
- </el-date-picker>
- <el-select
- disabled
- v-show="setQuery.useType == 3 || setQuery.useType == 4"
- v-model="setQuery.day"
- clearable
- filterable
- class="item-width-400"
- placeholder="请选择"
- >
- <el-option
- v-for="item in nums"
- :key="item"
- :label="
- (nums == 7 ? '每周' : '每月') + item + (nums == 31 ? '号' : '')
- "
- :value="item"
- >
- </el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="过期自动退:" prop="advent">
- <el-radio disabled v-model="setQuery.advent" :label="1">是</el-radio>
- <el-radio disabled v-model="setQuery.advent" :label="2">否</el-radio>
- </el-form-item>
- <el-form-item label="支付抵扣限制:" prop="useMethod">
- <el-radio disabled v-model="setQuery.useMethod" :label="1"
- >线上和线下</el-radio
- >
- <el-radio disabled v-model="setQuery.useMethod" :label="2"
- >仅线上</el-radio
- >
- <el-radio disabled v-model="setQuery.useMethod" :label="3"
- >仅线下</el-radio
- >
- </el-form-item>
- <el-form-item disabled label="优惠券适用商品范围:" prop="useRangeType">
- <el-radio disabled v-model="setQuery.useRangeType" :label="1"
- >全部商品</el-radio
- >
- <el-radio disabled v-model="setQuery.useRangeType" :label="2"
- >指定商品</el-radio
- >
- </el-form-item>
- <template v-if="setQuery.useRangeType == 2 && setQuery.useMethod != 3">
- <el-table
- :data="tableData"
- tooltip-effect="dark"
- border
- v-loading="tableLoading"
- style="width: 100%"
- >
- <el-table-column
- align="center"
- label="商品名称"
- prop="goodsName"
- show-overflow-tooltip
- >
- </el-table-column>
- <el-table-column
- prop="goodsType"
- align="center"
- label="类型"
- show-overflow-tooltip
- >
- <template slot-scope="scope">
- {{ scope.row.goodsType == 1 ? "优惠券" : "研学" }}
- </template>
- </el-table-column>
- <el-table-column
- prop="discountContent"
- align="center"
- label="所属店铺"
- show-overflow-tooltip
- >
- </el-table-column>
- <el-table-column prop="address" align="center" label="操作">
- <template slot-scope="scope">
- <el-button type="text" size="small" @click="">查看</el-button>
- </template>
- </el-table-column>
- </el-table>
- <div class="page-box">
- <el-pagination
- @size-change="handleSizeChange"
- @current-change="handleCurrentChange"
- background
- :current-page="query.currentPage"
- :page-sizes="[10]"
- :page-size="query.pageSize"
- layout="total, sizes, prev, pager, next, jumper"
- :total="total"
- >
- </el-pagination>
- </div>
- </template>
- </template>
- <!-- 研学 -->
- <template v-if="setQuery.goodsType == 6">
- <el-form-item label="使用限制时间:" prop="shopName">
- <div class="tabs">
- <div
- class="tab"
- v-for="(item, index) in tabs"
- :class="[setQuery.useType == index + 1 ? 'active' : '']"
- :key="item"
- @click="handleTab(index + 1)"
- >
- {{ item }}
- </div>
- </div>
- <el-date-picker
- v-show="setQuery.useType == 2"
- v-model="date"
- type="datetimerange"
- class="item-width-400"
- value-format="yyyy-MM-dd HH:mm:ss"
- :picker-options="pickerOptions"
- range-separator="至"
- start-placeholder="开始日期"
- end-placeholder="结束日期"
- align="right"
- >
- </el-date-picker>
- <el-select
- v-show="setQuery.useType == 3 || setQuery.useType == 4"
- v-model="setQuery.day"
- clearable
- filterable
- class="item-width-400"
- placeholder="请选择"
- >
- <el-option
- v-for="item in nums"
- :key="item"
- :label="
- (nums == 7 ? '每周' : '每月') + item + (nums == 31 ? '号' : '')
- "
- :value="item"
- >
- </el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="研学商品顶部图:" prop="studyItem">
- <div class="notice">需真实展示店内环境情况 查看示例图</div>
- <div class="notice">
- (图片支持jpg, png, bmp格式,建议上传100kb~500kb大小文件)
- </div>
- <Upload
- type="studyItem"
- id="studyItem"
- width="300px"
- height="200px"
- uploadType="GOODS_INFO"
- :imgUrl="setQuery.studyItem"
- @uploadEnd="uploadEnd"
- ></Upload>
- </el-form-item>
- </template>
- <el-form-item label="商品详情:" prop="goodsDescribe">
- <div style="border: 1px solid #E4E7ED; width: 500px;border-radius:4px;padding:0 15px;min-height:60px;" v-html="setQuery.goodsDescribe">
- </div>
- </el-form-item>
- <el-form-item label="商品购买设置:">
- <el-table
- :data="setQuery.details"
- tooltip-effect="dark"
- border
- style="width: 600px"
- >
- <el-table-column
- align="center"
- label="人员类型"
- prop="setMealId"
- show-overflow-tooltip
- >
- <template slot-scope="scope">
- {{ scope.row.setMealId | filterMeal(that) }}
- </template>
- </el-table-column>
- <el-table-column
- prop="shopName"
- align="center"
- label="购买设置"
- show-overflow-tooltip
- >
- <template slot-scope="scope">
- <el-checkbox
- :true-label="2"
- :false-label="1"
- v-model="scope.row.buySet"
- >限制购买</el-checkbox
- >
- </template>
- </el-table-column>
- <el-table-column
- prop="shopName"
- align="center"
- label="限购数量"
- show-overflow-tooltip
- >
- <template slot-scope="scope">
- <el-input
- v-model="scope.row.buyNum"
- :maxlength="8"
- size="small"
- class="item-width-100"
- >
- </el-input>
- </template>
- </el-table-column>
- <el-table-column
- prop="shopName"
- align="center"
- label="优惠价格"
- show-overflow-tooltip
- >
- <template slot-scope="scope">
- <el-input
- v-model="scope.row.buyPrice"
- :maxlength="8"
- size="small"
- class="item-width-100"
- >
- </el-input>
- </template>
- </el-table-column>
- </el-table>
- </el-form-item>
- <el-form-item label="分账规则:" prop="shareId">
- <el-select
- v-model="setQuery.shareId"
- class="item-width-300"
- placeholder="请选择分账规则"
- >
- <el-option
- v-for="item in ruleOptions"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- >
- </el-option>
- </el-select>
- </el-form-item>
- </el-form>
- <div class="btn-group" v-if="mode != 'detail'">
- <el-button>取 消</el-button>
- <el-button type="primary" :loading="loading" @click="save"
- >确 定</el-button
- >
- </div>
- </div>
- </template>
- <script>
- import {
- allCouponByShop,
- get,
- getGoodsCoupon,
- search,
- goodsCouponSet,
- addOrUpdate
- } from "@/api/goods";
- import { getSetMealNameAndId } from "@/api/common";
- import { getData } from "@/api/study";
- import {getRuleList } from "@/api/rule";
- import Upload from "@/components/Upload";
- export default {
- components: {
- Upload,
- },
- data() {
- return {
- mode: "add",
- that: this,
- nums: 7,
- value2: "",
- tabs: ["不限制", "自定义时间", "每周", "每月"],
- tab: 0,
- date: "",
- date1: "",
- loading: false,
- tableLoading: false,
- tableData: [],
- imgList: [],
- ruleOptions:[],
- query: {
- shopId: localStorage.getItem("epid"),
- currentPage: 1,
- pageSize: 10,
- },
- total: 0,
- setQuery: {
- advent: 1,
- condition: 0,
- day: 0,
- discount: 0,
- exchangeCodeDataCode: "",
- goodsCode: "",
- goodsDescribe: "",
- goodsId: "",
- goodsImg: "",
- goodsName: "",
- goodsType: "",
- goodsWeight: 0,
- realPrice: 0,
- shopId: localStorage.getItem("epid"),
- stockCount: 0,
- useEndTime: "",
- useMethod: 1,
- useRange: "",
- useRangeType: 1,
- useStartTime: "",
- useType: 1,
- validEndTime: "",
- validStartTime: "",
- validType: 1,
- },
- rules: {
- condition: [
- { required: true, message: "请输入满足条件", trigger: "blur" },
- ],
- discount: [
- { required: true, message: "请输入 优惠值", trigger: "blur" },
- ],
- goodsCode: [
- { required: true, message: "请选择优惠券类型", trigger: "change" },
- ],
- // goodsDescribe: [{ required: true, message: "请输入", trigger: "blur" }],
- goodsName: [
- { required: true, message: "请输入商品名称", trigger: "blur" },
- ],
- goodsType: [
- { required: true, message: "请选择商品类型", trigger: "change" },
- ],
- realPrice: [{ required: true, message: "请输入售价", trigger: "blur" }],
- stockCount: [
- { required: true, message: "请输入库存", trigger: "blur" },
- ],
- shareId: [{ required: true, message: "请选择分账规则", trigger: "change" }],
- // goodsType: [{ required: true, message: "请选择商品类型", trigger: "change" }],
- // goodsType: [{ required: true, message: "请选择商品类型", trigger: "change" }],
- // goodsType: [{ required: true, message: "请选择商品类型", trigger: "change" }],
- },
- options: [
- {
- value: "1",
- label: "优惠券",
- },
- {
- value: "6",
- label: "研学",
- },
- ],
- options1: [
- // {
- // value: "102",
- // label: "立减券",
- // },
- // {
- // value: "103",
- // label: "折扣券",
- // },
- // {
- // value: "104",
- // label: "满减券",
- // },
- // {
- // value: "101",
- // label: "兑换码",
- // },
- ],
- options2: [],
- mealOption: [],
- pickerOptions: {
- shortcuts: [
- {
- text: "最近一周",
- onClick(picker) {
- const end = new Date();
- const start = new Date();
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 6);
- picker.$emit("pick", [start, end]);
- },
- },
- {
- text: "最近一个月",
- onClick(picker) {
- const end = new Date();
- const start = new Date();
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
- picker.$emit("pick", [start, end]);
- },
- },
- {
- text: "最近三个月",
- onClick(picker) {
- const end = new Date();
- const start = new Date();
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
- picker.$emit("pick", [start, end]);
- },
- },
- ],
- },
- };
- },
- watch: {
- // 使用限制时间
- date(val) {
- if (val) {
- this.setQuery.useStartTime = val[0];
- this.setQuery.useEndTime = val[1];
- } else {
- this.setQuery.useStartTime = "";
- this.setQuery.useEndTime = "";
- }
- },
- // 有效期时间
- date1(val) {
- if (val) {
- this.setQuery.validStartTime = val[0];
- this.setQuery.validEndTime = val[1];
- } else {
- this.setQuery.validStartTime = "";
- this.setQuery.validEndTime = "";
- }
- },
- },
- filters: {
- filterMeal: function (val, that) {
- let msg;
- that.mealOption.map((item) => {
- if (val == item.value) {
- msg = item.label;
- } else if (val === 0) {
- msg = "无套餐";
- }
- });
- return msg;
- },
- },
- methods: {
- // 获取研学栏目
- getData() {
- getData().then((res) => {
- if (res.state == "Success") {
- this.columnOptions = res.content;
- }
- });
- },
- uploadEnd(val) {
- this.setQuery[val.type] = val.url;
- },
- handleSizeChange(val) {
- this.query.currentPage = 1;
- this.query.pageSize = val;
- this.allCouponByShop();
- },
- handleCurrentChange(val) {
- this.query.currentPage = val;
- this.allCouponByShop();
- },
- handleTab(val) {
- if (this.mode == "detail") return;
- this.setQuery.useType = val;
- this.setQuery.day = "";
- val == 3 ? (this.nums = 7) : (this.nums = 31);
- },
- save() {
- this.$refs.setQuery.validate((v) => {
- if (v) {
- this.setQuery.goodsId = this.$route.query.id
- addOrUpdate(this.setQuery).then((res) => {
- this.loading = false;
- if (res.state == "Success") {
- this.goodsCouponSet();
- }
- })
- }
- });
- },
- // 获取兑换码库存
- getCode() {
- search({ currentPage: 1, pageSize: 999 }).then((res) => {
- if (res.state == "Success") {
- res.content.records.map((item) => {
- this.options2.push({
- label: item.exchangeCodeDataName + `(${item.totalNum})`,
- value: item.exchangeCodeDataId,
- });
- });
- }
- });
- },
- // 获取优惠券类型
- getGoodsCoupon() {
- getGoodsCoupon().then((res) => {
- if (res.state == "Success") {
- for (const key in res.content) {
- if (Object.hasOwnProperty.call(res.content, key)) {
- this.options1.push({
- label: res.content[key],
- value: key,
- });
- }
- }
- }
- });
- },
- // 所有商品
- allCouponByShop() {
- this.tableLoading = true;
- allCouponByShop(this.query).then((res) => {
- this.tableLoading = false;
- if (res.state == "Success") {
- this.tableData = res.content;
- }
- });
- },
- // 商品详情
- get() {
- this.loading = true;
- get({
- goodsId: this.$route.query.id,
- shopId: this.$route.query.shopId,
- }).then((res) => {
- this.loading = false;
- if (res.state == "Success") {
- this.setQuery = res.content;
- this.setQuery.shopId = localStorage.getItem("epid");
- // 使用时间为自定义时
- if (this.setQuery.useType == 2) {
- this.date = [this.setQuery.useStartTime, this.setQuery.useEndTime];
- }
- // 限制有效期
- if (this.setQuery.validType == 2) {
- this.date1 = [
- this.setQuery.validStartTime,
- this.setQuery.validEndTime,
- ];
- }
- this.setQuery.exchangeCodeDataCode = this.setQuery.exchangeCodeDataId;
- // 初始化购买设置
- if (!this.setQuery.details) {
- this.setQuery.details = [];
- this.mealOption.map((item) => {
- this.setQuery.details.push({
- buyNum: 0,
- buyPrice: this.setQuery.realPrice,
- buySet: 2,
- setMealId: item.value,
- });
- });
- }
- }
- });
- },
- getSetMealNameAndId() {
- return new Promise((resolve, reject) => {
- getSetMealNameAndId().then((res) => {
- if (res.state == "Success") {
- for (const key in res.content) {
- if (Object.hasOwnProperty.call(res.content, key)) {
- this.mealOption.push({
- label: res.content[key],
- value: key,
- });
- }
- }
- resolve();
- }
- });
- });
- },
- // 商品购买配置
- goodsCouponSet() {
- this.loading = true;
- goodsCouponSet({
- goodsCouponSets: this.setQuery.details,
- goodsId: this.$route.query.id,
- shopId: this.$route.query.shopId,
- }).then((res) => {
- this.loading = true;
- if (res.state == "Success") {
- this.$notify({
- title: "成功",
- message: "操作成功",
- type: "success",
- });
- this.$router.push("/operationManage/goodsManage/index");
- }
- });
- },
- // 规则
- getRuleList() {
- getRuleList({currentPage:1,pageSize:999}).then((res) => {
- if (res.state == "Success") {
- res.content.records.map(item=>{
- this.ruleOptions.push({
- label:item.shareRule,
- value:item.id
- })
- })
- }
- });
- },
- },
- created() {
- this.mode = this.$route.query.mode || "add";
- this.getCode();
- this.getData();
- this.getGoodsCoupon();
- this.getRuleList()
- this.getSetMealNameAndId().then(() => {
- if (this.$route.query.id) {
- this.get();
- }
- });
- },
- };
- </script>
- <style lang="scss" scoped>
- @import "@/styles/element-variables";
- .addGoods {
- padding-bottom: 40px;
- .btn-group {
- display: flex;
- align-items: center;
- justify-content: center;
- }
- .tabs {
- display: flex;
- border-radius: 4px;
- margin-bottom: 10px;
- cursor: pointer;
- .tab {
- width: 90px;
- height: 30px;
- line-height: 30px;
- text-align: center;
- border: 1px solid #f1f1f1;
- }
- }
- .active {
- color: $--color-primary;
- border: 1px solid $--color-primary !important;
- background: #d1d3fa;
- border-radius: 4px;
- }
- .notice {
- font-size: 12px;
- color: #ccc;
- }
- }
- </style>
|