Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 国产精品不卡在线观看,午夜在线视频网站,九一国产精品

          整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          小白學(xué)代碼使用原生JS寫購(gòu)物車模塊過程中的踩坑總結(jié)

          小白學(xué)代碼使用原生JS寫購(gòu)物車模塊過程中的踩坑總結(jié)

          著過年放假在家復(fù)習(xí)了之前學(xué)的JS知識(shí),用原生擼了一個(gè)購(gòu)物車模塊,下面我來整理一下我的思路分享給大家。

          一、功能和效果圖

          1.1 廢話不多說,首先上個(gè)效果圖,如下:

          購(gòu)物車功能效果圖

          1.2 功能介紹:

          1. 點(diǎn)擊全選按鈕,每一項(xiàng)商品的復(fù)選框處于被勾選的狀態(tài),同時(shí)計(jì)算出商品數(shù)量和商品總價(jià);
          2. 點(diǎn)擊數(shù)量切換的按鈕,能自動(dòng)計(jì)算出修改數(shù)量之后的商品數(shù)量和價(jià)格;
          3. 商品的總計(jì)數(shù)量和總價(jià)格應(yīng)該只計(jì)算被勾選的商品的數(shù)量和金額。

          功能介紹完畢,下面開始介紹我寫這個(gè)購(gòu)物車的步驟。


          二、購(gòu)物車的頁面結(jié)構(gòu)

          2.1 HTML代碼

          <table>
                  <caption>
                      購(gòu)物車
                  </caption>
                  <thead>
                      <tr>
                          <!-- 全選復(fù)選框 -->
                          <th>
                              <input type="checkbox" name="checkAll" id="check-all" checked /><label for="check-all">全選</label>
                          </th>
                          <th>圖片</th>
                          <th>品名</th>
                          <th>單位</th>
                          <th>單價(jià)/元</th>
                          <th>數(shù)量</th>
                          <th>金額/元</th>
                      </tr>
                  </thead>
                  <tbody>
                      <tr>
                          <td>
                              <input type="checkbox" name="item" value="SN-1020" checked />
                          </td>
                          <td>
                              <a href=""><img src="images/p1.jpg" alt="" /></a>
                          </td>
                          <td>iPhone 11</td>
                          <td>臺(tái)</td>
                          <td class="price">4799</td>
                          <td><input type="number" min="1" value="1" /></td>
                          <td class="amount">xxxx</td>
                      </tr>
                      <tr>
                          <td>
                              <input type="checkbox" name="item" value="SN-1020" checked />
                          </td>
                          <td>
                              <a href=""><img src="images/p2.jpg" alt="" /></a>
                          </td>
                          <td>小米pro 11</td>
                          <td>部</td>
                          <td class="price">3999</td>
                          <td><input type="number" min="1" value="2" /></td>
                          <td class="amount">xxxx</td>
                      </tr>
                      <tr>
                          <td>
                              <input type="checkbox" name="item" value="SN-1030" checked />
                          </td>
                          <td>
                              <a href=""><img src="images/p3.jpg" alt="" /></a>
                          </td>
                          <td>MacBook Pro</td>
                          <td>臺(tái)</td>
                          <td class="price">18999</td>
                          <td><input type="number" min="1" value="1" /></td>
                          <td class="amount">xxxx</td>
                      </tr>
                      <tr>
                          <td>
                              <input type="checkbox" name="item" value="SN-1040" checked />
                          </td>
                          <td>
                              <a href=""><img src="images/p4.jpg" alt="" /></a>
                          </td>
                          <td>小米75電視</td>
                          <td>臺(tái)</td>
                          <td class="price">5999</td>
                          <td><input type="number" min="1" value="2" /></td>
                          <td class="amount">xxxx</td>
                      </tr>
                      <tr>
                          <td>
                              <input type="checkbox" name="item" value="SN-1050" checked />
                          </td>
                          <td>
                              <a href=""><img src="images/p5.jpg" alt="" /></a>
                          </td>
                          <td>Canon 90D單反</td>
                          <td>臺(tái)</td>
                          <td class="price">9699</td>
                          <td><input type="number" min="1" value="1" /></td>
                          <td class="amount">xxxx</td>
                      </tr>
                  </tbody>
                  <tfoot>
                      <tr style="font-weight: bolder; font-size: 1.2em">
                          <td colspan="5">總計(jì):</td>
                          <td id="sum">xxxx</td>
                          <td id="total-amount">xxxx</td>
                      </tr>
                  </tfoot>
              </table>

          2.2 CSS代碼

          table {
              border-collapse: collapse;
              width: 90%;
              text-align: center;
              margin: auto;
          }
          
          table caption {
              margin-bottom: 15px;
              font-size: 1.5rem;
          }
          
          table th, table td {
              border-bottom: 1px solid #ccc;
              padding: 5px;
              font-weight: normal;
          }
          
          table thead tr:first-of-type {
              background-color: #e6e6e6;
              height: 3em;
          }
          
          table input[type="checkbox"] {
              width: 1.5em;
              height: 1.5em;
          }
          
          table tbody tr {
              border-bottom: 1px solid #ccc;
          }
          
          table tbody tr:hover {
              background-color: #f6f6f6;
              cursor: pointer;
          }
          
          tbody img {
              width: 3em;
          }
          
          tbody input[type="number"] {
              width: 3em;
          }
          
          button {
              width: 150px;
              height: 30px;
              outline: none;
              border: none;
              background-color: teal;
              color: white;
              letter-spacing: 5px;
          }
          
          button:hover {
              opacity: 0.7;
              cursor: pointer;
          }

          2.3 效果圖

          購(gòu)物車效果圖

          以上就是一個(gè)簡(jiǎn)單的購(gòu)物車頁面的HTML和CSS樣式代碼。


          三、完成相關(guān)JS代碼

          首先,我們先完成商品的全選與取消全選的功能,所以肯定是需要拿到全選復(fù)選框元素和商品前面的復(fù)選框元素,代碼如下:

          // 獲取全選復(fù)選框,所有的商品都有一個(gè)獨(dú)立的復(fù)選框
          const checkAll=document.querySelector('#check-all');
          const checkItems=document.getElementsByName('item');

          拿到全選和每個(gè)商品的復(fù)選框元素之后,給全選框添加一個(gè)change事件,監(jiān)聽它的checked值的變化。此時(shí)全選框的checked值可以通過事件監(jiān)聽回調(diào)函數(shù)中的ev參數(shù)下的ev.target.checked拿到。

          checkALl.onchange=ev=> {
              // 如果全選框處于選中狀態(tài),ev.target.checked的值就為true,反之,為false。
              console.log(ev.target.checked);
          };

          如果想讓全選框的的狀態(tài)和每個(gè)商品前的復(fù)選框狀態(tài)保持一致,那么就使他們的checked值一致即可。因此,我們可以在全選復(fù)選框的change事件中遍歷每個(gè)商品的復(fù)選框元素。

          checkALl.onchange=ev=> {
              // 如果全選框處于選中狀態(tài),ev.target.checked的值就為true,反之,為false。
              console.log(ev.target.checked);
              checkItems.forEach(item=> item.checked=ev.target.checked);
          };

          這樣點(diǎn)擊全選框的時(shí)候,就可以實(shí)現(xiàn)全部選中,和取消全選的功能了。效果如圖:

          全選與取消全選

          全選和取消全選的功能完成之后,下面開始完善逐個(gè)勾選商品,直至勾選全部商品,讓全選按鈕自動(dòng)變成被選中的狀態(tài)。

          要完成這個(gè)功能,我們可以通過對(duì)每個(gè)商品的復(fù)選框添加一個(gè)change事件來監(jiān)聽checked的變化。因此需要通過forEach()方法對(duì)遍歷每一個(gè)商品。

          checkItems.forEach(item=> item.onchange=ev=> {
              // 在這里處理每一項(xiàng)的checked值
          });

          此時(shí),我們可以這樣考慮:當(dāng)每個(gè)商品的復(fù)選框都被勾選,即:所有商品復(fù)選框的checked的值全部為true時(shí),全選復(fù)選框才會(huì)顯示被勾選的狀態(tài),也就是全選復(fù)選框的checked的值也要為true。

          由于checkAll的狀態(tài)依賴于每一項(xiàng)商品的checked值,那么可以利用一個(gè)數(shù)組函數(shù):Array.every()遍歷每一項(xiàng)商品,當(dāng)所有商品的checked值都為true時(shí),every()方法的返回值就是一個(gè)true,然后再賦值給checkAll即可。注意:由于我們拿到的checkItems是一個(gè)NodeList數(shù)組,需要先將其轉(zhuǎn)換成數(shù)組后再進(jìn)行操作。

          checkItems.forEach(item=> item.onchange=ev=> {
              checkAll.checked=Array.from(checkItems).every(checkItem=> checkItem.checked);
          });

          點(diǎn)擊選中每個(gè)商品

          至此,全選和單選功能全部完成了。下面開始寫自動(dòng)計(jì)算金額的和總數(shù)的功能。

          購(gòu)物車的數(shù)量和金額不僅包含每一項(xiàng)商品的數(shù)量和每一項(xiàng)商品的總金額,還包含了計(jì)算選中的商品總數(shù),以及所有選中的商品的總金額。

          下面首先完成單個(gè)商品的總金額計(jì)算,總金額=單價(jià) * 數(shù)量,根據(jù)這個(gè)公式,我們首先拿到商品的單價(jià)和數(shù)量元素。

          // 獲取單價(jià)組成的數(shù)組
          const priceLists=document.querySelectorAll('.price');
          // 獲取數(shù)量組成的數(shù)組
          const numberLists=document.querySelectorAll('body input[type=number]');

          以上單價(jià)(priceLists)數(shù)量(numberLists)都是NodeList類型的,需要先將它們轉(zhuǎn)換成數(shù)組,由于表單中獲取的內(nèi)容都是string類型,而參與計(jì)算的需要的是整型,所以這里需要進(jìn)行一下轉(zhuǎn)換,使用parseInt()方法即可。

          // 獲取商品單價(jià)組成的數(shù)組
          const priceLists=document.querySelectorAll('.price');
          const priceArr=Array.from(priceLists).map(item=> parseInt(item.textContent)); // [ 4799, 3999, 18999, 5999, 9699 ]
          // 獲取商品數(shù)量組成的數(shù)組
          const numberLists=document.querySelectorAll('body input[type=number]');
          const numbersArr=Array.from(numberLists).map(item=> parseInt(item.value)); // 默認(rèn)值:[ 1, 1, 1, 1, 1 ]

          注意:商品價(jià)格和商品數(shù)量在取值時(shí)有些不同。商品的單價(jià)是普通元素直接使用textContent即可拿到它內(nèi)部的值,而數(shù)量這個(gè)用的是表單控件,所以需要使用value才可以拿到值。 我剛開始寫這個(gè)功能的時(shí)候懵逼了半天,此處一定要注意。

          拿到商品的單價(jià)和數(shù)量之后就可以按照上面的公式進(jìn)行計(jì)算了,由于商品的價(jià)格和商品的數(shù)量都是一個(gè)數(shù)組,并且價(jià)格和數(shù)量在數(shù)組中都是一一對(duì)應(yīng)的關(guān)系,因此可以使用JS數(shù)組的reduce()方法進(jìn)行遍歷。

          let amountArr=[priceArr, numbersArr].reduce((prev, curr)=> {
              return prev.map((item, index)=> {
                  return item * curr[index];
              });
          });

          總感覺上述寫法有點(diǎn)怪怪的,是不是可以進(jìn)行簡(jiǎn)化呢?根據(jù)箭頭函數(shù)的特征,當(dāng)只有一條返回語句的時(shí)候可以省略掉return關(guān)鍵字和大括號(hào),因此上述方法可以簡(jiǎn)寫成下面這樣:

          let amountArr=[priceArr, numbersArr].reduce((prev, curr)=> prev.map((item, index)=> item * curr[index]));
          console.log(amountArr); // [ 4799, 3999, 18999, 5999, 9699 ]
          

          (PS:上面的方法我一開始也沒有發(fā)現(xiàn)可以簡(jiǎn)寫,我是把代碼發(fā)給我朋友看了之后,朋友給我點(diǎn)醒了。還是才疏學(xué)淺呀。)

          這時(shí)已經(jīng)計(jì)算出來了每個(gè)商品的總金額,那么我們將其渲染到頁面中。

          // 獲取單個(gè)商品總金額的元素?cái)?shù)組
          const amountDOM=document.querySelectorAll('.amount');
          amountDOM.forEach((item, index)=> item.textContent=amountArr[index]);

          計(jì)算每個(gè)商品的金額并渲染到頁面中

          單個(gè)商品的總金額渲染到頁面之后,下面就開始計(jì)算商品的總數(shù),和總金額了。根據(jù)某東、某寶的購(gòu)物車功能,我們可以發(fā)現(xiàn),總計(jì)那里統(tǒng)計(jì)的商品總數(shù)是一般是我們勾選上的商品總數(shù),總金額也是一樣的,那么我們就需要根據(jù)商品的狀態(tài)來進(jìn)行計(jì)算了。

          首先聲明一個(gè)數(shù)組,用于存儲(chǔ)被選中的商品的狀態(tài),如果被選中,值為1,未被選中,則為0。

          let  isChecked=[];
          checkItems.forEach(item=> isChecked.push(item.checked===true ? 1 : 0));
          // 打印出商品狀態(tài)值
          console.log(isChecked);
          • 效果如圖:

          打印商品狀態(tài)值

          商品的狀態(tài)已經(jīng)記錄好了,那么現(xiàn)在就需要統(tǒng)計(jì)選中的商品對(duì)應(yīng)的數(shù)量了。

          // 聲明一個(gè)用于存儲(chǔ)商品數(shù)量的數(shù)組,該數(shù)組的作用是用于與對(duì)應(yīng)的商品的狀態(tài)值的數(shù)組進(jìn)行相乘,得到實(shí)際的被選中的商品的數(shù)組。
          let checkedNumbers=[];
          numbersArr.forEach((item, index)=> checkedNumbers.push(item * isChecked[index]));
          // 打印被選中的商品的數(shù)量
          console.log(checkedNumbers);

          打印出選中的商品的數(shù)量數(shù)組

          計(jì)算出被選中的商品數(shù)量的總數(shù)并渲染到頁面中:

          let checkedSum=checkedNumbers.reduce((prev, curr)=> prev + curr);
          // 將獲取的數(shù)量結(jié)果渲染到頁面中
          document.querySelector('#sum').textContent=checkedSum;

          效果如上圖已經(jīng)出來了。

          下面開始計(jì)算被選中的商品的總金額,該總金額等于上面所有被選中的商品的總金額之和。計(jì)算出結(jié)果之后渲染到頁面中。

          // 聲明一個(gè)數(shù)組用于存儲(chǔ)每一個(gè)被選中的商品的總金額
          let checkedPrice=[];
          checkedNumbers.forEach((item, index)=> checkedPrice.push(item * priceArr[index]));
          // 打印被選中的每個(gè)被選中的商品總金額
          console.log(checkedPrice);
          // 計(jì)算被選中的商品總金額
          let totalAmount=checkedPrice.reduce((prev, curr)=> prev + curr);
          // 將選中的商品總金額渲染到頁面中
          document.querySelector('#total-amount').textContent=totalAmount;
          • 效果圖:

          將總金額渲染到頁面

          至此,關(guān)于計(jì)算單個(gè)商品的總金額以及被選中商品的數(shù)量和總金額的功能已經(jīng)全部完成了,但是我們還需要實(shí)現(xiàn)在頁面加載以及更改某個(gè)商品數(shù)量時(shí)自動(dòng)計(jì)算的功能。那么就需要將上述的計(jì)算功能封裝成一個(gè)函數(shù),以便后面每一次執(zhí)行計(jì)算時(shí)使用。

          • 封裝后的代碼如下:
          function autoCalculate() {
              // 獲取單價(jià)組成的數(shù)組
              const priceLists=document.querySelectorAll('.price');
              const priceArr=Array.from(priceLists).map(item=> parseInt(item.textContent));
              // 獲取數(shù)量組成的數(shù)組
              const numberLists=document.querySelectorAll('body input[type=number]');
              const numbersArr=Array.from(numberLists).map(item=> parseInt(item.value));
              console.log(priceArr, numbersArr);
            
              // 由于拿到的表單里的數(shù)據(jù)都是string類型的,所以需要先將其轉(zhuǎn)換成int類型,因此需要使用`map()`方法操作一下
              let amountArr=[priceArr, numbersArr].reduce((prev, curr)=> prev.map((item, index)=> item * curr[index]));
              console.log(amountArr);
              const amountDOM=document.querySelectorAll('.amount');
              amountDOM.forEach((item, index)=> item.textContent=amountArr[index]);
          
              // 首先聲明一個(gè)數(shù)組,用于存儲(chǔ)被選中的商品的狀態(tài),如果被選中,值為1,未被選中,則為0
              let isChecked=[];
              checkItems.forEach(item=> isChecked.push(item.checked===true ? 1 : 0));
              console.log(isChecked);
              // 聲明一個(gè)用于存儲(chǔ)是商品數(shù)量的數(shù)組,該數(shù)組的作用是:如果商品處于被選中的狀態(tài),那么就存儲(chǔ)它真實(shí)的數(shù)量值,
              // 如果沒有被選中,那么數(shù)量就是0
              let checkedNumbers=[];
              numbersArr.forEach((item, index)=> checkedNumbers.push(item * isChecked[index]));
              console.log(checkedNumbers);
              // 此時(shí),被選中的商品的總數(shù)為:
              let checkedSum=checkedNumbers.reduce((prev, curr)=> prev + curr);
              console.log(checkedSum);
              // 將獲取的數(shù)量結(jié)果渲染到頁面中
              document.querySelector('#sum').textContent=checkedSum;
              // 下面開始計(jì)算被選中的商品的總金額,該總金額等于上面所有被選中的商品的總金額之和。
              // 聲明一個(gè)數(shù)組用于存儲(chǔ)每一個(gè)被選中的商品的總金額
              let checkedPrice=[];
              checkedNumbers.forEach((item, index)=> checkedPrice.push(item * priceArr[index]));
              console.log(checkedPrice);
              // 計(jì)算被選中的商品總金額
              let totalAmount=checkedPrice.reduce((prev, curr)=> prev + curr);
              // 將選中的商品總金額渲染到頁面中
              document.querySelector('#total-amount').textContent=totalAmount;
          }

          將代碼封裝后我們會(huì)發(fā)現(xiàn),單個(gè)商品的總金額,商品總數(shù)以及總金額的值都沒了,如下圖:

          封裝代碼后的效果

          這是因?yàn)椋a在第一次加載的時(shí)候并沒有執(zhí)行封裝后的函數(shù),因此需要加一行代碼:

          // 頁面第一次加載的時(shí)候自動(dòng)執(zhí)行一次。
          window.onload=autoCalculate;

          這樣頁面中的數(shù)據(jù)在第一次加載的時(shí)候就全部都正常了。

          下面完成最后一個(gè)功能:調(diào)整商品的數(shù)量,會(huì)自動(dòng)計(jì)算總數(shù)和金額。該功能還是通過change事件監(jiān)聽某個(gè)表單數(shù)據(jù)的變化來完成。效果圖下圖:

          • 代碼實(shí)現(xiàn):
          // 監(jiān)聽某個(gè)控件的事件,首先需要拿到控件元素。
          const numInput=document.querySelectorAll('body input[type=number]');
          // 上面都用了onchange來監(jiān)聽,這里換個(gè)方法使用addEventListener。
          numInput.forEach(item=> item.addEventListener('change', autoCalculate));

          但是我們會(huì)發(fā)現(xiàn)這里有個(gè)小bug,就是如果勾選沒有選中的商品,并不會(huì)自動(dòng)計(jì)算商品數(shù)量和總價(jià),原因很簡(jiǎn)單,我們?cè)诒O(jiān)聽單個(gè)商品選中和全選的時(shí)候根本就沒有執(zhí)行自動(dòng)計(jì)算函數(shù),只需要在二者的事件監(jiān)聽中加上自動(dòng)計(jì)算的函數(shù)即可。

          checkAll.onchange=ev=> {
              checkItems.forEach(item=> item.checked=ev.target.checked);
              // 解決勾選全選框不會(huì)自動(dòng)計(jì)算的bug
              autoCalculate();
          };
          checkItems.forEach(item=> item.onchange=ev=> {
              checkAll.checked=Array.from(checkItems).every(checkItem=> checkItem.checked);
              // 解決勾選全選框不會(huì)自動(dòng)計(jì)算的bug
              autoCalculate();
          });

          寫到這里,我們購(gòu)物車的所有功能都已經(jīng)完成了。購(gòu)物車這個(gè)模塊看似不難,其實(shí)這里面的坑也是不少的,例如:

          1. 在操作獲取的元素節(jié)點(diǎn)時(shí),我們有時(shí)候需要將其轉(zhuǎn)換成一個(gè)數(shù)組才可以使用數(shù)組函數(shù)進(jìn)行操作,因?yàn)槲覀兺ㄟ^document.querySelector獲取的元素并不是一個(gè)真正的數(shù)組,而是一個(gè)類數(shù)組(NodeList);
          2. 案例中使用了多個(gè)數(shù)組函數(shù),Array.from()、Array.reduce()、Array.every()等等,由此可見,熟練掌握J(rèn)S常用的數(shù)組也是非常重要的;
          3. 掌握事件監(jiān)聽:addEventListener;
          4. 箭頭函數(shù)的簡(jiǎn)寫方法;
          5. 表單事件的監(jiān)聽,只能通過onchange方法,千萬不要使用onclick。

          以上就是我個(gè)人在寫這個(gè)購(gòu)物車功能的全部新的,由于本人也是新手,可能還有其他更簡(jiǎn)介方便的寫法,如果有問題,請(qǐng)各位大佬批評(píng)指正,不勝感激。

          如果有剛開始學(xué)習(xí)JS的同學(xué),想要源碼的各位親,可以關(guān)注并私信回復(fù)“購(gòu)物車”即可。

          術(shù)用品對(duì)繪畫者來說是必備的,青少年、職業(yè)成年人都有較高需求度,尤其是當(dāng)今生活條件變好,各種用品種類非常多,家長(zhǎng)們也愿意在孩子身上花更多的金錢。

          因此對(duì)經(jīng)營(yíng)者來說,市場(chǎng)高需求下,只滿足附近三公里客戶不足以生意增長(zhǎng)和擴(kuò)大營(yíng)收,還需要通過線上拓展更廣的群體與訂單。

          而通過雨科網(wǎng)商城平臺(tái)搭建美術(shù)用品小程序商城后又有什么效果呢?「鏈接」


          1、商品管理、線上銷售

          美術(shù)用品種類和品牌眾多,由于大多為短期消耗品,因此購(gòu)買率相當(dāng)可以。通過小程序可將所有產(chǎn)品規(guī)格參數(shù)上架管理,詳細(xì)價(jià)格、介紹等信息呈現(xiàn),商城內(nèi)精美布局商品和頁面設(shè)計(jì)制作,精美呈現(xiàn)形式更利于促進(jìn)客戶消費(fèi)。

          琳瑯滿目的線上購(gòu)物場(chǎng)景,多流量渠道利于商家分享、也利于用戶觸達(dá),包括商品分享、商城搜索、篩選等。

          更可構(gòu)建電腦手機(jī)商城網(wǎng)站+微信小程序商城聯(lián)合打通多種購(gòu)物環(huán)境,同城配送+到店自提+快遞配送,客戶坐在家里直接選擇商品下單購(gòu)物即可按照自己的方式獲得商品。

          線上銷售更利于和同行競(jìng)爭(zhēng),構(gòu)建私域渠道打造自己的美術(shù)電商平臺(tái)

          消息通知和訂單管理發(fā)貨備貨,以及配套工具打單、小票、對(duì)接ERP、當(dāng)面付等,輕松完成訂單流程。


          2、客戶管理與持續(xù)生意增長(zhǎng)

          美術(shù)用品客戶的復(fù)購(gòu)率較高,客戶在商城中注冊(cè)會(huì)員信息留存,商家可隨時(shí)查看并長(zhǎng)期管理,短信發(fā)送等。

          同時(shí)長(zhǎng)期運(yùn)營(yíng)場(chǎng)景下,可通過會(huì)員積分、儲(chǔ)值、會(huì)員卡、等級(jí)體系留存客戶并長(zhǎng)期復(fù)購(gòu),利于商城回籠資金和客戶享受折扣優(yōu)惠持續(xù)復(fù)購(gòu),會(huì)員也是商城經(jīng)營(yíng)重要方式之一。

          同時(shí)還有分銷,推廣員、分銷商、社區(qū)團(tuán)長(zhǎng)體系,讓會(huì)員成為推廣人員,利用自己的私域生態(tài)分享完成訂單獲得傭金收入,而商家則讓商城獲得更多曝光,更多新客與訂單。

          商家后臺(tái)靈活管理,利于長(zhǎng)期發(fā)展,動(dòng)動(dòng)手指,其他人幫你賣貨。

          當(dāng)然雨科網(wǎng)商城還擁有多種營(yíng)銷功能,如優(yōu)惠券、新人禮、積分商城、組合套餐、定金預(yù)售、短視頻、互動(dòng)游戲等,管理和設(shè)置方便,客戶參與更加便捷,功能強(qiáng)大,利用營(yíng)銷模式可帶動(dòng)更多商品銷售和裂變復(fù)購(gòu)等。


          3、多商戶與商城后臺(tái)

          美術(shù)用品客群一半都是青少年,由于地區(qū)廣泛,如果商家有多家門店,可以通過多商戶自營(yíng)體系,將所有分店上線,客戶進(jìn)入小程序可直接購(gòu)物,也可選擇附近分店下單配送或到店等,分店獨(dú)立經(jīng)營(yíng),總部統(tǒng)籌管理。


          還有多商戶進(jìn)駐體系,邀請(qǐng)其他商家進(jìn)入到商城里成為子商戶,獨(dú)立后臺(tái)貨品上新、發(fā)貨、營(yíng)收等。商城管理員后臺(tái)管理商品審核、店鋪呈現(xiàn)、評(píng)星、提現(xiàn)、資料等,構(gòu)建完善的線上購(gòu)物商圈。

          后臺(tái)多種功能控件模塊,現(xiàn)成賣貨小程序商城模板直接修改設(shè)計(jì)制作,輕松完成上線。


          現(xiàn)在就注冊(cè)賬號(hào)進(jìn)入商城后臺(tái)搭建美術(shù)用品銷售賣貨小程序商城吧。「鏈接」


          原文:https://www.zcdly.com/msypscxcx.html

          TML編輯器粘貼word圖片,web編輯器粘貼word圖片,web富文本編輯器粘貼word,前端編輯器粘貼word內(nèi)容,前端web編輯器粘貼word,支持快捷鍵操作(Ctrl+V),

          粘貼后word圖片自動(dòng)上傳到服務(wù)器中,然后自動(dòng)將圖片和文字HTML添加到編輯器中。

          用戶這邊日常的編輯工作基本上都是在word中完成的,用戶把內(nèi)容編輯好后希望能夠直接一鍵(通過快捷鍵)粘貼到網(wǎng)站后臺(tái)新聞發(fā)布頁面的編輯器中,這樣能夠節(jié)省不少時(shí)間。提高工作效率,信息發(fā)布效率。

          用戶發(fā)布新聞的時(shí)候是從word里面復(fù)制圖片和文字,然后將word圖文內(nèi)容粘貼到web富文本編輯器中,希望能夠?qū)ord的圖片自動(dòng)上傳到服務(wù)器中,服務(wù)器地址能夠自定義,后端的話需要支持任意開發(fā)語言,比如ASP,ASP.NET,JSP,PHP,PYTHON等。只要是基于標(biāo)準(zhǔn)HTTP協(xié)議的都要支持。如果能夠不裝控件最好,

          實(shí)際上裝不裝都無所謂,只要好用。

          1.下載示例:

          http://www.ncmem.com/webapp/wordpaster/versions.aspx


          2.復(fù)制WordPaster插件目錄


          3.引入插件文件

          注意:不要重復(fù)引入jquery,如果您的項(xiàng)目已經(jīng)引入了jq,則不用再引入jq-1.4


          4.在工具欄中增加插件按鈕


          6.初始化控件

          注意:

          1.如果接口字段名稱不是file,請(qǐng)配置FileFieldName。ueditor接口中使用的upfile字段


          參考:http://www.ncmem.com/doc/view.aspx?id=c3ad06c2ae31454cb418ceb2b8da7c45

          2.如果接口返回JSON,請(qǐng)配置ImageMatch


          參考:http://www.ncmem.com/doc/view.aspx?id=07e3f323d22d4571ad213441ab8530d1

          3.如果接口返回的圖片地址沒有域名,請(qǐng)配置ImageUrl


          參考:http://www.ncmem.com/doc/view.aspx?id=704cd302ebd346b486adf39cf4553936

          4.如果接口有權(quán)限驗(yàn)證(登陸驗(yàn)證,SESSION驗(yàn)證),請(qǐng)配置COOKIE。或取消權(quán)限驗(yàn)證。

          參考:http://www.ncmem.com/doc/view.aspx?id=8602DDBF62374D189725BF17367125F3


          效果


          主站蜘蛛池模板: 国产亚洲一区二区精品| 亚洲一区中文字幕在线观看| 波多野结衣AV一区二区三区中文 | 成人久久精品一区二区三区| 亚洲一区二区三区高清在线观看 | 久久精品国内一区二区三区| 国产在线不卡一区二区三区| 国产福利无码一区在线| 亚洲Av高清一区二区三区| 国产乱码精品一区二区三区中文| 亚洲天堂一区在线| 国产另类TS人妖一区二区| 动漫精品一区二区三区3d| 在线|一区二区三区四区| 亚洲蜜芽在线精品一区| 色欲综合一区二区三区| 午夜天堂一区人妻| 亚洲中文字幕丝袜制服一区 | 国产一区二区免费| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 国产一区二区三区免费看| 国产免费av一区二区三区| 在线播放精品一区二区啪视频| 国产乱码精品一区二区三区| 亚洲国产视频一区| 精品少妇人妻AV一区二区三区| 色综合视频一区中文字幕| 无码丰满熟妇一区二区| 人妻av综合天堂一区| 夜精品a一区二区三区| 在线免费一区二区| 亚洲第一区精品观看| 国产综合一区二区在线观看| 亚洲av无码一区二区三区网站| 无码人妻精品一区二区三区久久| 少妇无码一区二区三区免费| 亚洲一区二区三区精品视频| 亚洲字幕AV一区二区三区四区| 好吊妞视频一区二区| 日本在线视频一区| 久久精品国产一区二区三区日韩|