浏览代码

no message

zpj 1 年之前
父节点
当前提交
b508677c97

+ 15 - 0
src/api/signContract.js

@@ -0,0 +1,15 @@
+import request from '@/utils/request'
+
+const commonUrl = '/signContract/'
+// 列表
+export const signList = (data) => request(commonUrl + 'list', 'post', { ...data })
+
+// 发起合同签署
+export const signCreate = (data) => request(commonUrl + 'create', 'post', { ...data })
+
+// 获取合同模板列表
+export const signContract = (data) => request(commonUrl + 'contract', 'post', { ...data })
+// 获取机构列表
+export const signFirm = (data) => request(commonUrl + 'firm', 'post', { ...data })
+// 获取人员列表
+export const signMember = (data) => request(commonUrl + 'member', 'post', { ...data })

+ 10 - 0
src/router/modules/sign.js

@@ -19,6 +19,16 @@ const signRouter = [
         meta: {
           title: '合同签署'
         }
+      },
+      {
+        path: 'add',
+        name: 'add',
+        hidden: true,
+        component: () => import('@/views/admin/sign/add.vue'),
+        uid: '',
+        meta: {
+          title: '发起签署'
+        }
       }
     ]
   }

+ 1 - 1
src/views/admin/organ/list.vue

@@ -23,7 +23,7 @@
             <el-table-column prop="license_number" label="营业执照编号" width="220"></el-table-column>
             <el-table-column prop="legal_name" label="法人姓名"></el-table-column>
 
-            <el-table-column prop="psnId" label="e签宝机构ID" width="320"></el-table-column>
+            <el-table-column prop="orgId" label="e签宝机构ID" width="320"></el-table-column>
             <el-table-column prop="realnameStatus" label="是否实名">
               <template slot-scope="scope">
                 <el-tag v-if="scope.row.realnameStatus == 1" type="success">已实名</el-tag>

+ 167 - 0
src/views/admin/sign/add.vue

@@ -0,0 +1,167 @@
+<template>
+  <div class="add-edit-box">
+    <div class="mb-20 baC-fff sys-radius-10 box-sizing-border pd-15-10 flex-justify-space">
+      <div class="fs-20 fw-600 p-15 ">签署合同</div>
+      <div class="align-items-center">
+        <el-button type="primary" @click="close()">返回</el-button>
+        <el-button type="warning" @click="close()">取消</el-button>
+        <el-button type="success" @click="save()">保存</el-button>
+      </div>
+    </div>
+
+    <div class="baC-fff sys-radius-10 box-sizing-border pd-26-24">
+      <div class="align-items-center mb-20">
+        <div class="fs-16">合同编号:</div>
+        <el-input
+          class="input-w-280 mr-10"
+          placeholder="请输入签署的合同编号"
+          prefix-icon="el-icon-edit"
+          v-model="fromData.contract_no">
+        </el-input>
+      </div>
+
+      <div class="align-items-center mb-20">
+        <div class="fs-16">合同模板:</div>
+        <el-input
+          disabled
+          class="input-w-280 mr-10"
+          placeholder="请选择合同模板"
+          prefix-icon="el-icon-edit"
+          v-model="contractName">
+        </el-input>
+        <el-button type="primary" @click="selectContract()">选择合同模板</el-button>
+      </div>
+
+      <!-- 已选择合同模板 获取key名 输入val -->
+      <div class="" v-if="fromData.contract_id">
+        <div class="mb-20 fs-16">合同模板信息填写:</div>
+        <div class="align-items-center mb-20" v-for="(item,i) in texts" :key="i">
+          <div class="fs-16">{{item.name}}:</div>
+          <el-input
+            class="input-w-280 mr-10"
+            :placeholder="`请输入${item.name}`"
+            prefix-icon="el-icon-edit"
+            v-model="item.val">
+          </el-input>
+        </div>
+      </div>
+
+      <div class="" v-if="fromData.contract_id">
+        <div class="align-items-center mb-20" v-for="(item,i) in sign_party" :key="i">
+          <div class="fs-16">{{item.keyword}}:</div>
+          <el-input
+            disabled
+            class="input-w-280 mr-10"
+            placeholder="签署类型(个人,企业)"
+            prefix-icon="el-icon-edit"
+            v-model="item.auth_type">
+          </el-input>
+          <el-input
+            disabled
+            class="input-w-280 mr-10"
+            placeholder="E签宝ID"
+            prefix-icon="el-icon-edit"
+            v-model="item.id_no">
+          </el-input>
+          <el-button type="primary" @click="selectUser(i)">选择个人签署</el-button>
+          <el-button type="primary" @click="selectOrgan(i)">选择机构签署</el-button>
+        </div>
+      </div>
+
+    </div>
+
+    <ContractView ref="contractView" @setInfo='getContractView'></ContractView>
+    <UserView ref="userView" @setInfo='getUserView'></UserView>
+    <OrganView ref="organView" @setInfo='getOrganView'></OrganView>
+  </div>
+</template>
+
+<script>
+  import {signCreate} from '@/api/signContract.js';
+  import ContractView from './mod/contract.vue';
+  import UserView from './mod/user.vue';
+  import OrganView from './mod/organ.vue';
+
+  export default {
+    components:{ContractView,UserView,OrganView},
+    data(){
+      return{
+        fromData:{
+          contract_id:"",
+          contract_no:"",
+          textsJson:"",
+          signJson:"",
+        },
+        isAJAX:false,
+
+        contractName:'',
+        texts:[],
+        sign_party:[],
+      }
+    },
+    mounted() {
+
+    },
+    methods:{
+      close(){
+        this.$router.go(-1)
+      },
+      save(){
+        this.fromData.textsJson = this.texts.reduce((acc,item)=>{
+          acc[item.name] = item.val
+          return acc
+        },{})
+      },
+
+
+      // 合同模板
+      selectContract(){
+        this.$refs.contractView.getList();
+      },
+      getContractView(e){
+        this.fromData.contract_id = e.id;
+        this.contractName = e.name;
+        let textsList = e.texts;
+        textsList.forEach((v)=>{
+          let obj = {
+            name:v,
+            val:'',
+          }
+          this.texts.push(obj)
+        })
+        let signPartyList = e.sign_party;
+        signPartyList.forEach((v)=>{
+          let obj = {
+            keyword:v,
+            auth_type:'',
+            id_no:'',
+          }
+          this.sign_party.push(obj)
+        })
+      },
+
+      // 人员
+      selectUser(i){
+        this.$refs.userView.index = i;
+        this.$refs.userView.getList();
+      },
+      getUserView(e){
+
+      },
+      // 企业
+      selectOrgan(i){
+        this.$refs.organView.index = i;
+        this.$refs.organView.getList();
+      },
+      getOrganView(e){
+
+      },
+    },
+  }
+</script>
+
+<style scoped lang="scss">
+  .add-edit-box{
+
+  }
+</style>

