Parcourir la source

Merge remote-tracking branch 'origin/mergeBranch' into mergeBranch

qymljy il y a 2 ans
Parent
commit
3f5a93259a

+ 264 - 0
src/Form/promotion/add.vue

@@ -0,0 +1,264 @@
+<template>
+  <div>
+    <el-button size="mini" type="primary" @click="dialogFormVisible = true">新 建</el-button>
+    <el-drawer
+        title="创建促销方案"
+        :visible.sync="dialogFormVisible"
+        size="40%"
+        direction="rtl"
+        append-to-body
+        @close="dialogFormVisible = false"
+        :show-close="false">
+      <div class="drawer__panel">
+        <el-row :gutter="20">
+          <el-form :model="form" :rules="rules" ref="form" label-width="120px" label-position="right" size="mini">
+            <el-col :span="12">
+              <el-form-item label="方案名称:" prop="promname">
+                <el-input v-model="form.promname"  placeholder="请输入促销方案名称"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12" >
+              <el-form-item label="促销类型:" prop="type">
+                <el-select v-model="form.type" placeholder="请选择促销类型" style="width: 100%">
+                  <el-option label="普通促销" value="普通促销"></el-option>
+                  <el-option label="打包促销" value="打包促销"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12" >
+              <el-form-item label="订货账户:" prop="type">
+                <el-select v-model="form.sa_accountclassid" placeholder="请选择订货账户" style="width: 100%">
+                  <el-option
+                      v-for="item in accountList"
+                      :key="item.sa_accountclassid"
+                      :label="item.accountname"
+                      :value="item.sa_accountclassid">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="品牌:" prop="sa_brandid">
+                <el-select v-model="form.sa_brandid" placeholder="请选择品牌" style="width: 100%" @change="brandChange">
+                  <el-option
+                      v-for="item in brandList"
+                      :key="item.sa_brandid"
+                      :label="item.brandname"
+                      :value="item.sa_brandid">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="领域:" prop="tradefield">
+                <el-select v-model="form.tradefield" placeholder="请选择领域" style="width: 100%">
+                  <el-option
+                      v-for="item in tradefieldList"
+                      :key="item.rowindex"
+                      :label="item.value"
+                      :value="item.value">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="起订数量:" prop="orderminqty">
+                <el-input v-model="form.orderminqty" placeholder="请输入起订数量"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="起订金额:" prop="orderminamount">
+                <el-input v-model="form.orderminamount" placeholder="请输入起订金额"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="订单增量:" prop="orderaddqty">
+                <el-input v-model="form.orderaddqty" placeholder="请输入订单增量"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="活动开始时间" prop="begdate">
+                <el-date-picker
+                  style="width:100%"
+                  v-model="form.begdate"
+                  type="date"
+                  value-format="yyyy-MM-dd"
+                  placeholder="选择开始日期">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="活动结束时间" prop="begdate">
+                <el-date-picker
+                  style="width:100%"
+                  v-model="form.enddate"
+                  type="date"
+                  value-format="yyyy-MM-dd"
+                  placeholder="选择结束日期">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="方案描述:" prop="remarks">
+                <el-input v-model="form.remarks" type="textarea" rows="5" placeholder="请输入方案描述"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-form>
+        </el-row>
+      </div>
+      <div class="fixed__btn__panel">
+        <el-button size="small" @click="dialogFormVisible = false" class="normal-btn-width">取 消</el-button>
+        <el-button size="small" type="primary" @click="onSubmit" class="normal-btn-width">确 定</el-button>
+      </div>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "add",
+  components:{},
+  data(){
+    var checkBegTimer = (rule, value, callback) => {
+      if (new Date(this.form.enddate).getTime() > new Date(value).getTime()) {
+        callback()
+      } {
+        return callback(new Error('开始时间必须小于结束时间'));
+      }
+    }
+    var checkEndTimer = (rule, value, callback) => {
+      if (new Date(this.form.begdate).getTime() < new Date(value).getTime()) {
+        callback()
+      } {
+        return callback(new Error('结束时间必须大于开始时间'));
+      }
+    }
+    return {
+      tradefieldList:[],
+      brandList:[],
+      accountList:[],
+      dialogFormVisible:false,
+      form:{
+        "sa_promotionid":0,     //sat_notice_classid<=0时 为新增
+        "sa_accountclassid": "",
+        "sa_brandid":'',
+        "promname": "",
+        "remarks": "",
+        "type": "",
+        "tradefield": "",
+        "orderminqty": '',
+        "orderaddqty": '',
+        "orderminamount": '',
+        "begdate": '',
+        "enddate": ""
+      },
+      rules:{
+        promname:[
+          { required: true, message: '请输入方案名称', trigger: 'blur'},
+        ],
+        sa_brandid:[
+          { required: true, message: '未选择品牌', trigger: 'change'},
+        ],
+        type:[
+          { required: true, message: '请选择促销类型', trigger: 'change'},
+        ],
+        sa_accountclassid:[
+          { required: true, message: '请选择订货账户', trigger: 'blur'},
+        ],
+        orderminqty:[
+          { required: true, message: '请输入起订量', trigger: 'blur'},
+        ],
+        orderaddqty:[
+          { required: true, message: '请输入订单增量', trigger: 'blur'},
+        ],
+        orderminamount:[
+          { required: true, message: '请输入起订金额', trigger: 'blur'},
+        ],
+        begdate:[
+          { required: true, message: '请选择开始时间', trigger: 'change'},
+          { validator: checkBegTimer , trigger:'change'}
+        ],
+        enddate:[
+          { required: true, message: '请选择结束时间', trigger: 'change'},
+          { validator: checkEndTimer , trigger:'change'}
+        ],
+        tradefield:[
+          { required: true, message: '请选择领域', trigger: 'change'},
+        ],
+      },
+    }
+  },
+  watch: {
+    dialogFormVisible (val) {
+      !val && this.$refs.form.resetFields()
+    }
+  },
+  methods:{
+    onSubmit(){
+      console.log(this.form)
+      this.$refs['form'].validate(async (valid) => {
+        if (!valid) return false
+        const res = await this.$api.requested({
+          "id": "20221230144503",
+          "version":1,
+          "content": this.form
+        })
+        this.tool.showMessage(res,()=>{
+          this.$emit('onSuccess')
+          this.dialogFormVisible = false
+        })
+      })
+    },
+    brandChange (val) {
+
+    },
+    /* 领域 */
+    async getTradefield () {
+      const res = await this.$store.dispatch('optiontypeselect','tradefield')
+      this.tradefieldList = res.data
+      console.log(this.tradefieldList,'领域');
+    },
+    /* 品牌 */
+    async getBrand () {
+      let res = await this.$api.requested({
+        "id": "20220922085103",
+        "version":1,
+        "content": {
+          "where":{
+              "condition":""
+          }
+        }
+      })
+      this.brandList = res.data
+      console.log(this.brandList,'品牌');
+      
+    },
+    /* 账户类型 */
+    async getAccount () {
+      let res = await this.$api.requested({
+        "id": "20221008134803",
+        "version":1,
+        "content": {
+            "where":{
+                "condition":"",
+                "isused":1
+            }
+        }
+      })
+      this.accountList = res.data
+      console.log(this.accountList,'账户');
+      
+    }
+  },
+  created() {
+    this.getTradefield()
+    this.getBrand()
+    this.getAccount()
+    this.form.begdate = new Date().getFullYear() + '-' + parseInt(new Date().getMonth() + 1) + '-' + parseInt(new Date().getDate())
+  },
+}
+</script>
+
+<style scoped>
+
+</style>

+ 269 - 0
src/Form/promotion/edit.vue

