Browse Source

报价单

qymljy 2 years ago
parent
commit
945c626d9e

+ 56 - 25
src/Form/QuotedPrice/add.vue

@@ -19,17 +19,17 @@
           </el-col>
           <el-col :span="10">
             <el-form-item label="收件单位" >
-              <el-input v-model="form.projectname" placeholder="请选择项目" style="width: 100%" @focus="projectList"></el-input>
+              <el-input v-model="form.sys_enterpriseid" placeholder="请选择收件单位" style="width: 100%" @focus="enterpriseList"></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="10">
             <el-form-item label="收件人" >
-              <el-input v-model="form.projectname" placeholder="请选择项目" style="width: 100%" @focus="projectList"></el-input>
+              <el-input v-model="form.contactsid" placeholder="请选择收件人" style="width: 100%" ></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="10">
             <el-form-item label="收件手机号" >
-              <el-input v-model="form.projectname" placeholder="请选择项目" style="width: 100%" @focus="projectList"></el-input>
+              <el-input v-model="form.phonenumber" placeholder="请输入联系方式" style="width: 100%" ></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="10">
@@ -71,15 +71,15 @@
         <el-button size="small" type="warning" @click="onSubmit" class="normal-btn-width btn-warning">确 定</el-button>
       </div>
     </el-dialog>
-    <el-dialog title="新 增" :visible.sync="dialogProjectVisible" width="900px">
+<!--    <el-dialog title="新 增" :visible.sync="dialogProjectVisible" width="900px">
       <div slot="title" style="font-size: 15px">
         选择项目
       </div>
-<!--      <layoutTable :layout="tablecols" :data="list" :opwidth="200" :custom="true" :height="tableHieght" :checkbox="true" >
+&lt;!&ndash;      <layoutTable :layout="tablecols" :data="list" :opwidth="200" :custom="true" :height="tableHieght" :checkbox="true" >
         <template v-slot:customcol="scope">
           <p>{{scope.column.data[scope.column.columnname]}}</p>
         </template>
-      </layoutTable>-->
+      </layoutTable>&ndash;&gt;
       <layoutTable  @checkboxCallBack="checkboxCallBack" :layout="tablecols" :data="list" :opwidth="200" :custom="false" :height="320" :checkbox="true">
       </layoutTable>
       <div style="margin-top:16px;text-align:right">
@@ -98,16 +98,19 @@
         <el-button size="small" @click="dialogProjectVisible = false" class="normal-btn-width">取 消</el-button>
         <el-button size="small" type="warning" @click="onProject" @rowClick="onProject" class="normal-btn-width btn-warning">确 定</el-button>
       </div>
-    </el-dialog>
+    </el-dialog>-->
+    <project :visible="visible" v-if="visible" @onProject="onProject"></project>
   </div>
 </template>
 
 <script>
 import layoutTable from '@/components/table/index3'
