Compare commits
15 Commits
acc041e1be
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
66411b4d6a | ||
|
|
c649d32668 | ||
|
|
c4fb63f03f | ||
| 3b93161902 | |||
|
|
728d31d10f | ||
| d2509783a0 | |||
| 26c6328512 | |||
| 25b7dded91 | |||
| 588836efd0 | |||
| 5255ae5d97 | |||
| f61688ef8e | |||
| 90b06fb4cd | |||
| 39a40d26e9 | |||
| d6def166a7 | |||
| b727b76645 |
@@ -11,7 +11,6 @@ module.exports = {
|
||||
"no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
|
||||
"no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
|
||||
"no-unused-vars": "warn",
|
||||
"vue/no-parsing-error": [2, { "x-invalid-end-tag": false }],
|
||||
"vue/script-setup-uses-vars": 1
|
||||
"vue/no-parsing-error": [2, { "x-invalid-end-tag": false }]
|
||||
}
|
||||
};
|
||||
|
||||
30
README.md
30
README.md
@@ -1,24 +1,32 @@
|
||||
# sgt_ca_app
|
||||
# 施工图单页应用前端代码
|
||||
- 基于vue3 vue-router antdv
|
||||
- 约定式路由:
|
||||
|
||||
`views/xxx.vue`文件对应路由`/xxx/`
|
||||
|
||||
`views/xxx/index.vue`对应子路由`/xxx/`默认状态
|
||||
|
||||
`views/xxx/yyy.vue`对应子路由`/xxx/yyy`
|
||||
- 路由采用client history模式
|
||||
|
||||
## Project setup
|
||||
- 主要界面功能
|
||||
|
||||
个人和企业数字证书申领,电子印章申领,数字证书审核,审图人员申请临时短信锁,数字证书数量证明上传。
|
||||
临时人员添加,
|
||||
|
||||
## 项目初始化
|
||||
```
|
||||
npm install
|
||||
```
|
||||
|
||||
### Compiles and hot-reloads for development
|
||||
### 开发项目
|
||||
```
|
||||
npm run serve
|
||||
```
|
||||
|
||||
### Compiles and minifies for production
|
||||
### 发布打包项目
|
||||
```
|
||||
npm run build
|
||||
```
|
||||
将项目文件放置到施工图项目/spa目录下
|
||||
|
||||
### Lints and fixes files
|
||||
```
|
||||
npm run lint
|
||||
```
|
||||
|
||||
### Customize configuration
|
||||
See [Configuration Reference](https://cli.vuejs.org/config/).
|
||||
|
||||
19130
package-lock.json
generated
19130
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -11,6 +11,7 @@
|
||||
"@ant-design-vue/use": "*",
|
||||
"ant-design-vue": "^2.1.2",
|
||||
"axios": "^0.21.1",
|
||||
"chokidar": "^3.5.2",
|
||||
"core-js": "^3.6.5",
|
||||
"vue": "^3.0.11",
|
||||
"vue-router": "^4.0.6"
|
||||
|
||||
112
src/components/UnitApply/config.js
Normal file
112
src/components/UnitApply/config.js
Normal file
@@ -0,0 +1,112 @@
|
||||
import regex from "@/services/regex";
|
||||
|
||||
const checkSealList = async (rule, sealList) => {
|
||||
if (!sealList || sealList.length == 0) {
|
||||
return Promise.reject("必须上传法人电子印章申请表");
|
||||
}
|
||||
if (sealList.some(s => !s.sealName || !s.sealApplyFileId)) {
|
||||
return Promise.reject("必须填写法人电子印章名称,并上传对应申请表");
|
||||
}
|
||||
};
|
||||
|
||||
export const rules = {
|
||||
operatorId: [
|
||||
{ required: true, message: "请输入18位身份证号码", trigger: "blur" },
|
||||
{
|
||||
pattern: regex.IdCardNo,
|
||||
message: "输入正确的18位身份证号码",
|
||||
trigger: "blur"
|
||||
}
|
||||
],
|
||||
operatorName: [
|
||||
{ required: true, message: "请输入经办人姓名", trigger: "blur" }
|
||||
],
|
||||
unitName: [{ required: true, message: "请选择企业名称", trigger: "change" }],
|
||||
unitType: [{ required: true, message: "请选择企业类型", trigger: "change" }],
|
||||
operatorPhone: [
|
||||
{ required: true, message: "请输入你的手机号码", trigger: "blur" },
|
||||
{
|
||||
pattern: regex.Phone,
|
||||
message: "请输入正确的11位手机号码",
|
||||
trigger: "blur"
|
||||
}
|
||||
],
|
||||
tydm: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入企业统一社会信用代码",
|
||||
trigger: "blur"
|
||||
},
|
||||
{
|
||||
pattern: regex.Tydm,
|
||||
message: "请输入正确的18位统一社会信用代码",
|
||||
trigger: "blur"
|
||||
}
|
||||
],
|
||||
address: [{ required: true, message: "请输入邮寄信息", trigger: "blur" }],
|
||||
code: [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择省市区信息",
|
||||
type: "string",
|
||||
trigger: "blur",
|
||||
transform: v => v && v.join("-")
|
||||
},
|
||||
{
|
||||
pattern: /\d+-\d+-\d+/,
|
||||
message: "信息不完整",
|
||||
trigger: "blur",
|
||||
transform: v => v && v.join("-")
|
||||
}
|
||||
],
|
||||
loaPicId: [
|
||||
{
|
||||
required: true,
|
||||
message: "请上传授权承诺书照片",
|
||||
trigger: "change",
|
||||
type: "number"
|
||||
}
|
||||
],
|
||||
idCardFrontPicId: [
|
||||
{
|
||||
required: true,
|
||||
message: "请上传身份证正面照片",
|
||||
trigger: "change",
|
||||
type: "number"
|
||||
}
|
||||
],
|
||||
idCardBackPicId: [
|
||||
{
|
||||
required: true,
|
||||
message: "请上传身份证背面照片",
|
||||
trigger: "change",
|
||||
type: "number"
|
||||
}
|
||||
],
|
||||
businessLicensePicId: [
|
||||
{
|
||||
required: true,
|
||||
message: "请上营业执照照片",
|
||||
trigger: "change",
|
||||
type: "number"
|
||||
}
|
||||
],
|
||||
sealApplyPicId: [
|
||||
{
|
||||
required: true,
|
||||
message: "请上电子印章申请表",
|
||||
trigger: "change",
|
||||
type: "number"
|
||||
}
|
||||
],
|
||||
phoneCode: [
|
||||
{ required: true, message: "请输入短信验证码", trigger: "change" }
|
||||
],
|
||||
sealApplyList: [
|
||||
{
|
||||
required: true,
|
||||
trigger: "change",
|
||||
validator: checkSealList
|
||||
}
|
||||
]
|
||||
};
|
||||
@@ -1,4 +1,4 @@
|
||||
import { createRouter, createWebHashHistory } from "vue-router";
|
||||
import { createRouter, createWebHistory } from "vue-router";
|
||||
const files = require.context("@/views", true, /\.vue$/);
|
||||
let pages = [];
|
||||
const genRoutes = [];
|
||||
@@ -54,8 +54,7 @@ pages
|
||||
|
||||
const routes = [...genRoutes];
|
||||
const router = createRouter({
|
||||
history: createWebHashHistory(),
|
||||
history: createWebHistory("/spa"),
|
||||
routes
|
||||
});
|
||||
|
||||
export default router;
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<a-date-picker
|
||||
v-model:value="formModel.expireTime"
|
||||
placeholder="请选择过期时间"
|
||||
valueFormat="YYYY-MM-DD HH:mm:ss"
|
||||
valueFormat="YYYY-MM-DD"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="证明文件" name="fileId" v-bind="validateInfos.fileId">
|
||||
@@ -29,73 +29,88 @@
|
||||
</a-form>
|
||||
</template>
|
||||
<style></style>
|
||||
<script setup>
|
||||
<script>
|
||||
import Upload from "@/components/Upload";
|
||||
import regex from "@/services/regex";
|
||||
import { post } from "@/services/http";
|
||||
import { ref, toRaw } from "@vue/reactivity";
|
||||
import { message, Form } from "ant-design-vue";
|
||||
const useForm = Form.useForm;
|
||||
|
||||
let formModel = ref({
|
||||
name: "",
|
||||
idCard: "",
|
||||
phone: "",
|
||||
expireTime: "",
|
||||
fileId: 0
|
||||
});
|
||||
let rules = ref({
|
||||
name: [
|
||||
{
|
||||
required: true,
|
||||
message: "输入申请人姓名",
|
||||
trigger: "blur"
|
||||
import { reactive, ref, toRaw } from "@vue/reactivity";
|
||||
import { message } from "ant-design-vue";
|
||||
import { useForm } from "@ant-design-vue/use";
|
||||
export default {
|
||||
components: {
|
||||
Upload
|
||||
},
|
||||
setup() {
|
||||
let formModel = reactive({
|
||||
name: "",
|
||||
idCard: "",
|
||||
phone: "",
|
||||
expireTime: "",
|
||||
fileId: 0
|
||||
});
|
||||
let rules = reactive({
|
||||
name: [
|
||||
{
|
||||
required: true,
|
||||
message: "输入申请人姓名",
|
||||
trigger: "blur"
|
||||
}
|
||||
],
|
||||
idCard: [
|
||||
{
|
||||
required: true,
|
||||
message: "输入申请人身份证号码",
|
||||
trigger: "blur"
|
||||
},
|
||||
{
|
||||
pattern: regex.IdCardNo,
|
||||
message: "输入正确的18位身份证号码",
|
||||
trigger: "blur"
|
||||
}
|
||||
],
|
||||
phone: [
|
||||
{
|
||||
required: true,
|
||||
message: "输入申请人手机号码",
|
||||
trigger: "blur"
|
||||
}
|
||||
],
|
||||
expireTime: [
|
||||
{
|
||||
required: true,
|
||||
message: "输入过期时间",
|
||||
trigger: "blur"
|
||||
}
|
||||
],
|
||||
fileId: [
|
||||
{
|
||||
required: true,
|
||||
type: "number",
|
||||
message: "上传申请文件",
|
||||
trigger: "blur"
|
||||
}
|
||||
]
|
||||
});
|
||||
const { resetFields, validate, validateInfos } = useForm(formModel, rules);
|
||||
async function onSubmit() {
|
||||
await validate();
|
||||
console.log(toRaw(formModel));
|
||||
var res = await post("/api2/ca/CensorSmsCodeApplyUpload", {
|
||||
...formModel
|
||||
});
|
||||
if (res.errorCode != 0) {
|
||||
message.error(res.errorMsg);
|
||||
} else {
|
||||
message.success("操作成功");
|
||||
}
|
||||
}
|
||||
],
|
||||
idCard: [
|
||||
{
|
||||
required: true,
|
||||
message: "输入申请人身份证号码",
|
||||
trigger: "blur"
|
||||
},
|
||||
{
|
||||
pattern: regex.IdCardNo,
|
||||
message: "输入正确的18位身份证号码",
|
||||
trigger: "blur"
|
||||
}
|
||||
],
|
||||
phone: [
|
||||
{
|
||||
required: true,
|
||||
message: "输入申请人手机号码",
|
||||
trigger: "blur"
|
||||
}
|
||||
],
|
||||
expireTime: [
|
||||
{
|
||||
required: true,
|
||||
message: "输入过期时间",
|
||||
trigger: "blur"
|
||||
}
|
||||
],
|
||||
fileId: [
|
||||
{
|
||||
required: true,
|
||||
type: "number",
|
||||
message: "上传申请文件",
|
||||
trigger: "blur"
|
||||
}
|
||||
]
|
||||
});
|
||||
const { resetFields, validate, validateInfos } = useForm(formModel, rules);
|
||||
async function onSubmit() {
|
||||
await validate();
|
||||
console.log(toRaw(formModel));
|
||||
var res = await post("/api2/ca/CensorSmsCodeApplyUpload", formModel.value);
|
||||
if (res.errorCode != 0) {
|
||||
message.error(res.errorMsg);
|
||||
} else {
|
||||
message.success("操作成功");
|
||||
return {
|
||||
onSubmit,
|
||||
validate,
|
||||
validateInfos,
|
||||
rules,
|
||||
formModel
|
||||
};
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -14,6 +14,18 @@
|
||||
<a-button type="primary">
|
||||
<router-link to="/ca/sealapply"> 电子印章申请入口 </router-link>
|
||||
</a-button>
|
||||
<div>
|
||||
<a-space :size="size">
|
||||
<a-button>
|
||||
<a
|
||||
class="linka"
|
||||
target="_blank"
|
||||
href="https://zsfwpt.icinfo.cn/index"
|
||||
>企业数字证书延期入口</a
|
||||
>
|
||||
</a-button>
|
||||
</a-space>
|
||||
</div>
|
||||
</a-space>
|
||||
</div>
|
||||
<router-view></router-view>
|
||||
|
||||
@@ -145,11 +145,15 @@ import Upload from "@/components/Upload";
|
||||
import { onMounted, reactive, ref, inject } from "vue";
|
||||
import { get, post } from "@/services/http";
|
||||
import { message } from "ant-design-vue";
|
||||
import { QuestionCircleOutlined } from "@ant-design/icons-vue";
|
||||
import {
|
||||
QuestionCircleOutlined,
|
||||
DownloadOutlined
|
||||
} from "@ant-design/icons-vue";
|
||||
export default {
|
||||
components: {
|
||||
Upload,
|
||||
QuestionCircleOutlined
|
||||
QuestionCircleOutlined,
|
||||
DownloadOutlined
|
||||
},
|
||||
setup() {
|
||||
const useReload = inject("reload");
|
||||
|
||||
@@ -18,18 +18,14 @@
|
||||
</a-result>
|
||||
<a-spin v-else :spinning="spining">
|
||||
<div v-if="false" class="mail-tip">
|
||||
<p>
|
||||
请将书面申请材料不包括电子印章申请表邮寄至
|
||||
</p>
|
||||
<p>请将书面申请材料不包括电子印章申请表邮寄至</p>
|
||||
<p>浙江省 杭州市 西湖区 莫干山路18号 蓝天商务中心 9楼</p>
|
||||
<p>
|
||||
收件人:渠道部 联系电话:400-888-4636
|
||||
</p>
|
||||
<p>收件人:渠道部 联系电话:400-888-4636</p>
|
||||
<p>快递费用由申请单位自理</p>
|
||||
</div>
|
||||
<a-form :label-col="{ span: 9 }" :wrapper-col="{ span: 15 }">
|
||||
<a-row>
|
||||
<a-col :span="11">
|
||||
<a-col :span="12">
|
||||
<a-form-item label="企业名称" v-bind="validateInfos.unitName">
|
||||
<a-select
|
||||
v-model:value="modelRef.unitName"
|
||||
@@ -48,15 +44,17 @@
|
||||
<a-form-item label="统一社会信用代码" v-bind="validateInfos.tydm">
|
||||
<a-input
|
||||
v-model:value="modelRef.tydm"
|
||||
readonly
|
||||
:readonly="readonly"
|
||||
:disabled="disabledFeild"
|
||||
placeholder="根据企业名称自动获取"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="申请单位类型" v-bind="validateInfos.unitType">
|
||||
<a-radio-group v-model:value="modelRef.unitType">
|
||||
<a-radio value="2">勘察</a-radio>
|
||||
<a-radio value="1">设计</a-radio>
|
||||
<a-radio value="2">勘察</a-radio>
|
||||
<a-radio value="3">混凝土</a-radio>
|
||||
<a-radio value="4">其他</a-radio>
|
||||
</a-radio-group>
|
||||
</a-form-item>
|
||||
<a-form-item label="经办人姓名" v-bind="validateInfos.operatorName">
|
||||
@@ -107,24 +105,42 @@
|
||||
/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="11">
|
||||
<a-form-item label="授权委托书" v-bind="validateInfos.loaPicId">
|
||||
<input v-model="modelRef.loaPicId" hidden />
|
||||
<a-upload
|
||||
accept="application/pdf"
|
||||
action="/api2/upload/uploadfile"
|
||||
v-model:fileList="loaPicFileList"
|
||||
:beforeUpload="
|
||||
(file, fileList) => beforeUpload(file, fileList, true)
|
||||
"
|
||||
@change="info => handleChange(info, 'loaPicId')"
|
||||
>
|
||||
<a-button block :disabled="disabledUpload">
|
||||
<UploadOutlined />
|
||||
点击{{ modelRef.loaPicId ? "替换" : "上传" }}
|
||||
</a-button>
|
||||
</a-upload>
|
||||
</a-form-item>
|
||||
<a-col :span="12">
|
||||
<div class="relative">
|
||||
<a-form-item label="授权委托书" v-bind="validateInfos.loaPicId">
|
||||
<input v-model="modelRef.loaPicId" hidden />
|
||||
<a-upload
|
||||
accept="application/pdf"
|
||||
action="/api2/upload/uploadfile"
|
||||
v-model:fileList="loaPicFileList"
|
||||
:beforeUpload="
|
||||
(file, fileList) => beforeUpload(file, fileList, true)
|
||||
"
|
||||
@change="info => handleChange(info, 'loaPicId')"
|
||||
>
|
||||
<a-button block :disabled="disabledUpload">
|
||||
<UploadOutlined />
|
||||
点击{{ modelRef.loaPicId ? "替换" : "上传" }}
|
||||
</a-button>
|
||||
</a-upload>
|
||||
</a-form-item>
|
||||
<a-form-item class="tip">
|
||||
<a-popover title="说明">
|
||||
<template #content>
|
||||
<p>上传的文件pdf大小不得超过2Mb</p>
|
||||
</template>
|
||||
<a-button type="link"
|
||||
><a
|
||||
href="http://183.136.157.18:7308/stgl/sources/202102/授权书模板.doc"
|
||||
download="授权书模板.doc"
|
||||
target="_blank"
|
||||
><DownloadOutlined />模板</a
|
||||
></a-button
|
||||
>
|
||||
</a-popover>
|
||||
</a-form-item>
|
||||
</div>
|
||||
|
||||
<a-form-item
|
||||
label="身份证正面照"
|
||||
v-bind="validateInfos.idCardFrontPicId"
|
||||
@@ -182,22 +198,51 @@
|
||||
</a-button>
|
||||
</a-upload>
|
||||
</a-form-item>
|
||||
<a-form-item label="电子印章申请">
|
||||
<a-button type="dashed" style="width: 100%" @click="addSealApply">
|
||||
<PlusOutlined />
|
||||
添加电子印章
|
||||
</a-button>
|
||||
</a-form-item>
|
||||
<div class="relative">
|
||||
<a-form-item
|
||||
label="电子印章申请"
|
||||
v-bind="validateInfos.sealApplyList"
|
||||
>
|
||||
<a-button
|
||||
type="dashed"
|
||||
style="width: 100%"
|
||||
@click="addSealApply"
|
||||
>
|
||||
<PlusOutlined />
|
||||
添加电子印章
|
||||
</a-button>
|
||||
</a-form-item>
|
||||
<a-form-item class="tip">
|
||||
<a-button type="link"
|
||||
><a
|
||||
href="http://183.136.157.18:7308/stgl/sources/202102/附件1:法人电子印章启用申请表.docx"
|
||||
download="法人电子印章启用申请表.docx"
|
||||
target="_blank"
|
||||
><DownloadOutlined />模板</a
|
||||
></a-button
|
||||
>
|
||||
</a-form-item>
|
||||
</div>
|
||||
|
||||
<template
|
||||
v-for="(sealApply, index) in modelRef.sealApplyList"
|
||||
:key="index"
|
||||
>
|
||||
<a-form-item :wrapper-col="{ span: 15, offset: 9 }">
|
||||
<a-form-item
|
||||
:wrapper-col="{ span: 15, offset: 9 }"
|
||||
class="relative"
|
||||
>
|
||||
<a-input
|
||||
v-model:value="modelRef.sealApplyList[index].sealName"
|
||||
:disabled="disabledFeild"
|
||||
placeholder="印章名称"
|
||||
/>
|
||||
<MinusCircleOutlined
|
||||
v-if="modelRef.sealApplyList.length > 1"
|
||||
class="dynamic-delete-button"
|
||||
:disabled="modelRef.sealApplyList.length === 1"
|
||||
@click="removeApply(sealApply)"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item :wrapper-col="{ span: 15, offset: 9 }">
|
||||
<input
|
||||
@@ -225,35 +270,28 @@
|
||||
</a-form-item>
|
||||
</template>
|
||||
</a-col>
|
||||
<a-col :span="2">
|
||||
<a-form-item>
|
||||
<a-popover title="说明">
|
||||
<template #content>
|
||||
<p>上传的文件pdf大小不得超过2Mb</p>
|
||||
</template>
|
||||
<a-button type="link"
|
||||
><a
|
||||
href="http://183.136.157.18:7308/stgl/sources/202102/授权书模板.doc"
|
||||
download="授权书模板.doc"
|
||||
target="_blank"
|
||||
><DownloadOutlined />模板</a
|
||||
></a-button
|
||||
>
|
||||
</a-popover>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-form-item :wrapper-col="{ span: 12, offset: 10 }">
|
||||
<a-button
|
||||
v-if="progressingId"
|
||||
type="primary"
|
||||
@click="onSubmit"
|
||||
:loading="loading"
|
||||
>查询</a-button
|
||||
>
|
||||
<a-button v-else type="primary" @click="onSubmit" :loading="loading"
|
||||
>提交</a-button
|
||||
<a-popconfirm
|
||||
title="请确认统一信用代码是否正确"
|
||||
ok-text="已确认"
|
||||
cancel-text="取消"
|
||||
:visible="popvisible"
|
||||
@visibleChange="handleVisibleChange"
|
||||
@confrim="onSubmit"
|
||||
@cancel="cancel"
|
||||
>
|
||||
<a-button
|
||||
v-if="progressingId"
|
||||
type="primary"
|
||||
@click="onSubmit"
|
||||
:loading="loading"
|
||||
>查询</a-button
|
||||
>
|
||||
<a-button v-else type="primary" @click="onSubmit" :loading="loading"
|
||||
>提交</a-button
|
||||
>
|
||||
</a-popconfirm>
|
||||
<a-button style="margin-left: 10px" @click="toggleDrawer"
|
||||
>历史提交记录</a-button
|
||||
>
|
||||
@@ -278,7 +316,7 @@
|
||||
<template #title>
|
||||
{{ unitApply.unitName
|
||||
}}<a-tag
|
||||
style="margin-left:4px;"
|
||||
style="margin-left: 4px"
|
||||
:color="status[unitApply.status].color"
|
||||
>{{ status[unitApply.status].text }}</a-tag
|
||||
>
|
||||
@@ -322,6 +360,23 @@
|
||||
font-size: 32px;
|
||||
background-color: rgba(255, 255, 255, 0.7);
|
||||
}
|
||||
.relative {
|
||||
position: relative;
|
||||
}
|
||||
.tip {
|
||||
position: absolute;
|
||||
right: -5em;
|
||||
top: 0;
|
||||
}
|
||||
.dynamic-delete-button {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
cursor: pointer;
|
||||
font-size: 24px;
|
||||
color: #999;
|
||||
transition: all 0.3s;
|
||||
right: -75px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
@@ -329,14 +384,15 @@ import { message, Modal } from "ant-design-vue";
|
||||
import {
|
||||
UploadOutlined,
|
||||
DownloadOutlined,
|
||||
PlusOutlined
|
||||
PlusOutlined,
|
||||
MinusCircleOutlined
|
||||
} from "@ant-design/icons-vue";
|
||||
import { useForm } from "@ant-design-vue/use";
|
||||
import { computed, onMounted, reactive, ref, toRaw, inject } from "vue";
|
||||
import { get, post } from "@/services/http";
|
||||
import regex from "@/services/regex";
|
||||
import { toBit } from "@/services/util";
|
||||
import { useRouter } from "vue-router";
|
||||
import { rules } from "@/components/UnitApply/config";
|
||||
async function getAreaOptions(code) {
|
||||
const res = await get("/api2/CA/AreaOptions", { code });
|
||||
if (res.errorCode == 0) {
|
||||
@@ -354,7 +410,8 @@ export default {
|
||||
components: {
|
||||
UploadOutlined,
|
||||
DownloadOutlined,
|
||||
PlusOutlined
|
||||
PlusOutlined,
|
||||
MinusCircleOutlined
|
||||
},
|
||||
setup() {
|
||||
const modelRef = reactive({
|
||||
@@ -375,108 +432,14 @@ export default {
|
||||
businessLicensePicId: null,
|
||||
sealApplyList: []
|
||||
});
|
||||
const readonly = ref(true);
|
||||
const popvisible = ref(false);
|
||||
const loaPicFileList = ref([]);
|
||||
const idCardFrontPicFileList = ref([]);
|
||||
const idCardBackPicFileList = ref([]);
|
||||
const businessLicenseFileList = ref([]);
|
||||
const sealApplyFileList = ref([]);
|
||||
const rulesRef = reactive({
|
||||
operatorId: [
|
||||
{ required: true, message: "请输入18位身份证号码", trigger: "blur" },
|
||||
{
|
||||
pattern: regex.IdCardNo,
|
||||
message: "输入正确的18位身份证号码",
|
||||
trigger: "blur"
|
||||
}
|
||||
],
|
||||
operatorName: [
|
||||
{ required: true, message: "请输入经办人姓名", trigger: "blur" }
|
||||
],
|
||||
unitName: [
|
||||
{ required: true, message: "请选择企业名称", trigger: "change" }
|
||||
],
|
||||
unitType: [
|
||||
{ required: true, message: "请选择企业类型", trigger: "change" }
|
||||
],
|
||||
operatorPhone: [
|
||||
{ required: true, message: "请输入你的手机号码", trigger: "blur" },
|
||||
{
|
||||
pattern: regex.Phone,
|
||||
message: "请输入正确的11位手机号码",
|
||||
trigger: "blur"
|
||||
}
|
||||
],
|
||||
tydm: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入企业统一社会信用代码",
|
||||
trigger: "blur"
|
||||
},
|
||||
{
|
||||
pattern: regex.Tydm,
|
||||
message: "请输入正确的18位统一社会信用代码",
|
||||
trigger: "blur"
|
||||
}
|
||||
],
|
||||
address: [{ required: true, message: "请输入邮寄信息", trigger: "blur" }],
|
||||
code: [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择省市区信息",
|
||||
trigger: "blur",
|
||||
transform: v => v && v.join("-")
|
||||
},
|
||||
{
|
||||
pattern: /\d+-\d+-\d+/,
|
||||
message: "信息不完整",
|
||||
trigger: "blur",
|
||||
transform: v => v && v.join("-")
|
||||
}
|
||||
],
|
||||
loaPicId: [
|
||||
{
|
||||
required: true,
|
||||
message: "请上传授权承诺书照片",
|
||||
trigger: "change",
|
||||
type: "number"
|
||||
}
|
||||
],
|
||||
idCardFrontPicId: [
|
||||
{
|
||||
required: true,
|
||||
message: "请上传身份证正面照片",
|
||||
trigger: "change",
|
||||
type: "number"
|
||||
}
|
||||
],
|
||||
idCardBackPicId: [
|
||||
{
|
||||
required: true,
|
||||
message: "请上传身份证背面照片",
|
||||
trigger: "change",
|
||||
type: "number"
|
||||
}
|
||||
],
|
||||
businessLicensePicId: [
|
||||
{
|
||||
required: true,
|
||||
message: "请上营业执照照片",
|
||||
trigger: "change",
|
||||
type: "number"
|
||||
}
|
||||
],
|
||||
sealApplyPicId: [
|
||||
{
|
||||
required: true,
|
||||
message: "请上电子印章申请表",
|
||||
trigger: "change",
|
||||
type: "number"
|
||||
}
|
||||
],
|
||||
phoneCode: [
|
||||
{ required: true, message: "请输入短信验证码", trigger: "change" }
|
||||
]
|
||||
});
|
||||
const rulesRef = reactive(rules);
|
||||
const { resetFields, validate, validateInfos } = useForm(
|
||||
modelRef,
|
||||
rulesRef
|
||||
@@ -506,6 +469,17 @@ export default {
|
||||
message.success("发起申请成功", 2, useReload);
|
||||
}
|
||||
};
|
||||
const handleVisibleChange = bool => {
|
||||
if (!bool) {
|
||||
popvisible.value = false;
|
||||
return;
|
||||
}
|
||||
if (readonly.value) {
|
||||
onSubmit();
|
||||
} else {
|
||||
popvisible.value = true;
|
||||
}
|
||||
};
|
||||
const createUnitApply = async () => {
|
||||
try {
|
||||
await validate();
|
||||
@@ -626,6 +600,7 @@ export default {
|
||||
const res = await get("/api2/CA/GetTydm", { unitName });
|
||||
if (res.errorCode !== 0) {
|
||||
message.error(res.errorMsg);
|
||||
readonly.value = false;
|
||||
} else {
|
||||
modelRef.tydm = res.data;
|
||||
}
|
||||
@@ -661,6 +636,9 @@ export default {
|
||||
const disabledModify = computed(
|
||||
() => (editStatus.value & editModifyFlag) == 0
|
||||
);
|
||||
const cancel = () => {
|
||||
popvisible.value = false;
|
||||
};
|
||||
const initPage = unitApply => {
|
||||
for (const key in toRaw(modelRef)) {
|
||||
if (Object.hasOwnProperty.call(unitApply, key)) {
|
||||
@@ -759,6 +737,12 @@ export default {
|
||||
sealApplyFileId: 0
|
||||
});
|
||||
};
|
||||
const removeApply = sealApply => {
|
||||
let index = modelRef.sealApplyList.indexOf(sealApply);
|
||||
if (index !== -1) {
|
||||
modelRef.sealApplyList.splice(index, 1);
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
modelRef,
|
||||
@@ -825,7 +809,12 @@ export default {
|
||||
color: "red",
|
||||
text: "已失效"
|
||||
}
|
||||
}
|
||||
},
|
||||
readonly,
|
||||
popvisible,
|
||||
cancel,
|
||||
handleVisibleChange,
|
||||
removeApply
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
@@ -65,13 +65,19 @@
|
||||
<a-form-item label="收件地址" name="receiverAddress">
|
||||
<a-input v-model:value="form.receiverAddress" :disabled="disableEdit" />
|
||||
</a-form-item>
|
||||
<a-form-item>
|
||||
<template #label>
|
||||
<span :style="{ whiteSpace: 'normal' }"
|
||||
>注册师身份证正反面,并加盖公章以及注册师章</span
|
||||
>
|
||||
</template>
|
||||
<a-form-item name="idCardPicId">
|
||||
<input v-model="form.idCardPicId" hidden />
|
||||
<template #label>
|
||||
<a-tooltip>
|
||||
<template #title
|
||||
>身份证正反面并加盖公司公章,勘察设计类单位还需加盖注册师章</template
|
||||
>
|
||||
<span :style="{ whiteSpace: 'normal' }">
|
||||
身份证正反面
|
||||
<QuestionCircleOutlined />
|
||||
</span>
|
||||
</a-tooltip>
|
||||
</template>
|
||||
<a-upload
|
||||
accept="image/*"
|
||||
action="/api2/upload/uploadfile"
|
||||
@@ -123,6 +129,11 @@
|
||||
<p>身份证号:{{ userApply.idCardNo }}</p>
|
||||
<p>手机号码:{{ userApply.phone }}</p>
|
||||
<p v-if="userApply.dealReason">拒绝理由:{{ userApply.dealReason }}</p>
|
||||
<a-button
|
||||
v-if="userApply.status == 0"
|
||||
@click="sendUserApply(userApply.id)"
|
||||
>申领证书</a-button
|
||||
>
|
||||
</a-card>
|
||||
</a-drawer>
|
||||
</template>
|
||||
@@ -133,7 +144,7 @@
|
||||
</style>
|
||||
<script>
|
||||
import { message } from "ant-design-vue";
|
||||
import { UploadOutlined } from "@ant-design/icons-vue";
|
||||
import { UploadOutlined, QuestionCircleOutlined } from "@ant-design/icons-vue";
|
||||
import { get, post } from "@/services/http";
|
||||
import regex from "@/services/regex";
|
||||
export default {
|
||||
@@ -190,6 +201,14 @@ export default {
|
||||
],
|
||||
receiverAddress: [
|
||||
{ required: true, message: "请输入收件地址", trigger: "blur" }
|
||||
],
|
||||
idCardPicId: [
|
||||
{
|
||||
required: true,
|
||||
message: "上传身份证正反面照片",
|
||||
type: "number",
|
||||
trigger: "blur"
|
||||
}
|
||||
]
|
||||
},
|
||||
userApplyList: [],
|
||||
@@ -337,7 +356,8 @@ export default {
|
||||
}
|
||||
},
|
||||
components: {
|
||||
UploadOutlined
|
||||
UploadOutlined,
|
||||
QuestionCircleOutlined
|
||||
},
|
||||
created: async function() {
|
||||
//获取所在组织信息和个人数字认证信息
|
||||
|
||||
4
src/views/ningboDp.vue
Normal file
4
src/views/ningboDp.vue
Normal file
@@ -0,0 +1,4 @@
|
||||
<template>
|
||||
<router-view></router-view>
|
||||
</template>
|
||||
<script setup></script>
|
||||
204
src/views/ningboDp/Index.vue
Normal file
204
src/views/ningboDp/Index.vue
Normal file
@@ -0,0 +1,204 @@
|
||||
<template>
|
||||
<div class="box">
|
||||
<div class="heard">{{ title }}</div>
|
||||
<div class="body">
|
||||
<div class="left">
|
||||
<a-input-search
|
||||
v-model:value="input"
|
||||
placeholder="请输入查询内容"
|
||||
enter-button
|
||||
@search="onSearch"
|
||||
/>
|
||||
<div class="projectList">
|
||||
<div
|
||||
class="projectListItem"
|
||||
v-for="item in listdata"
|
||||
:key="item.reCensorID"
|
||||
@click="onClick(item.id)"
|
||||
>
|
||||
<div>{{ item.reCensorID }}</div>
|
||||
<div :title="item.proHalfNM" class="text-container">
|
||||
{{ item.proHalfNM }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="right">
|
||||
<a-directory-tree
|
||||
class="tree"
|
||||
multiple
|
||||
:tree-data="data"
|
||||
:replace-fields="replaceFields"
|
||||
@select="onSelect"
|
||||
v-model:expandedKeys="expandedKeys"
|
||||
v-model:selectedKeys="selectedKeys"
|
||||
>
|
||||
</a-directory-tree>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { ref } from "@vue/reactivity";
|
||||
import { onMounted } from "@vue/runtime-core";
|
||||
import { get, post } from "@/services/http";
|
||||
import { message, layout, Input, Tree } from "ant-design-vue";
|
||||
import axios from "axios"; // 引入 axios
|
||||
export default {
|
||||
setup() {
|
||||
const appKey = ref("");
|
||||
const sign = ref("");
|
||||
const time = ref("");
|
||||
const prjCode = ref("");
|
||||
const token = ref("");
|
||||
const replaceFields = {
|
||||
children: "Children",
|
||||
title: "Name",
|
||||
isLeaf: "isLeaf"
|
||||
};
|
||||
const title = ref("");
|
||||
const expandedKeys = ref([]);
|
||||
const selectedKeys = ref([]);
|
||||
const data = ref([]);
|
||||
const listdata = ref([]);
|
||||
const input = ref("");
|
||||
const setLeaf = nodes => {
|
||||
nodes.forEach(node => {
|
||||
if (node.Children && node.Children.length > 0) {
|
||||
node.isLeaf = false;
|
||||
setLeaf(node.Children);
|
||||
} else {
|
||||
node.isLeaf = true;
|
||||
}
|
||||
});
|
||||
};
|
||||
const onSelect = (selected, selectedNodes, node, event) => {
|
||||
console.log("selected", selectedNodes.node.dataRef);
|
||||
};
|
||||
const getlistdata = async () => {
|
||||
try {
|
||||
const response = await axios.post(
|
||||
"/api2/projectinfo/GetProjectByFgCode",
|
||||
{ projectcode: prjCode.value, searchkey: input.value }
|
||||
);
|
||||
console.log(response.data); // 处理返回的数据
|
||||
listdata.value = response.data.data;
|
||||
console.log("listdata.value", listdata.value);
|
||||
// 如果需要更新组件中的数据,可以在这里进行操作
|
||||
} catch (error) {
|
||||
console.error("请求失败:", error);
|
||||
message.error("数据获取失败,请稍后再试");
|
||||
}
|
||||
};
|
||||
const gettoken = async () => {
|
||||
const response = await axios.post("/api2/JianShu/login", {
|
||||
appKey: appKey.value,
|
||||
time: time.value,
|
||||
sign: sign.value
|
||||
});
|
||||
console.log(response.data);
|
||||
token.value = response.data.data;
|
||||
console.log("token.value", token.value);
|
||||
};
|
||||
const onSearch = () => {
|
||||
getlistdata();
|
||||
};
|
||||
const onClick = async id => {
|
||||
const response = await axios.get(
|
||||
"http://10.19.94.51:11684/Platform/COC/Seal.aspx?action=getdata&acceptid=" +
|
||||
id +
|
||||
"&Authorization=Brerar%20" +
|
||||
token.value
|
||||
);
|
||||
console.log("response", response.data.tree);
|
||||
setLeaf(response.data.tree);
|
||||
data.value = response.data.tree;
|
||||
selectedKeys.value = [];
|
||||
expandedKeys.value = [];
|
||||
};
|
||||
onMounted(async () => {
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
appKey.value = urlParams.get("appKey");
|
||||
sign.value = urlParams.get("sign");
|
||||
time.value = urlParams.get("time");
|
||||
prjCode.value = urlParams.get("prjCode");
|
||||
|
||||
console.log(appKey.value, sign.value, time.value, prjCode.value);
|
||||
await gettoken();
|
||||
await getlistdata();
|
||||
title.value = listdata.value[0].proFullNM
|
||||
? listdata.value[0].proFullNM
|
||||
: "";
|
||||
});
|
||||
return {
|
||||
input,
|
||||
listdata,
|
||||
data,
|
||||
replaceFields,
|
||||
appKey,
|
||||
sign,
|
||||
time,
|
||||
prjCode,
|
||||
title,
|
||||
getlistdata,
|
||||
gettoken,
|
||||
onSearch,
|
||||
setLeaf,
|
||||
onSelect,
|
||||
onClick,
|
||||
expandedKeys,
|
||||
selectedKeys
|
||||
};
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style lang="less" scoped>
|
||||
.box {
|
||||
height: 100vh;
|
||||
background-color: aquamarine;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
.heard {
|
||||
height: 60px;
|
||||
background-color: #00a5e4;
|
||||
color: #fff;
|
||||
font-size: 30px;
|
||||
}
|
||||
.body {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
background-color: #a3a3a3;
|
||||
.left {
|
||||
width: 300px;
|
||||
background-color: rgb(255, 255, 255);
|
||||
padding: 10px;
|
||||
}
|
||||
.right {
|
||||
padding: 20px;
|
||||
flex: 1;
|
||||
background-color: rgb(241, 241, 241);
|
||||
overflow: hidden;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
}
|
||||
}
|
||||
.tree {
|
||||
background-color: #fff;
|
||||
overflow: hidden;
|
||||
}
|
||||
.projectList {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
margin-top: 10px;
|
||||
}
|
||||
.projectListItem {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
border-bottom: #a3a3a3 1px solid;
|
||||
/* margin-bottom: 10px; */
|
||||
color: #606266;
|
||||
padding: 3px 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
</style>
|
||||
@@ -9,8 +9,17 @@ module.exports = {
|
||||
}
|
||||
}
|
||||
},
|
||||
// devServer: {
|
||||
// proxy: "http://localhost:42127"
|
||||
// },
|
||||
devServer: {
|
||||
proxy: "http://localhost:42127"
|
||||
proxy: {
|
||||
'/api2': {
|
||||
target: 'http://10.19.94.51:11684',
|
||||
changeOrigin: true,
|
||||
pathRewrite: { '^/api2': '' }
|
||||
}
|
||||
}
|
||||
},
|
||||
chainWebpack: config => {
|
||||
config.module
|
||||
|
||||
Reference in New Issue
Block a user