@@ -0,0 +1,269 @@
+<template>
+  <div>
+    <el-button size="mini" type="primary" @click="editBtn">编 辑</el-button>
+    <el-drawer
+        title="编辑促销方案"
+        :visible.sync="dialogFormVisible"
+        size="40%"
+        direction="rtl"
+        append-to-body
+        @close="dialogFormVisible = false"
+        :show-close="false">
+      <div class="drawer__panel">
+        <el-row :gutter="20">
+          <el-form :model="form" :rules="rules" ref="form" label-width="120px" label-position="right" size="mini">
+            <el-col :span="12">
+              <el-form-item label="方案名称:" prop="promname">
+                <el-input v-model="form.promname"  placeholder="请输入促销方案名称"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12" >
+              <el-form-item label="促销类型:" prop="type">
+                <el-select v-model="form.type" placeholder="请选择促销类型" style="width: 100%">
+                  <el-option label="普通促销" value="普通促销"></el-option>
+                  <el-option label="打包促销" value="打包促销"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12" >
+              <el-form-item label="订货账户:" prop="type">
+                <el-select v-model="form.sa_accountclassid" placeholder="请选择订货账户" style="width: 100%">
+                  <el-option
+                      v-for="item in accountList"
+                      :key="item.sa_accountclassid"
+                      :label="item.accountname"
+                      :value="item.sa_accountclassid">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="品牌:" prop="sa_brandid">
+                <el-select v-model="form.sa_brandid" placeholder="请选择品牌" style="width: 100%" @change="brandChange">
+                  <el-option
+                      v-for="item in brandList"
+                      :key="item.sa_brandid"
+                      :label="item.brandname"
+                      :value="item.sa_brandid">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="领域:" prop="tradefield">
+                <el-select v-model="form.tradefield" placeholder="请选择领域" style="width: 100%">
+                  <el-option
+                      v-for="item in tradefieldList"
+                      :key="item.rowindex"
+                      :label="item.value"
+                      :value="item.value">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="起订数量:" prop="orderminqty">
+                <el-input v-model="form.orderminqty" placeholder="请输入起订数量"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="起订金额:" prop="orderminamount">
+                <el-input v-model="form.orderminamount" placeholder="请输入起订金额"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="订单增量:" prop="orderaddqty">
+                <el-input v-model="form.orderaddqty" placeholder="请输入订单增量"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="活动开始时间" prop="begdate">
+                <el-date-picker
+                  style="width:100%"
+                  v-model="form.begdate"
+                  type="date"
+                  value-format="yyyy-MM-dd"
+                  placeholder="选择开始日期">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="活动结束时间" prop="begdate">
+                <el-date-picker
+                  style="width:100%"
+                  v-model="form.enddate"
+                  type="date"
+                  value-format="yyyy-MM-dd"
+                  placeholder="选择结束日期">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="方案描述:" prop="remarks">
+                <el-input v-model="form.remarks" type="textarea" rows="5" placeholder="请输入方案描述"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-form>
+        </el-row>
+      </div>
+      <div class="fixed__btn__panel">
+        <el-button size="small" @click="dialogFormVisible = false" class="normal-btn-width">取 消</el-button>
+        <el-button size="small" type="primary" @click="onSubmit" class="normal-btn-width">确 定</el-button>
+      </div>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "add",
+  components:{},
+  props:['data'],
+  data(){
+    var checkBegTimer = (rule, value, callback) => {
+      if (new Date(this.form.enddate).getTime() > new Date(value).getTime()) {
+        callback()
+      } {
+        return callback(new Error('开始时间必须小于结束时间'));
+      }
+    }
+    var checkEndTimer = (rule, value, callback) => {
+      if (new Date(this.form.begdate).getTime() < new Date(value).getTime()) {
+        callback()
+      } {
+        return callback(new Error('结束时间必须大于开始时间'));
+      }
+    }
+    return {
+      tradefieldList:[],
+      brandList:[],
+      accountList:[],
+      dialogFormVisible:false,
+      form:{
+        "sa_promotionid":0,     //sat_notice_classid<=0时 为新增
+        "sa_accountclassid": "",
+        "sa_brandid":'',
+        "promname": "",
+        "remarks": "",
+        "type": "",
+        "tradefield": "",
+        "orderminqty": '',
+        "orderaddqty": '',
+        "orderminamount": '',
+        "begdate": '',
+        "enddate": ""
+      },
+      rules:{
+        promname:[
+          { required: true, message: '请输入方案名称', trigger: 'blur'},
+        ],
+        sa_brandid:[
+          { required: true, message: '未选择品牌', trigger: 'change'},
+        ],
+        type:[
+          { required: true, message: '请选择促销类型', trigger: 'change'},
+        ],
+        sa_accountclassid:[
+          { required: true, message: '请选择订货账户', trigger: 'blur'},
+        ],
+        orderminqty:[
+          { required: true, message: '请输入起订量', trigger: 'blur'},
+        ],
+        orderaddqty:[
+          { required: true, message: '请输入订单增量', trigger: 'blur'},
+        ],
+        orderminamount:[
+          { required: true, message: '请输入起订金额', trigger: 'blur'},
+        ],
+        begdate:[
+          { required: true, message: '请选择开始时间', trigger: 'change'},
+          { validator: checkBegTimer , trigger:'change'}
+        ],
+        enddate:[
+          { required: true, message: '请选择结束时间', trigger: 'change'},
+          { validator: checkEndTimer , trigger:'change'}
+        ],
+        tradefield:[
+          { required: true, message: '请选择领域', trigger: 'change'},
+        ],
+      },
+    }
+  },
+  watch: {
+    dialogFormVisible (val) {
+      !val && this.$refs.form.resetFields()
+    }
+  },
+  methods:{
+    editBtn () {
+      this.dialogFormVisible = true
+      this.form = Object.assign({},this.form,this.data)
+    },
+    onSubmit(){
+      console.log(this.form)
+      this.$refs['form'].validate(async (valid) => {
+        if (!valid) return false
+        const res = await this.$api.requested({
+          "id": "20221230144503",
+          "version":1,
+          "content": this.form
+        })
+        this.tool.showMessage(res,()=>{
+          this.$emit('onSuccess')
+          this.dialogFormVisible = false
+        })
+      })
+    },
+    brandChange (val) {
+
+    },
+    /* 领域 */
+    async getTradefield () {
+      const res = await this.$store.dispatch('optiontypeselect','tradefield')
+      this.tradefieldList = res.data
+      console.log(this.tradefieldList,'领域');
+    },
+    /* 品牌 */
+    async getBrand () {
+      let res = await this.$api.requested({
+        "id": "20220922085103",
+        "version":1,
+        "content": {
+          "where":{
+              "condition":""
+          }
+        }
+      })
+      this.brandList = res.data
+      console.log(this.brandList,'品牌');
+      
+    },
+    /* 账户类型 */
+    async getAccount () {
+      let res = await this.$api.requested({
+        "id": "20221008134803",
+        "version":1,
+        "content": {
+            "where":{
+                "condition":"",
+                "isused":1
+            }
+        }
+      })
+      this.accountList = res.data
+      console.log(this.accountList,'账户');
+      
+    }
+  },
+  created() {
+    this.getTradefield()
+    this.getBrand()
+    this.getAccount()
+    this.form.begdate = new Date().getFullYear() + '-' + parseInt(new Date().getMonth() + 1) + '-' + parseInt(new Date().getDate())
+  },
+}
+</script>
+
+<style scoped>
+
+</style>

+ 1 - 1
src/Form/recvoucher/add.vue

@@ -4,7 +4,7 @@
     <el-drawer
         title="创建收入凭证"
         :visible.sync="dialogFormVisible"
-        size="25%"
+        size="40%"
         direction="rtl"
         append-to-body
         @close="dialogFormVisible = false">

+ 21 - 3
src/HDrpManagement/orderManage/details/index.vue

@@ -12,7 +12,7 @@
         delApiId="20221108152102"
         tags=""
         :statusCheck="[{key:'status',value:'审核'},{key:'status',value:'提交'},{key:'status',value:'关闭'}]"
-        :tabs="['基本信息','订单明细','订单进度','居间费明细']"
+        :tabs="['基本信息','订单明细','订单进度','居间费明细','发货单']"
         @pageChange="pageChange"
         @onEditSuccess="queryMainData($route.query.id)">
         <div slot="customOperation" class="inline-16">
@@ -23,6 +23,7 @@
           <el-button v-if="tool.checkAuth($route.name,'reback')" :disabled="mainData.status !== '提交' && mainData.status !== '交期待确认'" type="primary" size="mini" @click="dialogVisible = true">退 回</el-button>
           <el-button v-if="tool.checkAuth($route.name,'submit')" :disabled="mainData.status !== '新建'"  type="primary" size="mini" @click="onSubmit('提交')">提 交</el-button>
           <el-button v-if="tool.checkAuth($route.name,'close')" :disabled="mainData.status !== '审核'" type="primary" size="mini" @click="closeOrder">关 闭</el-button>
+          <el-button v-if="tool.checkAuth($route.name,'insert')"  type="primary" size="mini" @click="onCopy">复 制</el-button>
       </div>
       <div slot="slot0" >
         <default-info :mainData="mainData"></default-info>
@@ -36,6 +37,10 @@
       <div slot="slot3" >
         <rebat></rebat>
       </div>
+      <div slot="slot4" >
+        <dispatch></dispatch>
+      </div>
+      
     </basicDetails>
     <el-dialog append-to-body title="退回原因" :visible.sync="dialogVisible" width="400px">
       <el-input v-model="backreason" type="textarea" placeholder="请输入退回原因"></el-input>
@@ -53,6 +58,7 @@ import productList from './tabs/productlist.vue'
 import confirmDate from '../modules/confirmDate.vue'
 import rebat from './tabs/rebatesettlement.vue'
 import orderprogress from './tabs/orderpProgress.vue'
