소스 검색

Merge branch 'xiaoqin' into mergeBranch

codeMan 2 년 전
부모
커밋
4e459bdb6e

+ 8 - 3
src/HDrpManagement/ProductMag/detail/index.vue

@@ -22,7 +22,11 @@
         <detail_data :basic="mainData"></detail_data>
       </div>
       <div slot="slot1">
-        <saleClass :data="mainData"></saleClass>
+        <saleClass ref="saleClass" :data="mainData">
+          <template v-slot:addClass="scope">
+            <addClass v-if="tool.checkAuth($route.name,'salerClass')" :data="scope.data" @onSuccess="$refs.saleClass.listData()"/> 
+          </template> 
+        </saleClass>
       </div>
     </basicDetails>
   </div>
@@ -30,7 +34,8 @@
 
 <script>
 import detail_data from './modules/detailedData'
-import saleClass from '../modules/saleClass.vue'
+import saleClass from '../modules/saleClass'
+import addClass from '../modules/addClass'
 export default {
   name: "index",
   data() {
@@ -39,7 +44,7 @@ export default {
       mainAreaData:{}
     }
   },
-  components:{detail_data,saleClass},
+  components:{detail_data,saleClass,addClass},
   methods: {
     async queryMainData(id) {
       const res = await this.$api.requested({

+ 104 - 0
src/HDrpManagement/ProductMag/modules/addClass.vue

@@ -0,0 +1,104 @@
+<template>
+  <div>
+    <el-button type="primary" size="small" @click="dialogFormVisible=true" >设置分类</el-button>
+    <el-dialog append-to-body title="设置分类" :visible.sync="dialogFormVisible" width="500px">
+      <div class="drawer__panel" >
+        <el-tree
+          ref="tree"
+          :data="classList"
+          show-checkbox
+          node-key="itemclassid"
+          :default-expand-all="true"
+          :default-checked-keys="data.checkArr">
+        </el-tree>
+      </div>
+      <div slot="footer" class="dialog-footer">
+        <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-dialog>
+  </div>
+</template>
+
+<script>
+import { log } from '@antv/g2plot/lib/utils'
+export default {
+  props:['data'],
+  data () {
+    return {
+      dialogFormVisible:false,
+      classList:[],
+      disabledId:[]
+    }
+  },
+  methods:{
+    async onSubmit () {
+      let arr = this.$refs.tree.getCheckedNodes().map(item => item.itemclassid)
+      let res = await this.$api.requested({
+        "id": 20220927090102,
+        "content": {
+            "itemclassids":arr,
+            "itemid": this.data.data.itemid,
+            "itemno":this.data.data.itemno
+        },
+      })
+      this.tool.showMessage(res,() => {
+        this.$emit('onSuccess')
+        this.dialogFormVisible = false
+      })
+    },
+    async getClassList () {
+      let res = await this.$api.requested({
+          "id": "20220922110403",
+          "version":1,
+          "content": {
+            "sa_brandid":0
+          }
+      })
+      console.log(res.data);
+      res.data = res.data.map((item,index) => {
+        return {
+          itemclassname:item.brandname,
+          itemclassid:index + 1,
+          disabled:true,
+          subdep: item.ttemclass
+        }
+      })
+      this.classList = this.createDeep(res.data)
+      console.log(this.classList);
+    },
+    createDeep (data) {
+      let arr = []
+      function createNodes (node) {
+        let elNode = {
+          label:node.itemclassname,
+          itemclassid:node.itemclassid,
+          disabled:node.disabled ? true : false,
+          children:[]
+        }
+        if (node.subdep && node.subdep.length > 0) {
+          for (let index = 0; index < node.subdep.length; index++) {
+            elNode.children.push(createNodes(node.subdep[index]))            
+          }
+        }
+        return elNode
+      }
+
+      data.forEach(item => {
+        this.disabledId.push(item.itemclassid)
+        arr.push(createNodes(item))
+      })
+      return arr
+    } 
+  },
+  created () {
+    this.getClassList()
+  }
+}
+
+</script>
+<style scoped>
+/deep/.el-dialog__body {
+  padding-bottom: 0 !important;
+}
+</style>

+ 172 - 0
src/HDrpManagement/ProductMag/modules/saleClass copy.vue

@@ -0,0 +1,172 @@
+<template>
+  <div>
+    <!-- <el-button size="small" type="primary" @click="dialogTableVisible = true">设置营销分类</el-button> -->
+<!--    <el-dropdown-item @click.native="onShow()">设置营销分类</el-dropdown-item>-->
+    <ul class="flex-align-center">
+      <li class="brand-item" :class="activeid === item.value?'act':''" v-for="item in classList" :key="item.index" @click="brandClick(item)">{{item.label}}</li>
+    </ul>
+    <div>
+      <tree :data="activeBrandData" node-key="itemclassid" :check-strictly="false"></tree>
+    </div>
+    <el-button type="primary" size="small" @click="onSubmit">保存</el-button>
+  </div>
+</template>
+
+<script>
+import tree from './components/classTree.vue'
+import {mapGetters} from 'vuex'
+export default {
+  props:['data'],
+  data () {
+    return {
+      dialogTableVisible:false,
+      classList:[],
+      activeBrandData:[],
+      haveBindClass:[],
+      activeid:0
+    }
+  },
+  components:{
+    tree
+  },
+  computed:{
+    ...mapGetters({
+      checks:'checks'
+    })
+  },
+  methods:{
+    onShow () {
+      this.saleClass(()=>{
+        this.dialogTableVisible = true
+        this.bindSaleClass()
+      })
+    },
+    async saleClass (fn) {
+      const res = await this.$api.requested({
+          "id": "20220922110403",
+          "version":1,
+          "content": {
+            "sa_brandid":0
+          }
+      })
+      console.log(res.data);
+      
+      let arr = res.data.map(e=>{
+        return {
+          itemclassname:e.brandname,
+          itemclassid:e.sa_brandid,
+          subdep:e.ttemclass
+        }
+      })
+      this.classList = this.createMenu(arr)
+      this.activeid = this.classList[0].value
+      this.activeBrandData = this.classList[0].children
+      fn()
+    },
+    createMenu (array) {
+      let arr = []
+      function convertToElementTree(node) {
+        // 新节点
+        var elNode = {
+          label:node['itemclassname'],
+          value:node['itemclassid'],
+          itemclassnum:node['itemclassnum'],
+          itemclassid:node['itemclassid'],
+          hasChild:true,
+          checked:false
+        }
+        if (node.subdep && node.subdep.length > 0) {
+          // 如果存在子节点
+          elNode.children = []
+          for (var index = 0; index < node.subdep.length; index++) {
+          // 遍历子节点, 把每个子节点看做一颗独立的树, 传入递归构造子树, 并把结果放回到新node的children中
+            elNode.children.push(convertToElementTree(node.subdep[index]));
+          }
+        } else {
+          elNode.hasChild = false
+        }
+        return elNode;
+      }
+      array.forEach((element) => {
+        arr.push(convertToElementTree(element))
+      });
+      return arr
+    },
+    //点击品牌
+    brandClick (item) {
+      this.activeid = item.value
+      this.activeBrandData = item.children
+    },
+
+    // 提交授权数据
+    async onSubmit () {
+      const res = await this.$api.requested({
+        "id": 20220927090102,
+        "content": {
+          "itemclassids":this.checks,
+          "itemid": this.data.itemid,
+          "itemno":this.data.itemno
+        }
+      })
+      this.tool.showMessage(res,()=>{
+        this.dialogTableVisible = false
+      })
+    },
+
+    // 查询已绑定分类
+    async bindSaleClass () {
+      var that = this
+      const res = await this.$api.requested({
+        "id": 20220927090202,
+        "content": {
+            "itemid": this.data.itemid,
+            "itemno":this.data.itemno
+        }
+      })
+
+      this.haveBindClass = res.data
+      // 设置已绑定的id,用于check显示
+      res.data.filter(e=>{
+        this.$store.dispatch('checkClass',e.itemclassid)
+      })
+      // 递归,遍历数组设置勾选状态
+      function convertToElementTree(node) {
+        that.haveBindClass.forEach(e=>{
+          if (e.itemclassid === node.value) {
+            node.checked = true
+          }
+        })
+        if (node.children && node.children.length > 0) {
+          for (var index = 0; index < node.children.length; index++) {
+            convertToElementTree(node.children[index])
+          }
+        }
+      }
+
+      this.classList.forEach((element) => {
+        convertToElementTree(element)
+      });
+    }
+  },
+  mounted () {
+    this.onShow()
+  }
+}
+
+</script>
+<style>
+</style>
+<style scoped>
+.brand-item{
+  padding-left:40px ;
+  margin-right:20px;
+  margin-bottom: 15px;
+  text-align: center;
+  font-size: 16px;
+  font-weight: 600;
+  cursor: pointer;
+}
+.act{
+  color: #3874f6;
+}
+</style>

+ 97 - 145
src/HDrpManagement/ProductMag/modules/saleClass.vue

@@ -1,170 +1,122 @@
+
 <template>
   <div>
-    <!-- <el-button size="small" type="primary" @click="dialogTableVisible = true">设置营销分类</el-button> -->
-<!--    <el-dropdown-item @click.native="onShow()">设置营销分类</el-dropdown-item>-->
-    <ul class="flex-align-center">
-      <li class="brand-item" :class="activeid === item.value?'act':''" v-for="item in classList" :key="item.index" @click="brandClick(item)">{{item.label}}</li>
-    </ul>
-    <div>
-      <tree :data="activeBrandData" node-key="itemclassid" :check-strictly="false"></tree>
+    <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="addClass" :data="{checkArr:checkArr,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 == 'price'">
+            <el-input size="small" v-if="currentProduct.sa_aftersalesmag_itemsid == scope.column.data.sa_aftersalesmag_itemsid" v-model="scope.column.data.price"></el-input>
+            <span v-else>{{scope.column.data.price}}</span>
+          </div>
+          <div v-else-if="scope.column.columnname == 'qty'">
+            <el-input size="small" v-if="currentProduct.sa_aftersalesmag_itemsid == scope.column.data.sa_aftersalesmag_itemsid" v-model="scope.column.data.qty"></el-input>
+            <span v-else>{{scope.column.data.qty}}</span>
+          </div>
+          <div v-else-if="scope.column.columnname == 'reason'">
+            <div v-if="currentProduct.sa_aftersalesmag_itemsid == scope.column.data.sa_aftersalesmag_itemsid">
+              <el-input type="textarea" size="mini" v-model="scope.column.data.reason"></el-input>
+            </div>
+            <div v-else>{{scope.column.data.reason ? scope.column.data.reason : '--'}}</div>
+          </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'&& scope.column.columnname != 'reason'">--</p>
+        </template>
+        <template v-slot:opreation="scope">
+          <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>
-    <el-button type="primary" size="small" @click="onSubmit">保存</el-button>
   </div>
 </template>
 
 <script>
-import tree from './components/classTree.vue'
-import {mapGetters} from 'vuex'
 export default {
-  props:['data'],
+  props:["data"],
   data () {
     return {
-      dialogTableVisible:false,
-      classList:[],
-      activeBrandData:[],
-      haveBindClass:[],
-      activeid:0
+      tableHieght:"calc(100vh - 380px)",
+      tablecols:[],
+      list:[],
+      total:0,
+      params:{
+          "id": 20220927090202,
+          "content": {
+              "itemid": "",
+              "itemno": "",
+              "pageNumber": 1,
+              "pageSize": 20,
+              "where": {
+                  "condition": ""
+              }
+          },
+      },
+      options:[
+      ],
+      productList:'',
+      currentProduct:{},
+      checkArr:[]
     }
   },
-  components:{
-    tree
-  },
-  computed:{
-    ...mapGetters({
-      checks:'checks'
-    })
-  },
   methods:{
-    onShow () {
-      this.saleClass(()=>{
-        this.dialogTableVisible = true
-        this.bindSaleClass()
-      })
+    async listData(){
+      this.params.content.itemid = this.data.itemid
+      this.params.content.itemno = this.data.itemno
+      const res = await this.$api.requested(this.params)
+      this.list = res.data
+      this.total = res.total
+      this.checkArr = this.list.map(item => item.itemclassid)
+      console.log(this.list)
     },
-    async saleClass (fn) {
-      const res = await this.$api.requested({
-          "id": "20220922110403",
-          "version":1,
-          "content": {
-            "sa_brandid":0
-          }
-      })
-      let arr = res.data.map(e=>{
-        return {
-          itemclassname:e.brandname,
-          itemclassid:e.sa_brandid,
-          subdep:e.ttemclass
-        }
-      })
-      this.classList = this.createMenu(arr)
-      this.activeid = this.classList[0].value
-      this.activeBrandData = this.classList[0].children
-      fn()
+    handleSizeChange(val) {
+      // console.log(`每页 ${val} 条`);
+      this.params.content.pageSize = val
+      this.listData()
     },
-    createMenu (array) {
-      let arr = []
-      function convertToElementTree(node) {
-        // 新节点
-        var elNode = {
-          label:node['itemclassname'],
-          value:node['itemclassid'],
-          itemclassnum:node['itemclassnum'],
-          itemclassid:node['itemclassid'],
-          hasChild:true,
-          checked:false
-        }
-        if (node.subdep && node.subdep.length > 0) {
-          // 如果存在子节点
-          elNode.children = []
-          for (var index = 0; index < node.subdep.length; index++) {
-          // 遍历子节点, 把每个子节点看做一颗独立的树, 传入递归构造子树, 并把结果放回到新node的children中
-            elNode.children.push(convertToElementTree(node.subdep[index]));
-          }
-        } else {
-          elNode.hasChild = false
-        }
-        return elNode;
-      }
-      array.forEach((element) => {
-        arr.push(convertToElementTree(element))
-      });
-      return arr
+    handleCurrentChange(val) {
+      // console.log(`当前页: ${val}`);
+      this.params.content.pageNumber = val
+      this.listData()
     },
-    //点击品牌
-    brandClick (item) {
-      this.activeid = item.value
-      this.activeBrandData = item.children
+    clearData(){
+      this.listData()
     },
-
-    // 提交授权数据
-    async onSubmit () {
-      const res = await this.$api.requested({
-        "id": 20220927090102,
-        "content": {
-          "itemclassids":this.checks,
-          "itemid": this.data.itemid,
-          "itemno":this.data.itemno
-        }
-      })
-      this.tool.showMessage(res,()=>{
-        this.dialogTableVisible = false
-      })
-    },
-
-    // 查询已绑定分类
-    async bindSaleClass () {
-      var that = this
-      const res = await this.$api.requested({
-        "id": 20220927090202,
-        "content": {
-            "itemid": this.data.itemid,
-            "itemno":this.data.itemno
-        }
-      })
-
-      this.haveBindClass = res.data
-      // 设置已绑定的id,用于check显示
-      res.data.filter(e=>{
-        this.$store.dispatch('checkClass',e.itemclassid)
-      })
-      // 递归,遍历数组设置勾选状态
-      function convertToElementTree(node) {
-        that.haveBindClass.forEach(e=>{
-          if (e.itemclassid === node.value) {
-            node.checked = true
-          }
-        })
-        if (node.children && node.children.length > 0) {
-          for (var index = 0; index < node.children.length; index++) {
-            convertToElementTree(node.children[index])
-          }
-        }
-      }
-
-      this.classList.forEach((element) => {
-        convertToElementTree(element)
-      });
+    queryClick(){
+      this.listData()
     }
   },
-  mounted () {
-    this.onShow()
+  created() {
+    this.listData()
+    this.tablecols = this.tool.tabelCol(this.$route.name).salerClassTable.tablecols
   }
 }
 
 </script>
-<style>
-</style>
 <style scoped>
-.brand-item{
-  padding-left:40px ;
-  margin-right:20px;
-  margin-bottom: 15px;
-  text-align: center;
-  font-size: 16px;
-  font-weight: 600;
-  cursor: pointer;
-}
-.act{
-  color: #3874f6;
-}
+
 </style>

+ 27 - 1
src/HDrpManagement/orderManage/details/index.vue

@@ -16,6 +16,9 @@
         @pageChange="pageChange"
         @onEditSuccess="queryMainData($route.query.id)">
         <div slot="customOperation" class="inline-16">
+          <changeSaler class="inline-16" ref="saler" @selectRow="salerChange">
+            <el-button v-if="tool.checkAuth($route.name,'changeSaler')" type="primary" slot="input" size="mini" @click="$refs.saler.visible=true">变更业务员</el-button>
+          </changeSaler>
           <el-button v-if="tool.checkAuth($route.name,'confirmDate')" :disabled="mainData.status !== '交期待确认'" class="inline-16"  type="primary" size="mini" @click="confirmdate">确认交期</el-button>
           <confirmDate v-if="tool.checkAuth($route.name,'replyDate')" class="inline-16" :data="mainData" @onSuccess="queryMainData"></confirmDate>
           <el-popover
@@ -85,6 +88,7 @@ import orderprogress from './tabs/orderpProgress.vue'
 import dispatch from './tabs/dispatch.vue'
 import logistics from './tabs/logistics.vue'
 import invoiceTable from './tabs/invoiceTable.vue'
+import changeSaler from '@/template/selectSaler/index'
 
 
 export default {
@@ -108,7 +112,8 @@ export default {
     orderprogress,
     dispatch,
     logistics,
-    invoiceTable
+    invoiceTable,
+    changeSaler
   },
   methods:{
     async orderreviewtype () {
@@ -200,6 +205,27 @@ export default {
       this.$router.replace({path:'/orderdetail',query:{id:id,rowindex:rowindex}})
       this.queryMainData(id)
     },
+    /* 变更业务员 */
+    salerChange (data) {
+      console.log(data);
+      this.$confirm(`确定把${data.name}设置为业务员吗`,'提示',{
+        confirmButtonText:'确定',
+        cancelButtonText:'取消'
+      }).then(async () => {
+        let res = await this.$api.requested({
+          "id":20230213154802,
+          "content": {
+            saler_hrid:data.hrid,
+            sa_orderid:this.$route.query.id
+          }
+        })
+        console.log(res);
+        this.tool.showMessage(res,() => {
+          this.$refs.saler.visible = false
+          this.queryMainData()
+        })
+      })
+    },
     // 提交审核订单
     onSubmit (type) {
       this.$confirm(`是否${type}该订单`, '提示', {

+ 0 - 0
src/HDrpManagement/orderManage/details/tabs/changeSaler.vue


+ 3 - 3
src/HDrpManagement/orderManage/modules/add.vue

@@ -20,7 +20,7 @@
       @close="refresh">
       <div class="drawer__panel">
         <el-row :gutter="15">
-          <el-form size="small" ref="form" :model="form" :rules="rules" label-width="100px" :status-icon="false">
+          <el-form size="small" ref="form" :model="form" :rules="rules" label-width="110px" :status-icon="false">
             <el-col :span="24">
               <el-form-item label="订单类型" prop="type">
                 <el-input readonly v-model="form.type" placeholder="订单类型" :maxlength="11" clearable :style="{width: '100%'}"></el-input>
@@ -54,8 +54,8 @@
               </el-form-item>
             </el-col>
             <el-col v-if="form.type === '特殊订单'" :span="12">
-              <el-form-item label="分类" prop="typemx">
-                <el-select v-model="form.typemx" placeholder="请选择选子分类" clearable :style="{width: '100%'}">
+              <el-form-item label="特殊订单分类" prop="typemx">
+                <el-select v-model="form.typemx" placeholder="请选择特殊订单分类" clearable :style="{width: '100%'}">
                   <el-option v-for="(item, index) in typemxlist" :key="index" :label="item.value"
                     :value="item.value"></el-option>
                 </el-select>

+ 40 - 21
src/HDrpManagement/serveBill/components/add.vue

@@ -17,7 +17,7 @@
             </el-col>
             <el-col :span="12">
               <el-form-item label="服务类型" prop="servicetype">
-                <el-select class="inline-24" v-model="form.servicetype" placeholder="请选择状态" size="mini" clearable>
+                <el-select class="inline-24" v-model="form.servicetype" @change="classChange" placeholder="请选择状态" size="mini" clearable>
                   <el-option v-for="(item,index) in serveClassList" :key="index" :label="item.value" :value="item.value"></el-option>
                 </el-select>
               </el-form-item>
@@ -55,44 +55,43 @@
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="服务联系人" prop="class1">
-                <el-input v-model="form.class1" placeholder="请输入应用系统"></el-input>
+              <el-form-item label="服务联系人" prop="scenecontact">
+                <el-input v-model="form.scenecontact" placeholder="请输入服务联系人"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="联系人角色" prop="class1">
-                <el-input v-model="form.class1" placeholder="请输入应用系统"></el-input>
+              <el-form-item label="联系人角色" prop="scenecontactrole">
+                <el-input v-model="form.scenecontactrole" placeholder="请输入联系人角色"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="服务联系电话" prop="class1">
-                <el-input v-model="form.class1" placeholder="请输入应用系统"></el-input>
+              <el-form-item label="服务联系电话" prop="scenecontactphonenumber">
+                <el-input v-model="form.scenecontactphonenumber" placeholder="请输入服务联系电话"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="12">
               <el-form-item label="应用系统" prop="class1">
-                <el-input v-model="form.class1" placeholder="请输入应用系统"></el-input>
+                <el-select class="inline-24" v-model="form.class1" @change="classChange" placeholder="请选择应用系统" size="mini" clearable>
+                  <el-option v-for="(item,index) in systemapp" :key="index" :label="item.value" :value="item.value"></el-option>
+                </el-select>
               </el-form-item>
             </el-col>
             <el-col :span="12">
               <el-form-item label="客诉大类" prop="class2">
-                <el-input v-model="form.class2" placeholder="请输入客诉大类"></el-input>
+                <el-select class="inline-24" v-model="form.class2" @change="classChange" placeholder="请选择客诉大类" size="mini" clearable>
+                  <el-option v-for="(item,index) in customerclass" :key="index" :label="item.value" :value="item.value"></el-option>
+                </el-select>
               </el-form-item>
             </el-col>
             <el-col :span="12">
               <el-form-item label="申请原因" prop="reason">
-                <el-input v-model="form.reason" placeholder="请输入应用系统"></el-input>
+                <el-input v-model="form.reason" placeholder="请输入申请原因"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="备注" prop="remarks">
-                <el-input type="textarea" v-model="form.remarks" placeholder="请输入备注"></el-input>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="需求服务开始日期" prop="startdate">
+              <el-form-item label="需求服务开始日期" prop="begdate">
                 <el-date-picker
-                  v-model="form.startdate"
+                  v-model="form.begdate"
                   type="date"
                   value-format="yyyy-MM-dd"
                   placeholder="选择日期">
@@ -109,6 +108,11 @@
                 </el-date-picker>
               </el-form-item>
             </el-col>
+            <el-col :span="12">
+              <el-form-item label="备注" prop="remarks">
+                <el-input type="textarea" v-model="form.remarks" placeholder="请输入备注"></el-input>
+              </el-form-item>
+            </el-col>
           </el-form>
         </el-row>
       </div>
@@ -132,6 +136,8 @@ export default {
     return {
       dialogFormVisible:false,
       serveClassList:[],
+      customerclass:[],
+      systemapp:[],
       form:{
         "sa_serviceorderid":0,     //sa_brandid<=0时 为新增
         "servicetype":"",
@@ -150,7 +156,7 @@ export default {
         "scenecontact":"",
         "scenecontactrole":"",
         "scenecontactphonenumber":"",
-        "billdate":"",
+        "billdate":new Date(),
         "begdate":"",
         "enddate":""
       },
@@ -164,6 +170,9 @@ export default {
         sonum:[
           { required: true, message: '请选择订单', trigger: 'change'},
         ],
+        scenecontactphonenumber: [
+         { pattern:/^1[3-9][0-9]\d{8}$/, message: '请输入正确手机号码',trigger: 'blur' }
+        ],
       },
       agentParam: {
         "id":20221216145803,
@@ -203,7 +212,6 @@ export default {
       })
       this.serveClassList = res.data
       console.log(this.serveClassList);
-      
     },
     orderChange (data) {
       console.log(data);
@@ -218,15 +226,26 @@ export default {
       console.log(data);
       this.form.sys_enterpriseid = data.sys_enterpriseid
       this.form.enterprisename = data.enterprisename
-      this.$refs.order.param.content.sys_enterpriseid = data.sys_enterpriseid
       this.$refs.agent.visible = false
 
       this.form.sa_orderid = ''
       this.form.sonum = ''
     },
+    classChange () {
+      if (this.form.servicetype == '售中' || this.form.servicetype == '售后') {
+        this.$refs.agent.param.content.sys_enterpriseid = this.form.sys_enterpriseid
+      }
+    }
   },
-  created () {
+  async created () {
     this.getServeClass()
+
+    const res = await this.$store.dispatch('optiontypeselect','customerclass')
+    this.customerclass = res.data
+    const res1 = await this.$store.dispatch('optiontypeselect','systemapp')
+    this.systemapp = res1.data
+    console.log(this.customerclass,this.systemapp);
+    
   }
 }
 </script>

+ 2 - 4
src/HDrpManagement/serveBill/components/changeBill.vue

@@ -118,11 +118,9 @@ export default {
     },
     async getLeaderList () {
       let res = await this.$api.requested({
-        "id":20221102090303,
+        "id":20230213143003,
         "content": {
-          containssub:true,
-          departmentids:[1],
-          isworker:1
+          isleader:0
         }
       })
       this.leaderList = res.data

+ 41 - 22
src/HDrpManagement/serveBill/components/edit.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <el-button size="mini" type="primary" @click="editBtn">编 辑</el-button>
+    <el-button size="mini" type="ptext" @click="editBtn">编 辑</el-button>
     <el-drawer title="新 建" append-to-body :show-close="false" :visible.sync="dialogFormVisible" size="50%">
       <div slot="title" style="font-size: 15px">
         编辑服务申请单
@@ -17,7 +17,7 @@
             </el-col>
             <el-col :span="12">
               <el-form-item label="服务类型" prop="servicetype">
-                <el-select class="inline-24" v-model="form.servicetype" placeholder="请选择状态" size="mini" clearable>
+                <el-select class="inline-24" v-model="form.servicetype" @change="classChange" placeholder="请选择状态" size="mini" clearable>
                   <el-option v-for="(item,index) in serveClassList" :key="index" :label="item.value" :value="item.value"></el-option>
                 </el-select>
               </el-form-item>
@@ -55,44 +55,43 @@
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="服务联系人" prop="class1">
-                <el-input v-model="form.class1" placeholder="请输入应用系统"></el-input>
+              <el-form-item label="服务联系人" prop="scenecontact">
+                <el-input v-model="form.scenecontact" placeholder="请输入服务联系人"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="联系人角色" prop="class1">
-                <el-input v-model="form.class1" placeholder="请输入应用系统"></el-input>
+              <el-form-item label="联系人角色" prop="scenecontactrole">
+                <el-input v-model="form.scenecontactrole" placeholder="请输入联系人角色"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="服务联系电话" prop="class1">
-                <el-input v-model="form.class1" placeholder="请输入应用系统"></el-input>
+              <el-form-item label="服务联系电话" prop="scenecontactphonenumber">
+                <el-input v-model="form.scenecontactphonenumber" placeholder="请输入服务联系电话"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="12">
               <el-form-item label="应用系统" prop="class1">
-                <el-input v-model="form.class1" placeholder="请输入应用系统"></el-input>
+                <el-select class="inline-24" v-model="form.class1" @change="classChange" placeholder="请选择应用系统" size="mini" clearable>
+                  <el-option v-for="(item,index) in systemapp" :key="index" :label="item.value" :value="item.value"></el-option>
+                </el-select>
               </el-form-item>
             </el-col>
             <el-col :span="12">
               <el-form-item label="客诉大类" prop="class2">
-                <el-input v-model="form.class2" placeholder="请输入客诉大类"></el-input>
+                <el-select class="inline-24" v-model="form.class2" @change="classChange" placeholder="请选择客诉大类" size="mini" clearable>
+                  <el-option v-for="(item,index) in customerclass" :key="index" :label="item.value" :value="item.value"></el-option>
+                </el-select>
               </el-form-item>
             </el-col>
             <el-col :span="12">
               <el-form-item label="申请原因" prop="reason">
-                <el-input v-model="form.reason" placeholder="请输入应用系统"></el-input>
+                <el-input v-model="form.reason" placeholder="请输入申请原因"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="备注" prop="remarks">
-                <el-input type="textarea" v-model="form.remarks" placeholder="请输入备注"></el-input>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="需求服务开始日期" prop="startdate">
+              <el-form-item label="需求服务开始日期" prop="begdate">
                 <el-date-picker
-                  v-model="form.startdate"
+                  v-model="form.begdate"
                   type="date"
                   value-format="yyyy-MM-dd"
                   placeholder="选择日期">
@@ -109,6 +108,11 @@
                 </el-date-picker>
               </el-form-item>
             </el-col>
+            <el-col :span="12">
+              <el-form-item label="备注" prop="remarks">
+                <el-input type="textarea" v-model="form.remarks" placeholder="请输入备注"></el-input>
+              </el-form-item>
+            </el-col>
           </el-form>
         </el-row>
       </div>
@@ -133,6 +137,8 @@ export default {
     return {
       dialogFormVisible:false,
       serveClassList:[],
+      customerclass:[],
+      systemapp:[],
       form:{
         "sa_serviceorderid":0,     //sa_brandid<=0时 为新增
         "servicetype":"",
@@ -151,7 +157,7 @@ export default {
         "scenecontact":"",
         "scenecontactrole":"",
         "scenecontactphonenumber":"",
-        "billdate":"",
+        "billdate":new Date(),
         "begdate":"",
         "enddate":""
       },
@@ -165,6 +171,9 @@ export default {
         sonum:[
           { required: true, message: '请选择订单', trigger: 'change'},
         ],
+        scenecontactphonenumber: [
+         { pattern:/^1[3-9][0-9]\d{8}$/, message: '请输入正确手机号码',trigger: 'blur' }
+        ],
       },
       agentParam: {
         "id":20221216145803,
@@ -209,7 +218,6 @@ export default {
       })
       this.serveClassList = res.data
       console.log(this.serveClassList);
-      
     },
     orderChange (data) {
       console.log(data);
@@ -224,15 +232,26 @@ export default {
       console.log(data);
       this.form.sys_enterpriseid = data.sys_enterpriseid
       this.form.enterprisename = data.enterprisename
-      this.$refs.order.param.content.sys_enterpriseid = data.sys_enterpriseid
       this.$refs.agent.visible = false
 
       this.form.sa_orderid = ''
       this.form.sonum = ''
     },
+    classChange () {
+      if (this.form.servicetype == '售中' || this.form.servicetype == '售后') {
+        this.$refs.agent.param.content.sys_enterpriseid = this.form.sys_enterpriseid
+      }
+    }
   },
-  created () {
+  async created () {
     this.getServeClass()
+
+    const res = await this.$store.dispatch('optiontypeselect','customerclass')
+    this.customerclass = res.data
+    const res1 = await this.$store.dispatch('optiontypeselect','systemapp')
+    this.systemapp = res1.data
+    console.log(this.customerclass,this.systemapp);
+    
   }
 }
 </script>

+ 16 - 4
src/HDrpManagement/serveBill/components/selectOrder.vue

@@ -13,7 +13,8 @@
           border>
           <el-table-column
             prop="sonum"
-            label="订单号">
+            label="订单号"
+            width="130px">
           </el-table-column>
           <el-table-column
             prop="type"
@@ -24,10 +25,21 @@
             label="领域">
           </el-table-column>
           <el-table-column
-            prop="rebate_userate"
-            label="订单使用返利占比">
+            prop="toolcount"
+            label="合计数量">
+          </el-table-column>
+          <el-table-column
+            prop="sumamount"
+            label="合计金额">
+          </el-table-column>
+          <el-table-column
+            prop="billdate"
+            label="单据时间">
+          </el-table-column>
+          <el-table-column
+            prop="saler_name"
+            label="业务员">
           </el-table-column>
-          
           <el-table-column
             label="操作"
             width="90">

+ 3 - 0
src/HDrpManagement/servePeople/index.vue

@@ -18,6 +18,9 @@
           <span v-if="scope.data.column.data.status == 'ACTIVE'">启用</span>
           <span v-else>禁用</span>
         </div>
+        <div v-else-if="scope.data.column.columnname == 'isleader'">
+          {{scope.data.column.data.isleader ? '服务主管' : '服务人员'}}
+        </div>
         <div v-else>
           {{scope.data.column.data[[scope.data.column.columnname]]}}
         </div>

+ 9 - 0
src/HDrpManagement/serveWorkBillTask/components/add.vue

@@ -121,6 +121,14 @@
                 </el-radio-group>
               </el-form-item>
             </el-col>
+            <el-col :span="24">
+              <el-form-item label="是否签名" prop="signature">
+                <el-radio-group v-model="form.signature">
+                  <el-radio :label="1">是</el-radio>
+                  <el-radio :label="0">否</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
           </el-form>
         </el-row>
       </div>
@@ -151,6 +159,7 @@ export default {
         "confirm":0,
         "amountpay":11,
         "required":1,
+        "signature":1,
         "confirm_options":"['是','否']"
       },
       rules:{

+ 9 - 0
src/HDrpManagement/serveWorkBillTask/components/edit.vue

@@ -121,6 +121,14 @@
                 </el-radio-group>
               </el-form-item>
             </el-col>
+            <el-col :span="24">
+              <el-form-item label="是否签名" prop="signature">
+                <el-radio-group v-model="form.signature">
+                  <el-radio :label="1">是</el-radio>
+                  <el-radio :label="0">否</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
           </el-form>
         </el-row>
       </div>
@@ -152,6 +160,7 @@ export default {
         "confirm":0,
         "amountpay":11,
         "required":1,
+        "signature":1,
         "confirm_options":"['是','否']"
       },
       rules:{

+ 4 - 21
src/HDrpManagement/serveWorkBillTask/modules/detail.vue

@@ -188,27 +188,6 @@ export default {
             return style
           }
         },
-        {
-          label:'添加商品',
-          value:this.mainData.isadditem ? this.mainData.isadditem == 1 ? '添加' : '必添加' : '不添加',
-          style:function () {
-            let style = {}
-            switch (that.mainData.isadditem) {
-              case 0:
-                style = {color:'#333333'}
-                break;
-              case 1:
-                style = {color:'green'}
-                break;
-              case 11:
-                style = {color:'red'}
-                break;
-              default:
-                break;
-            }
-            return style
-          }
-        },
         {
           label:'确认是否有偿',
           value:this.mainData.amountpay ? this.mainData.amountpay == 1 ? '非必填' : '必填' : '无',
@@ -234,6 +213,10 @@ export default {
           label:'是否验证工作',
           value:this.mainData.required ? '是' : '否'
         },
+        {
+          label:'是否签名',
+          value:this.mainData.signature ? '是' : '否'
+        },
         {
           label:'操作说明',
           value:this.mainData.remarks

+ 1 - 1
src/HDrpManagement/workBillModule/modules/taskDetail/components/addTop.vue

@@ -107,7 +107,7 @@ export default {
       let data = this.$refs.table.allArr.map(item => {
         return {
           "sa_workorder_template_worksid": 0, 
-          "parentid": this.data ? this.data.sa_workpresetid : 0, 
+          "parentid": this.data ? this.data.sa_workorder_template_worksid : 0, 
           "sa_workpresetid":item.sa_workpresetid,
           "sequence":"1"
         }

+ 56 - 0
src/HDrpManagement/workBillModule/modules/taskDetail/components/detail.vue

@@ -0,0 +1,56 @@
+<template>
+  <div>
+    <el-button size="mini" type="text" @click="btn">详 情</el-button>
+    <el-drawer append-to-body :visible.sync="dialogFormVisible" size="500px">
+      <div slot="title" style="font-size: 15px">
+        详细信息
+      </div>
+      <div class="drawer__panel">
+        <el-descriptions :column="1">
+          
+            <el-descriptions-item label="工作名">{{ data.workname }}</el-descriptions-item>
+            <el-descriptions-item label="上传附件">{{ data.fileupload ? data.fileupload == 1 ? '非必填' : '必填' : '无' }}</el-descriptions-item>
+            <el-descriptions-item label="添加物料">{{ data.additem ? data.additem == 1 ? '非必填' : '必填' : '无' }}</el-descriptions-item>
+            <el-descriptions-item label="上传文本">{{ data.textedit ? data.textedit == 1 ? '非必填' : '必填' : '无' }}</el-descriptions-item>
+            <el-descriptions-item label="确认项">{{ data.confirm_options }}</el-descriptions-item>
+            <el-descriptions-item label="上传合同">{{ data.contractupload ? data.contractupload == 1 ? '非必填' : '必填' : '无' }}</el-descriptions-item>
+            <el-descriptions-item label="添加商品">{{ data.isadditem ? data.isadditem == 1 ? '非必填' : '必填' : '无' }}</el-descriptions-item>
+            <el-descriptions-item label="添加人员">{{ data.addperson ? data.addperson == 1 ? '非必填' : '必填' : '无' }}</el-descriptions-item>
+            <el-descriptions-item label="确认是否有偿">{{ data.amountpay ? data.amountpay == 1 ? '非必填' : '必填' : '无' }}</el-descriptions-item>
+            <el-descriptions-item label="是否验证工作">{{ data.required ? '是' : '否' }}</el-descriptions-item>
+            <el-descriptions-item label="是否签名">{{ data.signature ? '是' : '否' }}</el-descriptions-item>
+            <el-descriptions-item label="操作说明">{{ data.remarks }}</el-descriptions-item>
+        </el-descriptions>
+      </div>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "add",
+  props:['data'],
+  data(){
+    return {
+      dialogFormVisible:false,
+
+    }
+  },
+  created () {
+  },
+  methods:{
+    btn () {
+      this.dialogFormVisible = true
+    }
+  }
+}
+</script>
+
+<style scoped>
+.dialog-footer {
+  margin-top: 0;
+}
+.el-select {
+  width: 100%;
+}
+</style>

+ 4 - 19
src/HDrpManagement/workBillModule/modules/taskDetail/index.vue

@@ -19,8 +19,6 @@
       stripe
       border
       row-key="sa_workorder_template_worksid"
-      lazy
-      :load="load"
       size="small"
       :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
       <el-table-column
@@ -124,7 +122,7 @@
            v-if="tool.checkAuth($route.name,'workDetail')"
            :disabled="isEdit()"
         />
-        <el-button type="text" size="mini" @click="$router.push({path:'/serveWorkTaskDetail',query:{id:scope.row.sa_workpresetid,rowindex:1}})">详情</el-button>
+        <detail class="inline-16" :data="scope.row"/>
         </template>
       </el-table-column>
     </el-table>
@@ -146,11 +144,13 @@
 <script>
 import addTop from './components/addTop'
 import Edit from './components/edit'
+import detail from './components/detail'
 export default {
   props:['data'],
   components:{
     Edit,
-    addTop
+    addTop,
+    detail
   },
   inject:['isEdit'],
   data() {
@@ -210,7 +210,6 @@ export default {
           amountpay:node['amountpay'],
           remarks:node['remarks'],
           children: [],
-          hasChildren:true
         }
           
         if (node.subdep && node.subdep.length > 0) {
@@ -227,20 +226,6 @@ export default {
       });
       return arr
     },
-    async load(tree, treeNode, resolve) {
-      let res = await this.$api.requested({
-        "id": "20230207145603",
-        "version":1,
-        "content": {
-            "sa_workorder_templateid":this.$route.query.id,
-            "parentid":tree.sa_workpresetid,
-              "where":{
-                "condition":""
-            }
-        }
-      })
-      resolve(res.data)
-    },
     handleSizeChange(val) {
       // console.log(`每页 ${val} 条`);
       this.params.content.pageSize = val

+ 105 - 0
src/template/selectSaler/index.vue

@@ -0,0 +1,105 @@
+<template>
+  <div> 
+    <el-dialog :visible.sync="visible" append-to-body width="50%">
+      <div class="flex-align-center flex-between mt-10">
+        <el-input style="width:200px" size="small"  suffix-icon="el-icon-search" v-model="param.content.where.condition" placeholder="搜索" @keyup.enter.native="listData(param.content.pageNumber = 1)" @clear="listData(param.content.pageNumber = 1)" clearable></el-input>
+      </div>
+      <div>
+        <el-table
+          ref="multipleTable"
+          :data="tableData"
+          style="width: 100%"
+          size="mini"
+          height="50vh"
+          border>
+          <el-table-column
+            prop="name"
+            label="姓名"
+            width="180">
+          </el-table-column>
+          <el-table-column
+            prop="position"
+            label="职位"
+            width="180">
+          </el-table-column>
+          <el-table-column
+            prop="phonenumber"
+            label="手机号码">
+          </el-table-column>
+          <el-table-column
+            label="操作">
+            <template slot-scope="scope">
+              <el-button type="text" size="small" @click="selectRow(scope.row)">选 择</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+        <div style="margin-top:16px;text-align:right">
+          <el-pagination
+            background
+            small
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="currentPage"
+            :page-size="param.content.pageSize"
+            layout="total, prev, pager, next, jumper"
+            :total="total">
+          </el-pagination>
+        </div>
+      </div>
+    </el-dialog>
+    <slot name="input"></slot>
+  </div>
+</template>
+
+<script>
+export default {
+  props:['customParam'],
+  data () {
+    return {
+      visible:false,
+      param:{
+        "id": 20221122153902,
+        "content": {
+            "pageNumber": 1,
+            "pageSize": 20,
+            "where": {
+                "condition": ""
+            }
+        },
+      },
+      tableData: [],
+      total:0,
+      currentPage:0
+    }
+  },
+  methods:{
+    async listData () {
+      const res = await this.$api.requested(this.customParam ? this.customParam : this.param)
+      this.tableData = res.data
+      this.total = res.total
+      this.currentPage = res.pageNumber
+      console.log(this.tableData);
+      
+    },
+    handleSizeChange(val) {
+      // console.log(`每页 ${val} 条`);
+      this.param.content.pageSize = val
+      this.listData()
+    },
+    handleCurrentChange(val) {
+      // console.log(`当前页: ${val}`);
+      this.param.content.pageNumber = val
+      this.listData()
+    },
+    selectRow (row) {
+      this.$emit('selectRow',row)
+    }
+  },
+  created () {
+    this.listData()
+  },
+}
+
+</script>
+<style>
+</style>