+ 84 - 2
src/views/admin/sign/list.vue

@@ -1,8 +1,90 @@
 <template>
+  <div class="user-list">
+
+      <div class="mb-20 flex-justify-space baC-fff sys-radius-10 box-sizing-border pd-15-10">
+        <div class="align-items-center">
+            <el-input
+              class="input-w-200 mr-10"
+              placeholder="请输入查询关键词"
+              prefix-icon="el-icon-search"
+              v-model="fromData.search">
+            </el-input>
+            <el-button type="primary" icon="el-icon-search" @click="searchFun()">查询</el-button>
+        </div>
+        <div class="">
+          <el-button type="success" icon="el-icon-circle-plus-outline" @click="add()">发起签署</el-button>
+        </div>
+      </div>
+
+      <div class="mb-30">
+        <el-table :data="list" stripe >
+            <el-table-column fixed prop="id" label="ID"></el-table-column>
+            <el-table-column fixed prop="name" label="合同名称"></el-table-column>
+
+            <el-table-column prop="created_at" label="发起签署时间"></el-table-column>
+
+        </el-table>
+      </div>
+
+
+      <div class="mb-30 flex-justify-end">
+        <el-pagination
+          background
+          @current-change="handleCurrentChange"
+          :current-page.sync="fromData.page"
+          :page-size="10"
+          layout="prev, pager, next"
+          :total="total">
+        </el-pagination>
+      </div>
+
+  </div>
 </template>
 
 <script>
+  import {signList} from '@/api/signContract.js'
+  export default {
+    data(){
+      return{
+        list:[],
+        fromData:{
+          page:1,
+          search:'',
+        },
+        total:0,
+      }
+    },
+    mounted(){
+      this.getList();
+    },
+    methods:{
+      getList(){
+        signList(this.fromData).then((res)=>{
+          if(res.code == 1){
+            this.list = res.data.items;
+            this.total = res.data.total
+          }
+        })
+      },
+      handleCurrentChange(val){
+        this.fromData.page = val;
+        this.getList();
+      },
+      searchFun(){
+        this.fromData.page = 1;
+        this.getList();
+      },
+
+      add(item){
+        this.$router.push({path:'/sign/add'})
+      },
+
+    },
+  }
 </script>
 
