成都网站建设 今网科技,wordpress特殊插件,seo外推上排名,电商公司名称怎么起名一、因若依生成的文件没进行封装#xff0c;维护起来比较麻烦。所以自己简单的进行封装了一下 gitee代码#xff08;文件#xff09;地址#xff1a;https://gitee.com/liu_yu_ting09/ruo_yi.git 二、封装的方法#xff08;下面绿色按钮进行全局封装一个JeecgListMixin.js… 一、因若依生成的文件没进行封装维护起来比较麻烦。所以自己简单的进行封装了一下 gitee代码文件地址https://gitee.com/liu_yu_ting09/ruo_yi.git 二、封装的方法下面绿色按钮进行全局封装一个JeecgListMixin.js文件 三、文件目录 四、具体文件内容 1、JeecgListMixin.js按照自己的目录进行创建我的文件目录在src/mixins/JeecgListMixin.js JeecgListMixin.js文件代码如下
import { ref } from vue;
export const useCommonMixin (additionalParams) {///公共参数const { list, queryParams, registerModal,deleteOne,proxy,id,queryRef } additionalParams; //传递过来的公共参数const loading ref(false);//是否加载中const selectionRows ref([]); //选中的数组用于多选const selectedRowKeys ref([]);//选中的key数组const dataSource ref([]);//数据源const total ref(0);//总条数function loadData(index){//加载数据loading.value true;list(queryParams.value).then((res) {loading.value false;dataSource.value res.rows;total.value res.total;if(index 1)proxy.$modal.msgSuccess(查询成功!);if(index 2)proxy.$modal.msgSuccess(重置成功!);});}/** 新增按钮操作 */function handleAdd() {registerModal.value.add();}/** 修改按钮操作 */function handleUpdate(row) {registerModal.value.edit(row);}/** 搜索按钮操作 */function handleQuery(index) {queryParams.value.pageNum 1;if(index 1) return loadData(2);loadData(1);}// /** 一项删除按钮操作 */function handleDeleteOne(id) {proxy.$modal.confirm(是否确认删除这一项吗).then(function () {return deleteOne(id);}).then(() {loadData();proxy.$modal.msgSuccess(删除成功);}).catch(() {});}// 选中事件触发function handleSelectionChange(selection) {selectionRows.value selection;selectedRowKeys.value selection.map((item) item[id]);;}function handleDeleteBatch(index) {if (selectedRowKeys.value.length 0) return proxy.$modal.msgWarning(请选择需要删除的数据);;let ids selectedRowKeysif(index 1) ids selectedRowKeys.value.join(,); //批量删除转化字符串转化proxy.$modal.confirm(是否确认批量删除 ${selectedRowKeys.value.length} 条数据).then(function () {return deleteOne(ids.value);}).then(() {loadData();proxy.$modal.msgSuccess(删除成功);}).catch(() {});}function searchReset(){ //搜索重置proxy.resetForm(queryRef);handleQuery(1);}function handleExport(url,queryParams,name) { //导出 --参数 url 请求地址 queryParams 参数名 name 文件名称proxy.download(url,queryParams,name);}return {loading,dataSource,total,loadData,handleAdd,handleUpdate,selectionRows,selectedRowKeys,handleQuery,handleDeleteOne,handleSelectionChange,handleDeleteBatch,searchReset,handleExport};
};2、主页面文件index文件下图 index代码:
templatediv classapp-containerel-row :gutter20!--部门数据--el-col :span4 :xs24div classhead-containerel-inputv-modeldeptNameplaceholder请输入部门名称clearableprefix-iconSearchstylemargin-bottom: 20px//divdiv classhead-containerel-tree:datadeptOptions:props{ label: label, children: children }:expand-on-click-nodefalse:filter-node-methodfilterNoderefdeptTreeRefnode-keyidhighlight-currentdefault-expand-allnode-clickhandleNodeClick//div/el-col!--用户数据--el-col :span20 :xs24el-form:modelqueryParamsrefqueryRef:inlinetruev-showshowSearchlabel-width68pxel-form-item label用户名称 propuserNameel-inputv-modelqueryParams.userNameplaceholder请输入用户名称clearablestylewidth: 240pxkeyup.enterhandleQuery//el-form-itemel-form-item label手机号码 propphonenumberel-inputv-modelqueryParams.phonenumberplaceholder请输入手机号码clearablestylewidth: 240pxkeyup.enterhandleQuery//el-form-itemel-form-item label状态 propstatusel-selectv-modelqueryParams.statusplaceholder用户状态clearablestylewidth: 240pxel-optionv-fordict in sys_normal_disable:keydict.value:labeldict.label:valuedict.value//el-select/el-form-itemel-form-itemel-button typeprimary iconSearch clickhandleQuery搜索/el-buttonel-button iconRefresh clickresetQuery重置/el-button/el-form-item/el-formel-row :gutter10 classmb8el-col :span1.5el-buttontypeprimaryplainiconPlusclickhandleAddv-hasPermi[system:user:add]新增/el-button/el-colel-col :span1.5el-buttontypedangerplainiconDelete:disabledselectedRowKeys.length 0clickhandleDeleteBatch()v-hasPermi[system:user:remove]批量删除/el-button/el-colel-col :span1.5el-buttontypeinfoplainiconUploadclickhandleImportv-hasPermi[system:user:import]导入/el-button/el-colel-col :span1.5el-buttontypewarningplainiconDownloadclickhandleExport(system/user/export, queryParams,user_${new Date().getTime()}.xlsx)v-hasPermi[system:user:export]导出/el-button/el-colright-toolbarv-model:showSearchshowSearchqueryTableloadData:columnscolumns/right-toolbar/el-rowel-tablev-loadingloading:datadataSourceselection-changehandleSelectionChangeel-table-column typeselection width50 aligncenter /el-table-columnlabel用户编号aligncenterkeyuserIdpropuserIdv-ifcolumns[0].visible/el-table-columnlabel用户名称aligncenterkeyuserNamepropuserNamev-ifcolumns[1].visible:show-overflow-tooltiptrue/el-table-columnlabel用户昵称aligncenterkeynickNamepropnickNamev-ifcolumns[2].visible:show-overflow-tooltiptrue/el-table-columnlabel部门aligncenterkeydeptNamepropdept.deptNamev-ifcolumns[3].visible:show-overflow-tooltiptrue/el-table-columnlabel手机号码aligncenterkeyphonenumberpropphonenumberv-ifcolumns[4].visiblewidth120/el-table-columnlabel状态aligncenterkeystatusv-ifcolumns[5].visibletemplate #defaultscopeel-switchv-modelscope.row.statusactive-value0inactive-value1changehandleStatusChange(scope.row)/el-switch/template/el-table-columnel-table-columnlabel创建时间aligncenterpropcreateTimev-ifcolumns[6].visiblewidth160template #defaultscopespan{{ parseTime(scope.row.createTime) }}/span/template/el-table-columnel-table-columnlabel操作aligncenterwidth150class-namesmall-padding fixed-widthtemplate #defaultscopeel-tooltipcontent修改placementtopv-ifscope.row.userId ! 1el-buttonlinktypeprimaryiconEditclickhandleUpdate(scope.row)v-hasPermi[system:user:edit]/el-button/el-tooltipel-tooltipcontent删除placementtopv-ifscope.row.userId ! 1el-buttonlinktypeprimaryiconDeleteclickhandleDeleteOne(scope.row.userId)v-hasPermi[system:user:remove]/el-button/el-tooltipel-tooltipcontent重置密码placementtopv-ifscope.row.userId ! 1el-buttonlinktypeprimaryiconKeyclickhandleResetPwd(scope.row)v-hasPermi[system:user:resetPwd]/el-button/el-tooltipel-tooltipcontent分配角色placementtopv-ifscope.row.userId ! 1el-buttonlinktypeprimaryiconCircleCheckclickhandleAuthRole(scope.row)v-hasPermi[system:user:edit]/el-button/el-tooltip/template/el-table-column/el-tablepaginationv-showtotal 0:totaltotalv-model:pagequeryParams.pageNumv-model:limitqueryParams.pageSizepaginationloadData//el-col/el-row!-- 添加或修改用户配置对话框 --!-- 用户导入对话框 --el-dialog:titleupload.titlev-modelupload.openwidth400pxappend-to-bodyel-uploadrefuploadRef:limit1accept.xlsx, .xls:headersupload.headers:actionupload.url ?updateSupport upload.updateSupport:disabledupload.isUploading:on-progresshandleFileUploadProgress:on-successhandleFileSuccess:auto-uploadfalsedragel-icon classel-icon--uploadupload-filled //el-icondiv classel-upload__text将文件拖到此处或em点击上传/em/divtemplate #tipdiv classel-upload__tip text-centerdiv classel-upload__tipel-checkboxv-modelupload.updateSupport/是否更新已经存在的用户数据/divspan仅允许导入xls、xlsx格式文件。/spanel-linktypeprimary:underlinefalsestylefont-size: 12px; vertical-align: baselineclickimportTemplate下载模板/el-link/div/template/el-uploadtemplate #footerdiv classdialog-footerel-button typeprimary clicksubmitFileForm确 定/el-buttonel-button clickupload.open false取 消/el-button/div/template/el-dialoguserModal refregisterModal successloadData /!-- 用户注册编辑对话框 --/div
/template
script setup nameUser
import { getToken } from /utils/auth;
import {changeUserStatus,listUser,resetUserPwd,delUser,deptTreeSelect,
} from ./api/userApi;
const router useRouter();
const { proxy } getCurrentInstance();
const { sys_normal_disable, sys_user_sex } proxy.useDict(sys_normal_disable,sys_user_sex
);
import { useCommonMixin } from /mixins/JeecgListMixin.js; //公共方法
import userModal from ./components/userModal.vue; //公共方法
const registerModal ref();
const showSearch ref(true);
const deptName ref();
const deptOptions ref(undefined);
/*** 用户导入参数 */
const upload reactive({// 是否显示弹出层用户导入open: false,// 弹出层标题用户导入title: ,// 是否禁用上传isUploading: false,// 是否更新已经存在的用户数据updateSupport: 0,// 设置上传的请求头部headers: { Authorization: Bearer getToken() },// 上传的地址url: import.meta.env.VITE_APP_BASE_API /system/user/importData,
});
// 列显隐信息
const columns ref([{ key: 0, label: 用户编号, visible: true },{ key: 1, label: 用户名称, visible: true },{ key: 2, label: 用户昵称, visible: true },{ key: 3, label: 部门, visible: true },{ key: 4, label: 手机号码, visible: true },{ key: 5, label: 状态, visible: true },{ key: 6, label: 创建时间, visible: true },
]);const data reactive({queryParams: {pageNum: 1,pageSize: 10,userName: undefined,phonenumber: undefined,status: undefined,deptId: undefined,},
});
const { queryParams } toRefs(data);
// 根据需要传入额外参数(传递给JeecgListMixin页面的文件)
const additionalParams {list: listUser,//查询用户列表queryParams: queryParams,//查询参数registerModal:registerModal,//用户注册编辑对话框deleteOne:delUser,//删除用户接口proxy:proxy,//公共方法id: userId,//主键idqueryRef:queryRef,//查询框ref
}
const { loading, dataSource, total, loadData, handleAdd,handleUpdate,handleQuery,handleDeleteOne,handleDeleteBatch,handleSelectionChange,searchReset,handleExport,selectionRows,selectedRowKeys} useCommonMixin(additionalParams);
/** 通过条件过滤节点 */
const filterNode (value, data) {if (!value) return true;return data.label.indexOf(value) ! -1;
};
/** 根据名称筛选部门树 */
watch(deptName, (val) {proxy.$refs[deptTreeRef].filter(val);
});
/** 查询部门下拉树结构 */
function getDeptTree() {deptTreeSelect().then((response) {deptOptions.value response.data;});
}
/** 节点单击事件 */
function handleNodeClick(data) {queryParams.value.deptId data.id;handleQuery();
}
/** 重置按钮操作 */
function resetQuery() {queryParams.value.deptId undefined;proxy.$refs.deptTreeRef.setCurrentKey(null);searchReset();
}
/** 用户状态修改 */
function handleStatusChange(row) {let text row.status 0 ? 启用 : 停用;proxy.$modal.confirm(确认要 text row.userName 用户吗?).then(function () {return changeUserStatus(row.userId, row.status);}).then(() {proxy.$modal.msgSuccess(text 成功);}).catch(function () {row.status row.status 0 ? 1 : 0;});
}
/** 更多操作 */
// function handleCommand(command, row) {
// switch (command) {
// case handleResetPwd:
// handleResetPwd(row);
// break;
// case handleAuthRole:
// handleAuthRole(row);
// break;
// default:
// break;
// }
// }/** 跳转角色分配 */
function handleAuthRole(row) {const userId row.userId;router.push(/system/user-auth/role/ userId);
}/** 重置密码按钮操作 */
function handleResetPwd(row) {proxy.$prompt(请输入 row.userName 的新密码, 提示, {confirmButtonText: 确定,cancelButtonText: 取消,closeOnClickModal: false,inputPattern: /^.{5,20}$/,inputErrorMessage: 用户密码长度必须介于 5 和 20 之间,inputValidator: (value) {if (/||||\||\\/.test(value)) {return 不能包含非法字符 \ \\\ |;}},}).then(({ value }) {resetUserPwd(row.userId, value).then((response) {proxy.$modal.msgSuccess(修改成功新密码是 value);});}).catch(() {});
}
/** 导入按钮操作 */
function handleImport() {upload.title 用户导入;upload.open true;
}
/** 下载模板操作 */
function importTemplate() {proxy.download(system/user/importTemplate,{},user_template_${new Date().getTime()}.xlsx);
}
/**文件上传中处理 */
const handleFileUploadProgress (event, file, fileList) {upload.isUploading true;
};/** 文件上传成功处理 */
const handleFileSuccess (response, file, fileList) {upload.open false;upload.isUploading false;proxy.$refs[uploadRef].handleRemove(file);proxy.$alert(div styleoverflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0; response.msg /div,导入结果,{ dangerouslyUseHTMLString: true });loadData();
};
/** 提交上传文件 */
function submitFileForm() {proxy.$refs[uploadRef].submit();
}
getDeptTree();
loadData();
/script3、api接口文件 具体代码 import request from /utils/request
import { parseStrEmpty } from /utils/ruoyi;// 查询用户列表
export function listUser(query) {return request({url: /system/user/list,method: get,params: query})
}// 查询用户详细
export function getUser(userId) {return request({url: /system/user/ parseStrEmpty(userId),method: get})
}// 新增用户
export function addUser(data) {return request({url: /system/user,method: post,data: data})
}// 修改用户
export function updateUser(data) {return request({url: /system/user,method: put,data: data})
}
export function saveOrUpdate(data,isUpdate) { // 新增-编辑const method isUpdate ? put : post;return request({url: /system/user,method: method,data: data})
}
// 删除用户
export function delUser(userId) {return request({url: /system/user/ userId,method: delete})
}// 用户密码重置
export function resetUserPwd(userId, password) {const data {userId,password}return request({url: /system/user/resetPwd,method: put,data: data})
}// 用户状态修改
export function changeUserStatus(userId, status) {const data {userId,status}return request({url: /system/user/changeStatus,method: put,data: data})
}// 查询用户个人信息
export function getUserProfile() {return request({url: /system/user/profile,method: get})
}// 修改用户个人信息
export function updateUserProfile(data) {return request({url: /system/user/profile,method: put,data: data})
}// 用户密码重置
export function updateUserPwd(oldPassword, newPassword) {const data {oldPassword,newPassword}return request({url: /system/user/profile/updatePwd,method: put,params: data})
}// 用户头像上传
export function uploadAvatar(data) {return request({url: /system/user/profile/avatar,method: post,headers: { Content-Type: application/x-www-form-urlencoded },data: data})
}// 查询授权角色
export function getAuthRole(userId) {return request({url: /system/user/authRole/ userId,method: get})
}// 保存授权角色
export function updateAuthRole(data) {return request({url: /system/user/authRole,method: put,params: data})
}// 查询部门下拉树结构
export function deptTreeSelect() {return request({url: /system/user/deptTree,method: get})
}4、新增编辑弹窗文件 具体代码
1、userModal.vue文件
templateel-dialog v-modelvisible :titletitle :widthwidthdiv v-ifvisibleuserForm refregisterForm oksubmitCallback onLoseonLose //divtemplate #footer !-- 按钮 --div classdialog-footerel-button typeprimary clickhandleOk :disableddisabled确 定/el-buttonel-button clickhandleCancel取 消/el-button/div/template/el-dialog
/template
script setup
import { ref, nextTick } from vue;
import userForm from ./userForm.vue;
const title ref();
const width ref(800);
const visible ref(false);
const disabled ref(false);
const registerForm ref();
const emit defineEmits([register, success]);
/*** 新增*/
function add() {title.value 新增;visible.value true;nextTick(() {registerForm.value.add();});
}
/*** 编辑**/
function edit(record) {title.value 编辑;visible.value true;nextTick(() {registerForm.value.edit(record);});}
/*** 确定按钮点击事件*/
function handleOk() {disabled.value true;registerForm.value.submitForm();
}
function onLose() {disabled.value false;
}
/*** form保存回调事件*/
function submitCallback() {handleCancel();onLose();emit(success);
}
/*** 取消按钮回调事件*/
function handleCancel() {visible.value false;
}
defineExpose({add,edit,
});
/script
2、userForm.vue文件
templateel-form :modelformData :rulesrules :disableddisabled refformRef label-width80pxel-rowel-col :span12el-form-item label用户昵称 propnickNameel-inputv-modelformData.nickNameplaceholder请输入用户昵称maxlength30//el-form-item/el-colel-col :span12el-form-item label归属部门 propdeptIdel-tree-selectv-modelformData.deptId:datadeptOptions:props{ value: id, label: label, children: children }value-keyidplaceholder请选择归属部门check-strictly//el-form-item/el-col/el-rowel-rowel-col :span12el-form-item label手机号码 propphonenumberel-inputv-modelformData.phonenumberplaceholder请输入手机号码maxlength11//el-form-item/el-colel-col :span12el-form-item label邮箱 propemailel-inputv-modelformData.emailplaceholder请输入邮箱maxlength50//el-form-item/el-col/el-rowel-rowel-col :span12el-form-itemv-ifformData.userId undefinedlabel用户名称propuserNameel-inputv-modelformData.userNameplaceholder请输入用户名称maxlength30//el-form-item/el-colel-col :span12el-form-itemv-ifformData.userId undefinedlabel用户密码proppasswordel-inputv-modelformData.passwordplaceholder请输入用户密码typepasswordmaxlength20show-password//el-form-item/el-col/el-rowel-rowel-col :span12el-form-item label用户性别el-select v-modelformData.sex placeholder请选择el-optionv-fordict in sys_user_sex:keydict.value:labeldict.label:valuedict.value/el-option/el-select/el-form-item/el-colel-col :span12el-form-item label状态el-radio-group v-modelformData.statusel-radiov-fordict in sys_normal_disable:keydict.value:valuedict.value{{ dict.label }}/el-radio/el-radio-group/el-form-item/el-col/el-rowel-rowel-col :span12el-form-item label岗位el-select v-modelformData.postIds multiple placeholder请选择el-optionv-foritem in postOptions:keyitem.postId:labelitem.postName:valueitem.postId:disableditem.status 1/el-option/el-select/el-form-item/el-colel-col :span12el-form-item label角色el-select v-modelformData.roleIds multiple placeholder请选择el-optionv-foritem in roleOptions:keyitem.roleId:labelitem.roleName:valueitem.roleId:disableditem.status 1/el-option/el-select/el-form-item/el-col/el-rowel-rowel-col :span24el-form-item label备注el-inputv-modelformData.remarktypetextareaplaceholder请输入内容/el-input/el-form-item/el-col/el-row/el-form
/template
script setup
import { ref, reactive, nextTick } from vue;
const { proxy } getCurrentInstance();
import {saveOrUpdate,deptTreeSelect,getUser
} from ../api/userApi;
const { sys_normal_disable, sys_user_sex } proxy.useDict(sys_normal_disable,sys_user_sex
);
const emit defineEmits([register, ok]);
const formRef ref();
const deptOptions ref(undefined);
const postOptions ref([]);
const disabled ref(false);
const roleOptions ref([]);
const formData reactive({userId: undefined,deptId: undefined,userName: undefined,nickName: undefined,password: undefined,phonenumber: undefined,email: undefined,sex: undefined,status: 0,remark: undefined,postIds: [],roleIds: [],
});
//表单验证
const rules {userName: [{ required: true, message: 用户名称不能为空, trigger: blur },{min: 2,max: 20,message: 用户名称长度必须介于 2 和 20 之间,trigger: blur,},],nickName: [{ required: true, message: 用户昵称不能为空, trigger: blur }],password: [{ required: true, message: 用户密码不能为空, trigger: blur },{min: 5,max: 20,message: 用户密码长度必须介于 5 和 20 之间,trigger: blur,},{pattern: /^[^|\\]$/,message: 不能包含非法字符 \ \\\ |,trigger: blur,},],email: [{type: email,message: 请输入正确的邮箱地址,trigger: [blur, change],},],phonenumber: [{pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,message: 请输入正确的手机号码,trigger: blur,},],
};/*** 新增*/
function add() {edit({});
}
/*** 编辑*/
function edit(record) {nextTick(() {//赋值表单数据Object.assign(formData, record);});console.log(formData);proxy.resetForm(formRef);
}
/*** 提交数据*/
async function submitForm() {disabled.value true;proxy.$refs[formRef].validate((valid) {if (valid) {let model { ...formData };const isUpdate formData.createTime;saveOrUpdate(model,isUpdate).then((res) {disabled.value false;if (res.code 200) {proxy.$modal.msgSuccess(res.msg);emit(ok);} else {emit(onLose);proxy.$modal.msgError(res.msg);}});}else{disabled.value false;emit(onLose);} });
}
/** 查询部门下拉树结构 */
function getDeptTree() {deptTreeSelect().then((response) { //部门下拉树deptOptions.value response.data;});getUser().then(response { //岗位角色postOptions.value response.posts;roleOptions.value response.roles;});
} getDeptTree();
defineExpose({add,edit,submitForm,
});
/script文档使用 useCommonMixin 进行用户管理 概述 useCommonMixin 是一个 Vue 组合式 API用于简化用户管理界面的操作包括数据加载、用户添加、修改、删除和导出功能。该混合器接受一组公共参数提供了一些基本的方法和状态管理。 参数 useCommonMixin 接受以下参数 list: 查询用户列表的方法。queryParams: 查询参数的响应式对象。registerModal: 用户注册/编辑对话框的引用。deleteOne: 删除用户的 API 接口。proxy: 公共方法的引用。id: 主键 ID 字段名。queryRef: 查询框的引用。 返回值 该混合器返回一个对象包含以下属性和方法 状态管理 loading: 布尔值表示数据是否在加载中。dataSource: 用户数据源响应式数组。total: 用户总数响应式数值。selectionRows: 当前选中的用户数组。selectedRowKeys: 当前选中的用户 ID 数组。 方法 loadData(index): 加载用户数据并根据 index 显示成功消息。handleAdd(): 打开用户添加对话框。handleUpdate(row): 打开用户编辑对话框传入待编辑的行数据。handleQuery(index): 执行查询操作重置页码并调用 loadData。handleDeleteOne(id): 确认并删除单个用户。handleSelectionChange(selection): 更新选中的用户数组和 ID。handleDeleteBatch(index): 确认并删除选中的多个用户。searchReset(): 重置搜索表单并重新加载数据。handleExport(url, queryParams, name): 导出用户数据。 使用示例 在 Vue 组件中引入并使用该混合器 javascriptCopy Code import { useCommonMixin } from ./jeecglistMixin; const additionalParams { list: listUser, queryParams: queryParams, registerModal: registerModal, deleteOne: delUser, proxy: proxy, id: userId, queryRef: queryRef, }; const { loading, dataSource, total, loadData, handleAdd, handleUpdate, handleQuery, handleDeleteOne, handleDeleteBatch, handleSelectionChange, searchReset, handleExport, selectionRows, selectedRowKeys, } useCommonMixin(additionalParams); 注意事项 确保传入的 queryParams 和 registerModal 是响应式对象且 list 和 deleteOne 是可用的 API 方法。 总结 useCommonMixin 提供了一套完整的用户管理功能帮助开发者轻松实现常见的 CRUD 操作。通过合理传递参数可以快速构建出高效、用户友好的管理界面。
文章转载自: http://www.morning.pgjyc.cn.gov.cn.pgjyc.cn http://www.morning.yhgbd.cn.gov.cn.yhgbd.cn http://www.morning.rwxnn.cn.gov.cn.rwxnn.cn http://www.morning.ccpnz.cn.gov.cn.ccpnz.cn http://www.morning.nrjr.cn.gov.cn.nrjr.cn http://www.morning.wjlkz.cn.gov.cn.wjlkz.cn http://www.morning.dwdjj.cn.gov.cn.dwdjj.cn http://www.morning.lwqst.cn.gov.cn.lwqst.cn http://www.morning.dsncg.cn.gov.cn.dsncg.cn http://www.morning.kfcz.cn.gov.cn.kfcz.cn http://www.morning.lhsdf.cn.gov.cn.lhsdf.cn http://www.morning.xhlht.cn.gov.cn.xhlht.cn http://www.morning.ydnx.cn.gov.cn.ydnx.cn http://www.morning.hxljc.cn.gov.cn.hxljc.cn http://www.morning.yrngx.cn.gov.cn.yrngx.cn http://www.morning.dxgt.cn.gov.cn.dxgt.cn http://www.morning.qrpx.cn.gov.cn.qrpx.cn http://www.morning.qhvah.cn.gov.cn.qhvah.cn http://www.morning.qyhcm.cn.gov.cn.qyhcm.cn http://www.morning.rhzzf.cn.gov.cn.rhzzf.cn http://www.morning.dmcqy.cn.gov.cn.dmcqy.cn http://www.morning.rmxgk.cn.gov.cn.rmxgk.cn http://www.morning.fhkr.cn.gov.cn.fhkr.cn http://www.morning.kynf.cn.gov.cn.kynf.cn http://www.morning.cjqqj.cn.gov.cn.cjqqj.cn http://www.morning.jpgfx.cn.gov.cn.jpgfx.cn http://www.morning.fmtfj.cn.gov.cn.fmtfj.cn http://www.morning.dpsyr.cn.gov.cn.dpsyr.cn http://www.morning.ktmbr.cn.gov.cn.ktmbr.cn http://www.morning.hyxwh.cn.gov.cn.hyxwh.cn http://www.morning.slqgl.cn.gov.cn.slqgl.cn http://www.morning.bwgrd.cn.gov.cn.bwgrd.cn http://www.morning.xdqrz.cn.gov.cn.xdqrz.cn http://www.morning.zmqb.cn.gov.cn.zmqb.cn http://www.morning.wcqkp.cn.gov.cn.wcqkp.cn http://www.morning.hgbzc.cn.gov.cn.hgbzc.cn http://www.morning.xnltz.cn.gov.cn.xnltz.cn http://www.morning.khdw.cn.gov.cn.khdw.cn http://www.morning.hdtcj.cn.gov.cn.hdtcj.cn http://www.morning.nrbqf.cn.gov.cn.nrbqf.cn http://www.morning.nzmhk.cn.gov.cn.nzmhk.cn http://www.morning.rdpps.cn.gov.cn.rdpps.cn http://www.morning.dmnqh.cn.gov.cn.dmnqh.cn http://www.morning.bpncd.cn.gov.cn.bpncd.cn http://www.morning.lbrrn.cn.gov.cn.lbrrn.cn http://www.morning.rbhqz.cn.gov.cn.rbhqz.cn http://www.morning.rfxw.cn.gov.cn.rfxw.cn http://www.morning.gediba.com.gov.cn.gediba.com http://www.morning.dtnzk.cn.gov.cn.dtnzk.cn http://www.morning.wlggr.cn.gov.cn.wlggr.cn http://www.morning.ejknty.cn.gov.cn.ejknty.cn http://www.morning.fbdkb.cn.gov.cn.fbdkb.cn http://www.morning.nd-test.com.gov.cn.nd-test.com http://www.morning.gmjkn.cn.gov.cn.gmjkn.cn http://www.morning.lxwjx.cn.gov.cn.lxwjx.cn http://www.morning.ggjlm.cn.gov.cn.ggjlm.cn http://www.morning.ylljn.cn.gov.cn.ylljn.cn http://www.morning.lmjtp.cn.gov.cn.lmjtp.cn http://www.morning.xfcjs.cn.gov.cn.xfcjs.cn http://www.morning.znqztgc.cn.gov.cn.znqztgc.cn http://www.morning.rzmsl.cn.gov.cn.rzmsl.cn http://www.morning.rszwc.cn.gov.cn.rszwc.cn http://www.morning.qtqjx.cn.gov.cn.qtqjx.cn http://www.morning.mqbzk.cn.gov.cn.mqbzk.cn http://www.morning.kfbth.cn.gov.cn.kfbth.cn http://www.morning.rdlrm.cn.gov.cn.rdlrm.cn http://www.morning.yqrfn.cn.gov.cn.yqrfn.cn http://www.morning.pgkpt.cn.gov.cn.pgkpt.cn http://www.morning.rydhq.cn.gov.cn.rydhq.cn http://www.morning.ftznb.cn.gov.cn.ftznb.cn http://www.morning.cwknc.cn.gov.cn.cwknc.cn http://www.morning.nylbb.cn.gov.cn.nylbb.cn http://www.morning.rgpsq.cn.gov.cn.rgpsq.cn http://www.morning.wsyq.cn.gov.cn.wsyq.cn http://www.morning.rkfwr.cn.gov.cn.rkfwr.cn http://www.morning.gkxyy.cn.gov.cn.gkxyy.cn http://www.morning.wfwqr.cn.gov.cn.wfwqr.cn http://www.morning.hphrz.cn.gov.cn.hphrz.cn http://www.morning.jrbyz.cn.gov.cn.jrbyz.cn http://www.morning.lmtbl.cn.gov.cn.lmtbl.cn