+import dispatch from './tabs/dispatch.vue'
 export default {
   name: "detail",
   data() {
@@ -68,7 +74,8 @@ export default {
     productList,
     confirmDate,
     rebat,
-    orderprogress
+    orderprogress,
+    dispatch
   },
   methods:{
     async queryMainData(id) {
@@ -241,7 +248,18 @@ export default {
       this.tool.showMessage(res,()=>{
         this.queryMainData()
       })
-    }
+    },
+    async onCopy () {
+      const res = await this.$api.requested({
+        "id": 20230102144502,
+        "content": {
+          "sa_orderid": this.$route.query.id
+        }
+      })
+      this.tool.showMessage(res,()=>{
+        this.tool.showMessage(res)
+      })
+    },
   },
   mounted () {
     this.queryMainData(this.$route.query.id)

+ 80 - 0
src/HDrpManagement/orderManage/details/tabs/dispatch.vue

@@ -0,0 +1,80 @@
+<template>
+  <div>
+    <el-table
+      :data="tableData"
+      style="width: 100%">
+      <el-table-column
+        prop="billno"
+        label="发货单号"
+        width="180">
+      </el-table-column>
+      <el-table-column
+        prop="status"
+        label="状态"
+        width="90">
+      </el-table-column>
+      <el-table-column
+        prop="address"
+        label="发货日期">
+      </el-table-column>
+      <el-table-column
+        prop="address"
+        label="备注">
+      </el-table-column>
+    </el-table>
+    <div class="container normal-panel" style="text-align:right">
+      <el-pagination
+        background
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        :current-page="currentPage"
+        :page-sizes="[20, 50, 100, 200]"
+        layout="total,sizes, prev, pager, next, jumper"
+        :total="total">
+      </el-pagination>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  data () {
+    return {
+      tableData:[],
+      param:{
+        "id": 20221205111302,
+        "content": {
+          "sa_orderid": 12,
+          "pageNumber": 1,
+          "pageSize": 17,
+          "where": {
+            "condition": ""
+          }
+        },
+      }
+    }
+  },
+  methods:{
+    async listData() {
+      const res = await this.$api.requested(this.param)
+      this.tableData = res.data
+      this.total = res.total
+      this.currentPage = res.pageNumber
+    },
+    handleSizeChange(val) {
+      this.param.pageSize = val
+      this.listData()
+    },
+    handleCurrentChange(val) {
+      this.param.pageNumber = val
+      this.listData()
+    },
+  },
+  mounted () {
+    this.listData()
+  }
+}
+
+</script>
+<style>
+</style>

+ 6 - 11
src/HDrpManagement/orderManage/details/tabs/rebatesettlement.vue

@@ -1,19 +1,19 @@
 <template>
   <div>
     <el-descriptions class="margin-top mt-10" title="居间明细" :column="2" size="small" border>
-      <el-descriptions-item :labelStyle="{width:'120px'}" label="订单金额比例">{{rebHeadData.discountrate}}</el-descriptions-item>
+      <el-descriptions-item :labelStyle="{width:'120px'}" label="订单金额比例">{{rebHeadData.orderratio}}</el-descriptions-item>
       <el-descriptions-item :labelStyle="{width:'120px'}" label="订单金额">{{rebHeadData.amount}}</el-descriptions-item>
-      <el-descriptions-item :labelStyle="{width:'120px'}" label="居间产品折扣">{{rebHeadData.rebate_discountrate}}</el-descriptions-item>
+      <el-descriptions-item :labelStyle="{width:'120px'}" label="居间产品折扣">{{rebHeadData.productdiscount}}</el-descriptions-item>
       <el-descriptions-item :labelStyle="{width:'120px'}" label="居间费">{{rebHeadData.rebate}}</el-descriptions-item>
-      <el-descriptions-item :labelStyle="{width:'120px'}" label="结算经销商">{{rebHeadData.sys_enterpriseid}}</el-descriptions-item>
+      <el-descriptions-item :labelStyle="{width:'120px'}" label="结算经销商">{{rebHeadData.enterprisename}}</el-descriptions-item>
     </el-descriptions>
     <el-table
       :data="tableData"
       border
-      size="mini"
+      size="small"
       style="width: 100%">
       <el-table-column
-        prop="date"
+        prop="itemname"
         label="产品"
         width="itemname">
       </el-table-column>
@@ -53,12 +53,7 @@
         width="150">
       </el-table-column>
       <el-table-column
-        prop="rebate_price"
-        label="居间产品单价"
-        width="150">
-      </el-table-column>
-      <el-table-column
-        prop="rebate_price"
+        prop="rebate_unit_price"
         label="居间单价"
         width="120">
       </el-table-column>

+ 48 - 0
src/HDrpManagement/promotion/components/check.vue

@@ -0,0 +1,48 @@
+<template>
+  <div>
+    <el-button type="primary" size="mini" @click="check('审核')" v-if="data.status == '新建' && tool.checkAuth($route.name,'check')">审 核</el-button>
+    <el-button type="primary" size="mini" @click="check('反审核')" v-else-if="data.status == '审核' && tool.checkAuth($route.name,'reverseCheck')">反 审 核</el-button>
+  </div>
+</template>
+
+<script>
+import { log } from '@antv/g2plot/lib/utils';
+export default {
+  name: '',
+  props:['data'],
+  data() {
+    return {
+    };
+  },
+  computed:{
+  },
+  watch:{
+  },
+  methods: {
+    check (status) {
+      this.$confirm(`确定${status}当前促销方案吗?`,'提示',{
+        confirmButtonText:'确定',
+        cancelButtonText:'取消',
+        type:'warning'
+      }).then(async () => {
+        let id
+        status == '审核' ? id = 20221230145003 : id = 20221230145103
+        let res = await this.$api.requested({
+          "id": id,
+          "version":1,
+          "content": {
+              "sa_promotionid": this.$route.query.id
+          }
+        })
+        this.tool.showMessage(res,() => {
+          this.$emit('onSuccess')
+        })
+      })
+    }
+  },
+};
+</script>
+
+<style scoped>
+
+</style>

+ 48 - 0
src/HDrpManagement/promotion/components/close.vue

@@ -0,0 +1,48 @@
+<template>
+  <div>
+    <el-button type="primary" size="mini" @click="check('关闭')" v-if="data.status != '关闭' && tool.checkAuth($route.name,'close')">关 闭</el-button>
+    <el-button type="primary" size="mini" @click="check('取消关闭')" v-else-if="tool.checkAuth($route.name,'cancelClose')">取 消 关 闭</el-button>
+  </div>
+</template>
+
+<script>
+export default {
+  name: '',
+  props:['data'],
+  data() {
+    return {
+    };
+  },
+  computed:{
+  },
+  watch:{
+  },
+  methods: {
+    check (status) {
+      this.$confirm(`确定${status}当前促销方案吗?`,'提示',{
+        confirmButtonText:'确定',
+        cancelButtonText:'取消',
+        type:'warning'
+      }).then(async () => {
+        let isclose
+        status == '关闭' ? isclose = true : isclose = false
+        let res = await this.$api.requested({
+          "id": 20230102095403,
+          "version":1,
+          "content": {
+              "sa_promotionid": this.$route.query.id,
+              "isclose":isclose
+          }
+        })
+        this.tool.showMessage(res,() => {
+          this.$emit('onSuccess')
+        })
+      })
+    }
+  },
+};
+</script>
+
+<style scoped>
+
+</style>

+ 48 - 0
src/HDrpManagement/promotion/components/send.vue

@@ -0,0 +1,48 @@
+<template>
+  <div v-if="(data.status == '审核' && tool.checkAuth($route.name,'send')) || (data.status == '发布' && tool.checkAuth($route.name,'cancelClose'))">
+    <el-button type="primary" size="mini" @click="check('发布')" v-if="data.status == '审核' && tool.checkAuth($route.name,'send')">发 布</el-button>
+    <el-button type="primary" size="mini" @click="check('取消发布')" v-else-if="data.status == '发布' && tool.checkAuth($route.name,'cancelClose')">取 消 发 布</el-button>
+  </div>
+</template>
+
+<script>
+export default {
+  name: '',
+  props:['data'],
+  data() {
+    return {
+    };
+  },
+  computed:{
+  },
+  watch:{
+  },
+  methods: {
+    check (status) {
+      this.$confirm(`确定${status}当前促销方案吗?`,'提示',{
+        confirmButtonText:'确定',
+        cancelButtonText:'取消',
+        type:'warning'
+      }).then(async () => {
+        let isrecheck
+        status == '发布' ? isrecheck = true : isrecheck = false
+        let res = await this.$api.requested({
+          "id": 20221230145203,
+          "version":1,
+          "content": {
+              "sa_promotionid": this.$route.query.id,
+              "isrecheck":isrecheck
+          }
+        })
+        this.tool.showMessage(res,() => {
+          this.$emit('onSuccess')
+        })
+      })
+    }
+  },
+};
+</script>
+
+<style scoped>
+
+</style>

+ 48 - 0
src/HDrpManagement/promotion/index.vue

@@ -0,0 +1,48 @@
+
+<template>
+  <div>
+    <basicLayout 
+      ref="list" 
+      formPath="promotion"
+      tableName="promotionTable" 
+      idName="sa_promotionid" 
+      :apiId="{query:20221230144803,del:20221230144903}"
+      :options="options"
+      :detailPath="{
+        path:'/promotionDetail'
+      }">
+      <div slot="custom"></div>
+      <template v-slot:tbList="scope">
+        <div v-if="scope.data.column.data[[scope.data.column.columnname]]">
+          <span v-if="scope.data.column.columnname == 'status'">
+            <span style="color:#333333" v-if="scope.data.column.data[[scope.data.column.columnname]] == '新建'">{{scope.data.column.data[[scope.data.column.columnname]]}}</span>
+            <span style="color:#3874f6" v-else-if="scope.data.column.data[[scope.data.column.columnname]] == '审核'">{{scope.data.column.data[[scope.data.column.columnname]]}}</span>
+            <span style="color:#52C41A" v-else-if="scope.data.column.data[[scope.data.column.columnname]] == '发布'">{{scope.data.column.data[[scope.data.column.columnname]]}}</span>
+          </span>
+          <span v-else>
+            {{scope.data.column.data[[scope.data.column.columnname]]}}
+          </span>
+        </div>
+        <div v-if="scope.data.column.columnname != 'operation' && !scope.data.column.data[[scope.data.column.columnname]] && scope.data.column.data[[scope.data.column.columnname]] !== 0">--</div>
+      </template>
+      <template v-slot:tbOpreation="scope">
+      </template>
+    </basicLayout>
+  </div>
+</template>
+
+<script>
+export default {
+  data () {
+    return {
+      options:[]
+      
+    }
+  },
+  methods:{
+  }
+}
+
+</script>
+<style>
+</style>

+ 313 - 0
src/HDrpManagement/promotion/modules/detail.vue

@@ -0,0 +1,313 @@
+<template>
+  <div>
+    <basicDetails
+        ref="details"
+        :titleText="mainData.promnum"
+        :editData="mainData"
+        :mainAreaData="mainAreaData"
+        :turnPageId="20221230144803"
+        :delApiId="20221230144903"
+        idname="sa_promotionid"
+        ownertable="sa_promotion"
+        tags=""
+        :tabs="['促销模块','授权范围','详细信息']"
+        :statusCheck="[{key:'status',value:'审核'},{key:'status',value:'发布'}]"
+        @pageChange="pageChange"
+        @onEditSuccess="queryMainData($route.query.id)">
+      <div slot="customOperation">
+        <Edit class="inline-16" :data="mainData" v-if="tool.checkAuth($route.name,'update') && mainData.status == '新建'" @onSuccess="queryMainData"></Edit>
+        <Check 
+          :data="mainData" 
+          class="inline-16" 
+          @onSuccess="queryMainData" 
+          v-if="mainData.status != '发布'"
+        />
+        <Send :data="mainData" class="inline-16" @onSuccess="queryMainData" v-if="mainData.status != '关闭' || mainData.status != '新建'"/>
+        <Close :data="mainData" class="inline-16" @onSuccess="queryMainData"/>
+      </div>
+      <div slot="slot0" >
+        <promotionModel ref="model">
+          <addModel v-if="tool.checkAuth($route.name,'promotionModel')" class="inline-16" @onSuccess="$refs.model.listData()" slot="addModel"/>
+          <calc-price v-if="tool.checkAuth($route.name,'promotionModel')" slot="calcPrice" @onSuccess="$refs.model.listData()"></calc-price>
+          <template v-slot:editModel="scope">
+              <el-button :disabled="!isEdit" v-if="tool.checkAuth($route.name,'promotionModel')" class="inline-16" size="mini" type="text" @click="$refs.model.currentModel=scope.data">编 辑</el-button>
+          </template>
+          <template v-slot:product="scope">
+                <productDetail v-if="tool.checkAuth($route.name,'promotionModel')" :data="scope.data" ref="productDetail">
+                  <template v-slot:promotionPrice="scope">
+                      <promotion-price :data="scope.data" ref="promotionPrice">
+                        <!-- <template v-slot:editPrice="scope2">
+                            <el-button type="text" size="mini" @click="$refs.promotionPrice.currentProduct = scope2.data">编 辑</el-button>
+                        </template> -->
+                      </promotion-price>
+                  </template>
+                  <template v-slot:addProduct="scope">  
+                    <add-product :data="scope.data" @onSuccess="$refs.productDetail.listData(scope.data.sa_promotion_itemgroupid)"></add-product>
+                  </template>
+                  <template v-slot:delProduct="scope">
+                    <el-button :disabled="!isEdit" type="text" size="mini" @click="productDel(scope.data)">删 除</el-button>
+                  </template>
+                </productDetail>
+          </template>
+          <template v-slot:delModel="scope">
+              <delete-btn 
+                :disabled="!isEdit"
+                v-if="tool.checkAuth($route.name,'promotionModel')"
+                message="确定删除当前促销模块吗?"
+                class="inline-16"
+                :id="scope.data.sa_promotion_itemgroupid" 
+                nameId="20230102112403" 
+                nameKey="sa_promotion_itemgroupids" 
+                @deleteSuccess="$refs.model.listData()"
+              ></delete-btn>
+          </template>
+        </promotionModel>
+      </div>
+      <div slot="slot1">
+        <prowerArea ref="prowerArea">
+          <template v-slot:editArea="scope">
+              <el-button v-if="tool.checkAuth($route.name,'prowerArea')" class="inline-16" size="mini" type="text" @click="$refs.prowerArea.currentArea=scope.data">编 辑</el-button>
+          </template>
+          <template v-slot:delArea="scope">
+            <delete-btn
+               v-if="tool.checkAuth($route.name,'prowerArea')"
+              message="确定删除当前授权吗?"
+              class="inline-16"
+              :id="scope.data.sa_promotion_authid" 
+              nameId="20230102103003" 
+              nameKey="sa_promotion_authids"
+              @deleteSuccess="$refs.prowerArea.listData()"></delete-btn>
+          </template>
+          <add-prower-area v-if="tool.checkAuth($route.name,'prowerArea')" @onSuccess="$refs.prowerArea.listData()" slot="addProwerArea"></add-prower-area>
+        </prowerArea>
+      </div>
+      <div slot="slot2" >
+        <base-info v-if="detailInfo" :detailInfo="detailInfo"></base-info>
+      </div>
+    </basicDetails>
+  </div>
+</template>
+
+<script>
+import Edit from '@/Form/promotion/edit'
+
+import BaseInfo from '@/HDrpManagement/projectChange/modules/modules/baseInfo/baseInfo'
+import Check from '../components/check'
+import Send from '../components/send'
+import Close from '../components/close'
+import promotionModel from './productModel/index'
+import addModel from './productModel/add'
+import productDetail from './productModel/productDetail'
+import promotionPrice from './productModel/promotionPrice'
+import calcPrice from './productModel/calcPrice'
+import addProduct from './productModel/addProduct'
+
+import prowerArea from './prowerArea/index'
+import addProwerArea from './prowerArea/addPowerArea'
+export default {
+  name: "index",
+  components:{Edit,BaseInfo,Check,Send,Close,promotionModel,addModel,productDetail,promotionPrice,calcPrice,addProduct,prowerArea,addProwerArea},
+  data(){
+    return {
+      mainData:{},
+      mainAreaData:[],
+      detailInfo:'',
+      isEdit:false
+    }
+  },
+  provide () {
+    return {
+      isEdit: () => this.isEdit
+    }
+  },
+  methods:{
+    async queryMainData(id){
+      const res = await this.$api.requested({
+        "id": "20221230144703",
+        "version":1,
+        "content": {
+          "sa_promotionid":this.$route.query.id
+        }
+      })
+      this.mainData = res.data
+      console.log(this.mainData);
+      this.isEdit = this.mainData.status == '新建' ? true : false
+      this.changeDataStructure()
+    },
+    changeDataStructure() {
+      let that = this
+      this.mainAreaData = [
+        {
+          label:'方案编号',
+          value:this.mainData.promnum
+        },
+        {
+          label:'方案名称',
+          value:this.mainData.promname
+        },
+        {
+          label:'促销类型',
+          value:this.mainData.type
+        },
+        {
+          label:'订货账号',
+          value:this.mainData.accountname
+        },
+        {
+          label:'活动开始时间',
+          value:this.mainData.begdate 
+        },
+        {
+          label:'活动结束时间',
+          value:this.mainData.enddate
+        },
+        {
+          label:'品牌',
+          value:this.mainData.brandname
+        },
+        {
+          label:'领域',
+          value:this.mainData.tradefield
+        },
+        {
+          label:'起订数量',
+          value:this.mainData.orderminqty
+        },
+        {
+          label:'起订金额',
+          value:this.mainData.orderminamount
+        },
+        {
+          label:'订单增量',
+          value:this.mainData.orderaddqty
+        },
+        {
+          label:'备注',
+          value:this.mainData.remarks
+        },
+        {
+          label:'状态',
+          value:this.mainData.status,
+          style:function () {
+              let style = {}
+              switch (that.mainData.status) {
+                case '新建':
+                  style = {color:'#333333'}
+                  break;
+                case '审核':
+                  style = {color:'#3874f6'}
+                  break;
+              }
+              return style
+            }
+        },
+      ]
+      this.detailInfo = {
+        baseInfo: [
+          {
+            label:'方案编号',
+            value:this.mainData.promnum
+          },
+          {
+            label:'方案名称',
+            value:this.mainData.promname
+          },
+          {
+            label:'促销类型',
+            value:this.mainData.type
+          },
+          {
+            label:'订货账号',
+            value:this.mainData.accountname
+          },
+          {
+            label:'活动开始时间',
+            value:this.mainData.begdate 
+          },
+          {
+            label:'活动结束时间',
+            value:this.mainData.enddate
+          },
+          {
+            label:'品牌',
+            value:this.mainData.brandname
+          },
+          {
+            label:'领域',
+            value:this.mainData.tradefield
+          },
+          {
+            label:'起订数量',
+            value:this.mainData.orderminqty
+          },
+          {
+            label:'起订金额',
+            value:this.mainData.orderminamount
+          },
+          {
+            label:'订单增量',
+            value:this.mainData.orderaddqty
+          },
+          {
+            label:'备注',
+            value:this.mainData.remarks
+          },
+          {
+            label:'状态',
+            value:this.mainData.status,
+            style:function () {
+                let style = {}
+                switch (that.mainData.status) {
+                  case '新建':
+                    style = {color:'#333333'}
+                    break;
+                  case '审核':
+                    style = {color:'#3874f6'}
+                    break;
+                }
+                return style
+              }
+          },
+        ],
+        systemInfo: [
+          {label:'录入人',value:this.mainData.createby},
+          {label:'录入时间',value:this.mainData.createdate},
+          {label:'审核人',value:this.mainData.checkby},
+          {label:'审核时间',value:this.mainData.checkdate},
+          {label:'发布人',value:this.mainData.sendby},
+          {label:'发布时间',value:this.mainData.senddate},
+        ]
+      }
+    },
+    async productDel (data) {
+      console.log(data,'111');
+      
+      let res = await this.$api.requested({
+        "id":20230102142603,
+        "content": {
+          "sa_promotion_itemsids":[data.sa_promotion_itemsid]
+        }
+      })
+      this.tool.showMessage(res,() => {
+        this.$refs.productDetail.listData(data.sa_promotion_itemgroupid)
+      })
+    },
+    // 监听切换数据,上一页,下一页
+    pageChange (id,rowindex) {
+      this.flag = false
+      this.$router.replace({path:'/promotionDetail',query:{id:id,rowindex:rowindex}})
+      this.queryMainData(id)
+    },
+    onSuccess(){
+      this.queryMainData(this.$route.query.id)
+    }
+  },
+  created() {
+    this.queryMainData(this.$route.query.id)
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 196 - 0
src/HDrpManagement/promotion/modules/productModel/add.vue

@@ -0,0 +1,196 @@
+<template>
+  <div>
+    <el-button size="mini" type="primary" :disabled="!isEdit()" @click="dialogFormVisible = true">新 建</el-button>
+    <el-drawer
+        title="新增商品模块"
+        :visible.sync="dialogFormVisible"
+        size="70%"
+        direction="rtl"
+        append-to-body
+        @close="dialogFormVisible = false"
+        :show-close="false">
+      <div class="drawer__panel">
+        <el-row :gutter="20">
+          <el-form :model="form" :rules="rules" ref="form" label-width="120px" label-position="right" size="mini">
+            <el-col :span="8">
+              <el-form-item label="模块名称:" prop="groupname">
+                <el-input v-model="form.groupname"  placeholder="请输入促销模块名称"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="单位数量:" prop="groupqty">
+                <el-input v-model="form.groupqty" placeholder="请输入单位数量"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="是否必须订购:" prop="requard">
+                <el-checkbox v-model="form.requard" :true-label="1" :false-label="0"></el-checkbox>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="商品:" prop="product">
+                <selectTable v-if="dialogFormVisible" ref="table" idName="itemid" :layout="tablecols" :data="productList" :custom="true" height="500px">
+                  <template v-slot:customcol="scope">
+                    <div v-if="scope.column.columnname == 'attinfos' && scope.column.data.attinfos[0]">
+                      <previewImage style="height:38px;width:38px" :image="scope.column.data.attinfos[0]" :list="scope.column.data.attinfos" :deletebtn="false"></previewImage>
+                    </div>
+                    <div v-else-if="scope.column.columnname == 'itemclass'">
+                        <span v-for="(item,index) in scope.column.data[scope.column.columnname]" :key="index">
+                          {{item?item.itemclassname+',':'--'}}
+                        </span>
+                        <!-- <el-tag v-if="item" style="margin-bottom:10px">{{item.itemclassname}}</el-tag> -->
+                    </div>
+                    <div v-else-if="scope.column.columnname == 'spec'">
+                      {{scope.column.data.model}}/{{scope.column.data.spec}}
+                    </div>
+                    <div v-else-if="scope.column.columnname == 'brand'">
+                      <p v-for="(item,index) in scope.column.data[scope.column.columnname]" :key="index">
+                        <span style="float: left" v-if="index === scope.column.data[scope.column.columnname].length -1">{{item?item.brandname+'':'--'}}</span>
+                        <span style="float: left" v-else>{{item?item.brandname+',':'--'}}</span>
+                      </p>
+                    </div>
+                    <div v-else>{{scope.column.data[scope.column.columnname]}}</div>
+                    <div v-if="!scope.column.data[scope.column.columnname] && scope.column.columnname != 'operation' && scope.column.data[scope.column.columnname] !== 0">--</div>
+                  </template>
+                </selectTable>
+                <div class="container normal-panel" style="text-align:right">
+                  <el-pagination
+                      style="text-align:right"
+                      background
+                      small
+                      @size-change="handleSizeChange"
+                      @current-change="handleCurrentChange"
+                      :current-page="params.content.pageNumber"
+                      :page-size="params.content.pageSize"
+                      layout="total, prev, pager, next, jumper"
+                      :total="total">
+                  </el-pagination>
+                </div>
+              </el-form-item>
+            </el-col>
+          </el-form>
+        </el-row>
+      </div>
+      <div class="fixed__btn__panel">
+        <el-button size="small" @click="dialogFormVisible = false" class="normal-btn-width">取 消</el-button>
+        <el-button size="small" type="primary" @click="onSubmit" class="normal-btn-width">确 定</el-button>
+      </div>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+import selectTable from '@/components/selectTable/index'
+import previewImage from '@/components/previewImage/index'
+export default {
+  name: "add",
+  inject:['isEdit'],
+  components:{selectTable,previewImage},
+  data(){
+    return {
+      dialogFormVisible:false,
+      tablecols:[],
+      productList:[],
+      total:0,
+      form:{
+        "sa_promotion_itemgroupid":0,     //sat_notice_classid<=0时 为新增
+        "sa_promotionid": '',
+        "requard":1,
+        "groupname": "",
+        "groupqty": ''
+      },
+      params:{
+        "id": 20220923112503,
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 20,
+            "sa_itemgroupid":0,
+            "where": {
+              "condition": ''
+            }
+        }
+      },
+      rules:{
+        groupname:[
+          { required: true, message: '请输入模块名称', trigger: 'blur'},
+        ],
+      },
+    }
+  },
+  watch: {
+    dialogFormVisible (val) {
+      if (!val) {
+        this.$refs.form.resetFields()
+        this.$refs.table.allArr = []
+      }
+    }
+  },
+  methods:{
+    onSubmit(){
+      this.$refs['form'].validate(async (valid) => {
+        if (!valid) return false
+        this.form.sa_promotionid = this.$route.query.id
+        const res = await this.$api.requested({
+          "id": "20230102112203",
+          "content": this.form
+        })
+        this.tool.showMessage(res, async ()=>{
+          this.dialogFormVisible = false
+          let arr = this.$refs.table.allArr.map(item => {
+            return {
+              "sa_promotion_itemsid":0,
+              "itemid":item.itemid,
+              "islimit":0,
+              "groupqty":0,
+              "orderaddqty":0,
+              "orderminqty":0
+            }
+          })
+          if (arr.length) {
+            let res2 = await this.$api.requested({
+              "id":20230102142403,
+              "content": {
+                sa_promotionid:this.$route.query.id,
+                sa_promotion_itemgroupid:res.data.sa_promotion_itemgroupid,
+                iteminfos: arr
+              }
+            })
+            this.$emit('onSuccess')
+          } else {
+            this.$emit('onSuccess')
+          }
+          
+        })
+      })
+    },
+    async getProductList () {
+      const res = await this.$api.requested(this.params)
+      this.productList = res.data
+      console.log(this.productList);
+      
+      this.total = res.total
+    },
+    brandChange (val) {
+
+    },
+    handleSizeChange(val) {
+      // console.log(`每页 ${val} 条`);
+      this.params.content.pageSize = val
+      this.getProductList()
+    },
+    handleCurrentChange(val) {
+      // console.log(`当前页: ${val}`);
+      this.params.content.pageNumber = val
+      this.getProductList()
+    },
+  },
+  created() {
+    this.getProductList()
+    this.tablecols = this.tool.tabelCol(this.$route.name).productTable.tablecols
+  },
+}
+</script>
+
+<style scoped>
+
+</style>

+ 169 - 0
src/HDrpManagement/promotion/modules/productModel/addProduct.vue

@@ -0,0 +1,169 @@
+<template>
+  <div class="inline-16">
+    <el-button type="primary" :disabled="!isEdit()" size="mini" @click="productBtn">添 加</el-button>
+    <el-drawer
+        title="添加商品"
+        :visible.sync="drawer"
+        size="70%"
+        direction="rtl"
+        append-to-body
+        @close="drawer = false"
+        :show-close="false">
+      <div class="drawer__panel">
+        <div style="display:flex;align-items:center">
+          <el-input
+              placeholder="请输入搜索内容"
+              suffix-icon="el-icon-search"
+              v-model="params.content.where.condition"
+              style="width:200px"
+              size="mini"
+              class="input-with-select inline-16"
+              @keyup.native.enter="listData(params.content.pageNumber=1)"
+              @clear="listData(params.content.where.condition='')"
+              clearable>
+          </el-input>
+        </div>
+        <div style="margin-top: 15px">
+          <selectTable v-if="drawer" ref="table" idName="itemid" @selectChange="selectChange" @upDateData="selectChange" :layout="tablecols" :data="list" :custom="true" height="500px">
+            <template v-slot:customcol="scope">
+              <div v-if="scope.column.columnname == 'attinfos' && scope.column.data.attinfos[0]">
+                <previewImage style="height:38px;width:38px" :image="scope.column.data.attinfos[0]" :list="scope.column.data.attinfos" :deletebtn="false"></previewImage>
+              </div>
+              <div v-else-if="scope.column.columnname == 'itemclass'">
+                  <span v-for="(item,index) in scope.column.data[scope.column.columnname]" :key="index">
+                    {{item?item.itemclassname+',':'--'}}
+                  </span>
+                  <!-- <el-tag v-if="item" style="margin-bottom:10px">{{item.itemclassname}}</el-tag> -->
+              </div>
+              <div v-else-if="scope.column.columnname == 'spec'">
+                {{scope.column.data.model}}/{{scope.column.data.spec}}
+              </div>
+              <div v-else-if="scope.column.columnname == 'brand'">
+                <p v-for="(item,index) in scope.column.data[scope.column.columnname]" :key="index">
+                  <span style="float: left" v-if="index === scope.column.data[scope.column.columnname].length -1">{{item?item.brandname+'':'--'}}</span>
+                  <span style="float: left" v-else>{{item?item.brandname+',':'--'}}</span>
+                </p>
+              </div>
+              <div v-else>{{scope.column.data[scope.column.columnname]}}</div>
+              <div v-if="!scope.column.data[scope.column.columnname] && scope.column.columnname != 'operation' && scope.column.data[scope.column.columnname] !== 0">--</div>
+            </template>
+          </selectTable>
+        </div>
+        <div style="margin-top:16px;text-align:right">
+          <el-pagination
+              background
+              small
+              @size-change="handleSizeChange"
+              @current-change="handleCurrentChange"
+              :current-page="params.content.pageNumber"
+              :page-size="params.content.pageSize"
+              layout="total, prev, pager, next, jumper"
+              :total="total">
+          </el-pagination>
+        </div>
+        <div class="fixed__btn__panel">
+          <el-button size="small" @click="drawer = false" class="normal-btn-width">取 消</el-button>
+          <el-button size="small" :disabled="!selectProduct.length" type="primary" @click="submit" class="normal-btn-width">确 定</el-button>
+        </div>
+      </div>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+import selectTable from '@/components/selectTable/index'
+export default {
+  name: '',
+  props:['data'],
+  inject:['isEdit'],
+  components:{selectTable},
+  data() {
+    return {
+      drawer:false,
+      tableHieght:"calc(100vh - 380px)",
+      tablecols:[],
+      list:[],
+      total:0,
+      params:{
+        "id": 20230102144603,
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 20,
+          "sa_promotion_itemgroupid":'',
+            "where": {
+              "condition": ''
+            }
+        }
+      },
+      selectProduct:[]
+    };
+  },
+  computed:{
+  },
+  watch:{
+  },
+  methods: {
+    async listData(){
+      this.params.content.sa_promotion_itemgroupid = this.data.sa_promotion_itemgroupid
+      const res = await this.$api.requested(this.params)
+      this.list = res.data
+      this.total = res.total
+      console.log(this.list)
+    },
+    async submit () {
+      let arr = this.$refs.table.allArr.map(item => {
+        return {
+          "sa_promotion_itemsid":0,
+          "itemid":item.itemid,
+          "islimit":0,
+          "groupqty":0,
+          "orderaddqty":0,
+          "orderminqty":0
+        }
+      })
+      console.log('触发');
+      
+      if (arr.length) {
+        console.log(arr);
+        
+        let res = await this.$api.requested({
+          "id":20230102142403,
+          "content": {
+            sa_promotionid:this.$route.query.id,
+            sa_promotion_itemgroupid:this.data.sa_promotion_itemgroupid,
+            iteminfos: arr
+          }
+        })
+        this.tool.showMessage(res,() => {
+          this.drawer = false
+          this.$emit('onSuccess')
+        })
+      }
+    },
+    selectChange (data) {
+      this.selectProduct = data
+    },
+    productBtn () {
+      this.drawer = true
+      this.listData()
+    },
+    handleSizeChange(val) {
+      // console.log(`每页 ${val} 条`);
+      this.params.content.pageSize = val
+      this.listData()
+    },
+    handleCurrentChange(val) {
+      // console.log(`当前页: ${val}`);
+      this.params.content.pageNumber = val
+      this.listData()
+    },
+  },
+  created () {
+    this.tablecols = this.tool.tabelCol(this.$route.name).modelProductTable.tablecols
+  }
+};
+</script>
+
+<style scoped>
+
+</style>

+ 70 - 0
src/HDrpManagement/promotion/modules/productModel/calcPrice.vue

@@ -0,0 +1,70 @@
+<template>
+  <div>
+    <el-button type="primary" size="mini" :disabled="!isEdit()" @click="drawer=true">快速折扣</el-button>
+    <el-dialog title="折扣设置" append-to-body :visible.sync="drawer" width="40%">
+      <el-form :model="form" :rules="rules" ref="form" label-width="120px" label-position="right" size="mini">
+        <el-col :span="24">
+          <el-form-item label="折扣:" prop="discountrate">
+            <el-input v-model="form.discountrate"  placeholder="请输入折扣"></el-input>
+          </el-form-item>
+        </el-col>
+      </el-form>
+      <div class="dialog-footer">
+        <el-button size="small" @click="drawer = false" class="normal-btn-width">取 消</el-button>
+        <el-button class="normal-btn-width" type="primary" size="small" @click="submit">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  name: '',
+  inject:['isEdit'],
+  data() {
+    var NumberSize = (rule, value, callback) => {
+      if (+value > 100 || +value < 1 && value) {
+        return callback(new Error('折扣范围(1-100)'));
+      }
+      callback()
+    }
+    return {
+      drawer:false,
+      form:{
+        "sa_promotionid": 1,
+        "discountrate":0.8
+      },
+      rules:{
+        discountrate:[
+          { required: true, message: '请输入折扣', trigger: 'blur'},
+          { validator: NumberSize , trigger:'blur'}
+        ],
+      },
+    };
+  },
+  computed:{
+  },
+  watch:{
+  },
+  methods: {
+    submit () {
+      this.$refs['form'].validate(async (valid) => {
+        if (!valid) return false
+        this.form.sa_promotionid = this.$route.query.id
+        const res = await this.$api.requested({
+          "id": "20230102163203",
+          "content": this.form
+        })
+        this.tool.showMessage(res,() => {
+          this.$emit('onSuccess')
+          this.drawer = false
+        })
+      })
+    }
+  },
+};
+</script>
+
+<style scoped>
+
+</style>