-<style>
-</style>
+<style scoped lang="scss">
+  .user-list{
+
+  }
+</style>

+ 97 - 0
src/views/admin/sign/mod/contract.vue

@@ -0,0 +1,97 @@
+<template>
+  <div>
+    <el-dialog title="请选择合同模板" :visible.sync="Show" width="80%">
+      <div class="align-items-center mb-20">
+          <el-input
+            class="input-w-200 mr-10"
+            placeholder="请输入查询关键词"
+            prefix-icon="el-icon-search"
+            v-model="fromData.search">
+          </el-input>
+          <el-button type="primary" icon="el-icon-search" @click="searchFun()">查询</el-button>
+      </div>
+      <el-table class="mb-20" :data="list" stripe>
+        <el-table-column property="id" label="ID" width="150"></el-table-column>
+        <el-table-column property="name" label="合同模板名称" width=""></el-table-column>
+
+        <el-table-column property="sign_party" label="合同签署区信息" width="">
+          <template slot-scope="scope">
+            <div class="fs-16" v-for="(item,i) in scope.row.sign_party" :key="i">{{item}},</div>
+          </template>
+        </el-table-column>
+
+        <el-table-column property="texts" label="合同可替换信息" width="">
+          <template slot-scope="scope">
+            <div class="fs-16" v-for="(item,i) in scope.row.texts" :key="i">{{item}},</div>
+          </template>
+        </el-table-column>
+
+        <el-table-column fixed='right' prop="" label="选择">
+          <template slot-scope="scope">
+            <el-button type="primary" @click="select(scope.row)">选择</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="mb-30 flex-justify-end">
+        <el-pagination
+          background
+          @current-change="handleCurrentChange"
+          :current-page.sync="fromData.page"
+          :page-size="10"
+          layout="prev, pager, next"
+          :total="total">
+        </el-pagination>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import {signContract} from '@/api/signContract.js'
+
+  export default {
+    name:"Contract-list",
+    data(){
+      return{
+        list:[],
+        Show:false,
+        fromData:{
+          search:'',
+          page:1,
+        },
+        total:0,
+      }
+    },
+    methods:{
+      getList(){
+        signContract(this.fromData).then((res)=>{
+          if(res.code == 1){
+            this.Show = true;
+            this.list = res.data.items;
+          }else{
+            this.Show = false;
+            this.$message.error(res.msg);
+          }
+        })
+      },
+      handleCurrentChange(val){
+        this.fromData.page = val;
+        this.getList();
+      },
+      searchFun(){
+        this.fromData.page = 1;
+        this.getList();
+      },
+
+      select(item){
+        this.$emit('setInfo',item)
+        this.$message.success('选择成功');
+        this.Show = false;
+      },
+    },
+  }
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 109 - 0
src/views/admin/sign/mod/organ.vue

@@ -0,0 +1,109 @@
+<template>
+  <div>
+    <el-dialog title="请选择人员" :visible.sync="Show" width="80%">
+      <div class="align-items-center mb-20">
+          <el-input
+            class="input-w-200 mr-10"
+            placeholder="请输入查询关键词"
+            prefix-icon="el-icon-search"
+            v-model="fromData.search">
+          </el-input>
+          <el-button type="primary" icon="el-icon-search" @click="searchFun()">查询</el-button>
+      </div>
+      <el-table class="mb-20" :data="list" stripe>
+        <el-table-column fixed prop="id" label="ID" width="60"></el-table-column>
+        <el-table-column fixed prop="firm_name" label="机构名称"></el-table-column>
+        <el-table-column prop="license_number" label="营业执照编号" width="220"></el-table-column>
+        <el-table-column prop="legal_name" label="法人姓名"></el-table-column>
+
+        <el-table-column prop="orgId" label="e签宝机构ID" width="320"></el-table-column>
+        <el-table-column prop="realnameStatus" label="是否实名">
+          <template slot-scope="scope">
+            <el-tag v-if="scope.row.realnameStatus == 1" type="success">已实名</el-tag>
+            <el-tag v-else type="danger">未实名</el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column prop="authorizeUserInfo" label="是否授权">
+          <template slot-scope="scope">
+            <el-tag v-if="scope.row.authorizeUserInfo == 1" type="success">已授权</el-tag>
+            <el-tag v-else type="danger">未授权</el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column prop="" label="认证主体类型">
+          <template slot-scope="scope">
+            <el-tag v-if="scope.row.authType == 'PSN'" type="success">个人认证</el-tag>
+            <el-tag v-else-if="scope.row.authType == 'ORG'" type="success">机构认证</el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column prop="created_at" label="创建时间"></el-table-column>
+        <el-table-column fixed='right' prop="" label="选择">
+          <template slot-scope="scope">
+            <el-button type="primary" @click="select(scope.row)">选择</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="mb-30 flex-justify-end">
+        <el-pagination
+          background
+          @current-change="handleCurrentChange"
+          :current-page.sync="fromData.page"
+          :page-size="10"
+          layout="prev, pager, next"
+          :total="total">
+        </el-pagination>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import {signFirm} from '@/api/signContract.js'
+
+  export default {
+    name:"organ-list",
+    data(){
+      return{
+        index:0,
+        list:[],
+        Show:false,
+        fromData:{
+          search:'',
+          page:1,
+        },
+        total:0,
+      }
+    },
+    methods:{
+      getList(){
+        signFirm(this.fromData).then((res)=>{
+          if(res.code == 1){
+            this.Show = true;
+            this.list = res.data.items;
+          }else{
+            this.Show = false;
+            this.$message.error(res.msg);
+          }
+        })
+      },
+      handleCurrentChange(val){
+        this.fromData.page = val;
+        this.getList();
+      },
+      searchFun(){
+        this.fromData.page = 1;
+        this.getList();
+      },
+
+      select(item){
+        item.index = this.index;
+        this.$emit('setInfo',item);
+        this.$message.success('选择成功');
+        this.Show = false;
+      },
+    },
+  }
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 108 - 0
src/views/admin/sign/mod/user.vue