+import project from '../../SDrpManagement/QuotedPrice/detail/components/project'
 export default {
   name: "add",
   data(){
     return {
+      visible:false,
       dialogFormVisible:false,
       dialogProjectVisible:false,
       tableHieght:320,
@@ -142,7 +145,7 @@ export default {
     }
   },
   components:{
-    layoutTable
+    layoutTable,project
   },
   methods:{
     async onSubmit(){
@@ -159,17 +162,47 @@ export default {
         this.dialogFormVisible = false
       })
     },
-    projectShow(){
+    /*projectShow(){
 
       this.projectList()
-    },
+    },*/
     async projectList(){
-      this.dialogProjectVisible = true
-      const res = await this.$api.requested(this.params)
-      console.log("获取项目")
-      console.log(res)
-      this.list = res.data
-      this.total = res.total
+      this.visible = true
+    },
+    /*收件单位*/
+    async enterpriseList(){
+      console.log(this.form.projectname)
+      if (this.form.projectname === ''){
+        const res = await this.$api.requested({
+          "id":"20220920083901",
+          "content":{
+            "pageNumber":1,
+            "pageSize":20,
+            "where":{
+              "condition":"",
+              "type":2,
+              "sa_projectid":""
+            }
+          }
+        })
+        console.log("输出")
+        console.log(res)
+      }else {
+        const res = await this.$api.requested({
+          "id":"20220920083901",
+          "content":{
+            "pageNumber":1,
+            "pageSize":20,
+            "where":{
+              "condition":"",
+              "type":4,
+              "sa_projectid":this.form.sa_projectid
+            }
+          }
+        })
+        console.log("缔约方输出")
+        console.log(res)
+      }
 
     },
     handleSizeChange(val) {
@@ -182,16 +215,14 @@ export default {
       this.params.content.pageNumber = val
       this.projectList()
     },
-    onProject(){
-      this.dialogProjectVisible = false
+    onProject(data){
+      this.visible = false
       console.log("获取")
-      console.log(this.projectData)
-      this.form.sa_projectid = this.projectData[0].sa_projectid
-      this.form.projectname = this.projectData[0].projectname
-      this.form.projectnum = this.projectData[0].projectnum
-      this.form.address = this.projectData[0].address
-      console.log("form数据")
-      console.log(this.form)
+      console.log(data)
+      this.form = data
+      this.form.sa_projectid = data.sa_projectid
+      this.form.projectname = data.projectname
+      this.form.projectnum = data.projectnum
     },
     checkboxCallBack(data) {
       console.log("选择12354")

+ 5 - 2
src/Form/QuotedPrice/edit.vue

@@ -1,10 +1,13 @@
 <template>
-  <div></div>
+  <div>
+    <el-button size="mini"  :type="btnType?btnType:'text'"   >编 辑</el-button>
+  </div>
 </template>
 
 <script>
 export default {
-  name: "edit"
+  name: "edit",
+  props:['data','btnType'],
 }
 </script>
 

+ 111 - 0
src/SDrpManagement/QuotedPrice/detail/components/project.vue

@@ -0,0 +1,111 @@
+<template>
+  <div>
+    <el-dialog title="新 增" :visible.sync="dialogProjectVisible" width="900px">
+      <div slot="title" style="font-size: 15px">
+        选择项目
+      </div>
+      <layout_table
+          :layout="tablecols"
+          :data="list"
+          :opwidth="200"
+          :custom="false"
+          :height="320"
+          :checkbox="true"
+          @onRow="onRow">
+      </layout_table>
+      <div style="margin-top:16px;text-align:right">
+        <el-pagination
+            background
+            small
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="currentPage"
+            :page-size="params.content.pageSize"
+            layout="total, prev, pager, next, jumper"
+            :total="total">
+        </el-pagination>
+      </div>
+      <div class="dialog-footer">
+        <el-button size="small" @click="onColes" class="normal-btn-width">取 消</el-button>
+        <el-button size="small" type="warning" class="normal-btn-width btn-warning"  @click="onSubmit">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import layout_table from '../components/table'
+export default {
+  name: "project",
+  props:["visible"],
+  data(){
+    return {
+      dialogProjectVisible:false,
+      bill_id:"",
+      tablecols:[],
+      list:[],
+      total:0,
+      currentPage:0,
+      row:"",
+      params:{
+        "id": 20221020143502,
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 10,
+          "type":0, //  1:我负责的;2:我参与的;3:我下属负责的;4:我下属参与的
+          "where": {
+            "condition": ""
+          }
+        },
+      }
+    }
+  },
+  components:{layout_table},
+  mounted() {
+    console.log(this.visible)
+    this.dialogProjectVisible = true
+    this.listData()
+  },
+  methods:{
+    async listData(){
+      const res = await this.$api.requested(this.params)
+      this.list = res.data
+      this.total = res.total
+    },
+    handleSizeChange(val) {
+      // console.log(`每页 ${val} 条`);
+      this.params.content.pageSize = val
+      this.listData()
+    },
+    handleCurrentChange(val) {
+      // console.log(`当前页: ${val}`);
+      this.params.content.pageNumber = val
+      this.listData()
+    },
+    onColes(){
+      this.dialogProjectVisible = false
+      this.$emit("onProject")
+    },
+    onRow(row){
+      console.log("**********************---------------------")
+      console.log(row)
+      this.row = row
+    },
+    onSubmit(){
+      console.log("**********************---------------------")
+      this.dialogProjectVisible = false
+      this.$emit("onProject",this.row)
+      console.log(this.row)
+    }
+
+  },
+
+  created() {
+    this.tablecols = this.tool.tabelCol(this.$route.name).projectTable.tablecols
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 87 - 0
src/SDrpManagement/QuotedPrice/detail/components/table.vue

@@ -0,0 +1,87 @@
+<template>
+  <div>
+    <el-table ref="tables"
+              :row-class-name="tableClassName"
+              v-loading="loading" highlight-current-row
+              :data="data"
+              :header-cell-style="{background:'#EEEEEE',color:'#333'}" size="mini"
+              :height="height" @row-click="rowClick" style="width:100%"
+               border
+              @select="select"
+      >
+      <el-table-column
+          type="selection"
+          width="55" @handleSelectionChange="handleSelectionChange"  v-if="checkbox">
+      </el-table-column>
+      <el-table-column :show-overflow-tooltip="col.title == '来源' || col.title == '地址' || col.title == '备注'" v-for="col in layout" :key="col.tablecolid" :prop="col.columnname" :label="col.title" :width="col.width">
+        <template slot-scope="scope">
+          <!-- 自定义表格显示内容 -->
+          <slot v-if="custom" name="customcol" :column="{data:scope.row,columnname:col.columnname}"></slot>
+          <!-- 否则就是默认 -->
+          <span v-else>{{scope.row[col.columnname]}}</span>
+          <!-- 操作结构内容 -->
+          <slot v-if="col.columnname === 'operation'" name="opreation" :data="scope.row"></slot>
+        </template>
+      </el-table-column>
+    </el-table>
+  </div>
+</template>
+
+<script>
+import {mapGetters} from "vuex"
+export default {
+  /*
+    layout:表结构数据;
+    data:表渲染数据;
+    custom:是否启用自定义结构;
+    opwidth:操作列宽度
+  */
+  props:['layout','data','custom','height','checkbox','onRow'],
+  data () {
+    return {
+      list:[],
+      bill_id:""
+    }
+  },
+  computed:{
+    ...mapGetters({
+      loading:'loading'
+    })
+  },
+  methods:{
+    rowClick (row) {
+      this.$emit('rowClick',row)
+    },
+    tableClassName ({row,rowIndex}) {
+      row.index = rowIndex
+    },
+    select(selection, row){
+      console.log(row)
+      this.bill_id = row.id;
+      this.$emit("onRow",row)
+      // 清除 所有勾选项
+      this.$refs.tables.clearSelection()
+      // 当表格数据都没有被勾选的时候 就返回
+      // 主要用于将当前勾选的表格状态清除
+      if(selection.length === 0) return
+      this.$refs.tables.toggleRowSelection(row, true);
+    },
+    handleSelectionChange(val) {
+      if (val.length >= 2){
+        this.$refs.tables.clearSelection();
+      }
+      this.$emit('checkboxCallBack',val)
+    },
+    isCheck(row,rowIndex) {
+
+    }
+  },
+  mounted () {
+    // this.listData()
+  }
+}
+
+</script>
+<style>
+
+</style>

+ 21 - 1
src/SDrpManagement/QuotedPrice/detail/index.vue

@@ -18,20 +18,37 @@
       </div>
       <div slot="customOperation">
         <!-- 此区域提供了自定义操作按钮 -->
+
+      </div>
+      <div slot="slot0" class="container normal-panel">
+        <detailed ref="detailed" ></detailed>
+      </div>
+      <div slot="slot3" class="container normal-panel">
+        <contacts  :data="mainData"  v-if="flag"></contacts>
+      </div>
+      <div slot="slot4" class="container normal-panel">
+        <address_manage  :data="mainData"  v-if="flag"></address_manage>
       </div>
     </basicDetails>
   </div>
 </template>
 
 <script>
+import detailed from './modules/detailed/index'
+import contacts from './modules/contacts/list'
+import address_manage from './modules/addressManage/list'
 export default {
   name: "index",
   data(){
     return {
       mainData:[],
-      mainAreaData:[]
+      mainAreaData:[],
+      flag:false
     }
   },
+  components:{
+    detailed,contacts,address_manage
+  },
   methods:{
     async queryMainData(id){
       const res = await this.$api.requested({
@@ -43,9 +60,12 @@ export default {
       })
       this.mainData = res.data
       this.changeDataStructure()
+      this.$refs.detailed.detailedList(this.mainData)
+      this.flag = true
     },
     // 监听切换数据,上一页,下一页
     pageChange (id,rowindex) {
+      this.flag = false
       this.$router.replace({path:'/quotedPriceDetail',query:{id:id,rowindex:rowindex}})
       this.queryMainData(id)
     },

+ 119 - 0
src/SDrpManagement/QuotedPrice/detail/modules/addressManage/list.vue

@@ -0,0 +1,119 @@
+<template>
+  <div>
+    <add class="normal-margin" :data="data" @insertSuccess="onSuccess" style="float: left;"></add>
+    <div style="width: 20%;float: left;margin-left: 2%">
+      <el-input
+          placeholder="请输入内容"
+          v-model="search"
+          clearable
+          @clear="clearData()"
+          size="mini"
+          @keyup.enter.native="queryClick()">
+        <i slot="prefix" class="el-icon-search" @click="queryClick()"></i>
+      </el-input>
+    </div>
+    <tableLayout :layout="tablecols" :data="list" :opwidth="200" :custom="true"  :height="tableHieght" >
+      <template v-slot:customcol="scope">
+        <div v-if="scope.column.columnname === 'province'">
+          <p>{{ scope.column.data.province + scope.column.data.city + scope.column.data.county}}</p>
+        </div>
+        <p v-else>{{scope.column.data[scope.column.columnname]}}</p>
+      </template>
+      <template v-slot:opreation="scope">
+        <edit v-if="tool.checkAuth($route.name,'update')" :data="scope.data" @updateSuccess="onSuccess"></edit>
+        <toVoid v-if="tool.checkAuth($route.name,'toVoid')" :data="scope.data" @toVoidSuccess="onSuccess"></toVoid>
+      </template>
+    </tableLayout>
+    <div style="margin-top:16px;text-align:right">
+      <el-pagination
+          background
+          small
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="currentPage"
+          :page-size="params.content.pageSize"
+          layout="total, prev, pager, next, jumper"
+          :total="total">
+      </el-pagination>
+    </div>
+  </div>
+</template>
+
+<script>
+import add from './modules/add'
+import edit from './modules/edit'
+import toVoid from './modules/toVoid'
+export default {
+  name: "list",
+  props:["data"],
+  data(){
+    return {
+      tableHieght:"600px",
+      tablecols:[],
+      list:[],
+      listGet:[],
+      total:0,
+      currentPage:0,
+      search:"",
+      sys_enterpriseid:"",
+      params:{
+        "id": "20221022165503",
+        "content": {
+          "sys_enterpriseid": "",
+          "pageNumber": 1,
+          "pageSize": 20,
+          "where": {
+            "condition": "",
+            "workaddress":1
+          }
+        }
+      }
+    }
+  },
+  components:{add,edit,toVoid},
+  methods:{
+    async listData(){
+      this.params.content.sys_enterpriseid = this.data.sys_enterpriseid
+      const res = await this.$api.requested(this.params)
+      this.list = res.data
+      this.total = res.total
+      this.currentPage = res.pageTotal
+    },
+    handleSizeChange(val) {
+      // console.log(`每页 ${val} 条`);
+      this.params.content.pageSize = val
+      this.listData()
+    },
+    handleCurrentChange(val) {
+      // console.log(`当前页: ${val}`);
+      this.params.content.pageNumber = val
+      this.listData()
+    },
+    onSuccess(){
+      this.listData()
+    },
+    clearData(){
+      this.search = ""
+    },
+    queryClick(){
+      this.params.content.where.condition = this.search
+      this.listData()
+    }
+  },
+  mounted() {
+    this.listData()
+  },
+  created() {
+    this.tablecols = this.tool.tabelCol(this.$route.name).addressTable.tablecols
+  }
+}
+</script>
+
+<style scoped>
+/deep/.el-input__prefix {
+  display: flex;
+  align-items: center;
+}
+
+
+</style>

+ 117 - 0
src/SDrpManagement/QuotedPrice/detail/modules/addressManage/modules/add.vue

@@ -0,0 +1,117 @@
+<template>
+  <div>
+    <el-button size="mini" type="primary" @click="onshow">新增客户地址</el-button>
+    <el-dialog
+        :visible.sync="dialogFormVisible"
+        width="900px"
+        @close="dialogFormVisible = false"
+    >
+      <div slot="title" style="font-size: 15px">
+        新增联系人信息
+      </div>
+      <div>
+        <el-row :gutter="20">
+          <el-form :model="form" :rules="rules"  ref="form"  size="mini" label-position="right" label-width="90px">
+            <el-col :span="20">
+              <el-form-item label="省市县" >
+                <el-cascader
+                    style="width:100%"
+                    v-model="value"
+                    :options="basicData.data().areaData"
+                    @change="cascaderChange" clearable>
+                </el-cascader>
+              </el-form-item>
+            </el-col>
+            <el-col :span="20">
+              <el-form-item  label="详细地址:" prop="address">
+                <el-input type="textarea" autosize v-model="form.address" placeholder="请输入家庭住址"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="20">
+              <el-form-item  label="备注:" >
+                <el-input type="textarea"  autosize v-model="form.remarks" placeholder="请输入备注"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-form>
+        </el-row>
+      </div>
+      <div 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 btn-primary">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "add",
+  props:["data"],
+  data() {
+    return {
+      dialogFormVisible:false,
+      form:{
+        contactsid: 0,
+        sys_enterpriseid: "",
+        name: "",
+        sex: "",
+        depname: "",
+        position: "",
+        birthday: "",
+        phonenumber: "",
+        email: "",
+        province: "",
+        city: "",
+        county: "",
+        address: "",
+        remarks: "",
+        workaddress: 1,
+        isdefault: 1,
+        isprimary: 1
+      },
+      rules:{
+        address: [
+          { required: true, message: '地址不能为空', trigger: 'blur' },
+        ],
+      },
+      value:''
+    }
+  },
+  methods:{
+    onshow(){
+      console.log("输出")
+      console.log(this.data)
+      this.form.sys_enterpriseid = this.data.sys_enterpriseid
+      this.dialogFormVisible = true
+
+    },
+    onSubmit(){
+      console.log(this.form)
+      this.$refs['form'].validate(async (valid) => {
+        if (!valid) return false
+        const res = await this.$api.requested({
+          "id": "20221018141802",
+          "content": this.form
+        })
+        this.tool.showMessage(res,() => {
+          this.$emit("insertSuccess")
+          this.$refs['form'].resetFields()
+          this.dialogFormVisible = false
+        })
+      })
+    },
+    /*省市县*/
+    cascaderChange (val) {
+      if (val.length === 1)
+        return this.form = Object.assign({},this.form,{province:val[0],city:'',county:''})
+
+      this.form = Object.assign({},this.form,{province:val[0],city:val[1],county:val[2]})
+
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 123 - 0
src/SDrpManagement/QuotedPrice/detail/modules/addressManage/modules/edit.vue

@@ -0,0 +1,123 @@
+<template>
+  <div class="inline-16">
+    <el-button size="small" type="text" @click="onshow">编 辑</el-button>
+    <el-dialog
+        :visible.sync="dialogFormVisible"
+        width="900px"
+        @close="dialogFormVisible = false"
+    >
+      <div slot="title" style="font-size: 15px">
+        新增联系人信息
+      </div>
+      <div>
+        <el-row :gutter="20">
+          <el-form :model="form" :rules="rules"  ref="form"  size="mini" label-position="right" label-width="90px">
+            <el-col :span="20">
+              <el-form-item label="省市县" >
+                <el-cascader
+                    style="width:100%"
+                    v-model="form.value"
+                    :options="basicData.data().areaData"
+                    @change="cascaderChange" clearable>
+                </el-cascader>
+              </el-form-item>
+            </el-col>
+            <el-col :span="20">
+              <el-form-item  label="详细地址:" prop="address">
+                <el-input type="textarea" autosize v-model="form.address" placeholder="请输入家庭住址"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="20">
+              <el-form-item  label="备注:" >
+                <el-input type="textarea"  autosize v-model="form.remarks" placeholder="请输入备注"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-form>
+        </el-row>
+      </div>
+      <div 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 btn-primary">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "edit",
+  props:["data"],
+  data(){
+    return {
+      dialogFormVisible:false,
+      form:{
+        value:[],
+        contactsid: "",
+        sys_enterpriseid: "",
+        name: "",
+        sex: "",
+        depname: "",
+        position: "",
+        birthday: "",
+        phonenumber: "",
+        email: "",
+        province: "",
+        city: "",
+        county: "",
+        address: "",
+        remarks: "",
+        workaddress: 1,
+        isdefault: 1,
+        isprimary: 1
+      },
+      rules:{
+        address: [
+          { required: true, message: '地址不能为空', trigger: 'blur' },
+        ],
+      },
+      value:''
+    }
+  },
+  methods:{
+    onshow(){
+      this.dialogFormVisible = true
+      this.form.sys_enterpriseid = this.data.sys_enterpriseid
+      this.form.contactsid = this.data.contactsid
+      this.form.remarks = this.data.remarks
+      this.form.address = this.data.address
+      this.form.province = this.data.province
+      this.form.city = this.data.city
+      this.county = this.data.county
+      this.form.value[0] = this.data.province
+      this.form.value[1] = this.data.city
+      this.form.value[2] = this.data.county
+    },
+    onSubmit(){
+      this.$refs['form'].validate(async (valid) => {
+        if (!valid) return false
+        const res = await this.$api.requested({
+          "id": "20221018141802",
+          "content": this.form
+        })
+        this.tool.showMessage(res,() => {
+          this.$emit("updateSuccess")
+          this.$refs['form'].resetFields()
+          this.dialogFormVisible = false
+        })
+      })
+    },
+    /*省市县*/
+    cascaderChange (val) {
+      if (val.length === 1)
+        return this.form = Object.assign({},this.form,{province:val[0],city:'',county:''})
+
+      this.form = Object.assign({},this.form,{province:val[0],city:val[1],county:val[2]})
+
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 80 - 0
src/SDrpManagement/QuotedPrice/detail/modules/addressManage/modules/toVoid.vue

@@ -0,0 +1,80 @@
+<template>
+  <div class="inline-16">
+    <el-popconfirm
+        title="确定要作废该联系人嘛?"
+        @confirm="toVoidRow()">
+      <el-button slot="reference" size="small" type="text">作 废</el-button>
+    </el-popconfirm>
+    <el-dialog
+        :visible.sync="dialogToVoidVisible"
+        width="900px"
+        @close="dialogToVoidVisible = false"
+    >
+      <div slot="title" style="font-size: 15px">
+        作废联系人
+      </div>
+      <div>
+        <el-row :gutter="20">
+          <el-form :model="form" :rules="rules"  ref="form"  size="mini" label-position="right" label-width="90px">
+            <el-col :span="20">
+              <el-form-item  label="作废原因:" prop="deletereason">
+                <el-input type="textarea"  autosize v-model="form.deletereason" placeholder="请输入作废原因"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-form>
+        </el-row>
+      </div>
+      <div class="dialog-footer">
+        <el-button size="small" @click="dialogToVoidVisible = false" class="normal-btn-width">取 消</el-button>
+        <el-button size="small" type="primary" @click="onSubmit"   class="normal-btn-width btn-primary">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "toVoid",
+  props:["data"],
+  data(){
+    return {
+      dialogToVoidVisible:false,
+      form:{
+        "contactsid": '',
+        "sys_enterpriseid": '',
+        "deletereason":""
+      },
+      rules:{
+        deletereason:[
+          { required: true, message: '作废原因不能为空', trigger: 'blur' },
+        ]
+      }
+    }
+  },
+  methods:{
+    toVoidRow(){
+      this.dialogToVoidVisible = true
+      this.form.sys_enterpriseid = this.data.sys_enterpriseid
+      this.form.contactsid = this.data.contactsid
+    },
+    onSubmit(){
+      this.$refs['form'].validate(async (valid) => {
+        if (!valid) return false
+        const res = await this.$api.requested({
+          "id": "20221018145502",
+          "content": this.form
+        })
+        this.tool.showMessage(res,()=>{
+          this.$emit("toVoidSuccess")
+          this.$refs['form'].resetFields()
+          this.dialogToVoidVisible = false
+        })
+      })
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 126 - 0
src/SDrpManagement/QuotedPrice/detail/modules/contacts/list.vue

@@ -0,0 +1,126 @@
+<template>
+  <div>
+    <add class="normal-margin" :data="data"  @insertSuccess="onSuccess" style="float: left;"></add>
+    <div style="width: 20%;float: left;margin-left: 2%">
+      <el-input
+          placeholder="请输入内容"
+          v-model="search"
+          clearable
+          @clear="clearData()"
+          size="mini"
+          @keyup.enter.native="queryClick()">
+        <i slot="prefix" class="el-icon-search" @click="queryClick()"></i>
+      </el-input>
+    </div>
+    <tableLayout :layout="tablecols" :data="list" :opwidth="200" :custom="true"  :height="tableHieght" >
+      <template v-slot:customcol="scope">
+        <p>{{scope.column.data[scope.column.columnname]}}</p>
+      </template>
+      <template v-slot:opreation="scope">
+        <edit v-if="tool.checkAuth($route.name,'update')" :data="scope.data" @updateSuccess="onSuccess"></edit>
+        <toVoid v-if="tool.checkAuth($route.name,'toVoid')" :data="scope.data" @toVoidSuccess="onSuccess"></toVoid>
+      </template>
+    </tableLayout>
+    <div style="margin-top:16px;text-align:right">
+      <el-pagination
+          background
+          small
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="currentPage"
+          :page-size="params.content.pageSize"
+          layout="total, prev, pager, next, jumper"
+          :total="total">
+      </el-pagination>
+    </div>
+  </div>
+</template>
+
+<script>
+import add from './modules/add'
+import edit from './modules/edit'
+import toVoid from './modules/toVoid'
+import {mapGetters} from 'vuex'
+export default {
+  name: "list",
+  props:["data"],
+  data(){
+    return {
+      tableHieght:"600px",
+      tablecols:[],
+      list:[],
+      total:0,
+      currentPage:0,
+      search:"",
+      params:{
+        "id": "20221022165503",
+        "content": {
+          "sys_enterpriseid": "",
+          "pageNumber": 1,
+          "pageSize": 20,
+          "where": {
+            "condition": "",
+            "workaddress":0
+          }
+        }
+      }
+    }
+  },
+  components:{
+    add,edit,toVoid
+  },
+  computed:{
+    ...mapGetters({
+      dataToForm:'dataToForm'
+    })
+  },
+  methods:{
+    async listData(){
+      this.params.content.sys_enterpriseid = this.data.sys_enterpriseid
+      const res = await this.$api.requested(this.params)
+      this.list = res.data
+      this.total = res.total
+      this.currentPage = res.pageTotal
+    },
+    handleSizeChange(val) {
+      // console.log(`每页 ${val} 条`);
+      this.params.content.pageSize = val
+      this.listData(data)
+    },
+    handleCurrentChange(val) {
+      // console.log(`当前页: ${val}`);
+      this.params.content.pageNumber = val
+      this.listData(data)
+    },
+    onSuccess(){
+     this.listData()
+    },
+    clearData(){
+      this.search = ""
+    },
+    queryClick(){
+      this.params.content.where.condition = this.search
+      this.listData()
+    }
+  },
+  mounted() {
+    this.listData()
+  },
+  created() {
+    this.tablecols = this.tool.tabelCol(this.$route.name).contactsTable.tablecols
+  },
+  watch:{
+    "dataToForm":function (val){
+      console.log(val)
+    }
+  }
+}
+</script>
+
+<style scoped>
+/deep/.el-input__prefix {
+  display: flex;
+  align-items: center;
+}
+
+</style>

+ 162 - 0
src/SDrpManagement/QuotedPrice/detail/modules/contacts/modules/add.vue

@@ -0,0 +1,162 @@
+<template>
+  <div>
+    <el-button size="mini" type="primary" @click="onshow">新增联系人</el-button>
+    <el-dialog
+        :visible.sync="dialogFormVisible"
+        width="900px"
+        @close="dialogFormVisible = false"
+    >
+      <div slot="title" style="font-size: 15px">
+        新增联系人信息
+      </div>
+      <div>
+        <el-row :gutter="20">
+          <el-form :model="form" :rules="rules"  ref="form"  size="mini" label-position="right" label-width="90px">
+            <el-col :span="20">
+              <el-form-item  label="姓名:" prop="name">
+                <el-input  autosize v-model="form.name" placeholder="请输入姓名"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="20">
+              <el-form-item  label="手机号:" prop="phonenumber">
+                <el-input  autosize v-model="form.phonenumber" placeholder="请输入手机号码"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="20">
+              <el-form-item  label="邮箱:" :rules="[
+              { pattern:/^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/, message: '请输入有效的邮箱',trigger: 'blur' }
+            ]">
+                <el-input   autosize v-model="form.email" placeholder="请输入邮箱"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="20">
+              <el-form-item  label="部门:" >
+                <el-input  autosize v-model="form.depname" placeholder="请输入部门"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="20">
+              <el-form-item  label="职位:" >
+                <el-input  autosize v-model="form.position" placeholder="请输入职位"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="20">
+              <el-form-item  label="性别:" >
+                <el-radio v-model="form.sex" label="男">男</el-radio>
+                <el-radio v-model="form.sex" label="女">女</el-radio>
+              </el-form-item>
+            </el-col>
+            <el-col :span="20">
+              <el-form-item  label="生日:" >
+                <el-date-picker
+                    v-model="form.birthday"
+                    value-format="yyyy-MM-dd"
+                    type="date"
+                    placeholder="选择日期"
+                    style="width: 100%"
+                >
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :span="20">
+              <el-form-item  label="家庭住址:" >
+                <el-input type="textarea" autosize v-model="form.address" placeholder="请输入家庭住址"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="20">
+              <el-form-item  label="备注:" >
+                <el-input type="textarea"  autosize v-model="form.remarks" placeholder="请输入备注"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-form>
+        </el-row>
+      </div>
+      <div 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 btn-primary">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "add",
+  props:["data"],
+  data(){
+    var validateMobilePhone = (rule, value, callback) => {
+      if (value === '') {
+        callback(new Error('手机号不可为空'));
+      } else {
+        if (value !== '') {
+          var reg=/^1[3456789]\d{9}$/;
+          if(!reg.test(value)){
+            callback(new Error('请输入有效的手机号码'));
+          }
+        }
+        callback();
+      }
+    };
+    return {
+      dialogFormVisible:false,
+      visible:false,
+      form:{
+        contactsid: 0,
+        sys_enterpriseid: "",
+        name: "",
+        sex: "",
+        depname: "",
+        position: "",
+        birthday: "",
+        phonenumber: "",
+        email: "",
+        address: "",
+        remarks: "",
+        enterprisename:'',
+        province: "",
+        city: "",
+        county: "",
+        workaddress: 0,
+        isdefault: 1,
+        isprimary: 1
+      },
+      rules:{
+        name: [
+          { required: true, message: '姓名不能为空', trigger: 'blur' },
+        ],
+        phonenumber: [
+          { required: true, validator: validateMobilePhone, trigger: 'blur' },
+        ]
+      },
+    }
+  },
+  methods:{
+    onshow(){
+      this.dialogFormVisible = true
+
+      this.form.sys_enterpriseid = this.data.sys_enterpriseid
+      this.form.enterprisename = this.data.enterprisename
+      console.log("***********//////////////")
+      console.log(this.form)
+    },
+    onSubmit(){
+      console.log(this.form)
+      this.$refs['form'].validate(async (valid) => {
+        if (!valid) return false
+        const res = await this.$api.requested({
+          "id": "20221018141802",
+          "content": this.form
+        })
+        this.tool.showMessage(res,()=>{
+          this.$emit("insertSuccess")
+          this.$refs['form'].resetFields()
+          this.dialogFormVisible = false
+        })
+      })
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 160 - 0
src/SDrpManagement/QuotedPrice/detail/modules/contacts/modules/edit.vue

@@ -0,0 +1,160 @@
+<template>
+  <div class="inline-16">
+    <el-button size="small" type="text" @click="onshow">编 辑</el-button>
+    <el-dialog
+        :visible.sync="dialogFormVisible"
+        width="900px"
+        @close="dialogFormVisible = false"
+    >
+      <div slot="title" style="font-size: 15px">
+        修改联系人信息
+      </div>
+      <div>
+        <el-row :gutter="20">
+          <el-form :model="form" :rules="rules"  ref="form"  size="mini" label-position="right" label-width="90px">
+            <el-col :span="20">
+              <el-form-item  label="姓名:" prop="name">
+                <el-input  autosize v-model="form.name" placeholder="请输入姓名"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="20">
+              <el-form-item  label="手机号:" prop="phonenumber">
+                <el-input  autosize v-model="form.phonenumber" placeholder="请输入手机号码"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="20">
+              <el-form-item  label="邮箱:" :rules="[
+              { pattern:/^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/, message: '请输入有效的邮箱',trigger: 'blur' }
+            ]">
+                <el-input   autosize v-model="form.email" placeholder="请输入邮箱"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="20">
+              <el-form-item  label="部门:" >
+                <el-input  autosize v-model="form.depname" placeholder="请输入部门"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="20">
+              <el-form-item  label="职位:" >
+                <el-input  autosize v-model="form.position" placeholder="请输入职位"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="20">
+              <el-form-item  label="性别:" >
+                <el-radio v-model="form.sex" label="男">男</el-radio>
+                <el-radio v-model="form.sex" label="女">女</el-radio>
+              </el-form-item>
+            </el-col>
+            <el-col :span="20">
+              <el-form-item  label="生日:" >
+                <el-date-picker
+                    v-model="form.birthday"
+                    value-format="yyyy-MM-dd"
+                    type="date"
+                    placeholder="选择日期"
+                    style="width: 100%"
+                >
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :span="20">
+              <el-form-item  label="家庭住址:" >
+                <el-input type="textarea" autosize v-model="form.address" placeholder="请输入家庭住址"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="20">
+              <el-form-item  label="备注:" >
+                <el-input type="textarea"  autosize v-model="form.remarks" placeholder="请输入备注"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-form>
+        </el-row>
+      </div>
+      <div 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 btn-primary">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "edit",
+  props:["data"],
+  data(){
+    var validateMobilePhone = (rule, value, callback) => {
+      if (value === '') {
+        callback(new Error('手机号不可为空'));
+      } else {
+        if (value !== '') {
+          var reg=/^1[3456789]\d{9}$/;
+          if(!reg.test(value)){
+            callback(new Error('请输入有效的手机号码'));
+          }
+        }
+        callback();
+      }
+    };
+    return {
+      dialogFormVisible:false,
+      visible:false,
+      form:{
+        contactsid: 0,
+        sys_enterpriseid: "",
+        name: "",
+        sex: "",
+        depname: "",
+        position: "",
+        birthday: "",
+        phonenumber: "",
+        email: "",
+        address: "",
+        remarks: "",
+        enterprisename:'',
+        province: "",
+        city: "",
+        county: "",
+        workaddress: 0,
+        isdefault: 1,
+        isprimary: 1
+      },
+      rules:{
+        name: [
+          { required: true, message: '姓名不能为空', trigger: 'blur' },
+        ],
+        phonenumber: [
+          { required: true, validator: validateMobilePhone, trigger: 'blur' },
+        ]
+      },
+    }
+  },
+  methods:{
+    onshow(){
+      this.dialogFormVisible = true
+
+      this.form = this.data
+
+    },
+    onSubmit(){
+
+      this.$refs['form'].validate(async (valid) => {
+        if (!valid) return false
+        const res = await this.$api.requested({
+          "id": "20221018141802",
+          "content": this.form
+        })
+        this.tool.showMessage(res,()=>{
+          this.$emit("updateSuccess")
+          this.$refs['form'].resetFields()
+          this.dialogFormVisible = false
+        })
+      })
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 80 - 0
src/SDrpManagement/QuotedPrice/detail/modules/contacts/modules/toVoid.vue

@@ -0,0 +1,80 @@
+<template>
+  <div class="inline-16">
+    <el-popconfirm
+        title="确定要作废该联系人嘛?"
+        @confirm="toVoidRow()">
+      <el-button slot="reference" size="small" type="text">作 废</el-button>
+    </el-popconfirm>
+    <el-dialog
+        :visible.sync="dialogToVoidVisible"
+        width="900px"
+        @close="dialogToVoidVisible = false"
+    >
+      <div slot="title" style="font-size: 15px">
+        作废联系人
+      </div>
+      <div>
+        <el-row :gutter="20">
+          <el-form :model="form" :rules="rules"  ref="form"  size="mini" label-position="right" label-width="90px">
+            <el-col :span="20">
+              <el-form-item  label="作废原因:" prop="deletereason">
+                <el-input type="textarea"  autosize v-model="form.deletereason" placeholder="请输入作废原因"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-form>
+        </el-row>
+      </div>
+      <div class="dialog-footer">
+        <el-button size="small" @click="dialogToVoidVisible = false" class="normal-btn-width">取 消</el-button>
+        <el-button size="small" type="primary" @click="onSubmit"   class="normal-btn-width btn-primary">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "toVoid",
+  props:["data"],
+  data(){
+    return {
+      dialogToVoidVisible:false,
+      form:{
+        "contactsid": '',
+        "sys_enterpriseid": '',
+        "deletereason":""
+      },
+      rules:{
+        deletereason:[
+          { required: true, message: '作废原因不能为空', trigger: 'blur' },
+        ]
+      }
+    }
+  },
+  methods:{
+    toVoidRow(){
+      this.dialogToVoidVisible = true
+      this.form.sys_enterpriseid = this.data.sys_enterpriseid
+      this.form.contactsid = this.data.contactsid
+    },
+    onSubmit(){
+      this.$refs['form'].validate(async (valid) => {
+        if (!valid) return false
+        const res = await this.$api.requested({
+          "id": "20221018145502",
+          "content": this.form
+        })
+        this.tool.showMessage(res,()=>{
+          this.$emit("toVoidSuccess")
+          this.$refs['form'].resetFields()
+          this.dialogToVoidVisible = false
+        })
+      })
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 62 - 0
src/SDrpManagement/QuotedPrice/detail/modules/detailed/index.vue

@@ -0,0 +1,62 @@
+<template>
+  <div >
+    <div >
+      <el-descriptions title="基本信息">
+        <el-descriptions-item label="单号">{{ basic.billno?basic.billno:"--" }}</el-descriptions-item>
+        <el-descriptions-item label="项目编号">{{ basic.projectnum?basic.projectnum:"--" }}</el-descriptions-item>
+        <el-descriptions-item label="项目名称">{{ basic.projectname?basic.projectname:"--"}}</el-descriptions-item>
+        <el-descriptions-item label="项目地址">{{ basic.address?basic.address:"--" }}</el-descriptions-item>
+        <el-descriptions-item label="整单折扣">{{ basic.discountrate?basic.discountrate:"--" }}</el-descriptions-item>
+        <el-descriptions-item label="有效期">{{ basic.invaliddate?basic.invaliddate:"--" }}</el-descriptions-item>
+        <el-descriptions-item label="负责人">{{ basic.contactsname?basic.contactsname:"--" }}</el-descriptions-item>
+        <el-descriptions-item label="备注">{{ basic.remarks?basic.remarks:"--" }}</el-descriptions-item>
+        <el-descriptions-item label="状态">{{ basic.status?basic.status:"--" }}</el-descriptions-item>
+      </el-descriptions>
+    </div>
+    <div >
+      <el-descriptions title="系统信息">
+        <el-descriptions-item label="创建人">{{ basic.createby?basic.createby:"--" }}</el-descriptions-item>
+        <el-descriptions-item label="创建时间">{{ basic.createdate?basic.createdate:"--" }}</el-descriptions-item>
+<!--        <el-descriptions-item label="锁定状态">{{ basic.locked?basic.locked:"&#45;&#45;"}}</el-descriptions-item>-->
+        <el-descriptions-item label="最近编辑人">{{ basic.changeby?basic.changeby:"--" }}</el-descriptions-item>
+        <el-descriptions-item label="最近编辑时间">{{ basic.changedate?basic.changedate:"--" }}</el-descriptions-item>
+        <el-descriptions-item label="报价人">{{ basic.submitby?basic.submitby:"--" }}</el-descriptions-item>
+        <el-descriptions-item label="报价时间">{{ basic.submitdate?basic.submitdate:"--" }}</el-descriptions-item>
+        <el-descriptions-item label="报价审核">{{ basic.checkby?basic.checkby:"--" }}</el-descriptions-item>
+        <el-descriptions-item label="报价审核时间">{{ basic.checkdate?basic.checkdate:"--" }}</el-descriptions-item>
+      </el-descriptions>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "index",
+  data(){
+    return {
+      basic:[],
+    }
+  },
+  methods:{
+    async basicData(id){
+      const res = await this.$api.requested({
+        "id": 20221020165203,
+        "version":1,
+        "content": {
+          "sa_quotedpriceid":id
+        }
+      })
+      this.basic = res.data
+    },
+    detailedList(data){
+      console.log("输出")
+      console.log(data)
+      this.basicData(data.sa_quotedpriceid)
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>