+ 148 - 0
src/HDrpManagement/promotion/modules/productModel/index.vue

@@ -0,0 +1,148 @@
+
+<template>
+  <div>
+    <div style="display:flex;align-items:center">
+      <el-input
+          placeholder="请输入搜索内容"
+          suffix-icon="el-icon-search"
+          v-model="params.content.where.condition"
+          style="width:200px"
+          size="mini"
+          class="input-with-select inline-16"
+          @keyup.native.enter="listData(params.content.pageNumber=1)"
+          @clear="clearData"
+          clearable>
+      </el-input>
+      <slot name="addModel"></slot>
+      <slot name="calcPrice"></slot>
+    </div>
+    <div style="margin-top: 15px">
+      <tableLayout :layout="tablecols" :data="list" :opwidth="200"  :custom="true" :width="false"  :height="tableHieght" fixedName="operation writeoffamount unwriteoffamount">
+        <template v-slot:customcol="scope">
+          <div v-if="scope.column.columnname == 'groupname'">
+            <el-input size="small" v-if="currentModel.sa_promotion_itemgroupid == scope.column.data.sa_promotion_itemgroupid" v-model="scope.column.data.groupname"></el-input>
+            <span v-else>{{scope.column.data.groupname}}</span>
+          </div>
+          <div v-else-if="scope.column.columnname == 'groupqty'">
+            <el-input size="small" v-if="currentModel.sa_promotion_itemgroupid == scope.column.data.sa_promotion_itemgroupid" v-model="scope.column.data.groupqty"></el-input>
+            <span v-else>{{scope.column.data.groupqty}}</span>
+          </div>
+          <div v-else-if="scope.column.columnname == 'requard'">
+            <div v-if="currentModel.sa_promotion_itemgroupid == scope.column.data.sa_promotion_itemgroupid">
+              <el-checkbox v-model="scope.column.data.requard" :true-label="1" :false-label="0"></el-checkbox>
+            </div>
+            <span v-else>
+              <span v-if="scope.column.data.requard">是</span>
+              <span v-else>否</span>
+            </span>
+          </div>
+          <p v-else>{{scope.column.data[scope.column.columnname]}}</p>
+          <p v-if="!scope.column.data[scope.column.columnname] && scope.column.data[scope.column.columnname] !== 0 && scope.column.columnname != 'operation'">--</p>
+        </template>
+        <template v-slot:opreation="scope">
+          <el-button class="inline-16" type="text" size="mini" @click="save(scope.data)" v-if="currentModel.sa_promotion_itemgroupid == scope.data.sa_promotion_itemgroupid">保 存</el-button>
+          <slot v-else name="editModel" :data="scope.data"></slot>
+          <slot name="product" :data="scope.data"></slot>
+          <slot name="delModel" :data="scope.data"></slot>
+        </template>
+      </tableLayout>
+    </div>
+    <div style="margin-top:16px;text-align:right">
+      <el-pagination
+          background
+          small
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="params.content.pageNumber"
+          :page-size="params.content.pageSize"
+          layout="total, prev, pager, next, jumper"
+          :total="total">
+      </el-pagination>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  props:["data"],
+  data () {
+    return {
+      tableHieght:"calc(100vh - 380px)",
+      tablecols:[],
+      list:[],
+      total:0,
+      params:{
+        "id": 20230102112303,
+        "version":1,
+        "content": {
+            "sa_promotionid":'',
+            "pageNumber":1,
+            "pageSize":20,
+            "where":{
+              "condition":''
+            }
+        }
+      },
+      options:[
+      ],
+      productList:'',
+      currentModel:{}
+    }
+  },
+  provide () {
+    return {
+    }
+  },
+  methods:{
+    async save (data) {
+      let res = await this.$api.requested({
+        "id": 20230102112203,
+        "version":1,
+        "content": {
+            "sa_promotion_itemgroupid":data.sa_promotion_itemgroupid,     //sat_notice_classid<=0时 为新增
+            "sa_promotionid": data.sa_promotionid,
+            "requard":data.requard,
+            "groupname": data.groupname,
+            "groupqty": data.groupqty
+        }
+      })
+      this.tool.showMessage(res,() => {
+        this.$emit('onSuccess')
+        this.listData()
+        this.currentModel = ''
+      })
+    },
+    async listData(){
+      this.params.content.sa_promotionid = this.$route.query.id
+      const res = await this.$api.requested(this.params)
+      this.list = res.data
+      this.total = res.total
+      console.log(this.list)
+    },
+    handleSizeChange(val) {
+      // console.log(`每页 ${val} 条`);
+      this.params.content.pageSize = val
+      this.listData()
+    },
+    handleCurrentChange(val) {
+      // console.log(`当前页: ${val}`);
+      this.params.content.pageNumber = val
+      this.listData()
+    },
+    clearData(){
+      this.listData()
+    },
+    queryClick(){
+      this.listData()
+    }
+  },
+  created() {
+    this.listData()
+    this.tablecols = this.tool.tabelCol(this.$route.name).promotionModelTable.tablecols
+  }
+}
+
+</script>
+<style scoped>
+
+</style>

