刘湘琪 3 years ago
parent
commit
5aa800b0bd

+ 33 - 0
src/api/admin/ent/ent.js

@@ -0,0 +1,33 @@
+import request from '@/utils/request'
+
+// 管理员查询企业信息列表
+export function listEntApi(query) {
+  return request({
+    url: '/admin/enterprise/list',
+    method: 'get',
+    params: query
+  })
+}
+//删除企业信息
+export function deleteEntApi(ids) {
+  return request({
+    url: `/admin/enterprise/${ids}`,
+    method: 'delete'
+  })
+}
+//获取企业详细信息
+export function getEntInfoByIdApi(id,query) {
+  return request({
+    url: `/admin/enterprise/${id}`,
+    method: 'get',
+    params: query
+  })
+}
+//审批
+export function auditEntApi(data) {
+  return request({
+    url: `/admin/enterprise/auth`,
+    method: 'post',
+    data: data
+  })
+}

+ 6 - 6
src/api/common/common.js

@@ -1,18 +1,18 @@
 import request from '@/utils/request'
 
 // 查询省份信息
-export function getProvinceData(query) {
+export function getProvinceDataApi(query) {
   return request({
-    url: '/api/common/region/province',
+    url: '/common/region/province',
     method: 'get',
     params: query
   })
 }
 //根据省份信息获取下级节点信息
-export function getRegionChildren(query) {
+export function getRegionChildrenApi(id) {
   return request({
-    url: '/api/common/region/${id}/children',
+    url: `/common/region/${id}/children`,
     method: 'get',
-    params: query
+    // params: query
   })
-}
+}

+ 26 - 0
src/api/enterprise/employee/employee.js

@@ -0,0 +1,26 @@
+import request from '@/utils/request'
+
+// 查询项目列表
+export function listUserApi(query) {
+  return request({
+    url: '/ent/user/list',
+    method: 'get',
+    params: query
+  })
+}
+//新增角色
+export function addRoleApi(data) {
+  return request({
+    url: `/ent/user`,
+    method: 'post',
+    data: data
+  })
+}
+//修改角色
+export function updateUserApi(data) {
+  return request({
+    url: `/ent/user`,
+    method: 'put',
+    data: data
+  })
+}

+ 34 - 0
src/api/enterprise/project/project.js

@@ -0,0 +1,34 @@
+import request from '@/utils/request'
+
+// 查询项目列表
+export function listProjectApi(query) {
+  return request({
+    url: '/ent/project/manageList',
+    method: 'get',
+    params: query
+  })
+}
+//新增项目
+export function addProjectApi(data) {
+  return request({
+    url: `/ent/project`,
+    method: 'post',
+    data: data
+  })
+}
+//获取财务员、科技员
+export function listUserListApi(query) {
+  return request({
+    url: `/ent/user/list`,
+    method: 'get',
+    params: query
+  })
+}
+//修改项目
+export function editProjectApi(data) {
+  return request({
+    url: `/ent/project`,
+    method: 'put',
+    data: data
+  })
+}

+ 12 - 2
src/api/login.js

@@ -29,7 +29,17 @@ export function register(data) {
     data: data
   })
 }
-
+//用户注册 带企业信息
+export function registerEntApi(data) {
+  return request({
+    url: '/ent/user/regEnt',
+    headers: {
+      isToken: false
+    },
+    method: 'post',
+    data: data
+  })
+}
 // 获取用户详细信息
 export function getInfo() {
   return request({
@@ -56,4 +66,4 @@ export function getCodeImg() {
     method: 'get',
     timeout: 20000
   })
-}
+}

+ 443 - 1
src/assets/styles/index.scss

