Browse Source

Merge branch 'master' of http://47.107.53.207:3000/ymy/oms

AlanWong 2 năm trước cách đây
mục cha
commit
e715dedbed

+ 3 - 3
src/benyun/components/byForm/byForm.vue

@@ -233,9 +233,9 @@ export default class ByForm extends VueViews {
   changeSetValue(code:string,v:any){
     if(this.value[code]){
       this.value[code] = v;
-      }else{
-        Vue.set(this.value, code, v);
-      }
+    }else{
+      Vue.set(this.value, code, v);
+    }
   }
   //表单验证
   validate(parames?:any):Promise<any>{

+ 6 - 0
src/benyun/components/byInput/byInput.vue

@@ -101,4 +101,10 @@ export default class ByInput extends VueViews {
 .el-input--small{
   font-size: 14px !important;
 }
+.vxe-input--inner[disabled]{
+  background-color: #F5F7FA;
+  border-color: #dfe4ed;
+  color: #C0C4CC;
+  cursor: not-allowed;
+}
 </style>

+ 2 - 2
src/components/buyer/buyer.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="buyer">
-    <el-input placeholder="请选择" v-model="value" size="mini" class="buyer-with-select" clearable>
+    <el-input placeholder="请选择" v-model="value" size="mini" class="myinpuy-with-select" clearable>
       <el-button slot="append" icon="el-icon-more" @click="showProduct"></el-button>
     </el-input>
     <productDialog ref="product" @confirm="confirm" />
@@ -27,7 +27,7 @@ export default class Buyer extends Vue {
 }
 </style>
 <style lang="scss">
-.buyer-with-select{
+.myinpuy-with-select{
   margin-bottom: 4px;
   .el-input-group__append{
     background-color: #fff !important;

+ 11 - 7
src/views/oms/omsLabel/components/addLabel.vue

@@ -1,5 +1,5 @@
 <template>
-  <vxe-modal v-model="value" id="addLabel" width="400" v-loading="load" @show="show" @hide="hide" height="200" show-footer title="新增标签">
+  <vxe-modal v-model="value" id="addLabel" width="400" v-loading="load" @hide="hide" height="200" show-footer title="新增标签">
     <by-form :propConfig="config" ref="form"></by-form>
     <template #footer>
       <div class="btn">
@@ -33,9 +33,13 @@ export default class AddQuestModel extends Vue {
       }]
     ]
   }
-  show(){
-    
-  }
+
+  @Prop({
+    type:Number,
+    default:1
+  })
+  isSystem?:number
+  
   hide(){
     (this.$refs.form as any).clearValidate();
     (this.$refs.form as any).clearValue();
@@ -44,10 +48,10 @@ export default class AddQuestModel extends Vue {
     this.value = v;
   }
   btn(){
-    (this.$refs.form as any).validate().then(()=>{
+    (this.$refs.form as any).validate({noMsg:true}).then(()=>{
       let data = (this.$refs.form as any).getValue();
-      data.isSystem = 1;
-      this.load = true
+      data.isSystem = this.isSystem;
+      this.load = true;
       save(data).then(()=>{
         this.load = false;
         this.$emit('handleSuccess');

+ 1 - 3
src/views/oms/omsLabel/index.vue

@@ -22,9 +22,7 @@ export default class OmsLabel extends Vue {
       add:true,
       refresh:true
     },
-    audit:{
-      add:'oms:omsLabel:add',
-    }
+    audit:{}
   }
   tableConfig:any={
     attr:{

+ 28 - 2
src/views/oms/order/components/addOrder.vue

@@ -21,6 +21,11 @@
             <template v-slot:sourceFrom_desc='{ value }'>
               {{ getFromText(value.sourceFrom) }}
             </template>
+            <template v-slot:labels="{value}">
+              <el-input placeholder="请选择标签" v-model="value.labels" :disabled="orderValue.id" size="small" class="myinpuy-with-select" clearable>
+                <el-button slot="append" v-if="!orderValue.id" icon="el-icon-more" @click="showLabels"></el-button>
+              </el-input>
+            </template>
           </by-form>
         </el-collapse-item>
         <el-collapse-item title="买家信息" name="2" class="add-order-item">
@@ -139,6 +144,7 @@
       <product-sku-modal ref="productGift" :mulit="true" @confirm="confirmProductGift" />
       <add-product-modal ref="addProductModal" @handleSuccess="handleSuccess" :mask="false" />
       <edit-product-modal ref="editProductModal" @handleSuccess="handleSuccess" />
+      <labels-modal ref="labelsModal" @onChange="onChangeLabel" />
     </template>
     <template #footer v-if="!orderValue.id">
       <div class="btn">
@@ -156,7 +162,8 @@ import { addOrder,saveBaseOrder,single,delItem,addPay,batchItem } from '@/api/om
 import { add,multiply,subtract,divide } from '@/benyun/utils/accuracy'
 import AddProductModal from "./addProductModal.vue";
 import EditProductModal from "./editProductModal.vue";
-@Component({components:{AddProductModal,EditProductModal}})
+import LabelsModal from "./labelsModal.vue";
+@Component({components:{AddProductModal,EditProductModal,LabelsModal}})
 export default class AddOrder extends Vue {
   value=false;
   num:any=0;
@@ -323,6 +330,13 @@ export default class AddOrder extends Vue {
           }
         }
       },{
+        label:'标签',
+        prop:'labels',
+        span:12,
+        colspan:2,
+        slot:true
+      }],
+      [{
         label:'线下备注',
         prop:'note',
         component:'by-input',
@@ -855,6 +869,18 @@ export default class AddOrder extends Vue {
   created(){
     this.userInfo = this.$store.getters.userInfo;
   }
+  //标签弹窗信息
+  onChangeLabel(v:string){
+    let value:any = (this.$refs.baseform as any).getValue();
+    value.labels = v;
+    (this.$refs.baseform as any).setValue(value);
+  }
+  //显示标签弹窗
+  showLabels(){
+    if(this.$refs.labelsModal){
+      (this.$refs.labelsModal as any).setShow(true);
+    }
+  }
   handleSuccess(){
     this.$emit('handleSuccess');
     this.getData();
@@ -998,7 +1024,7 @@ export default class AddOrder extends Vue {
         for(let col of this.baseConfig.columns){
           for(let item of col){
             let disField:Array<string>=['freight','buyerMessage','remark'] 
-            if(disField.indexOf(item.prop) == -1){
+            if(!item.slot && disField.indexOf(item.prop) == -1){
               if(!item.compConfig.attr) item.compConfig.attr = {};
               item.compConfig.attr.disabled = true;
             }

+ 176 - 0
src/views/oms/order/components/labelsModal.vue

@@ -0,0 +1,176 @@
+<template>
+  <vxe-modal v-model="value" id="labelsModal" width="70%" height="80%" @hide="hide" @show="show" title="选标签"  transfer show-footer v-loading="load">
+    <div class="labelBox" id="labelBox">
+      <by-tool :propConfig="tool" class="labelTool" @clickHandle="clickHandle" id="omsLabelTool" />
+      <by-table :propConfig="tableConfig" ref="table" >
+        <template v-slot:ordered="{row}">
+          <vxe-input v-if="row.isSystem != 1" v-model="row.ordered" size="small" type="number"></vxe-input>
+          <span v-else>{{ row.ordered }}</span>
+        </template>
+      </by-table>
+    </div>
+    <add-label ref="addLabel" @handleSuccess="getList" :isSystem="0" />
+    <template #footer>
+      <div class="btn">
+        <el-button type="primary" size="small" @click="btn">确定</el-button>
+      </div>
+    </template>
+  </vxe-modal>
+</template>
+
+<script lang="ts">
+import { Component, Prop, Vue, Watch } from "vue-property-decorator";
+import {queryAll, updateOrdered, del} from '@/api/omsLabel'
+import addLabel from '../../omsLabel/components/addLabel.vue'
+@Component({components:{addLabel}})
+export default class LabelsModal extends Vue {
+  value = false;
+  load = false;
+  tool={
+    tools:{
+      add:true,
+      refresh:true
+    },
+    audit:{}
+  }
+  tableConfig:any={
+    attr:{
+      size:'mini',
+      align:'center',
+      seq:true,
+      checkbox:true
+    },
+    columns:[{
+      title:'名称',
+      field:'name'
+    },{
+      title:'排序',
+      field:'ordered',
+      width:150,
+      slot:true
+    },{
+      title:'操作',
+      action:true,
+      width:200,
+      plugins:[{
+        name:'排序',
+        event:{
+          show:(row:any) => {
+            return row.isSystem != 1
+          },
+          click:(row:any) => {
+            this.sortHandle(row);
+          }
+        }
+      },{
+        name:'删除',
+        event:{
+          show:(row:any) => {
+            return row.isSystem != 1
+          },
+          click:(row:any) => {
+            this.delHandle(row);
+          }
+        }
+      }]
+    }]
+  }
+  setShow(v:boolean){
+    this.value = v;
+  }
+  show(){
+    this.$nextTick(()=>{
+      let height = (document.getElementById('labelBox') as any).parentNode.offsetHeight;
+      this.tableConfig.attr.height=height - 32 - 48;
+      if(this.$refs.table){
+        (this.$refs.table as any).setConfig(this.tableConfig);
+      }
+    })
+    this.getList()
+  }
+  getList(){
+    this.load = true;
+    queryAll().then((res:any) => {
+      this.load = false;
+      if(this.$refs.table){
+        (this.$refs.table as any).setValue(res.data);
+      }
+    }).catch(()=>{
+      this.load = false
+    })
+  }
+  hide(){
+    if(this.$refs.table){
+      (this.$refs.table as any).clearCheckboxRow();
+    }
+  }
+  sortHandle(row:any){
+    this.load = true;
+    updateOrdered({
+      id:row.id,
+      ordered:Number(row.ordered)
+    }).then(()=>{
+      this.load = false;
+      this.getList();
+    }).catch(()=>{
+      this.load = false
+    })
+  }
+  delHandle(row:any){
+    this.$confirm('此操作将删除“'+row.name+'”, 是否继续?', '提示', {
+      confirmButtonText: '确定',
+      cancelButtonText: '取消',
+      type: 'warning'
+    }).then(() => {
+      this.load = true;
+      del({
+        id:row.id
+      }).then(()=>{
+        this.load = false;
+        this.getList();
+      }).catch(()=>{
+        this.load = false
+      })
+    }).catch(()=>{})
+  }
+  btn(){
+    let data = (this.$refs.table as any).getSelectData();
+    let v='';
+    if(data.length == 0){
+      this.$message('请选择标签!')
+      return
+    }
+    if(data.length > 10){
+      this.$message('标签选择不能超过10个!')
+      return
+    }
+    for(const item of data){
+      if(v){
+        v = v + ','+item.name
+      }else{
+        v = item.name
+      }
+    }
+    this.value = false;
+    this.$emit('onChange',v);
+  }
+  clickHandle(e:string){
+    if(e == 'onAdd'){
+      (this.$refs.addLabel as any).setShow(true)
+    }
+    if(e == 'onRefresh'){
+      this.getList();
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.labelBox{
+  width: 100%;
+  height: 100%;
+}
+.labelTool{
+  padding-bottom: 16px;
+}
+</style>

+ 78 - 27
src/views/oms/order/index.vue

@@ -104,11 +104,25 @@
             <order-product />
           </el-collapse-item> -->
           <order-checkbox title="平台订单状态" ref="searchCom09" keyName="shopStatusList" :options="shopStatusListOption" noLimit @checkboxChange="onChange($event,'shopStatusList')" />
-          <order-radio title="便签|线下备注" ref="searchCom10" keyName="noteFilter" :options="noteFilterOptions" noLimit @radioChange="onChange($event,'noteFilter')">
+          <order-radio title="线下备注" ref="searchCom10" keyName="noteFilter" :options="noteFilterOptions" noLimit @radioChange="onChange($event,'noteFilter')">
             <template v-slot:noteContent>
               <el-input style="width: 140px;" v-model="value.noteContent" size="mini" placeholder="备注内容"></el-input>
             </template>
           </order-radio>
+          <el-collapse-item title="标签" name="label">
+            <div class="orderSelect">
+              <el-select v-model="value.includeLabelsType" placeholder="请选择包含标签类型" clearable size="mini">
+                <el-option label="包含任意一个标签" :value="1"></el-option>
+                <el-option label="同时包含指定标签" :value="2"></el-option>
+              </el-select>
+            </div>
+            <el-input placeholder="包含标签" :value="value.includeLabels" @clear="labelsClear(true)" class="labels-width-btn" size="mini" clearable>
+              <el-button slot="append" icon="el-icon-more" @click="showLabels"></el-button>
+            </el-input>
+            <el-input placeholder="排除标签" :value="value.excludeLabels" @clear="labelsClear" class="labels-width-btn" size="mini" clearable>
+              <el-button slot="append" icon="el-icon-more" @click="showLabels2"></el-button>
+            </el-input>
+          </el-collapse-item>
           <order-radio title="订单来源" keyName="sourceFrom" ref="searchCom11" :options="sourceFromOptions" noLimit @radioChange="onChange($event,'sourceFrom')" />
           <order-checkbox title="订单类型" keyName="type" ref="searchCom12" :options="typeOption" noLimit @checkboxChange="onChange($event,'type')" />
           <el-collapse-item title="付款方式 & 是否付款" name="codAndPay">
@@ -127,30 +141,6 @@
               </el-radio-group>
             </div>
           </el-collapse-item>
-          <!-- <el-collapse-item title="标签&多标签 | 旗帜" name="flag">
-            <div>包含旗帜</div>
-            <div class="orderSelect">
-              <el-select v-model="value.includeFlags" multiple collapse-tags size="mini" placeholder="请选择旗帜" clearable>
-                <el-option
-                  v-for="item in flagsOptions"
-                  :key="item.value"
-                  :label="item.label"
-                  :value="item.value">
-                </el-option>
-              </el-select>
-            </div>
-            <div>排除旗帜</div>
-            <div class="orderSelect">
-              <el-select v-model="value.excludeFlags" multiple collapse-tags size="mini" placeholder="请选择旗帜" clearable>
-                <el-option
-                  v-for="item in flagsOptions"
-                  :key="item.value"
-                  :label="item.label"
-                  :value="item.value">
-                </el-option>
-              </el-select>
-            </div>
-          </el-collapse-item> -->
           <!-- <order-checkbox title="店铺" ref="searchCom13" keyName="shopIdList" :options="shopIdListOptions" @checkboxChange="onChange($event,'shopIdList')" /> -->
 
           <order-checkbox title="省份" ref="searchCom14" keyName="receiverProvinceCode" :options="provinceOptions" @checkboxChange="onChange($event,'receiverProvinceCodeList')" />
@@ -201,6 +191,8 @@
       <add-product-modal ref="addProductModal" @handleSuccess="handleSuccess" />
       <!-- 改运费 -->
       <freight-modal ref="freightModal" @handleSuccess="handleSuccess" />
+      <!-- 标签 -->
+      <labels-modal ref="labelsModal" @onChange="onChangeLabel" />
     </div>
   </div>
 </template>
@@ -228,11 +220,12 @@ import UpdateSalerModal from "./components/updateSalerModal.vue";
 import TabModal from "./components/tabModal.vue";
 import AddProductModal from "./components/addProductModal.vue";
 import FreightModal from "./components/freightModal.vue";
+import LabelsModal from "./components/labelsModal.vue";
 import { query,getProvince,smt,unSmt,purchaseQty,unCancel,resetQuestion } from '@/api/omsOrder'
 import { queryAll } from '@/api/question'
 @Component({components:{filterInput,OrderCheckbox,OrderRadio,filterDate,OrderTool,OrderTable,AddOrder,InputSelect,OrderProduct,
   filterMinMax,loadOrderModal,PurchaseModel,MergeModel,SplitModel,CancelOrderModel,QuestModel,SetQuesModal,UpdateRmkModal,UpdateSalerModal,
-  TabModal,AddProductModal,FreightModal}})
+  TabModal,AddProductModal,FreightModal,LabelsModal}})
 export default class Order extends Vue {
   activeNames:Array<any>=['1','status']
   radio=''
@@ -240,6 +233,7 @@ export default class Order extends Vue {
   data:Array<any> = []
   load = false;
   showQues=false;
+  isContainLabel=true;
   page:any={
     pageNo: 1, //当前页
     pageSize: 20, //每页条数
@@ -504,6 +498,45 @@ export default class Order extends Vue {
     this.getProvince();
     this.getQuestionList();
   }
+  //显示标签弹窗
+  showLabels(){
+    this.isContainLabel = true;
+    if(this.$refs.labelsModal){
+      (this.$refs.labelsModal as any).setShow(true);
+    }
+  }
+  showLabels2(){
+    this.isContainLabel = false;
+    if(this.$refs.labelsModal){
+      (this.$refs.labelsModal as any).setShow(true);
+    }
+  }
+  //标签弹窗返回信息
+  onChangeLabel(v:string){
+    if(this.isContainLabel){
+      if(this.value.includeLabels){
+        Vue.set(this.value, 'includeLabels', v);
+      }else{
+        this.value.includeLabels = v;
+      }
+      
+    }else{
+      if(this.value.excludeLabels){
+        Vue.set(this.value, 'excludeLabels', v);
+      }else{
+        this.value.excludeLabels = v;
+      }
+    }
+    this.$forceUpdate()
+  }
+  labelsClear(v?:boolean){
+    if(v){
+      delete this.value.includeLabels;
+    }else{
+      delete this.value.excludeLabels;
+    }
+    this.$forceUpdate()
+  }
   //改运费
   updateFreight(){
     this.updateHandleModal('freightModal');
@@ -687,9 +720,11 @@ export default class Order extends Vue {
   }
   resert(){
    this.clearSearchValue();
+
    this.page.pageNo = 1;
    this.getList();
   }
+  //搜索
   search(){
     this.page.pageNo = 1;
     this.getList();
@@ -881,13 +916,18 @@ export default class Order extends Vue {
   getList(){
     let data:any = (this as any).$lodash.cloneDeep(this.value);
     let params:any={};
+    if(data.includeLabels){
+      data.includeLabels = data.includeLabels.split(',');
+    }
+    if(data.excludeLabels){
+      data.excludeLabels = data.excludeLabels.split(',');
+    }
     params.pageNo = this.page.pageNo;
     params.pageSize = this.page.pageSize;
     this.load = true;
     query(params,data).then((res:any) => {
       this.data = res.data.records;
       this.page.pageNo = res.data.current;
-      // this.page.pageSize = res.data.size;
       this.page.total = res.data.total;
       this.load = false;
       this.$forceUpdate();
@@ -1139,4 +1179,15 @@ export default class Order extends Vue {
     right: 0px;
   }
 }
+.labels-width-btn{
+  margin-bottom: 8px;
+  .el-input-group__append{
+    background-color: #fff !important;
+    width: 30px !important;
+    padding: 0 10px;
+    .el-icon-more{
+      font-size: 16px;
+    }
+  }  
+}
 </style>

+ 1 - 1
src/views/oms/quesType/components/addQuest.vue

@@ -44,7 +44,7 @@ export default class AddQuestModel extends Vue {
     this.value = v;
   }
   btn(){
-    (this.$refs.form as any).validate().then(()=>{
+    (this.$refs.form as any).validate({noMsg:true}).then(()=>{
       let data = (this.$refs.form as any).getValue();
       data.isSystem = 1;
       this.load = true