+ 192 - 0
src/HDrpManagement/promotion/modules/productModel/productDetail.vue

@@ -0,0 +1,192 @@
+<template>
+  <div class="inline-16">
+    <el-button type="text" size="mini" @click="productBtn">商 品</el-button>
+    <el-drawer
+        title="促销模块商品明细"
+        :visible.sync="drawer"
+        size="80%"
+        direction="rtl"
+        append-to-body
+        @close="drawer = false"
+        :show-close="false">
+      <div class="drawer__panel">
+        <div style="display:flex;align-items:center">
+          <el-input
+              placeholder="请输入搜索内容"
+              suffix-icon="el-icon-search"
+              v-model="params.content.where.condition"
+              style="width:200px"
+              size="mini"
+              class="input-with-select inline-16"
+              @keyup.native.enter="listData(params.content.pageNumber=1)"
+              @clear="listData(params.content.where.condition='')"
+              clearable>
+          </el-input>
+          <slot name="addProduct" :data="data"></slot>
+        </div>
+        <div style="margin-top: 15px">
+          <tableLayout :layout="tablecols" :data="list" :opwidth="200"  :custom="true" :width="false"  :height="tableHieght" fixedName="operation">
+            <template v-slot:customcol="scope">
+              <!-- <div v-if="scope.column.columnname == 'amount'">
+                <el-input size="small" v-if="currentItem.sa_paybilldetailid == scope.column.data.sa_paybilldetailid" v-model="scope.column.data.amount"></el-input>
+                <span v-else>{{scope.column.data.amount}}</span>
+              </div> -->
+              <div v-if="scope.column.columnname == 'spec'">
+                {{scope.column.data.model}}/{{scope.column.data.spec}}
+              </div>
+              <div v-else-if="scope.column.columnname == 'groupqty'">
+                <el-input size="small" v-if="currentProduct.sa_promotion_itemsid == scope.column.data.sa_promotion_itemsid" v-model="scope.column.data.groupqty"></el-input>
+                <span v-else>{{scope.column.data.groupqty}}</span>
+              </div>
+              <div v-else-if="scope.column.columnname == 'orderaddqty'">
+                <el-input size="small" v-if="currentProduct.sa_promotion_itemsid == scope.column.data.sa_promotion_itemsid" v-model="scope.column.data.orderaddqty"></el-input>
+                <span v-else>{{scope.column.data.orderaddqty}}</span>
+              </div>
+              <div v-else-if="scope.column.columnname == 'orderminqty'">
+                <el-input size="small" v-if="currentProduct.sa_promotion_itemsid == scope.column.data.sa_promotion_itemsid" v-model="scope.column.data.orderminqty"></el-input>
+                <span v-else>{{scope.column.data.orderminqty}}</span>
+              </div>
+              <div v-else-if="scope.column.columnname == 'groupqty'">
+                <el-input size="small" v-if="currentProduct.sa_promotion_itemsid == scope.column.data.sa_promotion_itemsid" v-model="scope.column.data.groupqty"></el-input>
+                <span v-else>{{scope.column.data.groupqty}}</span>
+              </div>
+              <div v-else-if="scope.column.columnname == 'islimit'">
+                <div v-if="currentProduct.sa_promotion_itemsid == scope.column.data.sa_promotion_itemsid">
+                  <el-checkbox v-model="scope.column.data.requard" :true-label="1" :false-label="0"></el-checkbox>
+                </div>
+                <span v-else>
+                  <span v-if="scope.column.data.requard">是</span>
+                  <span v-else>否</span>
+                </span>
+              </div>
+              <p v-else>{{scope.column.data[scope.column.columnname]}}</p>
+              <p v-if="!scope.column.data[scope.column.columnname] && scope.column.data[scope.column.columnname] !== 0 && scope.column.columnname != 'operation'">--</p>
+            </template>
+            <template v-slot:opreation="scope">
+              <el-button class="inline-16" type="text" size="mini" @click="save(scope.data)" v-if="currentProduct.sa_promotion_itemsid == scope.data.sa_promotion_itemsid">保 存</el-button>
+              <el-button 
+                :disabled="!isEdit()" 
+                v-else-if="tool.checkAuth($route.name,'promotionModel')" 
+                class="inline-16" 
+                size="mini" 
+                type="text" 
+                @click="currentProduct=scope.data"
+              >编 辑</el-button> 
+              <slot name="promotionPrice" :data="scope.data"></slot>
+              <slot name="delProduct" :data="scope.data"></slot>
+            </template>
+          </tableLayout>
+        </div>
+        <div style="margin-top:16px;text-align:right">
+          <el-pagination
+              background
+              small
+              @size-change="handleSizeChange"
+              @current-change="handleCurrentChange"
+              :current-page="params.content.pageNumber"
+              :page-size="params.content.pageSize"
+              layout="total, prev, pager, next, jumper"
+              :total="total">
+          </el-pagination>
+        </div>
+        <div class="fixed__btn__panel">
+          <el-button size="small" @click="drawer = false" class="normal-btn-width">取 消</el-button>
+          <el-button size="small" type="primary" class="normal-btn-width">确 定</el-button>
+        </div>
+      </div>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+export default {
+  name: '',
+  props:['data'],
+  inject:['isEdit'],
+  data() {
+    return {
+      drawer:false,
+      tableHieght:"calc(100vh - 380px)",
+      tablecols:[],
+      list:[],
+      total:0,
+      currentProduct:{},
+      params:{
+        "id": 20230102142503,
+        "version":1,
+        "content": {
+          "nocache":true,
+          "sa_promotionid":'',
+          "sa_promotion_itemgroupid":'',
+          "pageNumber":1,
+          "pageSize":20,
+          "where":{
+              "condition":""
+          }
+        }
+      }
+    };
+  },
+  computed:{
+  },
+  watch:{
+  },
+  methods: {
+    async listData(id){
+      this.params.content.sa_promotionid = this.$route.query.id
+      this.params.content.sa_promotion_itemgroupid = id ? id : this.data.sa_promotion_itemgroupid
+      const res = await this.$api.requested(this.params)
+      this.list = res.data
+      this.total = res.total
+      console.log(this.list,this.total)
+    },
+    async save (data) {
+      let res = await this.$api.requested({
+        "id": 20230102142403,
+        "version":1,
+        "content": {
+          "sa_promotionid":this.$route.query.id,
+          "sa_promotion_itemgroupid":this.data.sa_promotion_itemgroupid,
+          "iteminfos":[
+            {
+              "sa_promotion_itemsid":data.sa_promotion_itemsid,
+              "itemid":data.itemid,
+              "islimit":data.islimit,
+              "groupqty":data.groupqty,
+              "orderaddqty":data.orderaddqty,
+              "orderminqty":data.orderminqty
+            },
+          ]
+        }
+      })
+      this.tool.showMessage(res,() => {
+        this.$emit('onSuccess')
+        this.listData()
+        this.currentProduct = {}
+      })
+    },
+    productBtn () {
+      this.drawer = true
+      this.listData()
+    },
+    handleSizeChange(val) {
+      // console.log(`每页 ${val} 条`);
+      this.params.content.pageSize = val
+      this.listData()
+    },
+    handleCurrentChange(val) {
+      // console.log(`当前页: ${val}`);
+      this.params.content.pageNumber = val
+      this.listData()
+    },
+  },
+  created () {
+    this.tablecols = this.tool.tabelCol(this.$route.name).modelProductTable.tablecols
+    this.tablecols.shift()
+  }
+};
+</script>
+
+<style scoped>
+
+</style>