@@ -188,4 +188,446 @@ aside {
 
 .multiselect--active {
   z-index: 1000 !important;
-}
+}
+
+/* =============自定义样式============== */
+$--color-primary: $menuActiveText;
+$border: #ddd;
+/* 工具栏 */
+.toolbar {
+  margin: 0 0 15px;
+  &>.title {
+    position: relative;
+    padding-left: 15px;
+    margin-right: 15px;
+    font-size: 16px;
+    line-height: 28px;
+    font-weight: bold;
+    color: #363636;
+    &:before {
+      content: "";
+      display: block;
+      position: absolute;
+      left: 0;
+      top: 50%;
+      transform: translate(0, -50%);
+      width: 5px;
+      height: 16px;
+      background-color: $--color-primary;
+    }
+  }
+  &:after {
+    content: "";
+    clear: both;
+    display: block;
+  }
+  &>.tip {
+    display: inline-block;
+    font-size: 14px;
+    font-weight: normal;
+    color: #666;
+  }
+}
+
+.tool {
+  float: right;
+  .el-button--medium {
+    padding-top: 0;
+    padding-bottom: 0;
+  }
+}
+
+.el-select {
+  display: block;
+}
+.form {
+  .el-date-editor.el-input, .el-date-editor.el-input__inner {
+    width: 100%;
+  }
+}
+ .danger {
+  color: $red;
+}
+
+.oper {
+  margin-top: 30px;
+  text-align: center;
+}
+
+.el-table .el-form-item {
+  margin-bottom: 20px;
+}
+.el-table .el-input-number--medium {
+  width: 100%;
+}
+
+/* 详情表格 */
+.table_view {
+	width: 100%;
+  border-collapse: collapse;
+  table-layout: fixed;
+  border: 1px solid $border;
+  font-size: 14px;
+  th,
+  td {
+      position: relative;
+      line-height: 19px;
+      padding: 15px 20px;
+      border: 1px solid $border;
+      word-wrap: break-word;
+      word-break: break-all;
+  }
+  .tr_title {
+    background: #f2f6fc;
+  }
+  th {
+    width: 200px;
+    color: #4C4C4C;
+    text-align: right;
+    background: #F8F8F8;
+  }
+}
+
+.part {
+  padding-bottom: 10px;
+  .part-title {
+    margin: 10px 0;
+    font-size: 14px;
+    &:after {
+      content: "";
+      clear: both;
+      display: block;
+    }
+    .el-form-item {
+      display: inline-block;
+      min-width: 120px;
+    }
+    .el-form-item__error {
+      line-height: 26px;
+    }
+  }
+  .node_help {
+    display: inline-block;
+    margin-left: 30px;
+  }
+  .tool{
+    float: right;
+  }
+}
+.inputBar {
+  margin-bottom: 10px;
+  font-size: 14px;
+  .el-form-item {
+    display: inline-block;
+  }
+}
+.fullDate {
+  width: 100%!important;
+}
+.pull_left {
+  float: left;
+}
+.nodebar {
+  margin-bottom: 10px;
+  border-bottom: 1px solid $border;
+}
+.node_row {
+  margin: 5px 0;
+}
+.node_info {
+  display: flex;
+  .node_value {
+    flex: 1;
+    word-break: break-all;
+    word-wrap: break-word;
+  }
+}
+
+.page {
+  display: flex;
+  flex-direction: column;
+  height: 100%;
+  .header {
+    height: 70px;
+    padding: 10px;
+    background-color: #080D41;
+    .logo {
+      height: 50px;
+      // background: url(~@/assets/logo/logo.png) no-repeat;
+      background-size: auto 50px;
+    }
+  }
+  .footer {
+    height: 80px;
+    background-color: #f1f1f1;
+  }
+  .main {
+    flex: 1;
+  }
+  .center_box {
+    width: 500px;
+    margin: 50px auto 0;
+  }
+}
+
+  .stat_box {
+    position: relative;
+    height: 120px;
+    padding: 20px 20px 20px 110px;
+    background: #FAF9FF;
+    border-radius: 4px;
+    .icon {
+      position: absolute;
+      left: 20px;
+      top: 50%;
+      width: 76px;
+      height: 76px;
+      border-radius: 50%;
+      transform: translate(0, -50%);
+      // &.icon-1 {
+      //   background: url(~@/assets/images/stat_1.png) no-repeat center;
+      // }
+      // &.icon-2 {
+      //   background: url(~@/assets/images/stat_2.png) no-repeat center;
+      // }
+      // &.icon-3 {
+      //   background: url(~@/assets/images/stat_3.png) no-repeat center;
+      // }
+      // &.icon-4 {
+      //   background: url(~@/assets/images/stat_4.png) no-repeat center;
+      // }
+    }
+    &>span {
+      display: block;
+      margin: 5px 0;
+      color: #363636;
+      text-align: center;
+    }
+    .num {
+      font-family: PingFang-SC-Medium;
+      font-size: 32px;
+    }
+    .label {
+      font-size: 14px;
+    }
+  }
+
+  .fast {
+    height: 265px;
+    padding-top: 150px;
+    border: 1px solid #EDEDED;
+    border-radius: 4px;
+    position: relative;
+    text-align: center;
+    cursor: pointer;
+    .icon {
+      position: absolute;
+      left: 50%;
+      top: 50px;
+      width: 80px;
+      height: 80px;
+      transform: translate(-50%, 0);
+      // &.fast-1 {
+      //   background: url(~@/assets/images/fast_1.png) no-repeat center;
+      // }
+      // &.fast-2 {
+      //   background: url(~@/assets/images/fast_2.png) no-repeat center;
+      // }
+      // &.fast-3 {
+      //   background: url(~@/assets/images/fast_3.png) no-repeat center;
+      // }
+      // &.fast-4 {
+      //   background: url(~@/assets/images/fast_4.png) no-repeat center;
+      // }
+    }
+    .txt {
+      font-size: 14px;
+      color: #363636;
+    }
+  }
+  .files {
+    margin: 0;
+    li {
+      list-style: none;
+    }
+    a {
+      color: $--color-primary;
+    }
+  }
+
+  .singlebox {
+  	position: relative;
+  	float: left;
+  	margin-right: 20px;
+  	.el-upload__tip.help {
+  		position: absolute;
+  		left: 0;
+  		bottom: -20px;
+  		line-height: 20px;
+  		white-space: nowrap;
+  	}
+  }
+.singlefile {
+  float: left;
+  max-width: 180px;
+  margin-right: 20px;
+  line-height: 30px;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+  overflow: hidden;
+}
+.link {
+  color: $--color-primary;
+  &:hover {
+    color: $--color-primary;
+    text-decoration: underline;
+  }
+}
+/*
+.el-submenu .el-menu-item {
+  line-height: 40px;
+  height: 40px;
+} */
+
+
+.loginPage {
+  position: relative;
+  display: flex;
+  justify-content: center;
+  height: 100%;
+  // background: #080D41 url("~@/assets/images/codeLogin/bg.png") no-repeat;
+  background-size: 100% auto;
+  overflow: hidden;
+  .logo, .login_box {
+    flex: 1;
+  }
+  .logo {
+    height: 135px;
+    // background: url("~@/assets/logo/logo.png") no-repeat 32% 85px;
+    background-size: auto 50px;
+  }
+  .login_box{
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    flex-direction: column;
+    height: 100%;
+    text-align: center;
+    z-index: 2;
+    .title {
+      margin-top: 0;
+      font-family: PingFangSC-Semibold;
+      font-size: 32px;
+      color: #FFFFFF;
+      text-align: center;
+    }
+    .code_box {
+      position: relative;
+      width: 437px;
+      height: 415px;
+      // background: rgba(#141C6C, 20%) url("~@/assets/images/codeLogin/line.png") no-repeat;
+      font-size: 16px;
+      color: #FFFFFF;
+      border: 1px solid rgba(#5D66BE, 20%);
+      .login-code {
+        position: absolute;
+        width: 300px;
+        height: 320px;
+        left: 50%;
+        top: 50%;
+        margin-left: -150px;
+        margin-top: -160px;
+        border-radius: 5px;
+        background-color: #fff;
+      }
+    }
+    .el-button--medium {
+      font-size: 16px;
+    }
+  }
+  .login_form_title {
+    margin: 0px auto 30px auto;
+    text-align: center;
+    color: #000;
+  }
+  .login-form {
+    border-radius: 6px;
+    background: #ffffff;
+    width: 400px;
+    padding: 25px 25px 5px 25px;
+    .el-input {
+      height: 38px;
+      input {
+        height: 38px;
+      }
+    }
+    .input-icon {
+      height: 39px;
+      width: 14px;
+      margin-left: 2px;
+    }
+  }
+  .login-tip {
+    font-size: 13px;
+    text-align: center;
+    color: #bfbfbf;
+  }
+  .login-code {
+    width: 33%;
+    height: 38px;
+    float: right;
+    img {
+      cursor: pointer;
+      vertical-align: middle;
+    }
+  }
+  .login-code-img {
+    height: 38px;
+  }
+}
+
+.summary {
+  border: 1px solid #dfe6ec;
+  border-top: none;
+  padding: 10px 20px;
+  text-align: right;
+  &:after {
+    content: '';
+    clear: both;
+    display: block;
+  }
+  .summaryTxt {
+    float: right;
+    margin-left: 20px;
+    font-weight: bold;
+    line-height: 36px;
+    .summaryInput {
+      display: inline-block;
+      width: 200px;
+    }
+  }
+  .red {
+    color: #f00;
+  }
+}
+
+.ti-help {
+  display: flex;
+  .ti-input {
+    width: 1px;
+    .el-form-item__error {
+      width: 120px;
+    }
+  }
+  .ti-label {
+    flex: 1;
+    text-align: center;
+  }
+}
+
+.input-with-select .el-input-group__append {
+  background-color: #fff;
+  .el-select .el-input {
+    width: 100px!important;
+  }
+}

+ 2 - 1
src/assets/styles/variables.scss

@@ -6,7 +6,8 @@ $pink: #E65D6E;
 $green: #30B08F;
 $tiffany: #4AB7BD;
 $yellow:#FEC171;
-$panGreen: #30B08F;
+$panGreen: #30B08F;
+$menuActiveText:#409EFF;
 
 // 默认菜单主题风格
 $base-menu-color:#bfcbd9;

+ 219 - 202
src/components/FileUpload/index.vue

@@ -1,209 +1,226 @@
 <template>
-  <div class="upload-file">
-    <el-upload
-      multiple
-      :action="uploadFileUrl"
-      :before-upload="handleBeforeUpload"
-      :file-list="fileList"
-      :limit="limit"
-      :on-error="handleUploadError"
-      :on-exceed="handleExceed"
-      :on-success="handleUploadSuccess"
-      :show-file-list="false"
+	<div>
+		<template v-if="multiple">
+			<el-upload
+			class="upload-demo"
+			:action="uploadFileUrl"
+			:before-remove="beforeRemove"
+			:before-upload="beforeUpload"
+			:on-success="successHandleList"
+			:index="index"
+			:data="params"
+			multiple
+			:accept="accept"
       :headers="headers"
-      class="upload-file-uploader"
-      ref="upload"
-    >
-      <!-- 上传按钮 -->
-      <el-button size="mini" type="primary">选取文件</el-button>
-      <!-- 上传提示 -->
-      <div class="el-upload__tip" slot="tip" v-if="showTip">
-        请上传
-        <template v-if="fileSize"> 大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b> </template>
-        <template v-if="fileType"> 格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b> </template>
-        的文件
-      </div>
-    </el-upload>
-
-    <!-- 文件列表 -->
-    <transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear" tag="ul">
-      <li :key="file.url" class="el-upload-list__item ele-upload-list__item-content" v-for="(file, index) in fileList">
-        <el-link :href="`${baseUrl}${file.url}`" :underline="false" target="_blank">
-          <span class="el-icon-document"> {{ getFileName(file.name) }} </span>
-        </el-link>
-        <div class="ele-upload-list__item-content-action">
-          <el-link :underline="false" @click="handleDelete(index)" type="danger">删除</el-link>
-        </div>
-      </li>
-    </transition-group>
-  </div>
+			:file-list="fileList">
+				<el-button type="primary">点击上传</el-button>
+				<div v-if="tip" class="el-upload__tip" slot="tip">{{tip}}</div>
+			</el-upload>
+		</template>
+		<template v-else>
+			<el-upload :class="showPic ? 'avatar-uploader': 'singlebox'"
+			:action="uploadFileUrl"
+			:show-file-list="false"
+			:accept="accept"
+			:on-success="handleSuccess"
+			:index="index"
+			:data="params"
+      :headers="headers"
+			:before-upload="beforeUpload"
+			:on-progress="handleProgress">
+				<template v-if="showPic">
+					<img v-if="singleFile.url" :src="file.url" class="avatar" :width="imgWidth" :height="imgHeight">
+	  				<i v-else class="el-icon-plus avatar-uploader-icon" :style="'width:'+imgWidth+'px; height:'+imgHeight+'px;line-height: '+imgHeight+'px;'"></i>
+				</template>
+				<el-button v-else type="primary" class="btn">
+					<template v-if="singleFile.url">重新上传</template>
+					<template v-else>点击上传</template>
+				</el-button>
+				<div v-if="tip" class="el-upload__tip" slot="tip">{{tip}}</div>
+			</el-upload>
+			<template v-if="!showPic && singleFile.url">
+				<a class="singlefile" :href="singleFile.url" :title="singleFile.name" target="_blank">
+					<i class="el-icon-document"></i>{{singleFile.name}}
+				</a>
+			</template>
+		</template>
+	</div>
 </template>
-
 <script>
-import { getToken } from "@/utils/auth";
-
-export default {
-  name: "FileUpload",
-  props: {
-    // 值
-    value: [String, Object, Array],
-    // 数量限制
-    limit: {
-      type: Number,
-      default: 5,
-    },
-    // 大小限制(MB)
-    fileSize: {
-      type: Number,
-      default: 5,
-    },
-    // 文件类型, 例如['png', 'jpg', 'jpeg']
-    fileType: {
-      type: Array,
-      default: () => ["doc", "xls", "ppt", "txt", "pdf"],
-    },
-    // 是否显示提示
-    isShowTip: {
-      type: Boolean,
-      default: true
-    }
-  },
-  data() {
-    return {
-      number: 0,
-      uploadList: [],
-      baseUrl: process.env.VUE_APP_BASE_API,
-      uploadFileUrl: process.env.VUE_APP_BASE_API + "/common/upload", // 上传的图片服务器地址
-      headers: {
-        Authorization: "Bearer " + getToken(),
-      },
-      fileList: [],
-    };
-  },
-  watch: {
-    value: {
-      handler(val) {
-        if (val) {
-          let temp = 1;
-          // 首先将值转为数组
-          const list = Array.isArray(val) ? val : this.value.split(',');
-          // 然后将数组转为对象数组
-          this.fileList = list.map(item => {
-            if (typeof item === "string") {
-              item = { name: item, url: item };
-            }
-            item.uid = item.uid || new Date().getTime() + temp++;
-            return item;
-          });
-        } else {
-          this.fileList = [];
-          return [];
-        }
-      },
-      deep: true,
-      immediate: true
-    }
-  },
-  computed: {
-    // 是否显示提示
-    showTip() {
-      return this.isShowTip && (this.fileType || this.fileSize);
-    },
-  },
-  methods: {
-    // 上传前校检格式和大小
-    handleBeforeUpload(file) {
-      // 校检文件类型
-      if (this.fileType) {
-        let fileExtension = "";
-        if (file.name.lastIndexOf(".") > -1) {
-          fileExtension = file.name.slice(file.name.lastIndexOf(".") + 1);
+  import { getToken } from "@/utils/auth";
+	export default {
+		props: {
+			file: {
+				type: Object,
+				default: function () {
+					return {
+						name: '',
+						url: ''
+					}
+				}
+			},
+			files: {
+				type: Array,
+				default: function () {
+					return []
+				}
+			},
+			multiple: {
+				type: Boolean,
+				default: false
+			},
+			showPic: {
+				type: Boolean,
+				default: false
+			},
+			sizeLimit: {
+				type: Number,
+				default: 0
+			},
+			accept: {
+				type: String,
+				default: ''
+			},
+			tip: {
+				type: String,
+				default: ''
+			},
+			index:{
+				type:Number,
+				default: -1
+			},
+			imgWidth: {
+				type: Number,
+				default: 178
+			}, // showPic 时 图片宽度
+			imgHeight: {
+				type: Number,
+				default: 178
+			}, // showPic 时 图片高度
+			params: {
+				type: Object,
+				default: function () {
+          return {}
         }
-        const isTypeOk = this.fileType.some((type) => {
-          if (file.type.indexOf(type) > -1) return true;
-          if (fileExtension && fileExtension.indexOf(type) > -1) return true;
-          return false;
+			}
+		},
+		data () {
+			return {
+        uploadFileUrl: process.env.VUE_APP_BASE_API + "/common/attach/upload", // 上传的图片服务器地址
+				// uploadFileUrl: 'http://124.232.146.72:7015/api/common/attach/upload', // 上传的图片服务器地址
+				headers: {
+				  Authorization: "Bearer " + getToken(),
+				},
+				singleFile: {
+					name: this.file.name,
+					url: this.file.url
+				},
+				fileList: [],
+			}
+		},
+		created () {
+
+		},
+		mounted () {
+			this.$emit('update:file', this.singleFile)
+			this.$emit('update:files', this.fileList)
+			this.fileList = this.files
+		},
+		methods: {
+			handleSuccess(res, file) {
+				if (res.code == 200) {
+					this.singleFile.name = file.name
+					this.singleFile.url = res.data.url
+					if(this.index == -1){
+						this.$emit('input', this.singleFile)
+					}else{
+						this.$emit('input', this.singleFile, this.index)
+					}
+				} else {
+					this.$message.error(res.msg)
+				}
+			},
+			beforeUpload(file) {
+				const isLTM = this.sizeLimit > 0 ? file.size / 1024 / 1024 < this.sizeLimit : true
+				let isInAccept = true
+				if (this.accept) {
+					isInAccept = false
+					if (file.type.indexOf('image') != -1) {
+						if (this.accept.indexOf('image') != -1) {
+							isInAccept = true
+						}
+					} else {
+						isInAccept = this.accept.indexOf(file.type) == -1 ? false : true
+					}
+					if (!isInAccept) {
+						this.$message.error(`文件格式错误`)
+					} else {
+						if (!isLTM) {
+							this.$message.error(`文件大小不能超过 ${this.sizeLimit}MB!`)
+						}
+					}
+				}
+				return isInAccept && isLTM
+			},
+			handleProgress(file) {
+
+			},
+			beforeRemove (file, fileList) {
+				let hasTip = false;
+				if (file.raw) {
+					const isLTM = this.sizeLimit > 0 ? file.raw.size / 1024 / 1024 < this.sizeLimit : true
+					if (this.accept) {
+						let isInAccept = false
+						if (file.raw.type.indexOf('image') != -1) {
+							if (this.accept.indexOf('image') != -1) {
+								isInAccept = true
+							}
+						} else {
+							isInAccept = this.accept.indexOf(file.raw.type) == -1 ? false : true
+						}
+						if (!isLTM || !isInAccept) {
+							this.fileList = fileList
+						} else {
+							hasTip = true
+						}
+					}
+				} else {
+					hasTip = true
+				}
+				if (hasTip) {
+					return this.$confirm(`确定移除 ${file.name}?`).then(() => {
+						this.fileList = fileList
+						if(this.index == -1){
+							this.$emit('input', this.fileList)
+						} else {
+							this.$emit('input', this.fileList, this.index)
+						}
+					})
+				}
+			},
+			successHandleList (response, file, fileList) {
+				this.fileList = fileList;
+        fileList.forEach((item, index) => {
+          if (item.url == undefined && item.response != undefined) {
+            fileList[index].fileName = item.response.data.fileName;
+            fileList[index].filePath = item.response.data.url;
+            fileList[index].url = item.response.url;
+          }
         });
-        if (!isTypeOk) {
-          this.$modal.msgError(`文件格式不正确, 请上传${this.fileType.join("/")}格式文件!`);
-          return false;
-        }
-      }
-      // 校检文件大小
-      if (this.fileSize) {
-        const isLt = file.size / 1024 / 1024 < this.fileSize;
-        if (!isLt) {
-          this.$modal.msgError(`上传文件大小不能超过 ${this.fileSize} MB!`);
-          return false;
-        }
-      }
-      this.$modal.loading("正在上传文件,请稍候...");
-      this.number++;
-      return true;
-    },
-    // 文件个数超出
-    handleExceed() {
-      this.$modal.msgError(`上传文件数量不能超过 ${this.limit} 个!`);
-    },
-    // 上传失败
-    handleUploadError(err) {
-      this.$modal.msgError("上传图片失败,请重试");
-      this.$modal.closeLoading()
-    },
-    // 上传成功回调
-    handleUploadSuccess(res) {
-      this.uploadList.push({ name: res.fileName, url: res.fileName });
-      if (this.uploadList.length === this.number) {
-        this.fileList = this.fileList.concat(this.uploadList);
-        this.uploadList = [];
-        this.number = 0;
-        this.$emit("input", this.listToString(this.fileList));
-        this.$modal.closeLoading();
-      }
-    },
-    // 删除文件
-    handleDelete(index) {
-      this.fileList.splice(index, 1);
-      this.$emit("input", this.listToString(this.fileList));
-    },
-    // 获取文件名称
-    getFileName(name) {
-      if (name.lastIndexOf("/") > -1) {
-        return name.slice(name.lastIndexOf("/") + 1);
-      } else {
-        return "";
-      }
-    },
-    // 对象转成指定字符串分隔
-    listToString(list, separator) {
-      let strs = "";
-      separator = separator || ",";
-      for (let i in list) {
-        strs += list[i].url + separator;
-      }
-      return strs != '' ? strs.substr(0, strs.length - 1) : '';
-    }
-  }
-};
+				if(this.index == -1){
+					this.$emit('input', this.fileList)
+				}else{
+					this.$emit('input', this.fileList, this.index)
+				}
+			}
+		},
+		watch: {
+			'file' () {
+				this.singleFile = this.file
+			},
+			'files' () {
+				this.fileList = this.files
+			}
+		}
+	}
 </script>
-
-<style scoped lang="scss">
-.upload-file-uploader {
-  margin-bottom: 5px;
-}
-.upload-file-list .el-upload-list__item {
-  border: 1px solid #e4e7ed;
-  line-height: 2;
-  margin-bottom: 10px;
-  position: relative;
-}
-.upload-file-list .ele-upload-list__item-content {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  color: inherit;
-}
-.ele-upload-list__item-content-action .el-link {
-  margin-right: 10px;
-}
-</style>

+ 1 - 1
src/components/ImageUpload/index.vue

@@ -77,7 +77,7 @@ export default {
       dialogVisible: false,
       hideUpload: false,
       baseUrl: process.env.VUE_APP_BASE_API,
-      uploadImgUrl: process.env.VUE_APP_BASE_API + "/common/upload", // 上传的图片服务器地址
+      uploadImgUrl: process.env.VUE_APP_BASE_API + "/common/attach/upload", // 上传的图片服务器地址
       headers: {
         Authorization: "Bearer " + getToken(),
       },

+ 36 - 0
src/router/index.js

@@ -99,6 +99,42 @@ export const constantRoutes = [
         meta: { title: '个人中心', icon: 'user' }
       }
     ]
+  },{
+    path: '/ent',
+    component: Layout,
+    hidden: true,
+    children: [
+      {
+        path: 'edit/:id',
+        component: (resolve) => require(['@/views/enterprise/ent/edit'], resolve),
+        name: 'EditEntInfo',
+        meta: { title: '修改企业信息'}
+      },
+      {
+        path: 'add',
+        component: (resolve) => require(['@/views/enterprise/ent/edit'], resolve),
+        name: 'AddEntInfo',
+        meta: { title: '新增企业信息'}
+      },
+      {
+        path: 'info/:id',
+        component: (resolve) => require(['@/views/enterprise/ent/info'], resolve),
+        name: 'ViewInfo',
+        meta: { title: '修改企业信息'}
+      },
+    ]
+  },{
+    path: '/project',
+    component: Layout,
+    hidden: true,
+    children: [
+      {
+        path: 'edit',
+        component: (resolve) => require(['@/views/enterprise/project/edit'], resolve),
+        name: 'editProject',
+        meta: { title: '修改项目信息'}
+      },
+    ]
   }
 ]
 

+ 12 - 2
src/store/modules/user.js

@@ -7,7 +7,9 @@ const user = {
     name: '',
     avatar: '',
     roles: [],
-    permissions: []
+    permissions: [],
+    scopeId: '',
+    userType: ''
   },
 
   mutations: {
@@ -25,6 +27,12 @@ const user = {
     },
     SET_PERMISSIONS: (state, permissions) => {
       state.permissions = permissions
+    },
+    SET_SCOPEID: (state, scopeId) => {
+      state.scopeId = scopeId
+    },
+    SET_USERTYPE: (state, userType) => {
+      state.userType = userType
     }
   },
 
@@ -59,7 +67,9 @@ const user = {
             commit('SET_ROLES', ['ROLE_DEFAULT'])
           }
           commit('SET_NAME', user.userName)
-          commit('SET_AVATAR', avatar)
+          commit('SET_AVATAR', avatar)
+          commit('SET_SCOPEID', user.scopeId)
+          commit('SET_USERTYPE', user.userType)
           resolve(res)
         }).catch(error => {
           reject(error)

+ 80 - 0
src/utils/dataFormat.js

@@ -0,0 +1,80 @@
+export const regTypeOptions = [
+  { dictLabel: '有限责任公司', dictValue: '1'},
+  { dictLabel: '股份有限公司', dictValue: '2'},
+  { dictLabel: '外资投资企业', dictValue: '3'},
+  { dictLabel: '国企', dictValue: '4'},
+  { dictLabel: '独资企业', dictValue: '5'},
+  { dictLabel: '个体工商户', dictValue: '6'},
+  { dictLabel: '联营企业', dictValue: '7'},
+  { dictLabel: '集团所有制', dictValue: '8'},
+  { dictLabel: '有限合伙', dictValue: '9'},
+  { dictLabel: '普通合伙', dictValue: '10'}
+]
+
+export const mainProductsOptions = [
+  { dictLabel: '电子信息', dictValue: '1'},
+  { dictLabel: '生物与新医药', dictValue: '2'},
+  { dictLabel: '航空航天', dictValue: '3'},
+  { dictLabel: '新能源及节能', dictValue: '4'},
+  { dictLabel: '新材料', dictValue: '5'},
+  { dictLabel: '先进制造', dictValue: '6'},
+  { dictLabel: '现代农业', dictValue: '7'},
+  { dictLabel: '高技术服务', dictValue: '8'},
+  { dictLabel: '资源与环境', dictValue: '9'},
+  { dictLabel: '高新技术改造传统产业', dictValue: '10'},
+  { dictLabel: '其他', dictValue: '11'}
+]
+
+export const techScopeOptions = [
+  { dictLabel: '电子信息', dictValue: '1'},
+  { dictLabel: '生物与新医药', dictValue: '2'},
+  { dictLabel: '航空航天', dictValue: '3'},
+  { dictLabel: '新材料', dictValue: '4'},
+  { dictLabel: '高新技术服务', dictValue: '5'},
+  { dictLabel: '新能源及节能', dictValue: '6'},
+  { dictLabel: '资源与环境', dictValue: '7'},
+  { dictLabel: '先进制造与自动化', dictValue: '8'},
+  { dictLabel: '其他', dictValue: '9'},
+]
+
+export const userListOptions = [
+  { dictLabel: '技术员', dictValue: 'ENT_TECH'},
+  { dictLabel: '技术负责人', dictValue: 'ENT_ADMIN_TECH'},
+  { dictLabel: '财务员', dictValue: 'ENT_FIN'},
+  { dictLabel: '财务负责人', dictValue: 'ENT_ADMIN_FIN'}
+]
+
+export const userAllListOptions = [
+  { dictLabel: '企业管理员', dictValue: 'ENT_ADMIN'},
+  { dictLabel: '技术员', dictValue: 'ENT_TECH'},
+  { dictLabel: '技术负责人', dictValue: 'ENT_ADMIN_TECH'},
+  { dictLabel: '财务员', dictValue: 'ENT_FIN'},
+  { dictLabel: '财务负责人', dictValue: 'ENT_ADMIN_FIN'}
+]
+/**
+ * 服务状态 1:待审核 2:服务中 3:已过期 4:冻结
+ */
+export const entStateOptions = [
+  { dictLabel: '待审核', dictValue: '1'},
+  { dictLabel: '服务中', dictValue: '2'},
+  { dictLabel: '已过期', dictValue: '3'},
+   {dictLabel: '冻结',dictValue: '4'}
+]
+
+/**
+ *
+ * 审核状态 1:待审核 2:通过 3:驳回
+ */
+
+export const authStateOptions =[
+  { dictLabel: '待审核', dictValue: '1'},
+  { dictLabel: '通过', dictValue: '2'},
+  { dictLabel: '驳回', dictValue: '3'}
+]
+export function getLabel(list, val) {
+  for (let i = 0; i < list.length; i++) {
+    if (val == list[i].dictValue) {
+      return list[i].dictLabel
+    }
+  }
+}

+ 8 - 0
src/views/account/index.vue

@@ -0,0 +1,8 @@
+<template>
+</template>
+
+<script>
+</script>
+
+<style>
+</style>

+ 472 - 79
src/views/common/registerFirst.vue

@@ -1,52 +1,323 @@
 <template>
   <div class="register">
-    <el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form" label-width="auto">
-      <h3 class="title">账户信息</h3>
-      <el-form-item label="账户名称" prop="username">
-        <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号">
-        </el-input>
-      </el-form-item>
-      <el-form-item label="密码" prop="password">
-        <el-input
-          v-model="registerForm.password"
-          type="password"
-          auto-complete="new-password"
-          placeholder="密码"
-          @keyup.enter.native="handleRegister">
-        </el-input>
-      </el-form-item>
-      <el-form-item label="确认密码" prop="confirmPassword">
-        <el-input
-          v-model="registerForm.confirmPassword"
-          type="password"
-          auto-complete="new-password"
-          placeholder="确认密码"
-          @keyup.enter.native="handleRegister">
-        </el-input>
-      </el-form-item>
-      <el-form-item label="姓名" prop="username">
-        <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="姓名">
-        </el-input>
-      </el-form-item>
-      <el-form-item label="手机号码" prop="username">
-        <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="手机号码">
-        </el-input>
-      </el-form-item>
-      <el-form-item label="邮箱地址" prop="username">
-        <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="邮箱地址">
-        </el-input>
-      </el-form-item>
-      <el-form-item style="width:100%;text-align: center;">
-        <el-button
-          :loading="loading"
-          size="medium"
-          type="primary"
-          @click.native.prevent="handleRegister" style="width: 100px;">
-          <span v-if="!loading">下一步</span>
-          <span v-else>注 册 中...</span>
-        </el-button>
-        <el-button size="medium" type="primary" style="width: 100px;">取消</el-button>
-      </el-form-item>
+    <el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form" label-width="160px">
+      <h3 class="title">注册信息</h3>
+      <el-collapse v-model="activeName">
+        <el-collapse-item title="账户信息" name="1">
+          <el-row :gutter="40">
+            <el-col :span="12">
+              <el-form-item label="账户名称" prop="userName">
+                <el-input v-model="registerForm.userName" type="text" auto-complete="off" placeholder="账号">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="密码" prop="password">
+                <el-input
+                  v-model="registerForm.password"
+                  type="password"
+                  auto-complete="new-password"
+                  placeholder="密码">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="确认密码" prop="confirmPassword">
+                <el-input
+                  v-model="registerForm.confirmPassword"
+                  type="password"
+                  auto-complete="new-password"
+                  placeholder="确认密码">
+                </el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-collapse-item>
+        <el-collapse-item title="账户联系人信息" name="2">
+          <el-row :gutter="40">
+            <el-col :span="12">
+              <el-form-item label="姓名" prop="nickName">
+                <el-input v-model="registerForm.nickName" type="text" auto-complete="off" placeholder="姓名">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="手机号码" prop="phonenumber">
+                <el-input v-model="registerForm.phonenumber" type="text" auto-complete="off" placeholder="手机号码">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="邮箱地址" prop="email">
+                <el-input v-model="registerForm.email" type="text" auto-complete="off" placeholder="邮箱地址">
+                </el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-collapse-item>
+        <el-collapse-item title="企业信息" name="3">
+          <el-row :gutter="40">
+            <el-col :span="12">
+              <el-form-item label="企业名称" prop="entName">
+                <el-input v-model="registerForm.entName" type="text" auto-complete="off" placeholder="请输入企业名称">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="统一社会信用代码" prop="license">
+                <el-input type="text"
+                  v-model="registerForm.license"
+                  placeholder="请输入统一社会信用代码">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="注册资金" prop="regCapital">
+                <el-input type="text"
+                  v-model="registerForm.regCapital"
+                  placeholder="请输入注册资金">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="工商注册时间" prop="regDate">
+                <el-date-picker v-model="registerForm.regDate" type="date" placeholder="选择日期" value-format="yyyy-MM-dd"></el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="工商注册类型" prop="regType">
+                <el-select v-model="registerForm.regType" filterable>
+                  <el-option v-for="item in regTypeOptions" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="主营产品(服务)所属技术领域" prop="mainProductArray">
+                <el-checkbox-group v-model="registerForm.mainProductArray">
+                  <el-checkbox v-for="(item, index) in mainProductsOptions" :label="item.dictLabel" :key="index">{{item.dictLabel}}</el-checkbox>
+                </el-checkbox-group>
+
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="通信地址" prop="address">
+                <el-input v-model="registerForm.address" type="text" auto-complete="off" placeholder="请输入通信地址">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="邮政编码" prop="zipCode">
+                <el-input v-model="registerForm.zipCode" type="text" auto-complete="off" placeholder="请输入邮政编码">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="企业所属行政区域" prop="provinceId">
+                <el-select v-model="registerForm.provinceId" placeholder="省" @change="getCityData" style="width: 220px;" filterable>
+                  <el-option v-for="(item,index) in provinceDataList" :key="index" :label="item.name" :value="item.id"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="7">
+              <el-form-item prop="cityId" label-width="60px">
+                <el-select v-model="registerForm.cityId" placeholder="市" @change="getDistrictData" style="width: 220px;" filterable>
+                  <el-option v-for="(item, index) in cityDataList" :key="index" :label="item.name" :value="item.id"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label-width="0px" prop="districtId">
+                <el-select v-model="registerForm.districtId" placeholder="区" style="width: 220px;" filterable>
+                  <el-option v-for="(item, index) in districtDataList" :key="index" :label="item.name" :value="item.id"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="企业所得税主管税务机关" prop="taxOffice">
+                <el-input v-model="registerForm.taxOffice" type="text" auto-complete="off" placeholder="请输入企业所得税主管税务机关">
+                </el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-collapse-item>
+        <el-collapse-item title="法人信息" name="4">
+          <el-row :gutter="40">
+            <el-col :span="12">
+              <el-form-item label="姓名" prop="legalName">
+                <el-input v-model="registerForm.legalName" type="text" auto-complete="off" placeholder="请输入法人姓名">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="身份证号码" prop="legalIdCard">
+                <el-input v-model="registerForm.legalIdCard" type="text" auto-complete="off" placeholder="请输入法人身份证号码">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="手机号码" prop="legalMobile">
+                <el-input v-model="registerForm.legalMobile" type="text" auto-complete="off" placeholder="手机号码">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="固定电话" prop="legalPhone">
+                <el-input v-model="registerForm.legalPhone" type="text" auto-complete="off" placeholder="请输入固定电话">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="传真" prop="legalFax">
+                <el-input v-model="registerForm.legalFax" type="text" auto-complete="off" placeholder="请输入法人传真">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="E-mail" prop="legalEmail">
+                <el-input v-model="registerForm.legalEmail" type="text" auto-complete="off" placeholder="请输入法人邮箱">
+                </el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-collapse-item>
+        <el-collapse-item title="联系人信息" name="5">
+          <el-row :gutter="40">
+            <el-col :span="12">
+              <el-form-item label="姓名" prop="linkName">
+                <el-input v-model="registerForm.linkName" type="text" auto-complete="off" placeholder="请输入联系人姓名">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="身份证号码" prop="linkIdCard">
+                <el-input v-model="registerForm.linkIdCard" type="text" auto-complete="off" placeholder="请输入联系人身份证号码">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="手机号码" prop="linkMobile">
+                <el-input v-model="registerForm.linkMobile" type="text" auto-complete="off" placeholder="请填入手机号码">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="固定电话" prop="linkPhone">
+                <el-input v-model="registerForm.linkPhone" type="text" auto-complete="off" placeholder="请输入联系人固定电话">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="传真" prop="linkFax">
+                <el-input v-model="registerForm.linkFax" type="text" auto-complete="off" placeholder="请输入联系人传真">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="E-mail" prop="linkEmail">
+                <el-input v-model="registerForm.linkEmail" type="text" auto-complete="off" placeholder="请输入联系人邮箱">
+                </el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-collapse-item>
+        <el-collapse-item title="企业上市信息" name="6">
+          <el-row :gutter="40">
+            <el-col :span="12">
+              <el-form-item label="企业是否上市" prop="listedFlag">
+                <el-radio-group v-model="registerForm.listedFlag">
+                  <el-radio label="1">是</el-radio>
+                  <el-radio label="0">否</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="企业上市代码" prop="listingCode">
+                <el-input v-model="registerForm.listingCode" type="text" auto-complete="off" placeholder="请输入企业上市代码">
+                </el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-collapse-item>
+        <el-collapse-item title="风险投资信息" name="7">
+          <el-row :gutter="40">
+            <el-col :span="12">
+              <el-form-item label="是否引入风险投资" prop="investFlag">
+                <el-radio-group v-model="registerForm.investFlag">
+                  <el-radio label="1">是</el-radio>
+                  <el-radio label="0">否</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="风险投资金额" prop="investCapital">
+                <el-input v-model="registerForm.investCapital" type="text" auto-complete="off" placeholder="请输入风险投资金额">
+                </el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-collapse-item>
+        <el-collapse-item title="高新企业" name="8">
+          <el-row :gutter="40">
+            <el-col :span="12">
+              <el-form-item label="是否为高新企业" prop="techFlag">
+                <el-radio-group v-model="registerForm.techFlag">
+                  <el-radio label="1">是</el-radio>
+                  <el-radio label="0">否</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="高新企业编号" prop="techCode">
+                <el-input v-model="registerForm.techCode" type="text" auto-complete="off" placeholder="请输入高新企业编号">
+                </el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-collapse-item>
+        <el-collapse-item title="上年度是否做加计扣除" name="9">
+          <el-row :gutter="40">
+            <el-col :span="12">
+              <el-form-item label="是否引入风险投资" prop="deductionFlag">
+                <el-radio-group v-model="registerForm.deductionFlag">
+                  <el-radio label="1">是</el-radio>
+                  <el-radio label="0">否</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-collapse-item>
+        <el-collapse-item title="附件" name="10">
+          <el-form-item label="企业营业执照" prop="licensePath">
+            <FileUpload :file="{url: registerForm.licensePath, name: registerForm.fileName}" @input="handleSuccess">上传材料</FileUpload>
+          </el-form-item>
+          <el-form-item label="其他附件" prop="attachIds">
+            <FileUpload :files="registerForm.attachIds" @input="handleSaleSuccess" :multiple="true">上传材料</FileUpload>
+          </el-form-item>
+        </el-collapse-item>
+        <el-collapse-item title="文件水印" name="11">
+        </el-collapse-item>
+        <el-collapse-item title="服务时间" name="12">
+          <el-form-item label="服务时间段" prop="serviceDate">
+            <el-date-picker v-model="serviceDate" placeholder="选择日期" type="daterange" value-format="yyyy-MM-dd" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
+          </el-form-item>
+        </el-collapse-item>
+      </el-collapse>
+      <el-row :gutter="40">
+        <el-col :span="24">
+          <el-form-item style="width:100%;text-align: center;" label-width="0px">
+            <el-button
+              :loading="loading"
+              size="medium"
+              type="primary"
+              @click.native.prevent="handleRegister" style="width: 100px;">
+              <span v-if="!loading">下一步</span>
+              <span v-else>注 册 中...</span>
+            </el-button>
+            <el-button size="medium" type="primary" style="width: 100px;">取消</el-button>
+          </el-form-item>
+        </el-col>
+      </el-row>
+
     </el-form>
     <!--  底部  -->
     <div class="el-register-footer">
@@ -55,11 +326,18 @@
   </div>
 </template>
 
-<script>
-import { getCodeImg, register } from "@/api/login";
+<script>
+
+import { getCodeImg, registerEntApi } from "@/api/login";
+import {getProvinceDataApi,getRegionChildrenApi} from "@/api/common/common"
+import { regTypeOptions,mainProductsOptions,signatoriesOptions } from "@/utils/dataFormat"
+import FileUpload from '@/components/FileUpload'
 
 export default {
-  name: "First",
+  name: "First",
+  components: {
+    FileUpload
+  },
   data() {
     const equalToPassword = (rule, value, callback) => {
       if (this.registerForm.password !== value) {
@@ -68,14 +346,33 @@ export default {
         callback();
       }
     };
-    return {
-      codeUrl: "",
-      registerForm: {
+    return {
+      activeName: '1',
+      serviceDate: [],
+      provinceName: '',
+      cityName: '',
+      districtName: '',
+      codeUrl: "",
+      regTypeOptions: regTypeOptions,
+      mainProductsOptions: mainProductsOptions,
+      signatoriesOptions: signatoriesOptions,
+      provinceDataList: [],
+      cityDataList: [],
+      districtDataList: [],
+      registerForm: {
+        startDate: '',
+        endDate: '',
+        attachIds: [],
+        provinceId: '',
+        cityId: '',
+        districtId: '',
+        mainProductArray: [],
+        mainProducts: '',
         username: "",
         password: "",
         confirmPassword: "",
         code: "",
-        uuid: ""
+        // uuid: ""
       },
       registerRules: {
         username: [
@@ -97,9 +394,46 @@ export default {
     };
   },
   created() {
-    this.getCode();
+    this.getCode();
+    this.getProvinceData()
   },
-  methods: {
+  methods: {
+    handleSuccess(file) {
+      console.log(file)
+      this.registerForm.licensePath = file.url;
+      this.registerForm.fileName = file.name;
+    },
+    handleSaleSuccess(files) {
+      files.forEach(item => {
+        this.registerForm.attachIds.push(item.response.data.id)
+      });
+    },
+    //选择省份
+    getCityData() {
+      this.registerForm.cityId = ''
+      this.registerForm.districtId = ''
+      getRegionChildrenApi(this.registerForm.provinceId).then(res => {
+        if(res.code == 200) {
+          this.cityDataList = res.data
+        }
+      })
+    },
+    //选择市
+    getDistrictData() {
+      this.registerForm.districtId = ''
+      getRegionChildrenApi(this.registerForm.cityId).then(res => {
+        if(res.code == 200) {
+          this.districtDataList = res.data
+        }
+      })
+    },
+    getProvinceData() {
+      getProvinceDataApi().then(res => {
+        if(res.code == 200) {
+          this.provinceDataList = res.data
+        }
+      })
+    },
     getCode() {
       getCodeImg().then(res => {
         this.captchaOnOff = res.captchaOnOff === undefined ? true : res.captchaOnOff;
@@ -110,28 +444,45 @@ export default {
       });
     },
     handleRegister() {
-      this.$router.push("/registerSecond");
-      // this.$refs.registerForm.validate(valid => {
-      //   if (valid) {
-      //     this.loading = true;
-      //     register(this.registerForm).then(res => {
-      //       const username = this.registerForm.username;
-      //       this.$alert("<font color='red'>恭喜你,您的账号 " + username + " 注册成功!</font>", '系统提示', {
-      //         dangerouslyUseHTMLString: true,
-      //         type: 'success'
-      //       }).then(() => {
-      //         this.$router.push("/login");
-      //       }).catch(() => {});
-      //     }).catch(() => {
-      //       this.loading = false;
-      //       if (this.captchaOnOff) {
-      //         this.getCode();
-      //       }
-      //     })
-      //   }
-      // });
+      this.registerForm.mainProducts = this.registerForm.mainProductArray.join(',')
+      this.$refs.registerForm.validate(valid => {
+        if (valid) {
+          this.loading = true;
+          registerEntApi(this.registerForm).then(res => {
+            const username = this.registerForm.username;
+            this.$alert("<font color='red'>恭喜你,您的账号 " + username + " 注册成功!</font>", '系统提示', {
+              dangerouslyUseHTMLString: true,
+              type: 'success'
+            }).then(() => {
+              this.$router.push("/login");
+            }).catch(() => {});
+          }).catch(() => {
+            this.loading = false;
+            if (this.captchaOnOff) {
+              this.getCode();
+            }
+          })
+        }
+      });
     }
-  }
+  },
+  watch: {
+    'registerForm.provinceId' (val) {
+    	if (this.registerForm.provinceId) {
+    		let obj = this.provinceDataList.find(item => {
+          return item.id == this.registerForm.provinceId
+        })
+        this.provinceName = obj.name
+        this.registerForm.taxOffice = '国家税务总局'+this.provinceName+'税务局'
+    	}
+    },
+    'resetForm.serviceDate'(val) {
+      if(this.serviceDate) {
+        this.resetForm.startDate = this.serviceDate[0]
+        this.registerForm.endDate = this.servideDate[1]
+      }
+    }
+   }
 };
 </script>
 
@@ -140,7 +491,10 @@ export default {
   display: flex;
   justify-content: center;
   align-items: center;
-  height: 100%;
+  // height: 100%;
+  height: 900px;
+  overflow-y: auto;
+  scroll-behavior: auto;
   background-image: url("../../assets/images/login-background.jpg");
   background-size: cover;
 }
@@ -153,7 +507,9 @@ export default {
 .register-form {
   border-radius: 6px;
   background: #ffffff;
-  width: 600px;
+  width: 1200px;
+  height: 800px;
+  overflow-y: auto;
   padding: 25px 25px 5px 25px;
   .el-input {
     height: 38px;
@@ -195,5 +551,42 @@ export default {
 }
 .register-code-img {
   height: 38px;
+}
+/* =============自定义样式============== */
+$border: #ddd;
+/* 工具栏 */
+.toolbar {
+  margin: 0 0 15px;
+  &>.title {
+    position: relative;
+    padding-left: 15px;
+    margin-right: 15px;
+    font-size: 16px;
+    line-height: 28px;
+    font-weight: bold;
+    color: #363636;
+    &:before {
+      content: "";
+      display: block;
+      position: absolute;
+      left: 0;
+      top: 50%;
+      transform: translate(0, -50%);
+      width: 5px;
+      height: 16px;
+      background-color: #409EFF;
+    }
+  }
+  &:after {
+    content: "";
+    clear: both;
+    display: block;
+  }
+  &>.tip {
+    display: inline-block;
+    font-size: 14px;
+    font-weight: normal;
+    color: #666;
+  }
 }
 </style>

+ 16 - 5
src/views/common/registerSecond.vue

@@ -103,6 +103,9 @@
       <el-form-item label="上年度是否做加计扣除" prop="username">
         <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="手机号码">
         </el-input>
+      </el-form-item>
+      <el-form-item label="省市区">
+        <el-cascader placeholder="请选择省份" :options="options" filterable></el-cascader>
       </el-form-item>
       <el-form-item style="width:100%;text-align: center;">
         <el-button
@@ -124,7 +127,8 @@
 </template>
 
 <script>
-import { getCodeImg, register } from "@/api/login";
+import { getCodeImg, register } from "@/api/login";
+import {getProvinceDataApi} from "@/api/common/common"
 
 export default {
   name: "First",
@@ -136,7 +140,8 @@ export default {
         callback();
       }
     };
-    return {
+    return {
+      options: [],
       codeUrl: "",
       registerForm: {
         username: "",
@@ -165,9 +170,15 @@ export default {
     };
   },
   created() {
-    this.getCode();
+    this.getCode();
+    this.getProvinceData();
   },
-  methods: {
+  methods: {
+    getProvinceData() {
+      getProvinceDataApi().then(res => {
+        console.log(res)
+      })
+    },
     getCode() {
       getCodeImg().then(res => {
         this.captchaOnOff = res.captchaOnOff === undefined ? true : res.captchaOnOff;
@@ -221,7 +232,7 @@ export default {
 .register-form {
   border-radius: 6px;
   background: #ffffff;
-  width: 600px;
+  width: 1000px;
   padding: 25px 25px 5px 25px;
   .el-input {
     height: 38px;

+ 28 - 0
src/views/components/region/region.vue

@@ -0,0 +1,28 @@
+<template>
+  <div>
+    <el-cascader placeholder="请选择省份" :options="options" filterable></el-cascader>
+  </div>
+</template>
+
+<script>
+  import {getProvinceDataApi} from "@/api/common/common"
+
+  export default {
+    name: 'Region',
+    data () {
+      return {
+        options: []
+      }
+    },
+    methods: {
+      getProvinceData() {
+        getProvinceDataApi().then(res => {
+          console.log(res)
+        })
+      }
+    }
+  }
+</script>
+
+<style>
+</style>

+ 215 - 0
src/views/enterprise/declare/index.vue

@@ -1,7 +1,222 @@
 <template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" size="small" label-width="100px">
+      <el-form-item label="省" prop="provinceId">
+        <el-select v-model="queryParams.provinceId" placeholder="请选择省" @change="getCityData" filterable style="width: 200px;">
+          <el-option v-for="(item,index) in provinceDataList" :key="index" :label="item.name" :value="item.id"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="市" prop="cityId">
+        <el-select v-model="queryParams.cityId" placeholder="请选择市" @change="getDistrictData" filterable style="width: 200px;">
+          <el-option v-for="(item, index) in cityDataList" :key="index" :label="item.name" :value="item.id"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="区" prop="districtId">
+        <el-select v-model="queryParams.districtId" placeholder="请选择区" filterable style="width: 200px;">
+          <el-option v-for="(item, index) in districtDataList" :key="index" :label="item.name" :value="item.id"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="年份">
+        <el-date-picker v-model="queryParams.year" type="year" placeholder="选择年" style="width: 200px;"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="企业名称">
+        <el-input v-model="queryParams.entName" clearable style="width: 200px;"></el-input>
+      </el-form-item>
+      <el-form-item label="社会信用代码">
+        <el-input v-model="queryParams.license" style="width: 200px;"></el-input>
+      </el-form-item>
+      <el-form-item label="项目编号">
+        <el-input v-model="queryParams.projectNo" style="width: 200px;"></el-input>
+      </el-form-item>
+      <el-form-item label="项目名称">
+        <el-input v-model="queryParams.projectName" style="width: 200px;"></el-input>
+      </el-form-item>
+      <el-form-item label="服务状态">
+        <el-select v-model="queryParams.entState" style="width: 200px;">
+          <el-option v-for="(item, index) in entStateOptions" :key="index" :label="item.dictLabel" :value="item.dictValue"></el-option>
+        </el-select>
+      </el-form-item>
+
+      <el-form-item>
+        <el-button type="primary" @click="handleQuery">搜索</el-button>
+        <el-button @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <h3 class="toolbar">
+      <span class="title">列表</span>
+      <div class="tool">
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button>
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">批量新增</el-button>
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">模板下载</el-button>
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">一键上传</el-button>
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">下载</el-button>
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">批量删除</el-button>
+      </div>
+    </h3>
+    <el-table v-loading="loading" :data="list" border>
+      <el-table-column label="项目编号" prop="projectNo" width="120" align="center" />
+      <el-table-column label="项目名称" prop="projectName" align="center" width="120"></el-table-column>
+      <el-table-column label="企业名称" prop="entName" align="center" width="120"/>
+      <el-table-column label="社会信用代码" prop="license" align="center" width="120" />
+      <el-table-column label="项目年份" prop="projectYear" align="center" width="120" />
+      <el-table-column label="项目跨年" prop="overYearFlag" align="center" width="120"></el-table-column>
+      <el-table-column label="创建时间" align="center" prop="createTime" width="150"></el-table-column>
+      <el-table-column label="留存备查时间" prop="linkMobile" align="center" width="120"></el-table-column>
+      <el-table-column label="资料完善度" prop="linkEmail" align="center" width="120"></el-table-column>
+      <el-table-column label="负责状态" prop="createTime" align="center" width="160"></el-table-column>
+      <el-table-column label="项目状态" align="center" width="120">
+      </el-table-column>
+      <el-table-column label="操作" align="center" width="180" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button type="text" @click="handleView(scope.row)">查看</el-button>
+          <el-button type="text" @click="handleAudit(scope.row)" v-if="scope.row.authState == '1'">审核</el-button>
+          <template v-if="scope.row.authState == '2'">
+            <el-button type="text" @click="handleUpdate(scope.row)">修改</el-button>
+            <el-button type="text" @click="handleStop(scope.row)">停用</el-button>
+            <el-button type="text" @click="handleRemind(scope.row)">提醒</el-button>
+          </template>
+          <template v-if="scope.row.authState == '2' || scope.row.authState == '1'">
+            <el-button type="text" @click="handleDelete(scope.row)">删除</el-button>
+            <el-button type="text" @click="handleRePwd(scope.row)">重置密码</el-button>
+          </template>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+  </div>
 </template>
 
 <script>
+  import {getProvinceDataApi,getRegionChildrenApi} from "@/api/common/common"
+  import {listProjectApi, deleteEntApi} from '@/api/enterprise/project/project'
+  import {entStateOptions, getLabel, authStateOptions} from '@/utils/dataFormat'
+  // import Audit from './components/audit'
+  // import Info from './components/info'
+  export default {
+    components: {
+      // Audit,
+      // Info
+    },
+    data () {
+      return {
+        loading: false,
+        provinceDataList: [],
+        cityDataList: [],
+        districtDataList: [],
+        entStateOptions: entStateOptions,
+        authStateOptions: authStateOptions,
+        // 模板状态
+        // statusOptions: accessStatus,
+        dateRange: [],
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          provinceId: undefined,
+          cityId: undefined,
+          districtId: undefined
+        },
+        list: [],
+        total: 0,
+        open: false,
+        openInfo: false,
+      }
+    },
+    created() {
+      this.getList()
+      this.getProvinceData()
+    },
+    methods: {
+      //选择省份
+      getCityData() {
+        this.queryParams.cityId = ''
+        this.queryParams.districtId = ''
+        getRegionChildrenApi(this.queryParams.provinceId).then(res => {
+          if(res.code == 200) {
+            this.cityDataList = res.data
+          }
+        })
+      },
+      //选择市
+      getDistrictData() {
+        this.queryParams.districtId = ''
+        getRegionChildrenApi(this.queryParams.cityId).then(res => {
+          if(res.code == 200) {
+            this.districtDataList = res.data
+          }
+        })
+      },
+      getProvinceData() {
+        getProvinceDataApi().then(res => {
+          if(res.code == 200) {
+            this.provinceDataList = res.data
+          }
+        })
+      },
+      getList() {
+        this.loading = true;
+        listProjectApi(this.queryParams).then(response => {
+          this.list = response.data.records;
+          this.total = response.data.total;
+          this.loading = false;
+        });
+      },
+      handleAdd() {
+        this.$router.push("/ent/add")
+      },
+      handleUpdate(row) {
+        this.$router.push("/ent/edit/"+row.id)
+      },
+      // 审核
+      handleAudit(row) {
+        this.$router.push("/ent/info/"+row.id+'?type=audit')
+      },
+      // 查看
+      handleView(row) {
+        this.$router.push("/ent/info/"+row.id+'?type=view')
+      },
+      handleDelete(row) {
+        const id = row.id;
+        this.$confirm('是否确认删除该数据?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+            return deleteEntApi(id);
+          }).then(() => {
+            this.queryParams.pageNum = 1;
+            this.getList();
+            this.msgSuccess("删除成功");
+          })
+      },
+      // 重置
+      resetQuery() {
+        this.dateRange = [];
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      // 搜索
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      statusFormat(row, col, val, index) {
+        return getLabel(accessStatus, val)
+      },
+      entSateFormat(row, col, val, index) {
+        return getLabel(entStateOptions, val)
+      },
+      authStateFormat(row, col, val, index) {
+        return getLabel(authStateOptions, val)
+      }
+    }
+  }
 </script>
 
 <style>

+ 332 - 0
src/views/enterprise/employee/index.vue

@@ -0,0 +1,332 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
+      <el-form-item label="登录账号" prop="userName">
+        <el-input
+          v-model="queryParams.userName"
+          placeholder="请输入登录账号"
+          clearable
+          style="width: 240px"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="姓名" prop="nickName">
+        <el-input
+          v-model="queryParams.nickName"
+          placeholder="请输入姓名"
+          clearable
+          style="width: 240px"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="手机号" prop="mobile">
+        <el-input
+          v-model="queryParams.mobile"
+          placeholder="请输入手机号"
+          clearable
+          style="width: 240px"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+        >新增</el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="roleList">
+      <el-table-column label="登录账号" prop="userName" width="150" />
+      <el-table-column label="姓名" prop="nickName" width="150" />
+      <el-table-column label="手机号码" prop="phonenumber" width="150" />
+      <el-table-column label="邮箱" prop="email" width="180" />
+      <el-table-column label="用户角色" prop="userType" width="150" :formatter="userTypeFormat"/>
+      <el-table-column label="状态" align="center" width="100">
+        <template slot-scope="scope">
+          <el-switch
+            v-model="scope.row.status"
+            active-value="0"
+            inactive-value="1"
+            @change="handleStatusChange(scope.row)"
+          ></el-switch>
+        </template>
+      </el-table-column>
+      <el-table-column label="创建时间" align="center" prop="createTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.createTime) }}</span>
+        </template>
+      </el-table-column>
+     <el-table-column label="操作" align="center" width="180" class-name="small-padding fixed-width">
+       <template slot-scope="scope">
+         <el-button type="text" @click="handleUpdate(scope.row)" v-hasPermi="['system:user:query']">修改</el-button>
+         <el-button type="text" @click="handleDelete(scope.row)">删除</el-button>
+         <el-button type="text" @click="handleReset(scope.row)">重置密码</el-button>
+       </template>
+     </el-table-column>
+    </el-table>
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"/>
+
+      <!-- 添加或修改用户配置对话框 -->
+      <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
+        <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+          <el-row>
+            <el-col :span="12">
+              <el-form-item label="用户昵称" prop="nickName">
+                <el-input v-model="form.nickName" placeholder="请输入用户昵称" maxlength="30" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="用户角色">
+                <el-select v-model="form.userType" placeholder="请选择用户角色">
+                  <el-option
+                    v-for="(item, index) in userListOptions"
+                    :key="index"
+                    :label="item.dictLabel"
+                    :value="item.dictValue"
+                  ></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="12">
+              <el-form-item label="手机号码" prop="phonenumber">
+                <el-input v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="邮箱" prop="email">
+                <el-input v-model="form.email" placeholder="请输入邮箱" maxlength="50" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="12">
+              <el-form-item label="用户名称" prop="userName">
+                <el-input v-model="form.userName" placeholder="请输入用户名称" maxlength="30" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="用户密码" prop="password">
+                <el-input v-model="form.password" placeholder="请输入用户密码" type="password" maxlength="20" show-password/>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="12">
+              <el-form-item label="用户性别">
+                <el-select v-model="form.sex" placeholder="请选择性别">
+                  <el-option
+                    v-for="dict in dict.type.sys_user_sex"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                  ></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="状态">
+                <el-radio-group v-model="form.status">
+                  <el-radio
+                    v-for="dict in dict.type.sys_normal_disable"
+                    :key="dict.value"
+                    :label="dict.value"
+                  >{{dict.label}}</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="24">
+              <el-form-item label="备注">
+                <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listUserApi,addRoleApi,updateUserApi } from "@/api/enterprise/employee/employee"
+import { changeUserStatus, getUser } from "@/api/system/user";
+import { userListOptions, getLabel,userAllListOptions } from "@/utils/dataFormat"
+
+export default {
+  name: "Role",
+  dicts: ['sys_normal_disable', 'sys_user_sex'],
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 角色表格数据
+      roleList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 日期范围
+      dateRange: [],
+      userListOptions: userListOptions,
+      userAllListOptions: userAllListOptions,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        userName: undefined,
+        nickName: undefined,
+        mobile: undefined
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        roleName: [
+          { required: true, message: "角色名称不能为空", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询角色列表 */
+    getList() {
+      this.loading = true;
+      listUserApi(this.queryParams).then(res => {
+        this.loading = false;
+        if(res.code == 200) {
+          this.roleList = res.data.records;
+          this.total = res.data.total;
+        }
+      });
+    },
+    // 角色状态修改
+    handleStatusChange(row) {
+      let text = row.status === "0" ? "启用" : "停用";
+      this.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?').then(function() {
+        return changeUserStatus(row.userId, row.status);
+      }).then(() => {
+        this.$modal.msgSuccess(text + "成功");
+      }).catch(function() {
+        row.status = row.status === "0" ? "1" : "0";
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        roleId: undefined,
+        roleName: undefined,
+        status: "0",
+        remark: undefined
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加用户";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const userId = row.userId;
+      getUser(userId).then(response => {
+        this.form = response.data;
+        // this.postOptions = response.posts;
+        // this.roleOptions = response.roles;
+        // this.form.postIds = response.postIds;
+        // this.form.roleIds = response.roleIds;
+        this.open = true;
+        this.title = "修改用户";
+        this.form.password = "";
+      });
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.userId != undefined) {
+            updateUserApi(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addRoleApi(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const roleIds = row.roleId || this.ids;
+      this.$modal.confirm('是否确认删除角色编号为"' + roleIds + '"的数据项?').then(function() {
+        return delRole(roleIds);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    handleReset(row) {
+
+    },
+    userTypeFormat(row, col, val, index) {
+      return getLabel(userAllListOptions, val)
+    }
+  }
+};
+</script>

+ 80 - 0
src/views/enterprise/ent/components/audit.vue

@@ -0,0 +1,80 @@
+<template>
+  <el-dialog title="审核通过" :visible.sync="open" width="800px" append-to-body>
+    <el-form ref="form" :model="form" :rules="rules" label-width="140px">
+        <el-form-item label="服务时间段" prop="serviceTime">
+          <el-date-picker v-model="form.serviceTime" placeholder="选择日期" type="daterange" value-format="yyyy-MM-dd" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
+        </el-form-item>
+    </el-form>
+    <div slot="footer" class="dialog-footer">
+      <el-button type="primary" :disabled="disabled" @click="submitForm">确 定</el-button>
+      <el-button @click="cancel">取 消</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+  import {auditEntApi} from "@/api/admin/ent/ent"
+  export default {
+    data () {
+      return {
+        open: false,
+        disabled: false,
+        form: {
+          serviceTime: [],
+          authState: '2',
+          endDate: '',
+          startDate: ''
+        },
+        rules: {
+          checkStatus: [
+            {required: true, message: '请选择审核结果', trigger: 'change'}
+          ],
+          serviceTime: [
+            {required: true, message: '请设置服务时间段', trigger: 'change'}
+          ]
+        }
+      }
+    },
+    methods: {
+      init(id) {
+        this.open = true;
+        this.form.id = id;
+      },
+      submitForm() {
+        this.$refs.form.validate(valid => {
+          if (valid) {
+            this.disabled = true
+            auditEntApi(this.form).then(res => {
+              this.disabled = false;
+              if(res.code == 200) {          
+                this.$message({
+                  message: '审核通过成功',
+                  type: 'success'
+                });    
+              }
+              this.open = false;
+              this.$emit('refreshData');
+            })
+          }
+        })
+      },
+      cancel() {
+        this.open = false
+      },
+    },
+    watch: {
+      "form.serviceTime"(val) {
+        if(this.form.serviceTime) {
+          this.form.startDate = this.form.serviceTime[0]
+          this.form.endDate = this.form.serviceTime[1]
+        }else {
+          this.form.startDate = ''
+          this.form.endDate = ''
+        }
+      }
+    }
+  }
+</script>
+
+<style>
+</style>

+ 545 - 0
src/views/enterprise/ent/edit.vue

@@ -0,0 +1,545 @@
+<template>
+  <div class="app-container" v-loading="loading">
+    <el-form ref="form" :model="form" :rules="registerRules" label-width="170px">
+      <h3 class="toolbar">
+        <span class="title">账户信息</span>
+      </h3>
+          <el-row :gutter="40">
+            <el-col :span="12">
+              <el-form-item label="账户名称" prop="userName">
+                <el-input v-model="form.userName" type="text" auto-complete="off" placeholder="账号">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="密码" prop="password">
+                <el-input
+                  v-model="form.password"
+                  type="password"
+                  auto-complete="new-password"
+                  placeholder="密码">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="确认密码" prop="confirmPassword">
+                <el-input
+                  v-model="form.confirmPassword"
+                  type="password"
+                  auto-complete="new-password"
+                  placeholder="确认密码">
+                </el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <h3 class="toolbar">
+            <span class="title">账户联系人信息</span>
+          </h3>
+
+          <el-row :gutter="40">
+            <el-col :span="12">
+              <el-form-item label="姓名" prop="nickName">
+                <el-input v-model="form.nickName" type="text" auto-complete="off" placeholder="姓名">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="手机号码" prop="phonenumber">
+                <el-input v-model="form.phonenumber" type="text" auto-complete="off" placeholder="手机号码">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="邮箱地址" prop="email">
+                <el-input v-model="form.email" type="text" auto-complete="off" placeholder="邮箱地址">
+                </el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <h3 class="toolbar">
+            <span class="title">企业信息</span>
+          </h3>
+
+          <el-row :gutter="40">
+            <el-col :span="12">
+              <el-form-item label="企业名称" prop="entName">
+                <el-input v-model="form.entName" type="text" auto-complete="off" placeholder="请输入企业名称">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="统一社会信用代码" prop="license">
+                <el-input type="text"
+                  v-model="form.license"
+                  placeholder="请输入统一社会信用代码">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="注册资金" prop="regCapital">
+                <el-input type="text"
+                  v-model="form.regCapital"
+                  placeholder="请输入注册资金">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="工商注册时间" prop="regDate">
+                <el-date-picker v-model="form.regDate" type="date" placeholder="选择日期" value-format="yyyy-MM-dd"></el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="工商注册类型" prop="regType">
+                <el-select v-model="form.regType" filterable>
+                  <el-option v-for="item in regTypeOptions" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="主营产品(服务)所属技术领域" prop="mainProductArray">
+                <el-checkbox-group v-model="form.mainProductArray">
+                  <el-checkbox v-for="(item, index) in mainProductsOptions" :label="item.dictLabel" :key="index">{{item.dictLabel}}</el-checkbox>
+                </el-checkbox-group>
+
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="通信地址" prop="address">
+                <el-input v-model="form.address" type="text" auto-complete="off" placeholder="请输入通信地址">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="邮政编码" prop="zipCode">
+                <el-input v-model="form.zipCode" type="text" auto-complete="off" placeholder="请输入邮政编码">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="企业所属行政区域" prop="provinceId">
+                <el-select v-model="form.provinceId" placeholder="省" @change="getCityData" style="width: 220px;" filterable>
+                  <el-option v-for="(item,index) in provinceDataList" :key="index" :label="item.name" :value="item.id"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="7">
+              <el-form-item prop="cityId" label-width="60px">
+                <el-select v-model="form.cityId" placeholder="市" @change="getDistrictData" style="width: 220px;" filterable>
+                  <el-option v-for="(item, index) in cityDataList" :key="index" :label="item.name" :value="item.id"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label-width="0px" prop="districtId">
+                <el-select v-model="form.districtId" placeholder="区" style="width: 220px;" filterable>
+                  <el-option v-for="(item, index) in districtDataList" :key="index" :label="item.name" :value="item.id"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="企业所得税主管税务机关" prop="taxOffice">
+                <el-input v-model="form.taxOffice" type="text" auto-complete="off" placeholder="请输入企业所得税主管税务机关">
+                </el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <h3 class="toolbar">
+            <span class="title">法人信息</span>
+          </h3>
+
+          <el-row :gutter="40">
+            <el-col :span="12">
+              <el-form-item label="姓名" prop="legalName">
+                <el-input v-model="form.legalName" type="text" auto-complete="off" placeholder="请输入法人姓名">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="身份证号码" prop="legalIdCard">
+                <el-input v-model="form.legalIdCard" type="text" auto-complete="off" placeholder="请输入法人身份证号码">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="手机号码" prop="legalMobile">
+                <el-input v-model="form.legalMobile" type="text" auto-complete="off" placeholder="手机号码">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="固定电话" prop="legalPhone">
+                <el-input v-model="form.legalPhone" type="text" auto-complete="off" placeholder="请输入固定电话">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="传真" prop="legalFax">
+                <el-input v-model="form.legalFax" type="text" auto-complete="off" placeholder="请输入法人传真">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="E-mail" prop="legalEmail">
+                <el-input v-model="form.legalEmail" type="text" auto-complete="off" placeholder="请输入法人邮箱">
+                </el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        <h3 class="toolbar">
+          <span class="title">联系人信息</span>
+        </h3>
+
+          <el-row :gutter="40">
+            <el-col :span="12">
+              <el-form-item label="姓名" prop="linkName">
+                <el-input v-model="form.linkName" type="text" auto-complete="off" placeholder="请输入联系人姓名">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="身份证号码" prop="linkIdCard">
+                <el-input v-model="form.linkIdCard" type="text" auto-complete="off" placeholder="请输入联系人身份证号码">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="手机号码" prop="linkMobile">
+                <el-input v-model="form.linkMobile" type="text" auto-complete="off" placeholder="请填入手机号码">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="固定电话" prop="linkPhone">
+                <el-input v-model="form.linkPhone" type="text" auto-complete="off" placeholder="请输入联系人固定电话">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="传真" prop="linkFax">
+                <el-input v-model="form.linkFax" type="text" auto-complete="off" placeholder="请输入联系人传真">
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="E-mail" prop="linkEmail">
+                <el-input v-model="form.linkEmail" type="text" auto-complete="off" placeholder="请输入联系人邮箱">
+                </el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        <h3 class="toolbar">
+          <span class="title">企业上市信息</span>
+        </h3>
+
+          <el-row :gutter="40">
+            <el-col :span="12">
+              <el-form-item label="企业是否上市" prop="listedFlag">
+                <el-radio-group v-model="form.listedFlag">
+                  <el-radio label="1">是</el-radio>
+                  <el-radio label="0">否</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="企业上市代码" prop="listingCode">
+                <el-input v-model="form.listingCode" type="text" auto-complete="off" placeholder="请输入企业上市代码">
+                </el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        <h3 class="toolbar">
+          <span class="title">风险投资信息</span>
+        </h3>
+
+          <el-row :gutter="40">
+            <el-col :span="12">
+              <el-form-item label="是否引入风险投资" prop="investFlag">
+                <el-radio-group v-model="form.investFlag">
+                  <el-radio label="1">是</el-radio>
+                  <el-radio label="0">否</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="风险投资金额" prop="investCapital">
+                <el-input v-model="form.investCapital" type="text" auto-complete="off" placeholder="请输入风险投资金额">
+                </el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        <h3 class="toolbar">
+          <span class="title">高新企业</span>
+        </h3>
+
+          <el-row :gutter="40">
+            <el-col :span="12">
+              <el-form-item label="是否为高新企业" prop="techFlag">
+                <el-radio-group v-model="form.techFlag">
+                  <el-radio label="1">是</el-radio>
+                  <el-radio label="0">否</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="高新企业编号" prop="techCode">
+                <el-input v-model="form.techCode" type="text" auto-complete="off" placeholder="请输入高新企业编号">
+                </el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        <h3 class="toolbar">
+          <span class="title">上年度是否做加计扣除</span>
+        </h3>
+
+          <el-row :gutter="40">
+            <el-col :span="12">
+              <el-form-item label="上年度是否做加计扣除" prop="deductionFlag">
+                <el-radio-group v-model="form.deductionFlag">
+                  <el-radio label="1">是</el-radio>
+                  <el-radio label="0">否</el-radio>
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        <h3 class="toolbar">
+          <span class="title">附件</span>
+        </h3>
+
+          <el-form-item label="企业营业执照" prop="licensePath">
+            <FileUpload :file="{url: form.licensePath, name: form.fileName}" @input="handleSuccess">上传材料</FileUpload>
+          </el-form-item>
+          <el-form-item label="其他附件" prop="attachIds">
+            <FileUpload :files="form.attachIds" @input="handleSaleSuccess" :multiple="true">上传材料</FileUpload>
+          </el-form-item>
+        <h3 class="toolbar">
+          <span class="title">文件水印</span>
+        </h3>
+        <el-row :gutter="40">
+          <el-col :span="24">
+            <el-form-item label="文件水印" prop="serviceDate">
+              <ImageUpload></ImageUpload>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <h3 class="toolbar">
+          <span class="title">服务时间</span>
+        </h3>
+        <el-row :gutter="40">
+          <el-col :span="24">
+            <el-form-item label="服务时间段" prop="serviceDate">
+              <el-date-picker v-model="form.serviceDate" placeholder="选择日期" type="daterange" value-format="yyyy-MM-dd" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      <el-row :gutter="40">
+        <el-col :span="24">
+          <el-form-item style="width:100%;text-align: center;" label-width="0px">
+            <el-button
+              :loading="loading"
+              size="medium"
+              type="primary"
+              @click.native.prevent="handleRegister" style="width: 100px;">
+              <span v-if="!loading">下一步</span>
+              <span v-else>注 册 中...</span>
+            </el-button>
+            <el-button size="medium" type="primary" style="width: 100px;">取消</el-button>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+  </div>
+</template>
+
+<script>
+
+import { getEntInfoByIdApi } from "@/api/admin/ent/ent"
+import { registerEntApi } from "@/api/login";
+import {getProvinceDataApi,getRegionChildrenApi} from "@/api/common/common"
+import { regTypeOptions,mainProductsOptions,signatoriesOptions } from "@/utils/dataFormat"
+import FileUpload from '@/components/FileUpload'
+import ImageUpload from '@/components/ImageUpload'
+
+export default {
+  name: "First",
+  components: {
+    FileUpload,
+    ImageUpload
+  },
+  data() {
+    const equalToPassword = (rule, value, callback) => {
+      if (this.form.password !== value) {
+        callback(new Error("两次输入的密码不一致"));
+      } else {
+        callback();
+      }
+    };
+    return {
+      activeName: '3',
+      provinceName: '',
+      cityName: '',
+      districtName: '',
+      codeUrl: "",
+      regTypeOptions: regTypeOptions,
+      mainProductsOptions: mainProductsOptions,
+      signatoriesOptions: signatoriesOptions,
+      provinceDataList: [],
+      cityDataList: [],
+      districtDataList: [],
+      form: {
+        serviceDate: [],
+        listedFlag: '1',
+        investFlag: '1',
+        startDate: '',
+        endDate: '',
+        attachIds: [],
+        provinceId: '',
+        cityId: '',
+        districtId: '',
+        mainProductArray: ['电子信息'],
+        mainProducts: '',
+        userName: "",
+        password: "",
+        confirmPassword: "",
+        code: "",
+        // uuid: ""
+      },
+      registerRules: {
+        userName: [
+          { required: true, trigger: "blur", message: "请输入您的账号" },
+          { min: 2, max: 20, message: '用户账号长度必须介于 2 和 20 之间', trigger: 'blur' }
+        ],
+        password: [
+          { required: true, trigger: "blur", message: "请输入您的密码" },
+          { min: 5, max: 20, message: '用户密码长度必须介于 5 和 20 之间', trigger: 'blur' }
+        ],
+        confirmPassword: [
+          { required: true, trigger: "blur", message: "请再次输入您的密码" },
+          { required: true, validator: equalToPassword, trigger: "blur" }
+        ],
+        code: [{ required: true, trigger: "change", message: "请输入验证码" }]
+      },
+      loading: false,
+      captchaOnOff: true
+    };
+  },
+  created() {
+    this.getProvinceData()
+    this.form.id = this.$route.params.id || undefined;
+    if(this.form.id) {
+      this.getData()
+    }
+  },
+  methods: {
+    getData() {
+      this.loading = true
+      getEntInfoByIdApi(this.form.id).then(res => {
+        this.loading = false
+        this.form = res.data || {}
+        this.form.listedFlag = res.data.listedFlag + ''
+        this.form.investFlag = res.data.investFlag + ''
+        this.form.techFlag = res.data.techFlag + ''
+        this.form.deductionFlag = res.data.deductionFlag +''
+        let mainProductArray = this.form.mainProducts.split(',') || ['电子信息'];
+        this.$set(this.form, 'mainProductArray', mainProductArray);
+        this.serviceDate = []
+        if(this.form.startDate) {
+          this.serviceDate[0] = this.form.startDate
+          this.serviceDate[1] = this.form.endDate
+        }
+        if(this.form.provinceId) {
+          this.getCityData()
+        }
+        if(this.form.cityId) {
+          this.getDistrictData()
+        }
+      })
+    },
+    handleSuccess(file) {
+      this.form.licensePath = file.url;
+      this.form.fileName = file.name;
+    },
+    handleSaleSuccess(files) {
+      files.forEach(item => {
+        this.form.attachIds.push(item.response.data.id)
+      });
+    },
+    //选择省份
+    getCityData() {
+      this.form.cityId = ''
+      this.form.districtId = ''
+      getRegionChildrenApi(this.form.provinceId).then(res => {
+        if(res.code == 200) {
+          this.cityDataList = res.data
+        }
+      })
+    },
+    //选择市
+    getDistrictData() {
+      this.form.districtId = ''
+      getRegionChildrenApi(this.form.cityId).then(res => {
+        if(res.code == 200) {
+          this.districtDataList = res.data
+        }
+      })
+    },
+    getProvinceData() {
+      getProvinceDataApi().then(res => {
+        if(res.code == 200) {
+          this.provinceDataList = res.data
+        }
+      })
+    },
+    handleRegister() {
+      console.log(process.env.VUE_APP_BASE_API)
+      this.form.mainProducts = this.form.mainProductArray.join(',')
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          this.loading = true;
+          registerEntApi(this.form).then(res => {
+            const userName = this.form.userName;
+            this.$alert("<font color='red'>恭喜你,您的账号 " + userName + " 注册成功!</font>", '系统提示', {
+              dangerouslyUseHTMLString: true,
+              type: 'success'
+            }).then(() => {
+              this.$store.dispatch("tagsView/delView", this.$route);
+              this.$router.go(-1);
+            }).catch(() => {});
+          }).catch(() => {
+            this.loading = false;
+            if (this.captchaOnOff) {
+              this.getCode();
+            }
+          })
+        }
+      });
+    }
+  },
+  watch: {
+    'form.provinceId' (val) {
+    	if (this.form.provinceId) {
+        // this.getCityData()
+    		let obj = this.provinceDataList.find(item => {
+          return item.id == this.form.provinceId
+        })
+        this.provinceName = obj.name
+        this.form.taxOffice = '国家税务总局'+this.provinceName+'税务局'
+    	}
+    },
+    'form.serviceDate'(val) {
+      if(this.form.serviceDate) {
+        this.form.startDate = this.form.serviceDate[0]
+        this.form.endDate = this.form.servideDate[1]
+      }
+    },
+    // 'form.cityId'(val) {
+    //   if(this.form.cityId) {
+    //     this.getDistrictData()
+    //   }
+    // }
+   }
+};
+</script>
+
+<style rel="stylesheet/scss" lang="scss">
+
+</style>

+ 220 - 0
src/views/enterprise/ent/index.vue

@@ -1,7 +1,227 @@
 <template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" size="small" label-width="100px">
+      <el-form-item label="省" prop="provinceId">
+        <el-select v-model="queryParams.provinceId" placeholder="请选择省" @change="getCityData" filterable style="width: 200px;">
+          <el-option v-for="(item,index) in provinceDataList" :key="index" :label="item.name" :value="item.id"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="市" prop="cityId">
+        <el-select v-model="queryParams.cityId" placeholder="请选择市" @change="getDistrictData" filterable style="width: 200px;">
+          <el-option v-for="(item, index) in cityDataList" :key="index" :label="item.name" :value="item.id"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="区" prop="districtId">
+        <el-select v-model="queryParams.districtId" placeholder="请选择区" filterable style="width: 200px;">
+          <el-option v-for="(item, index) in districtDataList" :key="index" :label="item.name" :value="item.id"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="企业名称">
+        <el-input v-model="queryParams.entName" clearable style="width: 200px;"></el-input>
+      </el-form-item>
+      <el-form-item label="社会信用代码">
+        <el-input v-model="queryParams.license" style="width: 200px;"></el-input>
+      </el-form-item>
+      <el-form-item label="服务状态">
+        <el-select v-model="queryParams.entState" style="width: 200px;">
+          <el-option v-for="(item, index) in entStateOptions" :key="index" :label="item.dictLabel" :value="item.dictValue"></el-option>
+        </el-select>
+      </el-form-item>
+
+      <el-form-item>
+        <el-button type="primary" @click="handleQuery">搜索</el-button>
+        <el-button @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <h3 class="toolbar">
+      <span class="title">列表</span>
+      <div class="tool">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+        >新增企业</el-button>
+      </div>
+    </h3>
+    <el-table v-loading="loading" :data="list" border>
+      <el-table-column label="账户" prop="userName" width="120" align="center" />
+      <el-table-column label="企业名称" prop="entName" align="center" width="120"></el-table-column>
+      <el-table-column label="省" prop="provinceName" align="center" width="120"/>
+      <el-table-column label="市" prop="cityName" align="center" width="120" />
+      <el-table-column label="区" prop="districtName" align="center" width="120" />
+      <el-table-column label="社会信用代码" prop="license" align="center" width="120"></el-table-column>
+      <el-table-column label="联系人" align="center" prop="linkName" width="150"></el-table-column>
+      <el-table-column label="联系人手机号" prop="linkMobile" align="center" width="120"></el-table-column>
+      <el-table-column label="联系人邮箱" prop="linkEmail" align="center" width="120"></el-table-column>
+      <el-table-column label="创建时间" prop="createTime" align="center" width="160"></el-table-column>
+      <el-table-column label="服务时间" align="center" width="120">
+        <template slot-scope="scope">
+          <template v-if="scope.row.entState == '1'">
+            <span>--</span>
+          </template>
+          <template v-else-if="scope.row.entState == '2'">
+            <span>{{scope.row.startDate}}-{{scope.row.endDate}}</span>
+          </template>
+          <template v-else>
+            <span>已到期</span>
+          </template>
+        </template>
+      </el-table-column>
+      <el-table-column label="服务状态" prop="entState" align="center" width="120" :formatter="entSateFormat"></el-table-column>
+      <el-table-column label="审核状态" prop="authState" align="center" width="120" :formatter="authStateFormat"></el-table-column>
+      <el-table-column label="操作" align="center" width="180" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button type="text" @click="handleView(scope.row)">查看</el-button>
+          <el-button type="text" @click="handleAudit(scope.row)" v-if="scope.row.authState == '1'">审核</el-button>
+          <template v-if="scope.row.authState == '2'">
+            <el-button type="text" @click="handleUpdate(scope.row)">修改</el-button>
+            <el-button type="text" @click="handleStop(scope.row)">停用</el-button>
+            <el-button type="text" @click="handleRemind(scope.row)">提醒</el-button>
+          </template>
+          <template v-if="scope.row.authState == '2' || scope.row.authState == '1'">
+            <el-button type="text" @click="handleDelete(scope.row)">删除</el-button>
+            <el-button type="text" @click="handleRePwd(scope.row)">重置密码</el-button>
+          </template>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+  </div>
 </template>
 
 <script>
+  import {getProvinceDataApi,getRegionChildrenApi} from "@/api/common/common"
+  import {listEntApi, deleteEntApi} from '@/api/admin/ent/ent'
+  import {entStateOptions, getLabel, authStateOptions} from '@/utils/dataFormat'
+  // import Audit from './components/audit'
+  // import Info from './components/info'
+  export default {
+    components: {
+      // Audit,
+      // Info
+    },
+    data () {
+      return {
+        loading: false,
+        provinceDataList: [],
+        cityDataList: [],
+        districtDataList: [],
+        entStateOptions: entStateOptions,
+        authStateOptions: authStateOptions,
+        // 模板状态
+        // statusOptions: accessStatus,
+        dateRange: [],
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          provinceId: undefined,
+          cityId: undefined,
+          districtId: undefined
+        },
+        list: [],
+        total: 0,
+        open: false,
+        openInfo: false,
+      }
+    },
+    created() {
+      this.getList()
+      this.getProvinceData()
+    },
+    methods: {
+      //选择省份
+      getCityData() {
+        this.queryParams.cityId = ''
+        this.queryParams.districtId = ''
+        getRegionChildrenApi(this.queryParams.provinceId).then(res => {
+          if(res.code == 200) {
+            this.cityDataList = res.data
+          }
+        })
+      },
+      //选择市
+      getDistrictData() {
+        this.queryParams.districtId = ''
+        getRegionChildrenApi(this.queryParams.cityId).then(res => {
+          if(res.code == 200) {
+            this.districtDataList = res.data
+          }
+        })
+      },
+      getProvinceData() {
+        getProvinceDataApi().then(res => {
+          if(res.code == 200) {
+            this.provinceDataList = res.data
+          }
+        })
+      },
+      getList() {
+        this.loading = true;
+        listEntApi(this.queryParams).then(response => {
+          this.list = response.data.records;
+          this.total = response.data.total;
+          this.loading = false;
+        });
+      },
+      handleAdd() {
+        this.$router.push("/ent/add")
+      },
+      handleUpdate(row) {
+        this.$router.push("/ent/edit/"+row.id)
+      },
+      // 审核
+      handleAudit(row) {
+        this.$router.push("/ent/info/"+row.id+'?type=audit')
+      },
+      // 查看
+      handleView(row) {
+        this.$router.push("/ent/info/"+row.id+'?type=view')
+      },
+      handleDelete(row) {
+        const id = row.id;
+        this.$confirm('是否确认删除该数据?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+            return deleteEntApi(id);
+          }).then(() => {
+            this.queryParams.pageNum = 1;
+            this.getList();
+            this.msgSuccess("删除成功");
+          })
+      },
+      // 重置
+      resetQuery() {
+        this.dateRange = [];
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      // 搜索
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      statusFormat(row, col, val, index) {
+        return getLabel(accessStatus, val)
+      },
+      entSateFormat(row, col, val, index) {
+        return getLabel(entStateOptions, val)
+      },
+      authStateFormat(row, col, val, index) {
+        return getLabel(authStateOptions, val)
+      }
+    }
+  }
 </script>
 
 <style>

+ 237 - 0
src/views/enterprise/ent/info.vue

@@ -0,0 +1,237 @@
+<template>
+  <div class="app-container" v-loading="loading">
+    <h3 class="toolbar">
+      <span class="title">企业信息</span>
+    </h3>
+    <table class="table_view">
+      <tr>
+        <th>企业名称</th>
+        <td>{{info.entName}}</td>
+        <th>统一社会信用代码</th>
+        <td>{{info.license}}</td>
+      </tr>
+      <tr>
+        <th>注册资金(万元)</th>
+        <td>{{info.regCapital}}</td>
+        <th>工商注册时间</th>
+        <td>{{info.regDate}}</td>
+      </tr>
+      <tr>
+        <th>工商注册类型</th>
+        <td>{{info.regType}}</td>
+        <th>主营产品(服务)所属技术领域</th>
+        <td>{{info.mainProducts}}</td>
+      </tr>
+      <tr>
+        <th>通信地址</th>
+        <td>{{info.address}}</td>
+        <th>邮政编码</th>
+        <td>{{info.zipCode}}</td>
+      </tr>
+      <tr>
+        <th>企业所属行政区域</th>
+        <td>{{info.provinceId}}</td>
+        <th>企业所得税主管税务机关</th>
+        <td>{{info.taxOffice}}</td>
+      </tr>
+    </table>
+    <h3 class="toolbar mt20">
+      <span class="title">法人信息</span>
+    </h3>
+    <table class="table_view">
+      <tr>
+        <th>姓名</th>
+        <td>{{info.legalName}}</td>
+        <th>身份证号码</th>
+        <td>{{info.legalIdCard}}</td>
+      </tr>
+      <tr>
+        <th>手机号码</th>
+        <td>{{info.legalMobile}}</td>
+        <th>固定电话</th>
+        <td>{{info.legalPhone}}</td>
+      </tr>
+      <tr>
+        <th>传真</th>
+        <td>{{info.legalFax}}</td>
+        <th>E-mail</th>
+        <td>{{info.legalEmail}}</td>
+      </tr>
+    </table>
+    <h3 class="toolbar mt20">
+      <span class="title">联系人信息</span>
+    </h3>
+    <table class="table_view">
+      <tr>
+        <th>姓名</th>
+        <td>{{info.linkName}}</td>
+        <th>身份证号码</th>
+        <td>{{info.linkIdCard}}</td>
+      </tr>
+      <tr>
+        <th>手机号码</th>
+        <td>{{info.linkMobile}}</td>
+        <th>固定电话</th>
+        <td>{{info.linkPhone}}</td>
+      </tr>
+      <tr>
+        <th>传真</th>
+        <td>{{info.linkFax}}</td>
+        <th>E-mail</th>
+        <td>{{info.linkEmail}}</td>
+      </tr>
+    </table>
+    <h3 class="toolbar mt20">
+      <span class="title">企业上市信息</span>
+    </h3>
+    <table class="table_view">
+      <tr>
+        <th>企业是否上市</th>
+        <td>{{info.listedFlag}}</td>
+        <th>企业上市代码</th>
+        <td>{{info.listingCode}}</td>
+      </tr>
+    </table>
+    <h3 class="toolbar mt20">
+      <span class="title">风险投资信息</span>
+    </h3>
+    <table class="table_view">
+      <tr>
+        <th>是否引入风险投资</th>
+        <td>{{info.investFlag}}</td>
+        <th>风险投资金额</th>
+        <td>{{info.investCapital}}</td>
+      </tr>
+    </table>
+    <h3 class="toolbar mt20">
+      <span class="title">高新企业</span>
+    </h3>
+    <table class="table_view">
+      <tr>
+        <th>是否为高新企业</th>
+        <td>{{info.techFlag}}</td>
+        <th>高新企业编号</th>
+        <td>{{info.techCode}}</td>
+      </tr>
+    </table>
+    <h3 class="toolbar mt20">
+      <span class="title">上年度是否做加计扣除</span>
+    </h3>
+    <table class="table_view">
+      <tr>
+        <th>上年度是否做加计扣除</th>
+        <td>{{info.deductionFlag}}</td>
+      </tr>
+    </table>
+    <h3 class="toolbar mt20">
+      <span class="title">附件</span>
+    </h3>
+    <table class="table_view">
+      <tr>
+        <th>企业营业执照</th>
+        <td><a class="link" :href="info.licensePath" target="_blank">{{info.licensePath}}</a></td>
+        <th>其他附件</th>
+        <td>
+          <div v-for="(file, index) in info.attachIds" :key="index"><a class="link" :href="attachIds" target="_blank">{{info.attachIds}}</a></div>
+        </td>
+      </tr>
+    </table>
+    <h3 class="toolbar mt20">
+      <span class="title">文件水印</span>
+    </h3>
+    <table class="table_view">
+      <tr>
+        <th>公司logo</th>
+        <td>{{}}</td>
+      </tr>
+    </table>
+    <div class="oper">
+      <el-button @click="cancel">返回</el-button>
+      <template v-if="info.authState == '1'">
+        <el-button @click="handleAudit">通过审核</el-button>
+        <el-button @click="handleRefuse">驳回</el-button>
+      </template>
+    </div>
+    <audit-ent v-if="auditEntVisible" ref="auditEnt" @refreshData="getData()"></audit-ent>
+  </div>
+</template>
+
+<script>
+  import { getEntInfoByIdApi,auditEntApi } from "@/api/admin/ent/ent"
+  import AuditEnt from "./components/audit"
+  export default {
+    name: 'EntInfo',
+    components: {
+      AuditEnt
+    },
+    data () {
+      return {
+        loading: false,
+        id: undefined,
+        type: undefined,
+        auditEntVisible: false,
+        info: {
+
+        },
+        auditForm: {
+          authState: '3',
+          id: undefined
+        }
+      }
+    },
+    computed: {
+      scopeId() {
+        return this.$store.state.user.scopeId
+      },
+    },
+    created () {
+      this.id = this.$route.params.id || undefined;
+      this.type = this.$route.query.type || undefined
+      if(this.id || this.scopeId) {
+        this.getData()
+      }
+    },
+    methods: {
+      getData() {
+        const id = this.id || this.scopeId
+        this.loading = true
+        getEntInfoByIdApi(id).then(res => {
+          this.loading = false
+          this.info = res.data || {}
+        })
+      },
+      handleAudit() {
+        this.auditEntVisible = true
+        this.$nextTick(() => {
+          this.$refs.auditEnt.init(this.id)
+        })
+      },
+      handleRefuse() {
+        this.auditForm.id = this.id
+        this.$confirm('是否确认驳回该企业注册?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          auditEntApi(this.auditForm).then(res => {
+            if(res.code == 200) {
+              this.$message({
+                message: '审核驳回成功',
+                type: 'success'
+              });
+            } else {
+              this.$message.error(res.msg);
+            }
+          })
+        }).catch(err => {})
+      },
+      cancel() {
+        this.$store.dispatch("tagsView/delView", this.$route); // 关闭当前tab
+        this.$router.go(-1);
+      }
+    }
+  }
+</script>
+
+<style>
+</style>

+ 278 - 8
src/views/enterprise/information/index.vue

@@ -1,8 +1,278 @@
-<template>
-</template>
-
-<script>
-</script>
-
-<style>
-</style>
+<template>
+  <div class="register">
+    <el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form" label-width="auto">
+      <h3 class="title">企业基本信息</h3>
+      <el-form-item label="企业名称" prop="username">
+        <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号">
+        </el-input>
+      </el-form-item>
+      <el-form-item label="统一社会信用代码" prop="password">
+        <el-input
+          v-model="registerForm.password"
+          type="password"
+          auto-complete="new-password"
+          placeholder="密码"
+          @keyup.enter.native="handleRegister">
+        </el-input>
+      </el-form-item>
+      <el-form-item label="注册资金" prop="confirmPassword">
+        <el-input
+          v-model="registerForm.confirmPassword"
+          type="password"
+          auto-complete="new-password"
+          placeholder="确认密码"
+          @keyup.enter.native="handleRegister">
+        </el-input>
+      </el-form-item>
+      <el-form-item label="工商注册时间" prop="username">
+        <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="姓名">
+        </el-input>
+      </el-form-item>
+      <el-form-item label="工商注册类型" prop="username">
+        <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="手机号码">
+        </el-input>
+      </el-form-item>
+      <el-form-item label="主营产品(服务)所属技术领域" prop="username">
+        <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="邮箱地址">
+        </el-input>
+      </el-form-item>
+      <el-form-item label="通信地址" prop="username">
+        <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="手机号码">
+        </el-input>
+      </el-form-item>
+      <el-form-item label="邮政编码" prop="username">
+        <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="手机号码">
+        </el-input>
+      </el-form-item>
+      <el-form-item label="企业所属行政区域" prop="username">
+        <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="手机号码">
+        </el-input>
+      </el-form-item>
+      <el-form-item label="企业所得税主管税务机关" prop="username">
+        <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="手机号码">
+        </el-input>
+      </el-form-item>
+      <el-form-item label="姓名" prop="username">
+        <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="手机号码">
+        </el-input>
+      </el-form-item>
+      <el-form-item label="身份证号码" prop="username">
+        <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="手机号码">
+        </el-input>
+      </el-form-item>
+      <el-form-item label="手机号码" prop="username">
+        <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="手机号码">
+        </el-input>
+      </el-form-item>
+      <el-form-item label="固定电话" prop="username">
+        <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="手机号码">
+        </el-input>
+      </el-form-item>
+      <el-form-item label="传真" prop="username">
+        <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="手机号码">
+        </el-input>
+      </el-form-item>
+      <el-form-item label="E-mail" prop="username">
+        <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="手机号码">
+        </el-input>
+      </el-form-item>
+      <el-form-item label="企业是否上市" prop="username">
+        <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="手机号码">
+        </el-input>
+      </el-form-item>
+      <el-form-item label="企业上市代码" prop="username">
+        <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="手机号码">
+        </el-input>
+      </el-form-item>
+      <el-form-item label="是否引入风险投资" prop="username">
+        <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="手机号码">
+        </el-input>
+      </el-form-item>
+      <el-form-item label="风险投资金额" prop="username">
+        <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="手机号码">
+        </el-input>
+      </el-form-item>
+      <el-form-item label="是否为高新企业" prop="username">
+        <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="手机号码">
+        </el-input>
+      </el-form-item>
+      <el-form-item label="高新企业编号" prop="username">
+        <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="手机号码">
+        </el-input>
+      </el-form-item>
+      <el-form-item label="上年度是否做加计扣除" prop="username">
+        <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="手机号码">
+        </el-input>
+      </el-form-item>
+      <el-form-item label="省市区">
+        <el-cascader placeholder="请选择省份" :options="options" filterable></el-cascader>
+      </el-form-item>
+      <el-form-item style="width:100%;text-align: center;">
+        <el-button
+          :loading="loading"
+          size="medium"
+          type="primary"
+          @click.native.prevent="handleRegister" style="width: 100px;">
+          <span v-if="!loading">下一步</span>
+          <span v-else>注 册 中...</span>
+        </el-button>
+        <el-button size="medium" type="primary" style="width: 100px;">取消</el-button>
+      </el-form-item>
+    </el-form>
+    <!--  底部  -->
+    <!-- <div class="el-register-footer">
+      <span>Copyright © 2022 All Rights Reserved.</span>
+    </div> -->
+  </div>
+</template>
+
+<script>
+import { getCodeImg, register } from "@/api/login";
+import {getProvinceDataApi} from "@/api/common/common"
+
+export default {
+  name: "First",
+  data() {
+    const equalToPassword = (rule, value, callback) => {
+      if (this.registerForm.password !== value) {
+        callback(new Error("两次输入的密码不一致"));
+      } else {
+        callback();
+      }
+    };
+    return {
+      options: [],
+      codeUrl: "",
+      registerForm: {
+        username: "",
+        password: "",
+        confirmPassword: "",
+        code: "",
+        uuid: ""
+      },
+      registerRules: {
+        username: [
+          { required: true, trigger: "blur", message: "请输入您的账号" },
+          { min: 2, max: 20, message: '用户账号长度必须介于 2 和 20 之间', trigger: 'blur' }
+        ],
+        password: [
+          { required: true, trigger: "blur", message: "请输入您的密码" },
+          { min: 5, max: 20, message: '用户密码长度必须介于 5 和 20 之间', trigger: 'blur' }
+        ],
+        confirmPassword: [
+          { required: true, trigger: "blur", message: "请再次输入您的密码" },
+          { required: true, validator: equalToPassword, trigger: "blur" }
+        ],
+        code: [{ required: true, trigger: "change", message: "请输入验证码" }]
+      },
+      loading: false,
+      captchaOnOff: true
+    };
+  },
+  created() {
+    this.getCode();
+    this.getProvinceData();
+  },
+  methods: {
+    getProvinceData() {
+      getProvinceDataApi().then(res => {
+        console.log(res)
+      })
+    },
+    getCode() {
+      getCodeImg().then(res => {
+        this.captchaOnOff = res.captchaOnOff === undefined ? true : res.captchaOnOff;
+        if (this.captchaOnOff) {
+          this.codeUrl = "data:image/gif;base64," + res.img;
+          this.registerForm.uuid = res.uuid;
+        }
+      });
+    },
+    handleRegister() {
+
+      // this.$refs.registerForm.validate(valid => {
+      //   if (valid) {
+      //     this.loading = true;
+      //     register(this.registerForm).then(res => {
+      //       const username = this.registerForm.username;
+      //       this.$alert("<font color='red'>恭喜你,您的账号 " + username + " 注册成功!</font>", '系统提示', {
+      //         dangerouslyUseHTMLString: true,
+      //         type: 'success'
+      //       }).then(() => {
+      //         this.$router.push("/login");
+      //       }).catch(() => {});
+      //     }).catch(() => {
+      //       this.loading = false;
+      //       if (this.captchaOnOff) {
+      //         this.getCode();
+      //       }
+      //     })
+      //   }
+      // });
+    }
+  }
+};
+</script>
+
+<style rel="stylesheet/scss" lang="scss">
+.register {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  height: 100%;
+  // background-image: url("../../assets/images/login-background.jpg");
+  background-size: cover;
+}
+.title {
+  margin: 0px auto 30px auto;
+  text-align: center;
+  color: #707070;
+}
+
+.register-form {
+  border-radius: 6px;
+  background: #ffffff;
+  width: 1000px;
+  padding: 25px 25px 5px 25px;
+  .el-input {
+    height: 38px;
+    input {
+      height: 38px;
+    }
+  }
+  .input-icon {
+    height: 39px;
+    width: 14px;
+    margin-left: 2px;
+  }
+}
+.register-tip {
+  font-size: 13px;
+  text-align: center;
+  color: #bfbfbf;
+}
+.register-code {
+  width: 33%;
+  height: 38px;
+  float: right;
+  img {
+    cursor: pointer;
+    vertical-align: middle;
+  }
+}
+.el-register-footer {
+  height: 40px;
+  line-height: 40px;
+  position: fixed;
+  bottom: 0;
+  width: 100%;
+  text-align: center;
+  color: #fff;
+  font-family: Arial;
+  font-size: 12px;
+  letter-spacing: 1px;
+}
+.register-code-img {
+  height: 38px;
+}
+</style>

+ 268 - 0
src/views/enterprise/project/components/BasicInfo.vue

@@ -0,0 +1,268 @@
+<template>
+  <div class="app-container" v-loading="loading">
+    <el-form ref="form" :model="form" :rules="rules" label-width="180px">
+      <h3 class="toolbar">
+        <span class="title">项目基本信息</span>
+      </h3>
+      <el-row :gutter="40">
+        <el-col :span="12">
+          <el-form-item label="企业名称" prop="entName">
+            <el-input v-model="form.entName" type="text" auto-complete="off" placeholder="请输入企业名称"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="通讯地址" prop="address">
+            <el-input v-model="form.address" placeholder="请输入通讯地址"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="企业联系人" prop="linkName">
+            <el-input v-model="form.linkName" placeholder="请输入企业联系人"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="联系电话(座机)" prop="mobile">
+            <el-input v-model="form.mobile" type="text" auto-complete="off" placeholder="请输入联系电话(座机)">
+            </el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="联系电话(手机)" prop="linkMobile">
+            <el-input v-model="form.linkMobile" type="text" auto-complete="off" placeholder="请输入联系电话(手机)">
+            </el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="职工总人数(人)" prop="totoalPersons">
+            <el-input v-model="form.totoalPersons" type="text" auto-complete="off" placeholder="请输入职工总人数">
+            </el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="年度企业销售收入(万元)" prop="sales">
+            <el-input v-model="form.sales" type="text" auto-complete="off" placeholder="请输入年度企业销售收入(万元)">
+            </el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="研发人数" prop="techPersons">
+            <el-input v-model="form.techPersons" type="text" auto-complete="off" placeholder="请输入研发人数">
+            </el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="年度研发投入(万元)" prop="techInvest">
+            <el-input v-model="form.techInvest" type="text" auto-complete="off" placeholder="请输入年度研发投入(万元)">
+            </el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="占销售收入比例(%)" prop="techRate">
+            <el-input v-model="form.techRate" type="text" auto-complete="off" placeholder="请输入占销售收入比例(%)">
+            </el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="企业所属行业" prop="industry">
+            <el-input v-model="form.industry" type="text" auto-complete="off" placeholder="请输入企业所属行业">
+            </el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="国家自主创新示范区企业" prop="innovateFlag">
+            <el-radio-group v-model="form.innovateFlag">
+              <el-radio label="1">是</el-radio>
+              <el-radio label="0">否</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <h3 class="toolbar">
+        <span class="title">项目是否跨年</span>
+      </h3>
+      <el-row :gutter="40">
+        <el-col :span="12">
+          <el-form-item label="是否跨年" prop="overYearFlag">
+            <el-radio-group v-model="form.overYearFlag">
+              <el-radio label="1">是</el-radio>
+              <el-radio label="0">否</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="项目时间段" prop="projectTime">
+            <el-date-picker v-model="form.projectTime" placeholder="选择日期" type="daterange" value-format="yyyy-MM-dd" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <h3 class="toolbar">
+        <span class="title">科技型中小企业信息</span>
+      </h3>
+      <el-row :gutter="40">
+        <el-col :span="12">
+          <el-form-item label="是否科技型中小企业" prop="investFlag">
+            <el-radio-group v-model="form.investFlag">
+              <el-radio label="1">是</el-radio>
+              <el-radio label="0">否</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <h3 class="toolbar">
+        <span class="title">高新技术企业信息</span>
+      </h3>
+      <el-row :gutter="40">
+        <el-col :span="12">
+          <el-form-item label="是否高新技术企业" prop="techFlag">
+            <el-radio-group v-model="form.techFlag">
+              <el-radio label="1">是</el-radio>
+              <el-radio label="0">否</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-col>
+        <template v-if="form.techFlag == '1'">
+          <el-col :span="24">
+            <el-form-item label="高新技术企业所属技术领域" prop="techScopeArray">
+              <el-checkbox-group v-model="form.techScopeArray">
+                <el-checkbox v-for="(item, index) in techScopeOptions" :label="item.dictLabel" :key="index">{{item.dictLabel}}</el-checkbox>
+              </el-checkbox-group>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="证书有效期限" prop="lisenceTime">
+              <el-date-picker v-model="form.lisenceTime" placeholder="选择日期" type="daterange" value-format="yyyy-MM" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="高新证书" prop="investFlag">
+              <FileUpload :file="{url: form.licensePath, name: form.fileName}" @input="handleSuccess">上传证书</FileUpload>
+            </el-form-item>
+          </el-col>
+        </template>
+      </el-row>
+      <el-row :gutter="40">
+        <el-col :span="24">
+          <el-form-item style="width:100%;text-align: center;" label-width="0px">
+            <el-button :loading="loading" size="medium" type="primary" @click.native.prevent="submitForm" style="width: 100px;">保存</el-button>
+            <el-button size="medium" type="primary" style="width: 100px;">取消</el-button>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+  </div>
+</template>
+
+<script>
+import { editProjectApi } from "@/api/enterprise/project/project.js"
+import { techScopeOptions } from "@/utils/dataFormat"
+import FileUpload from '@/components/FileUpload'
+
+export default {
+  name: "First",
+  components: {
+    FileUpload
+  },
+  props: {
+    projectOwner: {
+      type: String
+    }
+  },
+  data() {
+    const equalToPassword = (rule, value, callback) => {
+      if (this.form.password !== value) {
+        callback(new Error("两次输入的密码不一致"));
+      } else {
+        callback();
+      }
+    };
+    return {
+      activeName: '3',
+      serviceDate: [],
+      provinceName: '',
+      cityName: '',
+      districtName: '',
+      codeUrl: "",
+      techScopeOptions: techScopeOptions,
+      provinceDataList: [],
+      cityDataList: [],
+      districtDataList: [],
+      form: {
+        projectOwner: this.projectOwner,
+        lisenceTime: [],
+        techStartDate: '',
+        techEndDate: '',
+        projectTime: [],
+        projectStartTime: '',
+        projectEndTime: '',
+        techScopeArray: [],
+      },
+      rules: {
+        userName: [
+          { required: true, trigger: "blur", message: "请输入您的账号" },
+          { min: 2, max: 20, message: '用户账号长度必须介于 2 和 20 之间', trigger: 'blur' }
+        ],
+        password: [
+          { required: true, trigger: "blur", message: "请输入您的密码" },
+          { min: 5, max: 20, message: '用户密码长度必须介于 5 和 20 之间', trigger: 'blur' }
+        ],
+        confirmPassword: [
+          { required: true, trigger: "blur", message: "请再次输入您的密码" },
+          { required: true, validator: equalToPassword, trigger: "blur" }
+        ],
+        code: [{ required: true, trigger: "change", message: "请输入验证码" }]
+      },
+      loading: false,
+      captchaOnOff: true
+    };
+  },
+  created() {
+    this.form.id = this.$route.query.id || undefined;
+    this.form.entId = this.$route.query.entId || undefined
+  },
+  methods: {
+    handleSuccess(file) {
+      this.form.licensePath = file.url;
+      this.form.fileName = file.name;
+    },
+    handleSaleSuccess(files) {
+      files.forEach(item => {
+        this.form.attachIds.push(item.response.data.id)
+      });
+    },
+    submitForm() {
+      this.$refs.form.validate(valid => {
+        if(valid) {
+          this.loading = true
+          editProjectApi(this.form).then(res => {
+            this.loading = false
+          })
+        }
+      })
+    }
+  },
+  watch: {
+    'form.projectTime'(val) {
+      if(this.form.projectTime) {
+        this.form.projectStartDate = this.form.projectTime[0]
+        this.form.projectEndDate = this.form.projectTime[1]
+      }else {
+        this.form.projectStartDate = ''
+        this.form.projectEndDate = ''
+      }
+    },
+    'form.lisenceTime'(val) {
+      if(this.form.lisenceTime) {
+        this.form.techEndDate = this.form.lisenceTime[1]
+        this.form.techStartDate = this.form.lisenceTime[0]
+      }else {
+        this.form.techStartDate = ''
+        this.form.techEndDate = ''
+      }
+    }
+  }
+};
+</script>
+
+<style rel="stylesheet/scss" lang="scss">
+
+</style>

+ 132 - 0
src/views/enterprise/project/components/addProject.vue

@@ -0,0 +1,132 @@
+<template>
+  <el-dialog title="新增项目" :visible.sync="open" width="500px" append-to-body>
+    <el-form ref="form" :model="form" :rules="rules" label-width="90px">
+      <el-form-item label="项目编号" prop="projectNo">
+        <el-input v-model="form.projectNo"></el-input>
+      </el-form-item>
+      <el-form-item label="项目名称" prop="projectName">
+        <el-input v-model="form.projectName"></el-input>
+      </el-form-item>
+      <el-form-item label="项目年份" prop="projectYear">
+        <el-date-picker v-model="form.projectYear" placeholder="选择项目年份" type="year" value-format="yyyy"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="技术员分配" prop="techUserId">
+        <el-select v-model="form.techUserId">
+          <el-option v-for="(item, index) in techUserOptions" :key="index" :value="item.userId" :label="item.userName"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="财务员分配" prop="finUserId">
+        <el-select v-model="form.finUserId">
+          <el-option v-for="(item, index) in finUserOptions" :key="index" :value="item.userId" :label="item.userName"></el-option>
+        </el-select>
+      </el-form-item>
+        <el-form-item label="项目日期" prop="projectTime">
+          <el-date-picker v-model="form.projectTime" placeholder="选择日期" type="daterange" value-format="yyyy-MM-dd" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
+        </el-form-item>
+    </el-form>
+    <div slot="footer" class="dialog-footer">
+      <el-button type="primary" :disabled="disabled" @click="submitForm">确 定</el-button>
+      <el-button @click="cancel">取 消</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+  import {addProjectApi, listUserListApi} from "@/api/enterprise/project/project"
+  import { listUserApi } from "@/api/enterprise/employee/employee"
+  export default {
+    data () {
+      return {
+        open: false,
+        disabled: false,
+        techUserOptions: [],
+        finUserOptions: [],
+        userType: '',
+        form: {
+          projectNo: '',
+          projectName: '',
+          projectYear: '',
+          techUserId: '',
+          finUserId: '',
+          projectStartDate: '',
+          projectEndDate: '',
+          projectTime: [],
+        },
+        rules: {
+          checkStatus: [
+            {required: true, message: '请选择审核结果', trigger: 'change'}
+          ],
+          serviceTime: [
+            {required: true, message: '请设置服务时间段', trigger: 'change'}
+          ]
+        }
+      }
+    },
+    computed: {
+      scopeId() {
+        return this.$store.state.user.scopeId
+      }
+    },
+    methods: {
+      init() {
+        this.open = true;
+        this.getFinUserData()
+        this.getTechUserData()
+      },
+      getFinUserData() {
+        //财务
+        let params = {userType: 'ENT_FIN'}
+        listUserListApi(params).then(res => {
+          if(res.code == 200) {
+            this.finUserOptions = res.data.records
+          }
+        })
+      },
+      getTechUserData() {
+        //技术
+        let params = {userType: 'ENT_TECH'}
+        listUserListApi(params).then(res => {
+          if(res.code == 200) {
+            this.techUserOptions = res.data.records
+          }
+        })
+      },
+      submitForm() {
+        this.form.entId = this.scopeId
+        this.$refs.form.validate(valid => {
+          if (valid) {
+            this.disabled = true
+            addProjectApi(this.form).then(res => {
+              this.disabled = false;
+              if(res.code == 200) {
+                this.$message({
+                  message: '新增成功',
+                  type: 'success'
+                });
+              }
+              this.open = false;
+              this.$emit('refreshData');
+            })
+          }
+        })
+      },
+      cancel() {
+        this.open = false
+      },
+    },
+    watch: {
+      "form.projectTime"(val) {
+        if(this.form.projectTime) {
+          this.form.projectStartDate = this.form.projectTime[0]
+          this.form.projectEndDate = this.form.projectTime[1]
+        }else {
+          this.form.projectStartDate = ''
+          this.form.projectEndDate = ''
+        }
+      }
+    }
+  }
+</script>
+
+<style>
+</style>

+ 62 - 0
src/views/enterprise/project/components/enclosure.vue

@@ -0,0 +1,62 @@
+<template>
+  <div class="app-container">
+    <h3 class="toolbar">
+      <span class="title">列表</span>
+      <div class="tool">
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleUpload">一键上传</el-button>
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleDownload">批量下载</el-button>
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleBatchDelte">批量删除</el-button>
+      </div>
+    </h3>
+    <el-table v-loading="loading" :data="list" border>
+      <el-table-column label="项目编号" prop="projectNo" width="120" align="center" />
+      <el-table-column label="项目名称" prop="projectName" align="center" width="120"></el-table-column>
+      <el-table-column label="企业名称" prop="entName" align="center" width="120"/>
+      <el-table-column label="社会信用代码" prop="license" align="center" width="120" />
+      <el-table-column label="项目年份" prop="projectYear" align="center" width="120" />
+      <el-table-column label="项目跨年" prop="overYearFlag" align="center" width="120"></el-table-column>
+      <el-table-column label="创建时间" align="center" prop="createTime" width="160"></el-table-column>
+      <el-table-column label="留存备查时间" prop="linkMobile" align="center" width="120"></el-table-column>
+      <el-table-column label="资料完善度" prop="linkEmail" align="center" width="120"></el-table-column>
+      <el-table-column label="负责状态" prop="createTime" align="center" width="160"></el-table-column>
+      <el-table-column label="项目状态" align="center" width="120">
+      </el-table-column>
+      <el-table-column label="操作" align="center" width="180" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button type="text" @click="handleView(scope.row)">查看</el-button>
+          <el-button type="text" @click="handleEdit(scope.row)">编辑</el-button>
+          <el-button type="text" @click="handleDownload(scope.row)">下载</el-button>
+          <el-button type="text" @click="handleDelete(scope.row)">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"/>
+  </div>
+</template>
+
+<script>
+  export default {
+    data() {
+      return {
+        total: 0,
+        list: [],
+        queryParams: {
+
+        }
+      };
+    },
+    created() {
+
+    }
+  };
+  </script>
+
+</script>
+
+<style>
+</style>

+ 62 - 0
src/views/enterprise/project/edit.vue

@@ -0,0 +1,62 @@
+<template>
+  <div class="app-container" v-loading="loading">
+    <el-tabs :tab-position="tabPosition">
+      <el-tab-pane label="企业自填">
+        <el-tabs type="border-card">
+          <el-tab-pane label="项目基本信息">
+            <basic-info ref="basicInfo" :projectOwner="'1'"></basic-info>
+          </el-tab-pane>
+          <el-tab-pane label="资料附件">
+            <enclosure :projectOwner="'1'"></enclosure>
+          </el-tab-pane>
+        </el-tabs>
+      </el-tab-pane>
+      <el-tab-pane label="企业技术">
+        <el-tabs type="border-card">
+          <el-tab-pane label="项目基本信息">
+            <basic-info ref="basicInfo" :projectOwner="'2'"></basic-info>
+          </el-tab-pane>
+          <el-tab-pane label="资料附件">
+            <enclosure :projectOwner="'1'"></enclosure>
+          </el-tab-pane>
+        </el-tabs>
+      </el-tab-pane>
+      <el-tab-pane label="企业财务">
+        <el-tabs type="border-card">
+          <el-tab-pane label="项目基本信息">
+            <basic-info ref="basicInfo" :projectOwner="'3'"></basic-info>
+          </el-tab-pane>
+          <el-tab-pane label="资料附件">
+            <enclosure :projectOwner="'3'"></enclosure>
+          </el-tab-pane>
+        </el-tabs>
+      </el-tab-pane>
+    </el-tabs>
+  </div>
+</template>
+
+<script>
+
+import BasicInfo from './components/BasicInfo'
+import Enclosure from './components/enclosure'
+export default {
+  name: "First",
+  components: {
+    BasicInfo,
+    Enclosure
+  },
+  data() {
+    return {
+      tabPosition: 'left',
+      loading: false
+    };
+  },
+  created() {
+
+  }
+};
+</script>
+
+<style rel="stylesheet/scss" lang="scss">
+
+</style>

+ 218 - 0
src/views/enterprise/project/index.vue

@@ -1,7 +1,225 @@
 <template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" size="small" label-width="100px">
+      <el-form-item label="省" prop="provinceId">
+        <el-select v-model="queryParams.provinceId" placeholder="请选择省" @change="getCityData" filterable style="width: 200px;">
+          <el-option v-for="(item,index) in provinceDataList" :key="index" :label="item.name" :value="item.id"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="市" prop="cityId">
+        <el-select v-model="queryParams.cityId" placeholder="请选择市" @change="getDistrictData" filterable style="width: 200px;">
+          <el-option v-for="(item, index) in cityDataList" :key="index" :label="item.name" :value="item.id"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="区" prop="districtId">
+        <el-select v-model="queryParams.districtId" placeholder="请选择区" filterable style="width: 200px;">
+          <el-option v-for="(item, index) in districtDataList" :key="index" :label="item.name" :value="item.id"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="年份">
+        <el-date-picker v-model="queryParams.year" type="year" placeholder="选择年" style="width: 200px;"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="企业名称">
+        <el-input v-model="queryParams.entName" clearable style="width: 200px;"></el-input>
+      </el-form-item>
+      <el-form-item label="社会信用代码">
+        <el-input v-model="queryParams.license" style="width: 200px;"></el-input>
+      </el-form-item>
+      <el-form-item label="项目编号">
+        <el-input v-model="queryParams.projectNo" style="width: 200px;"></el-input>
+      </el-form-item>
+      <el-form-item label="项目名称">
+        <el-input v-model="queryParams.projectName" style="width: 200px;"></el-input>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" @click="handleQuery">搜索</el-button>
+        <el-button @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <h3 class="toolbar">
+      <span class="title">列表</span>
+      <div class="tool">
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button>
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleBatchAdd">批量新增</el-button>
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleDownloadMode">模板下载</el-button>
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleUpload">一键上传</el-button>
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleDownload">下载</el-button>
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleBatchDelte">批量删除</el-button>
+      </div>
+    </h3>
+    <el-table v-loading="loading" :data="list" border>
+      <el-table-column label="项目编号" prop="projectNo" width="120" align="center" />
+      <el-table-column label="项目名称" prop="projectName" align="center" width="120"></el-table-column>
+      <el-table-column label="企业名称" prop="entName" align="center" width="120"/>
+      <el-table-column label="社会信用代码" prop="license" align="center" width="120" />
+      <el-table-column label="项目年份" prop="projectYear" align="center" width="120" />
+      <el-table-column label="项目跨年" prop="overYearFlag" align="center" width="120"></el-table-column>
+      <el-table-column label="创建时间" align="center" prop="createTime" width="160"></el-table-column>
+      <el-table-column label="留存备查时间" prop="linkMobile" align="center" width="120"></el-table-column>
+      <el-table-column label="资料完善度" prop="linkEmail" align="center" width="120"></el-table-column>
+      <el-table-column label="负责状态" prop="createTime" align="center" width="160"></el-table-column>
+      <el-table-column label="项目状态" align="center" width="120">
+      </el-table-column>
+      <el-table-column label="操作" align="center" width="180" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button type="text" @click="handleView(scope.row)">查看</el-button>
+          <el-button type="text" @click="handleEdit(scope.row)">编辑</el-button>
+          <el-button type="text" @click="handleDownload(scope.row)">下载</el-button>
+          <el-button type="text" @click="handleDelete(scope.row)">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"/>
+      <add-project v-if="addProjectVisible" ref="addProject" @refreshData="getList()"></add-project>
+  </div>
 </template>
 
 <script>
+  import {getProvinceDataApi,getRegionChildrenApi} from "@/api/common/common"
+  import {listProjectApi, deleteEntApi} from '@/api/enterprise/project/project'
+  import {entStateOptions, getLabel, authStateOptions} from '@/utils/dataFormat'
+  import AddProject from './components/addProject'
+  export default {
+    components: {
+      AddProject
+    },
+    // ADMIN,GOV_PROV,GOV_CITY,GOV_DISTRI,ENT_ADMIN,ENT_TECH,ENT_ADMIN_TECH,ENT_FIN,ENT_ADMIN_FIN
+    data () {
+      return {
+        loading: false,
+        addProjectVisible: false,
+        provinceDataList: [],
+        cityDataList: [],
+        districtDataList: [],
+        entStateOptions: entStateOptions,
+        authStateOptions: authStateOptions,
+        // 模板状态
+        // statusOptions: accessStatus,
+        dateRange: [],
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          provinceId: undefined,
+          cityId: undefined,
+          districtId: undefined
+        },
+        list: [],
+        total: 0,
+        open: false,
+        openInfo: false,
+      }
+    },
+    computed: {
+      userType() {
+        return this.$store.state.user.userType
+      },
+      roles() {
+        return this.$store.state.user.roles
+      }
+    },
+    created() {
+      this.getList()
+      this.getProvinceData()
+    },
+    methods: {
+      //选择省份
+      getCityData() {
+        this.queryParams.cityId = ''
+        this.queryParams.districtId = ''
+        getRegionChildrenApi(this.queryParams.provinceId).then(res => {
+          if(res.code == 200) {
+            this.cityDataList = res.data
+          }
+        })
+      },
+      //选择市
+      getDistrictData() {
+        this.queryParams.districtId = ''
+        getRegionChildrenApi(this.queryParams.cityId).then(res => {
+          if(res.code == 200) {
+            this.districtDataList = res.data
+          }
+        })
+      },
+      getProvinceData() {
+        getProvinceDataApi().then(res => {
+          if(res.code == 200) {
+            this.provinceDataList = res.data
+          }
+        })
+      },
+      getList() {
+        this.loading = true;
+        if(this.userType == 'ENT_ADMIN' || this.userType == 'ENT_TECH' || this.userType == 'ENT_ADMIN_TECH' || this.userType == 'ENT_FIN' || this.userType == 'ENT_ADMIN_FIN') {
+          listProjectApi(this.queryParams).then(response => {
+            this.list = response.data.records;
+            this.total = response.data.total;
+            this.loading = false;
+          });
+        }
+
+      },
+      handleAdd() {
+        this.addProjectVisible = true
+        this.$nextTick(() => {
+          this.$refs.addProject.init()
+        })
+      },
+      handleEdit(row) {
+        this.$router.push({name: 'editProject', query: {id: row.id, entId: row.entId}})
+      },
+      handleUpdate(row) {
+        this.$router.push("/ent/edit/"+row.id)
+      },
+      // 审核
+      handleAudit(row) {
+        this.$router.push("/ent/info/"+row.id+'?type=audit')
+      },
+      // 查看
+      handleView(row) {
+        this.$router.push("/ent/info/"+row.id+'?type=view')
+      },
+      handleDelete(row) {
+        const id = row.id;
+        this.$confirm('是否确认删除该数据?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+            return deleteEntApi(id);
+          }).then(() => {
+            this.queryParams.pageNum = 1;
+            this.getList();
+            this.msgSuccess("删除成功");
+          })
+      },
+      // 重置
+      resetQuery() {
+        this.dateRange = [];
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      // 搜索
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      statusFormat(row, col, val, index) {
+        return getLabel(accessStatus, val)
+      },
+      entSateFormat(row, col, val, index) {
+        return getLabel(entStateOptions, val)
+      },
+      authStateFormat(row, col, val, index) {
+        return getLabel(authStateOptions, val)
+      }
+    }
+  }
 </script>
 
 <style>

+ 8 - 0
src/views/message/index.vue

@@ -0,0 +1,8 @@
+<template>
+</template>
+
+<script>
+</script>
+
+<style>
+</style>

+ 8 - 0
src/views/tax/index.vue

@@ -0,0 +1,8 @@
+<template>
+</template>
+
+<script>
+</script>
+
+<style>
+</style>