提交 47b940ce authored 作者: gjx's avatar gjx

添加修改密码的以及权限控制

上级 18ba5b2f
......@@ -38,6 +38,12 @@ export const categoryList = () => {
url: '/sys/api/tree/hylb'
});
};
// 修改密码
export const updatePassword = (params) => {
return defHttp.put({url: '/sys/user/updatePassword',params
});
};
// 下达意见
export const xiadayijian = (params) => {
return defHttp.post({ url: `/xiadayijian`, params });
......
......@@ -43,7 +43,6 @@
{
label: '附件',
field: 'clyjfj',
required: true,
component: 'JUpload',
componentProps: {
showUploadList: false,
......@@ -82,7 +81,7 @@
}
});
//设置标题
const title = ref('下达指导意见');
const title = ref('受理意见');
//表单提交事件
async function handleSubmit() {
try {
......
......@@ -63,6 +63,7 @@
import { useAppInject } from '/@/hooks/web/useAppInject';
import { useForm, BasicForm, FormSchema } from '/@/components/Form';
import { useUserStore } from '/@/store/modules/user';
import { updatePassword } from '@/api/common/api';
import dayjs from 'dayjs';
export default defineComponent({
......@@ -126,35 +127,44 @@
if (userStore?.userInfo?.loginTenantId == 1) open.value = true;
//自定义表单字段
const formSchemas: FormSchema[] = [
{
label: '用户名称',
field: 'username',
component: 'InputPassword',
defaultValue: userStore?.userInfo?.username,
required: true,
show: false,
},
{
label: '旧密码',
field: 'dwmc',
field: 'oldpassword',
component: 'InputPassword',
required: true,
},
{
label: '新密码',
field: 'dwmc',
field: 'password',
component: 'InputPassword',
required: true,
dynamicRules: () => {
return [{ pattern: /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/, message: '密码格式有误', required: true }];
return [{ pattern: /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,}$/, message: '密码格式有误', required: true }];
},
},
{
label: '重复新密码',
field: 'dwmc',
field: 'confirmpassword',
component: 'InputPassword',
dynamicRules: ({ values }) => rules.confirmPassword(values, true),
required: true,
},
{
label: '收到账户的时间',
field: 'zhsj',
field: 'day',
component: 'DatePicker',
defaultValue: day.value,
required: true,
componentProps: {
disabled: true,
//日期格式化,页面上显示的值
format: 'YYYY-MM-DD',
//返回值格式化(绑定值的格式)
......@@ -172,12 +182,11 @@
});
//表单提交事件
async function handleSubmit(v) {
async function handleSubmit() {
try {
let values = await validate();
//提交表单
// await editDk(values);
//关闭弹窗
await updatePassword(values);
open.value = false;
//刷新列表
} finally {
......
......@@ -39,7 +39,7 @@
labelFirst="风险"
:objec="[
{
name: '公截图',
name: '公截图',
},
{ name: '风险评估报告' },
]"
......@@ -106,7 +106,7 @@
createMessage.warn('请填写网址');
return;
}
if (!reg.test(res.gswz)){
if (!reg.test(res.gswz)) {
createMessage.warn('请输入正确的网址');
return false;
}
......@@ -123,10 +123,10 @@
if (saveFlg.value) {
saveFlg.value = false;
const res = await chilrenMgst?.value.getFormValueTrhj();
if(res.wrmj > dsInfor.value.wrdkjbxxb.zdmj){
if (res.wrmj > dsInfor.value.wrdkjbxxb.zdmj) {
createMessage.warn('风险管控修复土壤污染面积不能超过地块占地面积');
saveFlg.value = true;
return false
return false;
}
res.wrdkid = wrdkid.value;
if (dsInfor?.value?.trhjfxxx?.id) res.id = dsInfor.value.trhjfxxx.id;
......
......@@ -32,12 +32,16 @@
<soilMessageTable :data="data.trhjfxxx" />
</a-collapse-panel>
<a-collapse-panel key="5" header="风险评估文件上传">
<CdUpload :data="data.fxpg" labelFirst="风险" :objec="[
{
name: '公式截图',
},
{ name: '风险评估报告' },
]" />
<CdUpload
:data="data.fxpg"
labelFirst="风险"
:objec="[
{
name: '公示截图',
},
{ name: '风险评估报告' },
]"
/>
</a-collapse-panel>
<a-collapse-panel key="6" header="填报进度">
<fillProgress :List="data.lzjd" />
......@@ -53,13 +57,11 @@
</Border>
<!-- 专家组意见 -->
<Border title="专家组意见" v-model="isexpert">
<ViewZjz class="w-[98%] mx-auto" :data="data?.ps?.zjz || []" :dcjdPsfs="data?.ps?.dcjdPsfs"
v-show="isexpert" />
<ViewZjz class="w-[98%] mx-auto" :data="data?.ps?.zjz || []" :dcjdPsfs="data?.ps?.dcjdPsfs" v-show="isexpert" />
</Border>
<!-- 参会人员信息 -->
<Border title="参会人员信息" v-model="isparticipant">
<ViewChry class="w-[98%] mx-auto" :data="data?.ps?.chry || []" :dcjdPsfs="data?.ps?.dcjdPsfs"
v-show="isparticipant" />
<ViewChry class="w-[98%] mx-auto" :data="data?.ps?.chry || []" :dcjdPsfs="data?.ps?.dcjdPsfs" v-show="isparticipant" />
</Border>
<!-- 归档材料信息 -->
<Border title="归档材料信息" v-model="ismaterial">
......@@ -76,89 +78,89 @@
<!-- </BasicDrawer> -->
</template>
<script lang="ts" setup>
import { ref } from 'vue';
import DkTable from '/@/components/customComponent/DkTable.vue';
import suBainTable from '/@/components/customComponent/fxpg/fxpgInfro.vue';
import unitMessageTable from '/@/components/customComponent/unitMessageTable.vue'; // 单位检测信息请传不同的obj
import soilMessageTable from '/@/components/customComponent/fxpg/trfxView.vue';
// import dkbjfileUpload from '/@/components/customComponent/CdUpload.vue';
import CdUpload from '/@/components/customComponent/CdUpload.vue';
import fillProgress from '/@/components/customComponent/fillProgress.vue';
import MaterialUpload from './components/MaterialUpload.vue';
import Border from '/@/components/customComponent/Border.vue'; // 公共组件
import ViewZjz from '/@/views/dkgl/investigate/components/ViewZjz.vue'; // 公共组件
import ViewChry from '/@/views/dkgl/investigate/components/ViewChry.vue'; // 公共组件
import ViewGdcl from '/@/components/customComponent/ViewGdcl.vue'; // 公共组件
import HistoryInfo from '/@/components/customComponent/HistoryInfo.vue'; // 公共组件
import History from '@/components/customComponent/History.vue';
import { useUserStore } from '/@/store/modules/user';
import AdviceModal from '@/components/customComponent/AdviceModal.vue';
import { useModal } from '/@/components/Modal';
import { ref } from 'vue';
import DkTable from '/@/components/customComponent/DkTable.vue';
import suBainTable from '/@/components/customComponent/fxpg/fxpgInfro.vue';
import unitMessageTable from '/@/components/customComponent/unitMessageTable.vue'; // 单位检测信息请传不同的obj
import soilMessageTable from '/@/components/customComponent/fxpg/trfxView.vue';
// import dkbjfileUpload from '/@/components/customComponent/CdUpload.vue';
import CdUpload from '/@/components/customComponent/CdUpload.vue';
import fillProgress from '/@/components/customComponent/fillProgress.vue';
import MaterialUpload from './components/MaterialUpload.vue';
import Border from '/@/components/customComponent/Border.vue'; // 公共组件
import ViewZjz from '/@/views/dkgl/investigate/components/ViewZjz.vue'; // 公共组件
import ViewChry from '/@/views/dkgl/investigate/components/ViewChry.vue'; // 公共组件
import ViewGdcl from '/@/components/customComponent/ViewGdcl.vue'; // 公共组件
import HistoryInfo from '/@/components/customComponent/HistoryInfo.vue'; // 公共组件
import History from '@/components/customComponent/History.vue';
import { useUserStore } from '/@/store/modules/user';
import AdviceModal from '@/components/customComponent/AdviceModal.vue';
import { useModal } from '/@/components/Modal';
import { useRouter } from 'vue-router';
import { plotDetails } from '/@/api/common/api';
import { useRouter } from 'vue-router';
import { plotDetails } from '/@/api/common/api';
const [registerModal, { openModal }] = useModal();
const [registerAdviceModal, { openModal: openAdviceModal }] = useModal();
const { userInfo }: any = useUserStore();
let router = useRouter(); // 注册路由
const data = ref<any>({});
const param = ref<any>(router.currentRoute.value.query);
const [registerModal, { openModal }] = useModal();
const [registerAdviceModal, { openModal: openAdviceModal }] = useModal();
const { userInfo }: any = useUserStore();
let router = useRouter(); // 注册路由
const data = ref<any>({});
const param = ref<any>(router.currentRoute.value.query);
// 评审信息
const isreview = ref(true);
const isexpert = ref(true);
const isparticipant = ref(true);
const ismaterial = ref(true);
// 评审信息
const isreview = ref(true);
const isexpert = ref(true);
const isparticipant = ref(true);
const ismaterial = ref(true);
//手风琴
const activeKey = ref(['1', '2', '4', '5', '6']);
const active = ref('1');
getInfor();
// 获取地块基本信息
async function getInfor() {
data.value = await plotDetails({
wrdkid: param.value.wrdkid,
scjdbm: 'S3',
});
// 默认展开所有面板
const prefixes = ['3-'];
const arrays = [data.value.bzdw];
for (let i = 0; i < arrays.length; i++) {
arrays[i].forEach((el, index) => {
activeKey.value.push(prefixes[i] + index);
//手风琴
const activeKey = ref(['1', '2', '4', '5', '6']);
const active = ref('1');
getInfor();
// 获取地块基本信息
async function getInfor() {
data.value = await plotDetails({
wrdkid: param.value.wrdkid,
scjdbm: 'S3',
});
// 默认展开所有面板
const prefixes = ['3-'];
const arrays = [data.value.bzdw];
for (let i = 0; i < arrays.length; i++) {
arrays[i].forEach((el, index) => {
activeKey.value.push(prefixes[i] + index);
});
}
}
}
// 点击退改历史退回意见
function backHistory(v) {
let obj: any = {
wrdkid: param.value.wrdkid,
scjdbm: 'S3',
jdnzt: data.value.jdnzt,
};
if (v == 'tg') {
openModal(true, {
record: obj,
showFooter: true,
});
} else if (v == 'xdyj') {
obj.title = '下达意见';
openAdviceModal(true, {
record: obj,
showFooter: true,
});
} else if (v == 'bjzdyj') {
obj.title = '边界指导意见';
openAdviceModal(true, {
record: obj,
showFooter: true,
});
// 点击退改历史退回意见
function backHistory(v) {
let obj: any = {
wrdkid: param.value.wrdkid,
scjdbm: 'S3',
jdnzt: data.value.jdnzt,
};
if (v == 'tg') {
openModal(true, {
record: obj,
showFooter: true,
});
} else if (v == 'xdyj') {
obj.title = '下达意见';
openAdviceModal(true, {
record: obj,
showFooter: true,
});
} else if (v == 'bjzdyj') {
obj.title = '边界指导意见';
openAdviceModal(true, {
record: obj,
showFooter: true,
});
}
}
}
</script>
<style lang="less" scoped>
:deep(.ant-collapse-borderless) {
width: 100%;
}
:deep(.ant-collapse-borderless) {
width: 100%;
}
</style>
......@@ -30,7 +30,7 @@
</template>
<!--插槽:table标题-->
<template #tableTitle>
<a-button type="primary" @click="skip()" v-auth="'dkdc-tbz-zltb'">查看报告列表</a-button>
<a-button type="primary" @click="skip()" v-auth="'gkpg-psbtg-fa'">查看报告列表</a-button>
</template>
</BasicTable>
</div>
......
......@@ -4,13 +4,25 @@
<BasicTable @register="registerTable" :rowSelection="rowSelection">
<!-- 行业分类 -->
<template #form-suspect="{ model, field }">
<a-select v-model:value="model[field]" placeholder="请选择行业分类" :fieldNames="{ label: 'text', value: 'value' }"
:options="isSuspectOptions" @change="changeSuspect"></a-select>
<a-select
v-model:value="model[field]"
placeholder="请选择行业分类"
:fieldNames="{ label: 'text', value: 'value' }"
:options="isSuspectOptions"
@change="changeSuspect"
></a-select>
</template>
<template #form-category="{ model, field }">
<a-tree-select v-model:value="model[field]" show-search placeholder="请选择二级" allow-clear tree-default-expand-all
:field-names="{ label: 'name', value: 'id', children: 'children' }" :tree-data="treeData"
tree-node-filter-prop="label">
<a-tree-select
v-model:value="model[field]"
show-search
placeholder="请选择二级"
allow-clear
tree-default-expand-all
:field-names="{ label: 'name', value: 'id', children: 'children' }"
:tree-data="treeData"
tree-node-filter-prop="label"
>
<template #suffixIcon>
<SmileOutlined />
</template>
......@@ -18,62 +30,62 @@
</template>
<!--插槽:table标题-->
<template #tableTitle>
<a-button type="primary" @click="skip" v-auth="'dkdc-tbz-zltb'">查看报告列表</a-button>
<a-button type="primary" @click="skip" v-auth="'gkpg-tbz-fa'">查看报告列表</a-button>
</template>
</BasicTable>
</div>
</template>
<script lang="ts" name="dkgl-gkpg-Filling" setup>
import { BasicTable } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { useRouter } from 'vue-router';
import { useMessage } from '/@/hooks/web/useMessage';
import { columns, searchFormSchema, useSuspectsData, useCategoryData } from './data';
import { fillingList, getImportUrl, getExportUrl } from './api';
import { BasicTable } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage';
import { useRouter } from 'vue-router';
import { useMessage } from '/@/hooks/web/useMessage';
import { columns, searchFormSchema, useSuspectsData, useCategoryData } from './data';
import { fillingList, getImportUrl, getExportUrl } from './api';
let router = useRouter();
const { createMessage } = useMessage();
let router = useRouter();
const { createMessage } = useMessage();
//注册table数据
const { tableContext } = useListPage({
tableProps: {
title: '风险管控效果评估-填报中',
api: fillingList,
columns,
canResize: false,
clickToRowSelect: true,
showActionColumn: false,
//定义rowSelection的类型,默认是checkbox多选,可以设置成radio单选
rowKey: 'wrdkid',
rowSelection: { type: 'radio' },
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
autoSubmitOnEnter: true,
showAdvancedButton: false,
//注册table数据
const { tableContext } = useListPage({
tableProps: {
title: '风险管控效果评估-填报中',
api: fillingList,
columns,
canResize: false,
clickToRowSelect: true,
showActionColumn: false,
//定义rowSelection的类型,默认是checkbox多选,可以设置成radio单选
rowKey: 'wrdkid',
rowSelection: { type: 'radio' },
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
autoSubmitOnEnter: true,
showAdvancedButton: false,
},
},
},
exportConfig: {
name: '风险管控效果评估-填报中',
url: getExportUrl,
},
importConfig: {
url: getImportUrl,
},
});
const isSuspectOptions = useSuspectsData().data; // 行业分类
const useCategory = useCategoryData();
const treeData = useCategory.data; // 行业类别-数据
const changeSuspect = useCategory.changeIsSuspect; // 行业类别-方法
const [registerTable, { }, { rowSelection, selectedRowKeys }] = tableContext;
// 点击基本信息跳转
function skip() {
if (selectedRowKeys.value.length == 0) {
createMessage.info('请选择需要处理的内容,每次只能选中一条');
return
exportConfig: {
name: '风险管控效果评估-填报中',
url: getExportUrl,
},
importConfig: {
url: getImportUrl,
},
});
const isSuspectOptions = useSuspectsData().data; // 行业分类
const useCategory = useCategoryData();
const treeData = useCategory.data; // 行业类别-数据
const changeSuspect = useCategory.changeIsSuspect; // 行业类别-方法
const [registerTable, {}, { rowSelection, selectedRowKeys }] = tableContext;
// 点击基本信息跳转
function skip() {
if (selectedRowKeys.value.length == 0) {
createMessage.info('请选择需要处理的内容,每次只能选中一条');
return;
}
router.push(`/dkgl/gkpg/DetailList?wrdkid=${selectedRowKeys.value[0]}&type=填报&jdnzt=T1`);
}
router.push(`/dkgl/gkpg/DetailList?wrdkid=${selectedRowKeys.value[0]}&type=填报&jdnzt=T1`)
}
</script>
<style scoped></style>
......@@ -30,7 +30,7 @@
</template>
<!--插槽:table标题-->
<template #tableTitle>
<a-button type="primary" @click="skip()" v-auth="'dkdc-tbz-zltb'">查看报告列表</a-button>
<a-button type="primary" @click="skip()" v-auth="'gkpg-pshdws-fa'">查看报告列表</a-button>
</template>
</BasicTable>
</div>
......
......@@ -145,10 +145,10 @@
</a-collapse-panel>
<a-collapse-panel header="初步调查文件上传" :forceRender="true" v-if="dsInfor.wrdkjbxxb.dclx == 3 || dsInfor.wrdkjbxxb.dclx == 1" key="140000">
<CdUpload :data="dsInfor.cbdc" :objec="[{ name: '公照片' }, { name: '初步调查报告' }]" />
<CdUpload :data="dsInfor.cbdc" :objec="[{ name: '公照片' }, { name: '初步调查报告' }]" />
</a-collapse-panel>
<a-collapse-panel header="详细调查文件上传" :forceRender="true" v-if="dsInfor.wrdkjbxxb.dclx == 3 || dsInfor.wrdkjbxxb.dclx == 2" key="150000">
<CdUpload labelFirst="详细调查" :objec="[{ name: '公照片' }, { name: '详细调查报告' }]" :data="dsInfor.xxdc" />
<CdUpload labelFirst="详细调查" :objec="[{ name: '公照片' }, { name: '详细调查报告' }]" :data="dsInfor.xxdc" />
</a-collapse-panel>
<a-collapse-panel header="填报进度" v-if="dsInfor.lzjd" :forceRender="true" key="150001">
<fillProgress :List="dsInfor.lzjd"></fillProgress>
......
......@@ -40,7 +40,7 @@
<unitMessageTable :labelFirst="'详细'" :data="item" />
</a-collapse-panel>
<a-collapse-panel key="3" v-if="data?.wrdkjbxxb?.dclx == 3 || data?.wrdkjbxxb?.dclx == 2" header="详细调查报告基本信息">
<suBainTable :data="data.xxdc" :text-lable="'详细'"/>
<suBainTable :data="data.xxdc" :text-lable="'详细'" />
</a-collapse-panel>
<a-collapse-panel
header="详细调查报告编制单位基本信息"
......@@ -65,10 +65,10 @@
<sensitivityTable :data="data.mgst" />
</a-collapse-panel>
<a-collapse-panel key="13" header="初步调查文件上传" v-if="data?.wrdkjbxxb?.dclx == 3 || data?.wrdkjbxxb?.dclx == 1">
<CdUpload :data="data.cbdc" :objec="[{ name: '公照片' }, { name: '初步调查报告' }]" />
<CdUpload :data="data.cbdc" :objec="[{ name: '公照片' }, { name: '初步调查报告' }]" />
</a-collapse-panel>
<a-collapse-panel key="14" header="详细调查文件上传" v-if="data?.wrdkjbxxb?.dclx == 3 || data?.wrdkjbxxb?.dclx == 2">
<CdUpload labelFirst="详细调查" :objec="[{ name: '公照片' }, { name: '详细调查报告' }]" :data="data.xxdc" />
<CdUpload labelFirst="详细调查" :objec="[{ name: '公照片' }, { name: '详细调查报告' }]" :data="data.xxdc" />
</a-collapse-panel>
<a-collapse-panel header="填报进度" key="15">
<fillProgress :List="data.lzjd" />
......@@ -182,7 +182,7 @@
const arrays = [cbdcBzdw.value, cbjcdw.value, xxdcBzdw.value, xxjcdw.value];
for (let i = 0; i < arrays.length; i++) {
arrays[i].forEach((el,index) => {
arrays[i].forEach((el, index) => {
activeKey.value.push(prefixes[i] + index);
});
}
......
......@@ -25,27 +25,30 @@
import { BasicModal, useModalInner } from '/@/components/Modal';
import { Rule } from '/@/components/Form/index';
import { updateUserPassword } from '../UserSetting.api';
import { useMessage } from "/@/hooks/web/useMessage";
import { useUserStore, useUserStoreWithOut } from "/@/store/modules/user";
import { useMessage } from '/@/hooks/web/useMessage';
import { useUserStore, useUserStoreWithOut } from '/@/store/modules/user';
const $message = useMessage();
//用户名
const username = ref<string>('')
const username = ref<string>('');
const formRef = ref();
const formState = reactive({
oldpassword:'',
password:'',
oldpassword: '',
password: '',
});
// 声明Emits
const emit = defineEmits(['success', 'register']);
//表单赋值
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
setModalProps({ confirmLoading: false });
username.value = data.record.username
username.value = data.record.username;
});
const userStore = useUserStore();
const validatorRules: Record<string, Rule[]> = {
password: [{ required: true, validator:checkPassword},{ pattern:/^(?=.*[0-9])(?=.*[a-zA-Z])(.{8,20})$/,message:'8-20位,需包含字母和数字'}],
password: [
{ required: true, validator: checkPassword },
{ pattern: /^(?=.*[0-9])(?=.*[a-zA-Z])(.{8,20})$/, message: '8-20位,需包含字母和数字' },
],
oldpassword: [{ required: true, message: '请输入原有密码' }],
};
......@@ -56,20 +59,20 @@
setModalProps({ confirmLoading: true });
//提交表单
values.username = unref(username);
values.confirmpassword = values.password ;
await updateUserPassword(values).then((res) =>{
if(res.success){
values.confirmpassword = values.password;
await updateUserPassword(values).then((res) => {
if (res.success) {
$message.createMessage.info({
content:'密码修改成功,请重新登录!3s后自动退出登录',
duration: 3
})
content: '密码修改成功,请重新登录!3s后自动退出登录',
duration: 3,
});
//3s后返回登录页面
setTimeout(()=>{
setTimeout(() => {
userStore.logout(true);
},3000)
}, 3000);
//关闭弹窗
closeModal();
}else{
} else {
$message.createMessage.warn(res.message);
}
});
......@@ -82,7 +85,7 @@
* 验证新密码是否为空
*/
function checkPassword(_rule: Rule, value: string) {
if(value === ''){
if (value === '') {
return Promise.reject('请输入新密码');
}
return Promise.resolve();
......@@ -106,9 +109,9 @@
padding-top: 10px;
padding-bottom: 10px;
}
.forget{
.forget {
float: right;
color: #1e88e5!important;
cursor: pointer
color: #1e88e5 !important;
cursor: pointer;
}
</style>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论