+ 151 - 0
src/HDrpManagement/promotion/modules/productModel/promotionPrice.vue

@@ -0,0 +1,151 @@
+<template>
+  <div class="inline-16">
+    <el-button type="text" size="mini" @click="productBtn">促 销 价 格</el-button>
+    <el-drawer
+        title="促销价格明细"
+        :visible.sync="drawer"
+        size="70%"
+        direction="rtl"
+        append-to-body
+        @close="drawer = false"
+        :show-close="false">
+      <div class="drawer__panel">
+        <div style="display:flex;align-items:center">
+          <el-input
+              placeholder="请输入搜索内容"
+              suffix-icon="el-icon-search"
+              v-model="params.content.where.condition"
+              style="width:200px"
+              size="mini"
+              class="input-with-select inline-16"
+              @keyup.native.enter="listData(params.content.pageNumber=1)"
+              @clear="listData(params.content.where.condition='')"
+              clearable>
+          </el-input>
+          <slot name="addProduct"></slot>
+        </div>
+        <div style="margin-top: 15px">
+          <tableLayout :layout="tablecols" :data="list" :opwidth="200"  :custom="true" :width="false"  :height="tableHieght" fixedName="operation">
+            <template v-slot:customcol="scope">
+              <div v-if="scope.column.columnname == 'price'">
+                <el-input size="small" v-if="currentProduct.sa_promotion_itempriceid == scope.column.data.sa_promotion_itempriceid" v-model="scope.column.data.price"></el-input>
+                <span v-else>{{scope.column.data.price}}</span>
+              </div>
+              <p v-else>{{scope.column.data[scope.column.columnname]}}</p>
+              <p v-if="!scope.column.data[scope.column.columnname] && scope.column.data[scope.column.columnname] !== 0 && scope.column.columnname != 'operation'">--</p>
+            </template>
+            <template v-slot:opreation="scope">
+              <el-button type="text" size="mini" @click="save(scope.data)" v-if="currentProduct.sa_promotion_itempriceid == scope.data.sa_promotion_itempriceid">保 存</el-button>
+              <el-button :disabled="!isEdit()" v-else size="mini" type="text" @click="edit(scope.data)">编 辑</el-button>
+              <!-- <slot v-else name="editPrice" :data="scope.data"></slot> -->
+              <slot name="delRemit" :data="scope.data"></slot>
+            </template>
+          </tableLayout>
+        </div>
+        <div style="margin-top:16px;text-align:right">
+          <el-pagination
+              background
+              small
+              @size-change="handleSizeChange"
+              @current-change="handleCurrentChange"
+              :current-page="params.content.pageNumber"
+              :page-size="params.content.pageSize"
+              layout="total, prev, pager, next, jumper"
+              :total="total">
+          </el-pagination>
+        </div>
+        <div class="fixed__btn__panel">
+          <el-button size="small" @click="drawer = false" class="normal-btn-width">取 消</el-button>
+          <el-button size="small" type="primary" @click="submit" class="normal-btn-width">确 定</el-button>
+        </div>
+      </div>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+export default {
+  name: '',
+  props:['data'],
+  inject:['isEdit'],
+  data() {
+    return {
+      aaa:1,
+      currentProduct:{},
+      drawer:false,
+      tableHieght:"calc(100vh - 380px)",
+      tablecols:[],
+      list:[],
+      total:0,
+      params:{
+        "id": 20230102163103,
+        "version":1,
+        "content": {
+          "sa_promotionid":'',
+          "sa_promotion_itemsid":'',
+          "pageNumber":1,
+          "pageSize":20,
+          "where":{
+              "condition":""
+          }
+        }
+      },
+    };
+  },
+  computed:{
+  },
+  methods: {
+    edit (data) {
+      this.currentProduct = data
+      console.log(this.currentProduct);
+    },
+    async save (data) {
+      let res = await this.$api.requested({
+        "id": 20230102163003,
+        "content": {
+            "sa_promotion_itempriceid":data.sa_promotion_itempriceid,     //sat_notice_classid<=0时 为新增
+            "sa_promotionid": data.sa_promotionid,
+            "price":data.price
+        }
+      })
+      this.tool.showMessage(res,() => {
+        this.$emit('onSuccess')
+        this.listData()
+        this.currentProduct = {}
+      })
+    },
+    async listData(){
+      this.params.content.sa_promotionid = this.$route.query.id
+      this.params.content.sa_promotion_itemsid = this.data.sa_promotion_itemsid
+      const res = await this.$api.requested(this.params)
+      this.list = res.data
+      this.total = res.total
+      console.log(this.list)
+    },
+    submit () {
+      
+    },
+    productBtn () {
+      this.drawer = true
+      this.listData()
+    },
+    handleSizeChange(val) {
+      // console.log(`每页 ${val} 条`);
+      this.params.content.pageSize = val
+      this.listData()
+    },
+    handleCurrentChange(val) {
+      // console.log(`当前页: ${val}`);
+      this.params.content.pageNumber = val
+      this.listData()
+    },
+  },
+  created () {
+    this.tablecols = this.tool.tabelCol(this.$route.name).promotionPriceTable.tablecols
+  }
+};
+</script>
+
+<style scoped>
+
+</style>

