1. 程式人生 > 其它 >Vue的二級聯動和圖片上傳

Vue的二級聯動和圖片上傳

一、後臺操作

  • 使用資料遷移Code First的方式去操作
  • dal層繫結下拉框
public List<GoodsTypeModel> Bind(int id)
        {
            return db.GoodsTypes.Where(m => m.PId == id).ToList();
        }

  • 控制器
[HttpGet]
        public ActionResult Bind(int id)
        {
            return Json(bll.Bind(id), JsonRequestBehavior.AllowGet);
        }

[HttpPost]
public ActionResult UpLoad()
{
try
{
//獲取前臺傳過來的檔案
var file = Request.Files[0];
//將虛擬路徑轉成物理路徑
var imgDir = Server.MapPath("/Images/");
//判斷你要儲存的資料夾是否存在,不存在建立
if (!Directory.Exists(imgDir))
{
//建立資料夾
Directory.CreateDirectory(imgDir);
}
//儲存
file.SaveAs(imgDir + file.FileName);
return Json(new { code = 1, filName = file.FileName,msg="" }, JsonRequestBehavior.DenyGet);
}
catch (Exception ex)
{
return Json(new { code = -1, filName = "" ,msg=ex.Message}, JsonRequestBehavior.DenyGet);
}
}

二、前臺操作

1、頁面佈局


@{
ViewBag.Title = "AddGoods";
}
<script src="/Scripts/vue.js"></script>
<script src="/Scripts/axios.js"></script>
<h2>AddGoods</h2>

<div id="app">
<table class="table table-hover">
<tr>
<td>商品圖</td>
<td>
<input type="file" name="name" value="" v-model="GoodsData.Img" v-on:change="upLoad"/>
</td>
</tr>
<tr>
<td>商品編號</td>
<td>
<input type="text" name="name" value="" v-model="GoodsData.Number"/>
</td>
</tr>
<tr>
<td>商品名稱</td>
<td>
<input type="text" name="name" value="" v-model="GoodsData.Name"/>
</td>
</tr>
<tr>
<td>品牌</td>
<td>
<select v-model="GoodsData.PId">
<option v-for="(item,index) in binds" :value="item.TId">{{item.TName}}</option>
</select>
</td>
</tr>
<tr>
<td>商鋪</td>
<td>
<input type="text" name="name" value="" v-model="GoodsData.Shop"/>
</td>
</tr>
<tr>
<td>所屬分類</td>
<td>
<select v-model="GoodsData.TId" v-on:change="bindm">
<option v-for="(item,index) in bind" :value="item.TId">{{item.TName}}</option>
</select>
</td>
</tr>
<tr>
<td>銷售價</td>
<td>
<input type="text" name="name" value="" v-model="GoodsData.SellPrice"/>
</td>
</tr>
<tr>
<td>市場價</td>
<td>
<input type="text" name="name" value="" v-model="GoodsData.MarketPrice"/>
</td>
</tr>
<tr>
<td>庫存</td>
<td>
<input type="text" name="name" value="" v-model="GoodsData.Stock"/>
</td>
</tr>
<tr>
<td>重量</td>
<td>
<input type="text" name="name" value="" v-model="GoodsData.Weight"/>
</td>
</tr>
<tr>
<td>釋出時間</td>
<td>
<input type="date" name="name" value="" v-model="GoodsData.CreateTime"/>
</td>
</tr>
<tr>
<td>上架狀態</td>
<td>
<input type="radio" name="name" value="0" v-model="GoodsData.Status"/>未上架
<input type="radio" name="name" value="1" v-model="GoodsData.Status"/>上架
<input type="radio" name="name" value="2" v-model="GoodsData.Status"/>下架
</td>
</tr>
<tr>
<td colspan="2">
<input type="button" name="name" value="新增" v-on:click="addGoods"/>
</td>
</tr>
</table>
</div>

2、操作

<script>
    let app = new Vue({
        el: "#app",
        data() {
            return {
                GoodsData: {
                    Img: "",
                    Number: "",
                    Name: "",
                    TId: "",
                    PId: "",
                    SellPrice: "",
                    MarketPrice: "",
                    Stock: "",
                    Weight: "",
                    CreateTime: "",
                    Status: "",
                    Shop: "",
                },
                bind: [],
                binds:[]
            }
        },
        methods: {
            addGoods() {
                axios.post('/Goods/AddGoods', this.GoodsData).then(res => {
                    if (res.data > 0) {
                        alert("新增成功");
                        location.href = '/Goods/ShowGoods';
                    }
                    else {
                        alert("新增失敗");
                    }
                })
            },
            bindk() {
                axios.get('/Goods/Bind?id=0').then(res => {
                    this.bind = res.data;
                    this.bind.unshift({ "TId": "0", "TName": "請選擇" });
                })
            },
            bindm() {
                if (this.GoodsData.TId > 0) {
                    axios.get('/Goods/Bind?id=' + this.GoodsData.TId).then(res => {
                        this.binds = res.data;
                        this.binds.unshift({ "TId": "0", "TName": "請選擇" });
                        this.GoodsData.PId = 0;
                    })
                }
                this.binds = [];
            },
            upLoad(event) {
                let file = event.target.files[0];
                let config = {
                    headers: {
                        'Context-Type': "multipart / form - data"
                    }
                }
                let fd = new FormData();
                fd.append("file", file);
                axios.post('/Goods/UpLoad', fd).then(res => {
                    if (res.data.code == 1) {
                        alert("成功");
                        this.GoodsData.Img = res.data.filName;
                    }
                    else {
                        alert("失敗");
                    }
                })
            }
        },
        created: function () {
            this.bindk();
        }
    })
</script>