@@ -0,0 +1,108 @@
+<template>
+  <div>
+    <el-dialog title="请选择人员" :visible.sync="Show" width="80%">
+      <div class="align-items-center mb-20">
+          <el-input
+            class="input-w-200 mr-10"
+            placeholder="请输入查询关键词"
+            prefix-icon="el-icon-search"
+            v-model="fromData.search">
+          </el-input>
+          <el-button type="primary" icon="el-icon-search" @click="searchFun()">查询</el-button>
+      </div>
+      <el-table class="mb-20" :data="list" stripe>
+        <el-table-column property="id" label="ID" width="60"></el-table-column>
+        <el-table-column property="name" label="姓名" width=""></el-table-column>
+        <el-table-column property="phone" label="电话" width=""></el-table-column>
+        <el-table-column property="id_number" label="身份证号" width=""></el-table-column>
+        <el-table-column property="psnId" label="e签宝个人ID" width=""></el-table-column>
+        <el-table-column prop="realnameStatus" label="是否实名">
+          <template slot-scope="scope">
+            <el-tag v-if="scope.row.realnameStatus == 1" type="success">已实名</el-tag>
+            <el-tag v-else type="danger">未实名</el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column prop="authorizeUserInfo" label="是否授权">
+          <template slot-scope="scope">
+            <el-tag v-if="scope.row.authorizeUserInfo == 1" type="success">已授权</el-tag>
+            <el-tag v-else type="danger">未授权</el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column prop="" label="认证主体类型">
+          <template slot-scope="scope">
+            <el-tag v-if="scope.row.authType == 'PSN'" type="success">个人认证</el-tag>
+            <el-tag v-else-if="scope.row.authType == 'ORG'" type="success">机构认证</el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column prop="created_at" label="创建时间"></el-table-column>
+        <el-table-column fixed='right' prop="" label="选择">
+          <template slot-scope="scope">
+            <el-button type="primary" @click="select(scope.row)">选择</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="mb-30 flex-justify-end">
+        <el-pagination
+          background
+          @current-change="handleCurrentChange"
+          :current-page.sync="fromData.page"
+          :page-size="10"
+          layout="prev, pager, next"
+          :total="total">
+        </el-pagination>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import {signMember} from '@/api/signContract.js'
+
+  export default {
+    name:"user-list",
+    data(){
+      return{
+        index:0,
+        list:[],
+        Show:false,
+        fromData:{
+          search:'',
+          page:1,
+        },
+        total:0,
+      }
+    },
+    methods:{
+      getList(){
+        signMember(this.fromData).then((res)=>{
+          if(res.code == 1){
+            this.Show = true;
+            this.list = res.data.items;
+          }else{
+            this.Show = false;
+            this.$message.error(res.msg);
+          }
+        })
+      },
+      handleCurrentChange(val){
+        this.fromData.page = val;
+        this.getList();
+      },
+      searchFun(){
+        this.fromData.page = 1;
+        this.getList();
+      },
+
+      select(item){
+        item.index = this.index;
+        this.$emit('setInfo',item);
+        this.$message.success('选择成功');
+        this.Show = false;
+      },
+    },
+  }
+</script>
+
+<style scoped lang="scss">
+
+</style>