+ 178 - 0
src/HDrpManagement/promotion/modules/prowerArea/addPowerArea.vue

@@ -0,0 +1,178 @@
+<template>
+  <div class="inline-16">
+    <el-button type="primary" size="mini" @click="productBtn">添 加</el-button>
+    <el-drawer
+        title="添加授权范围"
+        :visible.sync="drawer"
+        size="70%"
+        direction="rtl"
+        append-to-body
+        @close="drawer = false"
+        :show-close="false">
+      <div class="drawer__panel">
+        <div style="display:flex;align-items:center">
+          <el-input
+              placeholder="请输入搜索内容"
+              suffix-icon="el-icon-search"
+              v-model="params.content.where.condition"
+              style="width:200px"
+              size="mini"
+              class="input-with-select inline-16"
+              @keyup.native.enter="listData(params.content.pageNumber=1)"
+              @clear="listData(params.content.where.condition='')"
+              clearable>
+          </el-input>
+        </div>
+        <div style="margin-top: 15px">
+          <selectTable v-if="drawer" ref="table" idName="sys_enterpriseid" @selectChange="selectChange" @upDateData="selectChange" :layout="tablecols" :data="list" :custom="true" height="500px">
+            <template v-slot:customcol="scope">
+              <div>{{scope.column.data[scope.column.columnname]}}</div>
+              <div v-if="!scope.column.data[scope.column.columnname] && scope.column.columnname != 'operation' && scope.column.data[scope.column.columnname] !== 0">--</div>
+            </template>
+            <template v-slot:opreation="scope">
+              <el-button type="text" size="mini" @click="addArea(scope.data)">添 加</el-button>
+            </template>
+          </selectTable>
+        </div>
+        <div style="margin-top:16px;text-align:right">
+          <el-pagination
+              background
+              small
+              @size-change="handleSizeChange"
+              @current-change="handleCurrentChange"
+              :current-page="params.content.pageNumber"
+              :page-size="params.content.pageSize"
+              layout="total, prev, pager, next, jumper"
+              :total="total">
+          </el-pagination>
+        </div>
+        <div class="fixed__btn__panel">
+          <el-button size="small" @click="drawer = false" class="normal-btn-width">取 消</el-button>
+          <el-button size="small" :disabled="!selectEnterprise.length" type="primary" @click="submit" class="normal-btn-width">确 定</el-button>
+        </div>
+      </div>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+import selectTable from '@/components/selectTable/index'
+export default {
+  name: '',
+  props:['data'],
+  components:{selectTable},
+  data() {
+    return {
+      drawer:false,
+      tableHieght:"calc(100vh - 380px)",
+      tablecols:[],
+      list:[],
+      total:0,
+      params:{
+        "id": 20230102102803,
+        "version":1,
+        "content": {
+            "sa_promotionid":'',
+          "where":{
+              "condition":""
+          }
+        }
+      },
+      selectEnterprise:[]
+    };
+  },
+  computed:{
+  },
+  watch:{
+  },
+  methods: {
+    async listData(){
+      this.params.content.sa_promotionid = this.$route.query.id
+      const res = await this.$api.requested(this.params)
+      this.list = res.data
+      this.total = res.total
+      console.log(this.list)
+    },
+    async addArea (data) {
+      let res = await this.$api.requested({
+        "id": 20230102095903,
+        "version":1,
+        "content": {
+            "sa_promotionid":this.$route.query.id,     //sat_notice_classid<=0时 为新增
+            "enterpriseinfos":[
+              {
+                  "sa_promotion_authid":0,
+                  "sys_enterpriseid":data.sys_enterpriseid,
+                  "islimit":1,
+                  "limitamount":'0',
+                  "limitgroupqty":'0',
+                  "limitordercount":'0'
+              },
+            ]
+        }
+      })
+      this.tool.showMessage(res,() => {
+        this.$emit('onSuccess')
+        this.listData()
+        this.drawer = false
+      })
+    },
+    async submit () {
+      let arr = this.$refs.table.allArr.map(item => {
+        return {
+          "sa_promotion_authid":0,
+          "sys_enterpriseid":item.sys_enterpriseid,
+          "islimit":1,
+          "limitamount":0,
+          "limitgroupqty":0,
+          "limitordercount":0
+        }
+      })
+      console.log('触发');
+      
+      if (arr.length) {
+        console.log(arr);
+        
+        let res = await this.$api.requested({
+          "id": 20230102095903,
+          "version":1,
+          "content": {
+              "sa_promotionid":this.$route.query.id,     //sat_notice_classid<=0时 为新增
+              "enterpriseinfos":arr
+          }
+        })
+        this.tool.showMessage(res,() => {
+          this.drawer = false
+          this.$emit('onSuccess')
+        })
+      }
+    },
+    selectChange (data) {
+      console.log(data,111);
+      
+      this.selectEnterprise = data
+    },
+    productBtn () {
+      this.drawer = true
+      this.listData()
+    },
+    handleSizeChange(val) {
+      // console.log(`每页 ${val} 条`);
+      this.params.content.pageSize = val
+      this.listData()
+    },
+    handleCurrentChange(val) {
+      // console.log(`当前页: ${val}`);
+      this.params.content.pageNumber = val
+      this.listData()
+    },
+  },
+  created () {
+    this.tablecols = this.tool.tabelCol(this.$route.name).addPowerAreaTable.tablecols
+  }
+};
+</script>
+
+<style scoped>
+
+</style>

