Commit a1ef092e authored by 张耀's avatar 张耀

Merge branch 'dev' into zy

parents d972548e 411e5037
......@@ -173,7 +173,7 @@ const headers = reactive([
},
{
label: "手机号",
prop: "contact_phone",
prop: "phone",
minWidth: 150,
},
{
......
......@@ -4,7 +4,7 @@
<div class="page_content apaas_scroll">
<div class="info_row">
<div class="title">
<div><span class="icon_box"></span> 账号信息</div>
<div><span class="icon_box"></span> 基础信息</div>
<div class="dashed_line"></div>
</div>
<div class="info_content">
......@@ -17,20 +17,14 @@
alt="" />
</div>
<div class="info_box">
<bg-info :data="accountInfo"></bg-info>
</div>
</div>
</div>
<div>
<div class="title">
<div><span class="icon_box"></span> 个人信息</div>
<div class="dashed_line"></div>
</div>
<div class="info_content">
<div class="img_box"></div>
<div class="info_box">
<bg-info v-if="accountType === 2" :data="personInfo"></bg-info>
<bg-info v-if="accountType === 3" :data="personInfo2"></bg-info>
<bg-detail-table2 class="detail_info" :list="accountInfo">
<template #state="{ data }">
<p class="detail-module">
<span>{{ data.label }}</span>
<span :class="data.value ? 'active' : 'disabled'">{{ data.value ? "启用" : "禁用" }}</span>
</p>
</template>
</bg-detail-table2>
</div>
</div>
</div>
......@@ -39,7 +33,7 @@
</template>
<script setup>
import { reactive, toRefs, ref, computed, onBeforeMount } from "vue";
import { reactive, ref, onBeforeMount } from "vue";
import { useRoute } from "vue-router";
import axios from "@/request/http.js";
import { ElMessage } from "element-plus";
......@@ -48,120 +42,64 @@ const route = useRoute();
const accountInfo = reactive([
{
name: "手机号",
value: "",
nameWidth: 130,
},
{
name: "账号",
value: "",
nameWidth: 130,
},
{
name: "角色",
value: "",
nameWidth: 130,
},
{
name: "所属组织",
value: "",
nameWidth: 130,
},
{
name: "创建人",
key: "name",
label: "姓名",
value: "",
nameWidth: 130,
},
{
name: "创建账号",
key: "organization",
label: "所属组织",
value: "",
nameWidth: 130,
},
{
name: "最后编辑时间",
key: "system_account",
label: "账号",
value: "",
nameWidth: 130,
},
{
name: "创建时间",
key: "phone",
label: "手机号",
value: "",
nameWidth: 130,
},
]);
const personInfo = reactive([
{
name: "姓名",
value: "",
nameWidth: 130,
},
{
name: "邮箱",
value: "",
nameWidth: 130,
},
{
name: "证据类型",
value: "",
nameWidth: 130,
},
{
name: "身份证号",
key: "system_role",
label: "角色",
value: "",
idCard: true,
nameWidth: 130,
},
{
name: "备注",
key: "state",
label: "是否启用",
value: "",
full: true,
nameWidth: 130,
},
]);
const personInfo2 = reactive([
{
name: "姓名",
value: "",
nameWidth: 130,
slot: "state",
},
{
name: "邮箱",
key: "created_name",
label: "创建人",
value: "",
nameWidth: 130,
},
{
name: "备注",
key: "created_time",
label: "创建时间",
value: "",
full: true,
nameWidth: 130,
},
]);
const logo = ref("");
const accountType = ref(2); //1.业务系统账号 2.组织管理员账号 3.平台用户账号
const getDetail = () => {
axios.get(`/apaas/system/v5/org/user/${route.query.id}`).then((res) => {
axios.get(`/v1/api/user/${route.query.id}`).then((res) => {
if (res.data.code == 200) {
const detail = res.data.data;
accountInfo[0].value = detail.contact_phone;
accountInfo[1].value = detail.system_account;
accountInfo[2].value = detail.system_role && detail.system_role.length > 0 ? detail.system_role.join("") : "";
accountInfo[3].value = detail.organization;
accountInfo[4].value = detail.created_by;
accountInfo[5].value = detail.created_by_account;
accountInfo[6].value = detail.updated_time;
accountInfo[0].value = detail.name;
accountInfo[1].value = detail.organization;
accountInfo[2].value = detail.system_account;
accountInfo[3].value = detail.phone;
accountInfo[4].value =
detail.system_role_name && detail.system_role_name.length > 0 ? detail.system_role_name.join("") : "";
accountInfo[5].value = detail.state;
accountInfo[6].value = detail.created_name;
accountInfo[7].value = detail.created_time;
personInfo[0].value = detail.contact_name;
personInfo[1].value = detail.contact_email;
personInfo[2].value = detail.document_type === 1 ? "身份证" : "";
personInfo[3].value = detail.document_number;
personInfo[4].value = detail.remark;
personInfo2[0].value = detail.contact_name;
personInfo2[1].value = detail.contact_email;
personInfo2[2].value = detail.remark;
logo.value = detail.logo;
accountType.value = detail.is_admin;
} else {
ElMessage.error(res.data.data);
}
......@@ -175,7 +113,7 @@ onBeforeMount(() => {
});
</script>
<style scoped>
<style scoped lang="scss">
.page_content {
padding: 15px;
overflow: auto;
......@@ -216,4 +154,42 @@ onBeforeMount(() => {
border-radius: 2px;
margin-right: 5px;
}
.detail-module {
height: 100%;
display: flex;
span {
height: 100%;
display: inline-block;
padding-left: 15px;
box-sizing: border-box;
&:nth-of-type(1) {
background-color: #f7f7f9;
min-width: 114px;
border-right: solid 1px #dadee7;
}
&:nth-of-type(2) {
flex-grow: 1;
&::before {
display: inline-block;
content: "";
width: 8px;
height: 8px;
margin-right: 4px;
border-radius: 4px;
}
&.active {
color: #3759be;
&::before {
background-color: #3759be;
}
}
&.disabled {
color: #ff9f51;
&::before {
background-color: #ff9f51;
}
}
}
}
}
</style>
......@@ -26,6 +26,7 @@ import { useRoute, useRouter } from "vue-router";
import systemForm from "./system-form.vue";
import { reactive, ref, onBeforeUnmount, onMounted } from "vue";
import axios from "@/request/http.js";
import CryptoJS from "crypto-js";
import { ElMessage } from "element-plus";
import bgBreadcrumb from "@/components/bg-breadcrumb.vue";
const route = useRoute();
......@@ -57,42 +58,51 @@ const getSystemFormData = (data) => {
};
//提交表单
const submit = () => {
if (route.query.id) {
let params = {
...formData,
logo: formData.logo && formData.logo.length > 0 ? formData.logo[0].url : "",
};
axios.put(`/v1/api/user/${route.query.id}`, params).then((res) => {
if (res.data.code == 200) {
ElMessage.success(res.data.msg);
cancel();
} else {
ElMessage.error(res.data.data);
}
});
} else {
let params = {
...formData,
logo: formData.logo && formData.logo.length > 0 ? formData.logo[0].url : "",
password: CryptoJS.AES.encrypt(formData.password, "swuE9cmCZQwrkYRV").toString(),
};
axios.put(`/v1/api/user/add`, params).then((res) => {
if (res.data.code == 200) {
ElMessage.success(res.data.msg);
cancel();
} else {
ElMessage.error(res.data.data);
}
});
}
systemFormRef.value.validateForm().then((res) => {
if (!res) return;
if (route.query.id) {
let params = {
...systemFormRef.value.systemForm,
logo:
systemFormRef.value.systemForm.logo && systemFormRef.value.systemForm.logo.length > 0
? systemFormRef.value.systemForm.logo[0].url
: "",
};
axios.put(`/v1/api/user/${route.query.id}`, params).then((res) => {
if (res.data.code == 200) {
ElMessage.success(res.data.msg);
cancel();
} else {
ElMessage.error(res.data.data);
}
});
} else {
let params = {
...systemFormRef.value.systemForm,
logo:
systemFormRef.value.systemForm.logo && systemFormRef.value.systemForm.logo.length > 0
? systemFormRef.value.systemForm.logo[0].url
: "",
password: CryptoJS.AES.encrypt(systemFormRef.value.systemForm.password, "swuE9cmCZQwrkYRV").toString(),
};
delete params.confirm_password;
axios.post(`/v1/api/user/add`, params).then((res) => {
if (res.data.code == 200) {
ElMessage.success(res.data.msg);
cancel();
} else {
ElMessage.error(res.data.data);
}
});
}
});
};
//取消
const cancel = () => {
// router.go(-1);
router.push({
path: "/authority/user",
query: {
id: formData.organization_id,
organization_id: systemFormRef.value.systemForm.organization_id,
},
});
};
......@@ -103,18 +113,12 @@ const getDetail = () => {
const form = res.data.data;
systemFormRef.value.setForm({
organization_id: form.organization_id,
system_role_id: form.system_role_id,
select_role: form.system_role,
logo: form.logo ? [{ url: form.logo }] : [],
business_code: form.business_code,
business_name: form.business_name,
business_desc: form.business_desc,
name: form.name,
system_account: form.system_account,
system_phone: form.system_phone,
access_address: form.access_address,
develop_id: form.develop_id,
phone: form.phone,
state: form.state,
appid: form.app_id,
appsecret: form.app_secret,
});
} else {
ElMessage.error(res.data.data);
......
......@@ -15,37 +15,10 @@
:disabled="formType"
style="width: 100%" />
</el-form-item>
<el-form-item label="业务系统编码" prop="business_code" v-if="formType">
<el-input v-model="systemForm.business_code" :disabled="formType" />
<el-form-item label="姓名" prop="name">
<el-input v-model="systemForm.name" />
</el-form-item>
<el-form-item label="业务系统名称" prop="business_name">
<el-input v-model="systemForm.business_name" />
</el-form-item>
<el-form-item label="AppId" prop="appid" v-if="formType">
<el-input v-model="systemForm.appid" :disabled="formType">
<template #suffix>
<bg-icon
icon="#bg-ic-copy"
style="cursor: pointer"
@click="copyText(systemForm.appid)"></bg-icon>
</template>
</el-input>
<!-- <span class="pl-1"><el-button type="primary" @click="copyText(systemForm.appid)">复制</el-button></span> -->
</el-form-item>
<el-form-item label="AppSecret" prop="appsecret" v-if="formType">
<div style="display: flex; width: 100%">
<el-input v-model="systemForm.appsecret" :disabled="formType">
<template #suffix>
<bg-icon
icon="#bg-ic-copy"
style="cursor: pointer"
@click="copyText(systemForm.appsecret)"></bg-icon>
</template>
</el-input>
<span class="pl-1"><el-button type="primary" @click="resetSecret">重置</el-button></span>
</div>
</el-form-item>
<el-form-item label="系统LOGO" prop="logo">
<el-form-item label="头像" prop="logo">
<bg-upload-image
v-model="systemForm.logo"
:showTips="true"
......@@ -56,62 +29,31 @@
:accept="['.jpg', '.jpeg', '.png']"
customTips="请选择图片上传:大小120 * 120像素支持jpg、png等格式,图片需小于500KB"></bg-upload-image>
</el-form-item>
<el-form-item label="业务系统概述" prop="business_desc">
<el-input
type="textarea"
:rows="3"
v-model="systemForm.business_desc"
show-word-limit
maxlength="300" />
</el-form-item>
<el-form-item label="角色" prop="system_role_id" v-if="!formType">
<el-select
v-model="systemForm.system_role_id"
placeholder="请选择角色"
:disabled="true"
style="width: 100%">
<el-option
v-for="item in roleList"
:key="item.role_id"
:label="item.role_name"
:value="item.role_id" />
<el-form-item label="角色" prop="select_role">
<el-select v-model="systemForm.select_role" multiple placeholder="请选择角色" style="width: 100%">
<el-option v-for="item in roleList" :key="item.role_id" :label="item.role_name" :value="item.role_id" />
</el-select>
</el-form-item>
<el-form-item label="账号" prop="system_account">
<el-input v-model="systemForm.system_account" />
</el-form-item>
<el-form-item label="手机号" prop="system_phone">
<el-input v-model="systemForm.system_phone" />
<el-form-item label="手机号" prop="phone">
<el-input v-model="systemForm.phone" />
</el-form-item>
<el-form-item label="密码" prop="password" v-if="!formType">
<el-form-item v-if="!formType" label="密码" prop="password">
<el-input :type="password_eye ? 'text' : 'password'" v-model="systemForm.password">
<template #suffix>
<bg-icon
@click="password_eye = !password_eye"
class="icon_eye"
icon="#bg-ic-eye"></bg-icon>
<bg-icon @click="password_eye = !password_eye" class="icon_eye" icon="#bg-ic-eye"></bg-icon>
</template>
</el-input>
</el-form-item>
<el-form-item label="确认密码" prop="confirm_password" v-if="!formType">
<el-form-item v-if="!formType" label="确认密码" prop="confirm_password">
<el-input :type="confirm_eye ? 'text' : 'password'" v-model="systemForm.confirm_password">
<template #suffix>
<bg-icon @click="confirm_eye = !confirm_eye" class="icon_eye" icon="#bg-ic-eye"></bg-icon>
</template>
</el-input>
</el-form-item>
<el-form-item label="访问地址" prop="access_address">
<el-input v-model="systemForm.access_address" />
</el-form-item>
<el-form-item label="开发厂商名称" prop="develop_id">
<el-select v-model="systemForm.develop_id" placeholder="请选择开发厂商" style="width: 100%">
<el-option
v-for="item in firmList"
:key="item.dict_id"
:label="item.dict_name"
:value="item.dict_id" />
</el-select>
</el-form-item>
<el-form-item label="是否启用" prop="state">
<bg-switch :labels="['否', '是']" :values="[0, 1]" v-model="systemForm.state"></bg-switch>
</el-form-item>
......@@ -119,7 +61,7 @@
</template>
<script setup>
import { reactive, ref, onBeforeMount, onMounted, computed } from "vue";
import { reactive, ref, onBeforeMount, onMounted, watch } from "vue";
import axios from "@/request/http.js";
import { ElMessage } from "element-plus";
import { validatePhone } from "@/services/rules.js";
......@@ -128,27 +70,17 @@ const props = defineProps({
type: Boolean,
default: false, //false 新增 true 编辑
},
id: {
type: String,
default: "",
},
});
const systemForm = reactive({
organization_id: "",
business_code: "",
business_name: "",
business_desc: "",
name: "",
logo: [],
system_role_id: "",
select_role: [],
system_account: "",
system_phone: "",
phone: "",
password: "",
confirm_password: "",
access_address: "",
develop_id: "",
state: 1,
appid: "",
appsecret: "",
});
const password_eye = ref(false);
const confirm_eye = ref(false);
......@@ -160,88 +92,22 @@ const validatePass = (rule, value, callback) => {
callback();
}
};
const validateBusinessName = (rule, value, callback) => {
let reg = /^[a-zA-Z0-9\u4e00-\u9fa5]+$/;
if (!reg.test(value)) {
callback(new Error("只能输入字母、数字和汉字"));
} else {
let params = null;
if (props.id) {
params = {
id: parseInt(props.id),
business_name: value,
organization_id: systemForm.organization_id,
};
} else {
params = { business_name: value, organization_id: systemForm.organization_id };
}
axios.post(`/apaas/system/v5/user/check/business`, params).then((res) => {
if (res.data.code == 200) {
callback();
} else {
callback(new Error(res.data.data));
}
});
}
};
const validateSystemAccount = (rule, value, callback) => {
let reg = /^[a-zA-Z0-9]+$/;
if (!reg.test(value)) {
callback(new Error("只能输入字母和数字"));
} else {
let params = null;
if (props.id) {
params = { id: parseInt(props.id), system_account: value };
} else {
params = { system_account: value };
}
axios.post(`/apaas/system/v5/user/check/account`, params).then((res) => {
if (res.data.code == 200) {
callback();
} else {
callback(new Error(res.data.data));
}
});
}
};
const checkPhoneRepet = (rule, value, callback) => {
let params = null;
if (props.id) {
params = { id: parseInt(props.id), contact_phone: value };
} else {
params = { id: 0, contact_phone: value };
}
axios.post(`/apaas/system/v5/org/check`, params).then((res) => {
if (res.data.code == 200) {
callback();
} else {
callback(new Error(res.data.data));
}
});
};
const formRules = reactive({
organization_id: [{ required: true, message: "请选择组织", trigger: "change" }],
business_name: [
{ required: true, message: "请输入业务系统名称", trigger: "blur" },
{ max: 50, message: "业务系统名称最大长度为50个字符", trigger: "blur" },
{ validator: validateBusinessName, trigger: "blur" },
name: [
{ required: true, message: "请输入姓名", trigger: "blur" },
{ max: 50, message: "姓名最大长度为50个字符", trigger: "blur" },
],
system_role_id: [{ required: true, message: "请选择角色", trigger: "blur" }],
select_role: [{ required: true, type: "array", message: "请选择角色", trigger: "change" }],
system_account: [
{ required: true, message: "请输入账号", trigger: "blur" },
{ min: 4, message: "帐号长度不得低于4个字符", trigger: "blur" },
{ max: 20, message: "帐号最大长度为20个字符", trigger: "blur" },
{ validator: validateSystemAccount, trigger: "blur" },
],
system_phone: [
phone: [
{ required: true, message: "请输入账号", trigger: "blur" },
{ validator: validatePhone, trigger: "blur" },
{ validator: checkPhoneRepet, trigger: "blur" },
],
password: [
{ required: true, message: "请输入密码", trigger: "blur" },
......@@ -251,34 +117,21 @@ const formRules = reactive({
{ required: true, message: "请确认密码", trigger: "blur" },
{ validator: validatePass, trigger: "blur" },
],
access_address: [{ max: 500, message: "访问地址最大长度为500个字符", trigger: "blur" }],
develop_id: [{ required: true, message: "请选择开发厂商", trigger: "change" }],
});
const systemRef = ref(null);
const emit = defineEmits(["action"]);
const roleList = ref([]);
const firmList = ref([]);
const submitForm = async () => {
if (!systemRef) return;
await systemRef.value.validate((valid, fields) => {
if (valid) {
emit("action", systemForm);
} else {
emit("action", null);
}
});
};
const clearForm = () => {
if (!systemRef) return;
systemRef.value.resetFields();
systemForm.system_role_id = roleList.value[0].role_id;
};
watch(
() => systemForm.organization_id,
(val) => {
getRoleList(val);
}
);
const setForm = (data) => {
Object.assign(systemForm, data);
console.log("systemForm", systemForm);
};
const orgData = ref([]);
......@@ -288,62 +141,36 @@ const treeProps = {
value: "organization_id",
};
const getOrgTree = () => {
axios.get(`/apaas/system/v5/org/tree`).then((res) => {
axios.get(`/v1/api/org/tree`).then((res) => {
if (res.data.code == 200) {
const orgDataTemp = res.data.data || [];
orgDataTemp.shift();
orgData.value = orgDataTemp;
} else {
ElMessage.error(res.data.data);
}
});
};
const copyText = (data) => {
navigator.clipboard.writeText(data).then(
function () {
ElMessage.success("复制成功");
},
function () {}
);
};
const resetSecret = () => {
axios.get(`/apaas/system/v5/user/reset/secret/${props.id}`).then((res) => {
if (res.data.code == 200) {
systemForm.appsecret = res.data.data;
ElMessage.success("重置成功!");
} else {
ElMessage.error(res.data.data);
}
});
};
const getRoleList = () => {
axios.get(`/apaas/system/v5/org/select/role?is_admin=1`).then((res) => {
const getRoleList = (oid) => {
axios.get(`/v1/api/user/select/role`, { params: { oid } }).then((res) => {
if (res.data.code == 200) {
roleList.value = res.data.data;
systemForm.system_role_id = roleList.value[0].role_id;
} else {
ElMessage.error(res.data.data);
}
});
};
const getFirmList = () => {
axios.get(`/apaas/system/v5/dictionary/developer/list`).then((res) => {
if (res.data.code == 200) {
firmList.value = res.data.data || [];
} else {
ElMessage.error(res.data.data);
}
const validateForm = () => {
return new Promise((resolve, reject) => {
systemRef.value.validate((res) => resolve(res));
});
};
onBeforeMount(() => {
getOrgTree();
getRoleList();
getFirmList();
});
onMounted(() => {});
defineExpose({ submitForm, clearForm, setForm });
defineExpose({ systemForm, setForm, validateForm });
</script>
......@@ -55,11 +55,6 @@
:stripe="true"
:select="true"
@selectAc="selectRows">
<template v-slot:business_name="{ row }">
<span @click="goDetail(row)" class="can_click_text">
{{ row.business_name }}
</span>
</template>
<template v-slot:state="{ row }">
<bg-switch
@click="stateChange(row)"
......@@ -106,7 +101,7 @@
<bg-icon
style="font-size: 12px; color: #a9b1c7; margin-right: 8px; vertical-align: baseline"
icon="#bg-ic-circle-tips"></bg-icon>
您正在对 <span class="danger_info">{{ selectedRow.business_name }}</span
您正在对 <span class="danger_info">{{ selectedRow.system_account }}</span
>做删除操作。
</div>
<template #footer>
......@@ -137,7 +132,7 @@
<bg-icon
style="font-size: 12px; color: #a9b1c7; margin-right: 8px; vertical-align: baseline"
icon="#bg-ic-circle-tips"></bg-icon>
您正在对 <span class="danger_info">{{ selectedRow.business_name }}</span
您正在对 <span class="danger_info">{{ selectedRow.system_account }}</span
>做修改密码操作,修改后旧密码将无法登录。
</div>
<div>
......@@ -192,13 +187,13 @@ import bgBreadcrumb from "@/components/bg-breadcrumb.vue";
const dataTable = ref(null);
const headers = ref([
{
label: "业务系统编码",
prop: "business_code",
label: "姓名",
prop: "name",
minWidth: 160,
},
{
label: "业务系统名称",
prop: "business_name",
label: "手机号",
prop: "phone",
minWidth: 160,
},
{
......@@ -207,7 +202,7 @@ const headers = ref([
},
{
label: "所属组织",
prop: "organization_name",
prop: "org_name",
minWidth: 180,
},
{
......@@ -227,7 +222,6 @@ const headers = ref([
},
]);
const tableRows = ref([]);
const search = ref("");
const filter = reactive({
search: "",
page: 1,
......@@ -281,22 +275,22 @@ const getTableRows = () => {
})
.then((res) => {
if (res.data.code == 200) {
tableRows.value = res.data.data || [];
tableTotal.value = res.data.total;
tableRows.value = res.data.data?.org_users?.data || [];
tableTotal.value = res.data.data?.org_users?.total || 0;
} else {
ElMessage.error(res.data.data);
}
});
};
const addAccount = (params) => {
const addAccount = () => {
router.push({
path: "/authority/user/add",
});
};
const handleNodeClick = (data) => {
if (data.data_type == 1) {
if (data.data_type > 0) {
selectNode.value = data.organization_id;
changePage(1);
} else {
......@@ -326,7 +320,6 @@ const getOrgTree = () => {
orgData.value = res.data.data || [];
// orgData.value.shift();
const orgList = searchOrg(orgData.value);
console.log("orgList", orgList);
if (route.query.organization_id) {
searchItem(orgData.value, route.query.organization_id);
} else {
......@@ -386,9 +379,10 @@ const filterNode = (value, data) => {
};
const stateChange = (row) => {
console.log("row", row);
const params = {
id: row.id,
state: row.state == 1 ? 0 : 1,
state: row.state,
};
axios.post(`/v1/api/user/updateState`, params).then((res) => {
if (res.data.code == 200) {
......@@ -544,7 +538,7 @@ const editConfirm = () => {
const selectRows = (data) => {
selected.value = data.selection;
selectedName.value = data.selection.map((item) => item.business_name);
selectedName.value = data.selection.map((item) => item.system_account);
};
const clearSelected = () => {
......
......@@ -14,11 +14,11 @@
<div class="type_station bg-scroll">
<div
class="type-box"
:class="{ 'current-type': nodeClassifyId == item.classify_id }"
:class="{ 'current-type': nodeClassifyId == item.class_id }"
@click="nodeClick(item)"
v-for="(item, index) in typeList"
:key="'type' + index + 200">
{{ item.classify_name }}
{{ item.class_name }}
</div>
</div>
</div>
......@@ -32,7 +32,7 @@
<!-- <bg-icon style="font-size: 12px; color: #fff; margin-right: 8px" icon="#bg-ic-add"></bg-icon> -->
返回上级
</el-button>
<el-button type="primary" @click="register">
<el-button v-if="nodeClassifyId !== 2" type="primary" @click="register">
<bg-icon style="font-size: 12px; color: #fff; margin-right: 8px" icon="#bg-ic-add"></bg-icon>
新增
</el-button>
......@@ -42,7 +42,7 @@
<div class="left-filter filter_list">
<div class="filter_item">
<span class="filter_title">状态</span>
<el-select v-model="filter.state" placeholder="请选择" style="width: 300px">
<el-select v-model="filter.status" placeholder="请选择" style="width: 300px">
<el-option
v-for="(item, index) in stateOptions"
:key="'pushOptions' + index"
......@@ -69,27 +69,24 @@
{{ row.name }}
</span>
</template>
<template v-slot:updated_time="{ row }">
{{ row.updated_time.split("+")[0].replace("T", " ").replace("Z", " ") }}
</template>
<template v-slot:state="{ row }">
<template v-slot:status="{ row }">
<bg-switch
@click="changeUseRow(row)"
:labels="['否', '是']"
:values="[0, 1]"
v-model="row.state"></bg-switch>
:values="[2, 1]"
v-model="row.status"></bg-switch>
</template>
<template v-slot:action="{ row }">
<!-- 除技术类型之外的字典可以删除 -->
<bg-table-btns2 :limit="3" v-if="nodeClassifyId !== '263758a4-0349-4d49-a816-e8ff8d33a8bb'">
<bg-table-btn @click="edit_row(row)" :disabled="row.state == 1">编辑</bg-table-btn>
<bg-table-btn @click="delete_row(row)" :disabled="row.state == 1">删除</bg-table-btn>
<bg-table-btns2 :limit="3" v-if="nodeClassifyId !== 2">
<bg-table-btn @click="edit_row(row)" :disabled="row.status == 1">编辑</bg-table-btn>
<bg-table-btn @click="delete_row(row)" :disabled="row.status == 1">删除</bg-table-btn>
<bg-table-btn @click="moveRow(row, 1)" :disabled="!row.canMoveUp">上移</bg-table-btn>
<bg-table-btn @click="moveRow(row, 2)" :disabled="!row.canMoveDown">下移</bg-table-btn>
</bg-table-btns2>
<!-- 技术类型字典不可删除 -->
<bg-table-btns2 :limit="3" v-else>
<bg-table-btn @click="edit_row(row)" :disabled="row.state == 1">编辑</bg-table-btn>
<bg-table-btn @click="edit_row(row)" :disabled="row.status == 1">编辑</bg-table-btn>
<bg-table-btn @click="moveRow(row, 1)" :disabled="!row.canMoveUp">上移</bg-table-btn>
<bg-table-btn @click="moveRow(row, 2)" :disabled="!row.canMoveDown">下移</bg-table-btn>
</bg-table-btns2>
......@@ -111,23 +108,32 @@
<el-dialog class="dialog_box" :title="addType == 1 ? '新增' : '编辑'" v-model="addDialog" width="758px">
<el-form ref="bgForm" :model="formData" :rules="rules" label-width="80px" class="bg_form">
<el-form-item label="名称" prop="name">
<el-input
v-model.trim="formData.name"
show-word-limit
:maxlength="
nodeClassifyId == 'eb9c7d70-c123-42b7-8e61-dde1b022b669'
? 6
: nodeClassifyId == 'efd9ec3b-7f18-49e2-9d88-bcca022243bb'
? 4
: nodeClassifyId == '949a1138-4995-464e-97a9-424d097eb271'
? 2
: 20
"
placeholder="请输入名称"></el-input>
<el-input v-model.trim="formData.name" show-word-limit maxlength="6" placeholder="请输入名称"></el-input>
</el-form-item>
<el-form-item
v-if="nodeClassifyId === 3"
label="单位"
prop="unit"
:rules="[{ required: true, message: '请输入单位', trigger: 'blur' }]">
<el-input v-model.trim="formData.unit" show-word-limit maxlength="4" placeholder="请输入单位"></el-input>
</el-form-item>
<el-form-item
v-if="nodeClassifyId === 3"
label="值域上限"
prop="max_val"
:rules="[{ validator: validateNumber, trigger: 'blur' }]">
<el-input v-model.trim="formData.max_val" placeholder="请输入正整数"></el-input>
</el-form-item>
<el-form-item label="描述" prop="describe">
<el-form-item
v-if="nodeClassifyId === 3"
label="值域下限"
prop="min_val"
:rules="[{ validator: validateNumber, trigger: 'blur' }]">
<el-input v-model.trim="formData.min_val" placeholder="请输入正整数"></el-input>
</el-form-item>
<el-form-item label="描述" prop="description">
<el-input
v-model="formData.describe"
v-model="formData.description"
type="textarea"
:autosize="{ minRows: 5 }"
show-word-limit
......@@ -135,12 +141,12 @@
resize="vertical"
placeholder="请输入描述"></el-input>
</el-form-item>
<el-form-item label="是否启用" prop="state" style="margin-bottom: 0px">
<el-form-item label="是否启用" prop="status" style="margin-bottom: 0px">
<el-switch
class="bg-switch-ele"
v-model="formData.state"
v-model="formData.status"
:active-value="1"
:inactive-value="0"
:inactive-value="2"
inline-prompt
active-text="是"
inactive-text="否" />
......@@ -183,6 +189,14 @@ import { Search } from "@element-plus/icons-vue";
import bgBreadcrumb from "@/components/bg-breadcrumb.vue";
const bgForm = ref(null);
const validateNumber = (rule, value, callback) => {
if (value !== "" && /^(?:[1-9]\d*)$/.test(value) == false) {
callback(new Error("请输入正整数"));
} else {
callback();
}
};
const headers = computed(() => {
let _headers = [
{
......@@ -191,17 +205,17 @@ const headers = computed(() => {
},
{
label: "描述",
prop: "describe",
prop: "description",
minWidth: 360,
},
{
label: "更新时间",
prop: "updated_time",
prop: "updated_at",
width: 220,
},
{
label: "是否启用",
prop: "state",
prop: "status",
},
{
label: "操作",
......@@ -211,18 +225,25 @@ const headers = computed(() => {
},
];
if (state.nodeClassifyId === "59315100-5c2a-4381-83fe-32934605f0a9") {
_headers.splice(1, 0, {
label: "版本数",
prop: "total_children",
});
}
if (state.nodeClassifyId === "b3a083ee-a8c1-8ca4-f9a1-ea01692a0f1a") {
_headers.splice(1, 0, {
label: "服务名称",
prop: "service_name",
});
if (state.nodeClassifyId === 3) {
_headers.splice(
1,
0,
{
label: "单位",
prop: "unit",
},
{
label: "值域上限",
prop: "max_val",
},
{
label: "值域下限",
prop: "min_val",
}
);
}
return _headers;
});
const state = reactive({
......@@ -230,15 +251,14 @@ const state = reactive({
typeList: [], // 分类数据
typeKeyword: "", // 分类删选关键词
nodeClassifyId: null, // 当前选中分类的uuid 用于新增字典
nodeId: null, // 当前选中分类的id 用于请求列表
timer: null, // 定时器
tableRows: [], // 表格数据
tableTotal: 0, // 表格数据条数
filter: {
state: "",
status: "",
search: "",
page: 1,
limit: 10,
page_size: 10,
}, // 表格筛选项
stateOptions: [
{
......@@ -260,17 +280,19 @@ const state = reactive({
addDialog: false,
formData: {
name: "",
describe: "",
state: 1,
p_dict_id: "",
description: "",
status: 1,
unit: "",
max_val: "",
min_val: "",
},
rules: {
name: [{ required: true, message: "请输入名称", trigger: "blur" }],
describe: [
description: [
{ required: true, message: "请输入描述", trigger: "blur" },
{ max: 200, message: "描述最大为200字", trigger: "blur" },
],
state: [{ required: true, message: "请选择是否启用", trigger: "change" }],
status: [{ required: true, message: "请选择是否启用", trigger: "change" }],
},
fatherRow: null,
});
......@@ -289,15 +311,14 @@ const backDict = () => {
changePage(1);
};
const nodeClick = (item) => {
state.nodeId = item.id;
dictLevel.value = 1;
state.fatherRow = null;
state.nodeClassifyId = item.classify_id;
state.nodeClassifyId = item.class_id;
state.filter = {
state: "",
status: "",
search: "",
page: 1,
limit: 10,
page_size: 10,
};
changePage(1);
}; // 切换字典分类
......@@ -313,18 +334,15 @@ const searchType = () => {
const getTypeList = () => {
let params = {
name: state.typeKeyword,
class_name: state.typeKeyword,
};
axios
.get(`/apaas/system/v5/dictionary/classify/list`, { params })
.get(`/v1/api/dict/classList`, { params })
.then((res) => {
if (res.data.code == 200) {
state.typeList = res.data.data || [];
state.nodeClassifyId = state.typeList[0].classify_id || null;
state.nodeId = state.typeList[0].id || null;
if (state.nodeId) {
getTableRows();
}
state.nodeClassifyId = state.typeList[0].class_id || null;
getTableRows();
} else {
ElMessage.error(res.data.data);
}
......@@ -345,19 +363,18 @@ const filterAction = () => {
const filterClear = () => {
state.filter = {
state: "",
status: "",
search: "",
limit: 10,
page_size: 10,
page: 1,
};
changePage(1);
}; // 重置筛选项
const getTableRows = () => {
let params = { ...state.filter };
params.id = state.nodeId;
let params = { ...state.filter, class: state.nodeClassifyId };
axios
.get(`/apaas/system/v5/dictionary/list`, {
.get(`/v1/api/dict`, {
params,
})
.then((res) => {
......@@ -388,13 +405,13 @@ const getTableRows = () => {
}; // 获取表格数据
const changeUseRow = (row) => {
axios.put(`/apaas/system/v5/dictionary/state?id=${row.id}&state=${row.state}`).then((res) => {
axios.put(`/v1/api/dict/status?id=${row.id}&status=${row.status}`).then((res) => {
if (res.data.code == 200) {
ElMessage.success(res.data.msg);
changePage(1);
} else {
ElMessage.error(res.data.data);
row.state = row.state == 0 ? 1 : 0;
row.status = row.status == 2 ? 1 : 2;
}
});
}; // 启用禁用
......@@ -405,16 +422,18 @@ const changePage = (page) => {
}; // 改变页码
const changeSize = (size) => {
state.filter.limit = size;
state.filter.page_size = size;
changePage(1);
}; // 改变每页条数
const register = () => {
state.formData = {
name: "",
describe: "",
state: 1,
p_dict_id: state.fatherRow ? state.fatherRow.dict_id : "",
description: "",
status: 1,
unit: "",
max_val: "",
min_val: "",
};
if (state.bgForm) {
nextTick().then(() => {
......@@ -430,24 +449,24 @@ const register = () => {
}; // 新增字典按钮
const edit_row = (row) => {
axios
.get(`/apaas/system/v5/dictionary/${row.id}`)
.then((res) => {
if (res.data.code == 200) {
state.actionRow = res.data.data;
state.formData = {
name: state.actionRow.name,
describe: state.actionRow.describe,
state: state.actionRow.state,
p_dict_id: state.actionRow.p_dict_id,
};
} else {
ElMessage.error(res.data.data);
}
})
.catch((err) => {
console.log(err);
});
state.actionRow = row;
if (row.class === 3) {
state.formData = {
name: row.name,
unit: row.unit,
max_val: row.max_val,
min_val: row.min_val,
description: row.description,
status: row.status,
};
} else {
state.formData = {
name: row.name,
description: row.description,
status: row.status,
};
}
if (state.bgForm) {
nextTick().then(() => {
state.bgForm.validate((valid) => {
......@@ -467,10 +486,15 @@ const addConfirm = () => {
if (state.addType == 1) {
// 新增
let params = {
classify_id: state.nodeClassifyId,
class: state.nodeClassifyId,
...state.formData,
};
axios.post(`/apaas/system/v5/dictionary/add`, params).then((res) => {
if (state.nodeClassifyId !== 3) {
delete params.min_val;
delete params.max_val;
delete params.unit;
}
axios.post(`/v1/api/dict`, params).then((res) => {
if (res.data.code == 200) {
ElMessage.success(res.data.msg);
state.addDialog = false;
......@@ -483,9 +507,15 @@ const addConfirm = () => {
// 编辑
let params = {
id: state.actionRow.id,
class: state.actionRow.class,
...state.formData,
};
axios.put(`/apaas/system/v5/dictionary/update`, params).then((res) => {
if (state.actionRow.class !== 3) {
delete params.min_val;
delete params.max_val;
delete params.unit;
}
axios.put(`/v1/api/dict`, params).then((res) => {
if (res.data.code == 200) {
ElMessage.success(res.data.msg);
state.addDialog = false;
......@@ -505,7 +535,7 @@ const delete_row = (row) => {
}; // 删除按钮
const deleteData = () => {
axios.delete(`/apaas/system/v5/dictionary/${state.actionRow.id}`).then((res) => {
axios.delete(`/v1/api/dict?id=${state.actionRow.id}`).then((res) => {
if (res.data.code == 200) {
ElMessage.success(res.data.msg);
state.dialogDelete = false;
......@@ -542,7 +572,7 @@ const moveRow = (row, type) => {
},
];
axios
.put(`/apaas/system/v5/dictionary/sort`, [...params])
.put(`/v1/api/dict/sort`, [...params])
.then((res) => {
if (res.data.code == 200) {
ElMessage.success(res.data.msg);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment