123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306 |
- <template>
- <div style="margin-top: 50px">
- <el-form
- :model="value"
- :rules="rules"
- ref="productInfoForm"
- label-width="120px"
- style="width: 600px"
- size="small"
- >
- <el-form-item label="商品分类:" prop="productCategoryId">
- <el-cascader
- :disabled="!isEdit"
- v-model="selectProductCateValue"
- :options="productCateOptions"
- >
- </el-cascader>
- </el-form-item>
- <el-form-item label="商品名称:" prop="name">
- <el-input v-model="value.name" :disabled="!isEdit"></el-input>
- </el-form-item>
- <!-- <el-form-item label="副标题:" prop="subTitle">
- <el-input v-model="value.subTitle" :disabled="!isEdit"></el-input>
- </el-form-item> -->
- <el-form-item label="商品品牌:" prop="brandId">
- <el-select
- v-model="value.brandId"
- @change="handleBrandChange"
- :disabled="!isEdit"
- placeholder="请选择品牌"
- >
- <el-option
- v-for="item in brandOptions"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- >
- </el-option>
- </el-select>
- </el-form-item>
- <!-- <el-form-item label="商品介绍:">
- <el-input
- :autoSize="true"
- v-model="value.description"
- :disabled="!isEdit"
- type="textarea"
- placeholder="请输入内容"
- ></el-input>
- </el-form-item> -->
- <el-form-item label="商品货号:">
- <el-input v-model="value.productSn" :disabled="!isEdit"></el-input>
- </el-form-item>
- <el-form-item label="商品售价:" prop="price">
- <el-input-number
- v-model="value.price"
- :disabled="!isEdit"
- autocomplete="off"
- controls-position="right"
- class="number-input"
- type="number"
- ></el-input-number>
- </el-form-item>
- <el-form-item label="市场价:" prop="originalPrice">
- <el-input-number
- v-model="value.originalPrice"
- type="number"
- autocomplete="off"
- controls-position="right"
- class="number-input"
- :disabled="!isEdit"
- ></el-input-number>
- </el-form-item>
- <!-- <el-form-item label="商品库存:">
- <el-input-number
- v-model="value.stock"
- type="number"
- autocomplete="off"
- controls-position="right"
- class="number-input"
- :disabled="!isEdit"
- ></el-input-number>
- </el-form-item> -->
- <!-- <el-form-item label="计量单位:">
- <el-input-number
- v-model="value.unit"
- :disabled="!isEdit"
- ></el-input-number>
- </el-form-item> -->
- <!-- <el-form-item label="商品重量:">
- <el-input-number
- v-model="value.weight"
- type="number"
- autocomplete="off"
- controls-position="right"
- class="number-input"
- style="width: 300px"
- :disabled="!isEdit"
- ></el-input-number>
- <span style="margin-left: 20px">克</span>
- </el-form-item> -->
- <el-form-item label="排序">
- <el-input-number
- v-model="value.sort"
- :disabled="!isEdit"
- ></el-input-number>
- </el-form-item>
- <el-form-item style="text-align: center">
- <el-button
- type="primary"
- size="medium"
- @click="handleNext('productInfoForm')"
- >下一步,填写商品促销</el-button
- >
- </el-form-item>
- </el-form>
- </div>
- </template>
- <script>
- import { fetchListWithChildren } from "@/api/productCate";
- import { fetchList as fetchBrandList } from "@/api/brand";
- import { getProduct } from "@/api/product";
- export default {
- name: "ProductInfoDetail",
- props: {
- value: Object,
- isEdit: {
- type: Boolean,
- default: false,
- },
- },
- data() {
- return {
- hasEditCreated: false,
- //选中商品分类的值
- selectProductCateValue: [],
- productCateOptions: [],
- brandOptions: [],
- rules: {
- name: [
- { required: true, message: "请输入商品名称", trigger: "blur" },
- {
- min: 2,
- max: 140,
- message: "长度在 2 到 140 个字符",
- trigger: "blur",
- },
- ],
- // subTitle: [
- // { required: true, message: "请输入商品副标题", trigger: "blur" },
- // ],
- productCategoryId: [
- { required: true, message: "请选择商品分类", trigger: "blur" },
- ],
- brandId: [
- { required: true, message: "请选择商品品牌", trigger: "blur" },
- ],
- description: [
- { required: true, message: "请输入商品介绍", trigger: "blur" },
- ],
- requiredProp: [
- { required: true, message: "该项为必填项", trigger: "blur" },
- ],
- price: [
- { required: true, message: "请输入商品售价", trigger: "blur" },
- ],
- originalPrice: [
- { required: true, message: "请输入商品市场价", trigger: "blur" },
- ],
- },
- };
- },
- created() {
- this.getProductCateList();
- this.getBrandList();
- },
- computed: {
- //商品的编号
- productId() {
- return this.value.id;
- },
- },
- watch: {
- productId: function (newValue) {
- console.log("productId", newValue, this.isEdit);
- // if(!this.isEdit)return;
- if (this.hasEditCreated) return;
- if (newValue === undefined || newValue == null || newValue === 0) return;
- this.handleEditCreated();
- },
- selectProductCateValue: function (newValue) {
- console.log(newValue, "newValue");
- if (newValue != null && newValue.length === 2) {
- this.value.productCategoryId = newValue[1];
- this.value.productCategoryName = this.getCateNameById(
- this.value.productCategoryId
- );
- } else {
- this.value.productCategoryId = null;
- this.value.productCategoryName = null;
- }
- },
- },
- methods: {
- //处理编辑逻辑
- handleEditCreated() {
- if (this.value.productCategoryId != null) {
- this.selectProductCateValue.push(this.value.cateParentId);
- this.selectProductCateValue.push(this.value.productCategoryId);
- }
- this.hasEditCreated = true;
- },
- getProductCateList() {
- console.log("获取商品分类");
- fetchListWithChildren().then((response) => {
- let list = response.data;
- this.productCateOptions = [];
- for (let i = 0; i < list.length; i++) {
- let children = [];
- if (list[i].children != null && list[i].children.length > 0) {
- for (let j = 0; j < list[i].children.length; j++) {
- children.push({
- label: list[i].children[j].name,
- value: list[i].children[j].id,
- });
- }
- }
- this.productCateOptions.push({
- label: list[i].name,
- value: list[i].id,
- children: children,
- });
- }
- });
- },
- getBrandList() {
- fetchBrandList({ pageNum: 1, pageSize: 100 }).then((response) => {
- this.brandOptions = [];
- let brandList = response.data.list;
- for (let i = 0; i < brandList.length; i++) {
- this.brandOptions.push({
- label: brandList[i].name,
- value: brandList[i].id,
- });
- }
- });
- },
- getCateNameById(id) {
- let name = null;
- for (let i = 0; i < this.productCateOptions.length; i++) {
- for (let j = 0; j < this.productCateOptions[i].children.length; j++) {
- if (this.productCateOptions[i].children[j].value === id) {
- name = this.productCateOptions[i].children[j].label;
- return name;
- }
- }
- }
- return name;
- },
- handleNext(formName) {
- this.$refs[formName].validate((valid) => {
- if (valid) {
- this.$emit("nextStep");
- } else {
- this.$message({
- message: "验证失败",
- type: "error",
- duration: 1000,
- });
- return false;
- }
- });
- },
- handleBrandChange(val) {
- let brandName = "";
- for (let i = 0; i < this.brandOptions.length; i++) {
- if (this.brandOptions[i].value === val) {
- brandName = this.brandOptions[i].label;
- break;
- }
- }
- this.value.brandName = brandName;
- },
- },
- };
- </script>
- <style lang="scss" scoped>
- input::-webkit-outer-spin-button,
- input::-webkit-inner-spin-button {
- -webkit-appearance: none;
- }
- input[type="number"] {
- -moz-appearance: textfield;
- }
- .number-input {
- ::v-deep .el-input__inner {
- text-align: left;
- }
- width: 100%;
- }
- </style>
|