+ 155 - 0
src/HDrpManagement/promotion/modules/prowerArea/index.vue

@@ -0,0 +1,155 @@
+
+<template>
+  <div>
+    <div style="display:flex;align-items:center">
+      <el-input
+          placeholder="请输入搜索内容"
+          suffix-icon="el-icon-search"
+          v-model="params.content.where.condition"
+          style="width:200px"
+          size="mini"
+          class="input-with-select inline-16"
+          @keyup.native.enter="listData(params.content.pageNumber=1)"
+          @clear="clearData"
+          clearable>
+      </el-input>
+      <slot name="addProwerArea"></slot>
+    </div>
+    <div style="margin-top: 15px">
+      <tableLayout :layout="tablecols" :data="list" :opwidth="200"  :custom="true" :width="false"  :height="tableHieght" fixedName="operation">
+        <template v-slot:customcol="scope">
+          <div v-if="scope.column.columnname == 'limitamount'">
+            <el-input size="small" v-if="currentArea.sa_promotion_authid == scope.column.data.sa_promotion_authid" v-model="scope.column.data.limitamount"></el-input>
+            <span v-else>{{scope.column.data.limitamount}}</span>
+          </div>
+          <div v-else-if="scope.column.columnname == 'limitgroupqty'">
+            <el-input size="small" v-if="currentArea.sa_promotion_authid == scope.column.data.sa_promotion_authid" v-model="scope.column.data.limitgroupqty"></el-input>
+            <span v-else>{{scope.column.data.limitgroupqty}}</span>
+          </div>
+          <div v-else-if="scope.column.columnname == 'limitordercount'">
+            <el-input size="small" v-if="currentArea.sa_promotion_authid == scope.column.data.sa_promotion_authid" v-model="scope.column.data.limitordercount"></el-input>
+            <span v-else>{{scope.column.data.limitordercount}}</span>
+          </div>
+          <div v-else-if="scope.column.columnname == 'islimit'">
+            <div v-if="currentArea.sa_promotion_authid == scope.column.data.sa_promotion_authid">
+              <el-checkbox v-model="scope.column.data.islimit" :true-label="1" :false-label="0"></el-checkbox>
+            </div>
+            <span v-else>
+              <span v-if="scope.column.data.islimit">是</span>
+              <span v-else>否</span>
+            </span>
+          </div>
+          <p v-else>{{scope.column.data[scope.column.columnname]}}</p>
+          <p v-if="!scope.column.data[scope.column.columnname] && scope.column.data[scope.column.columnname] !== 0 && scope.column.columnname != 'operation'">--</p>
+        </template>
+        <template v-slot:opreation="scope">
+          <el-button class="inline-16" type="text" size="mini" @click="save(scope.data)" v-if="currentArea.sa_promotion_authid == scope.data.sa_promotion_authid">保 存</el-button>
+          <slot v-else name="editArea" :data="scope.data"></slot>
+          <slot name="product" :data="scope.data"></slot>
+          <slot name="delArea" :data="scope.data"></slot>
+        </template>
+      </tableLayout>
+    </div>
+    <div style="margin-top:16px;text-align:right">
+      <el-pagination
+          background
+          small
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="params.content.pageNumber"
+          :page-size="params.content.pageSize"
+          layout="total, prev, pager, next, jumper"
+          :total="total">
+      </el-pagination>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  props:["data"],
+  data () {
+    return {
+      tableHieght:"calc(100vh - 380px)",
+      tablecols:[],
+      list:[],
+      total:0,
+      params:{
+        "id": 20230102102903,
+        "version":1,
+        "content": {
+            "sa_promotionid":'',
+            "where":{
+              "condition":''
+            }
+        }
+      },
+      options:[
+      ],
+      productList:'',
+      currentArea:{}
+    }
+  },
+  provide () {
+    return {
+    }
+  },
+  methods:{
+    async save (data) {
+      let res = await this.$api.requested({
+        "id": 20230102095903,
+        "version":1,
+        "content": {
+            "sa_promotionid":this.$route.query.id,     //sat_notice_classid<=0时 为新增
+            "enterpriseinfos":[
+              {
+                  "sa_promotion_authid":data.sa_promotion_authid,
+                  "sys_enterpriseid":data.sys_enterpriseid,
+                  "islimit":data.islimit,
+                  "limitamount":data.limitamount,
+                  "limitgroupqty":data.limitgroupqty,
+                  "limitordercount":data.limitordercount
+              },
+            ]
+        }
+      })
+      this.tool.showMessage(res,() => {
+        this.$emit('onSuccess')
+        this.listData()
+        this.currentArea = ''
+      })
+    },
+    async listData(){
+      this.params.content.sa_promotionid = this.$route.query.id
+      const res = await this.$api.requested(this.params)
+      this.list = res.data
+      this.total = res.total
+      console.log(this.list)
+    },
+    handleSizeChange(val) {
+      // console.log(`每页 ${val} 条`);
+      this.params.content.pageSize = val
+      this.listData()
+    },
+    handleCurrentChange(val) {
+      // console.log(`当前页: ${val}`);
+      this.params.content.pageNumber = val
+      this.listData()
+    },
+    clearData(){
+      this.listData()
+    },
+    queryClick(){
+      this.listData()
+    }
+  },
+  created() {
+    this.listData()
+    this.tablecols = this.tool.tabelCol(this.$route.name).promotionModelPowerAreaTable.tablecols
+  }
+}
+
+</script>
+<style scoped>
+
+</style>

+ 19 - 2
src/SDrpManagement/agentOrder/details/index.vue

@@ -18,6 +18,7 @@
         <div slot="customOperation" class="inline-16">
           <el-button :disabled="mainData.status !== '交期待确认'"  type="primary" size="mini" @click="confirmdate">确认交期</el-button>
           <el-button v-if="tool.checkAuth($route.name,'submit')" :disabled="mainData.status !== '新建'"  type="primary" size="mini" @click="onSubmit('提交')">提 交</el-button>
+          <el-button v-if="tool.checkAuth($route.name,'insert')"  type="primary" size="mini" @click="onCopy">复 制</el-button>
       </div>
       <div slot="slot0" >
         <default-info :mainData="mainData"></default-info>
@@ -31,6 +32,9 @@
       <div slot="slot3" >
         <rebat></rebat>
       </div>
+      <div slot="slot3" >
+        <dispatch></dispatch>
+      </div>
     </basicDetails>
     <el-dialog append-to-body title="退回原因" :visible.sync="dialogVisible" width="400px">
       <el-input v-model="backreason" type="textarea" placeholder="请输入退回原因"></el-input>
@@ -47,6 +51,7 @@ import defaultInfo from './tabs/defaultInfo.vue';
 import productList from '../modules/productlist.vue'
 import rebat from './tabs/rebatesettlement.vue'
 import orderprogress from './tabs/orderpProgress.vue'
+import dispatch from './tabs/dispatch.vue'
 export default {
   name: "detail",
   data() {
@@ -61,7 +66,8 @@ export default {
     defaultInfo,
     productList,
     rebat,
-    orderprogress
+    orderprogress,
+    dispatch
   },
   methods:{
     async queryMainData(id) {
@@ -200,7 +206,18 @@ export default {
       this.tool.showMessage(res,()=>{
         this.queryMainData()
       })
-    }
+    },
+    async onCopy () {
+      const res = await this.$api.requested({
+        "id": 20230102144502,
+        "content": {
+          "sa_orderid": this.$route.query.id
+        }
+      })
+      this.tool.showMessage(res,()=>{
+        this.tool.showMessage(res)
+      })
+    },
   },
   mounted () {
     this.queryMainData(this.$route.query.id)

+ 80 - 0
src/SDrpManagement/agentOrder/details/tabs/dispatch.vue

@@ -0,0 +1,80 @@
+<template>
+  <div>
+    <el-table
+      :data="tableData"
+      style="width: 100%">
+      <el-table-column
+        prop="date"
+        label="发货单号"
+        width="180">
+      </el-table-column>
+      <el-table-column
+        prop="name"
+        label="状态"
+        width="180">
+      </el-table-column>
+      <el-table-column
+        prop="address"
+        label="发货日期">
+      </el-table-column>
+      <el-table-column
+        prop="address"
+        label="备注">
+      </el-table-column>
+    </el-table>
+    <div class="container normal-panel" style="text-align:right">
+      <el-pagination
+        background
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        :current-page="currentPage"
+        :page-sizes="[20, 50, 100, 200]"
+        layout="total,sizes, prev, pager, next, jumper"
+        :total="total">
+      </el-pagination>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  data () {
+    return {
+      tableData:[],
+      param:{
+        "id": 20221205111302,
+        "content": {
+          "sa_orderid": 12,
+          "pageNumber": 1,
+          "pageSize": 17,
+          "where": {
+            "condition": ""
+          }
+        },
+      }
+    }
+  },
+  methods:{
+    async listData() {
+      const res = await this.$api.requested(this.param)
+      this.tableData = res.data
+      this.total = res.total
+      this.currentPage = res.pageNumber
+    },
+    handleSizeChange(val) {
+      this.param.pageSize = val
+      this.listData()
+    },
+    handleCurrentChange(val) {
+      this.param.pageNumber = val
+      this.listData()
+    },
+  },
+  mounted () {
+    this.listData()
+  }
+}
+
+</script>
+<style>
+</style>

+ 0 - 2
src/components/selectTable/index.vue

@@ -44,8 +44,6 @@ export default {
   },
   watch: {
     data (val) {
-      console.log(val);
-      
       this.data.forEach((row) => {
         this.allArr.forEach(item => {
           if (row[this.idName] == item[this.idName]) {

+ 21 - 0
src/router/HDrpManagement.js

@@ -543,6 +543,27 @@ const HDrpManagement = [
         component: () => import(/* webpackChunkName: "about" */ '@/HDrpManagement/remitvoucher/modules/detail')
       },
     ]
+  },{
+    path: '/promotion',
+    name:'promotion',
+    meta: {
+      title: '促销方案',
+      ast_nav: true,
+      keeproute: true,
+    },
+    component: () => import(/* webpackChunkName: "about" */ '@/HDrpManagement/promotion/index'),
+    children: [
+      {
+        path: '/promotionDetail',
+        name:'promotion',
+        meta: {
+          title: '促销方案详情',
+          ast_nav: true,
+          keeproute: true,
+        },
+        component: () => import(/* webpackChunkName: "about" */ '@/HDrpManagement/promotion/modules/detail')
+      },
+    ]
   },