对接行为和身份标签的接口

This commit is contained in:
zy_zr 2025-04-23 14:23:27 +08:00
parent 6c694b52d3
commit aa18dbf3ef
12 changed files with 589 additions and 133 deletions

View File

@ -99,7 +99,7 @@ header {
left: 10px; left: 10px;
background-color: #fff; background-color: #fff;
z-index: 998; z-index: 998;
color: #fff; color: #333;
padding: 20px; padding: 20px;
box-sizing: border-box; box-sizing: border-box;
.head_box { .head_box {

View File

@ -7,7 +7,7 @@
:key="item.value" :key="item.value"
:index="index" :index="index"
:class="item.elTagType" :class="item.elTagType"
>{{ item.label }}</span> >{{ item.label || item.zdmc }}</span>
<el-tag <el-tag
v-else v-else
:disable-transitions="true" :disable-transitions="true"
@ -15,7 +15,7 @@
:index="index" :index="index"
:type="item.elTagType === 'primary' ? '' : item.elTagType" :type="item.elTagType === 'primary' ? '' : item.elTagType"
:class="item.elTagType" :class="item.elTagType"
>{{ item.label }}</el-tag >{{ item.label || item.zdmc }}</el-tag
> >
</template> </template>
</template> </template>

View File

@ -1,26 +1,26 @@
<template> <template>
<el-form ref="elform" :model="listQuery" :label-width="140" :rules="props.rules" :inline="true" label-position="right"> <el-form ref="elform" :model="listQuery" :label-width="140" :rules="props.rules" :inline="true" label-position="right">
<el-form-item v-for="item in props.formData" :style="{ width: item.width }" :prop="item.prop" :label="item.label" :label-width="item.labelWidth" :key="item"> <el-form-item v-for="item in props.formList" :style="{ width: item.width }" :prop="item.prop" :label="item.label" :label-width="item.labelWidth" :key="item">
<!-- input表单 --> <!-- input表单 input-->
<MOSTY.Other v-if="item.type == 'input'" width="100%" clearable v-model="listQuery[item.prop]" :placeholder="`请输入${item.label}`"/> <MOSTY.Other v-if="item.type == 'input'" width="100%" clearable v-model="listQuery[item.prop]" :placeholder="`请输入${item.label}`"/>
<el-input v-model="listQuery[item.prop]" v-else-if="item.type == 'textarea'" :placeholder="`请输入${item.label}`" /> <el-input v-model="listQuery[item.prop]" v-else-if="item.type == 'textarea'" type="textarea" :rows="3" :placeholder="`请输入${item.label}`" />
<!-- Select选择 --> <!-- 数值 inputNumber-->
<MOSTY.Select <el-input type="number" v-model="listQuery[item.prop]" v-else-if="item.type == 'inputNumber'" :placeholder="`请输入${item.label}`" />
v-else-if="item.type == 'select'" <!-- 数值 number-->
width="100%" <el-input-number v-model="listQuery[item.prop]" v-else-if="item.type == 'number'" style="width:100%" :min="0" :max="1000" />
clearable <!--选择 select-->
v-model="listQuery[item.prop]" <MOSTY.Select v-else-if="item.type == 'select'" v-model="listQuery[item.prop]" :dictEnum="item.options" width="100%" clearable :placeholder="`请选择${item.label}`"/>
:dictEnum="item.options" <!-- 部门department -->
:placeholder="`请选择${item.label}`"/>
<template v-else-if="item.showType === 'department'"> <template v-else-if="item.showType === 'department'">
<MOSTY.Department clearable v-model="listQuery[item.prop]" /> <MOSTY.Department clearable v-model="listQuery[item.prop]" />
</template> </template>
<!-- Upload选择 -->
<!-- 上传 upload -->
<MOSTY.Upload v-else-if="item.type == 'upload'" width="100%" v-model="listQuery[item.prop]"/> <MOSTY.Upload v-else-if="item.type == 'upload'" width="100%" v-model="listQuery[item.prop]"/>
<!-- CheckBox选择 --> <!--选择checkbox -->
<MOSTY.CheckBox v-else-if="item.type == 'checkbox'" width="100%" clearable v-model="listQuery[item.prop]" :checkList="item.options" :placeholder="`请选择${item.label}`"/> <MOSTY.CheckBox v-else-if="item.type == 'checkbox'" width="100%" clearable v-model="listQuery[item.prop]" :checkList="item.options" :placeholder="`请选择${item.label}`"/>
<!-- 单选 --> <!-- 单选radio -->
<el-radio-group v-model="listQuery[item.prop]" v-else-if="item.type == 'radio'"> <el-radio-group v-model="listQuery[item.prop]" v-else-if="item.type == 'radio'">
<el-radio v-for="obj in item.options" :key="obj.value" :label="obj.value" >{{ obj.label }}</el-radio> <el-radio v-for="obj in item.options" :key="obj.value" :label="obj.value" >{{ obj.label }}</el-radio>
</el-radio-group> </el-radio-group>
@ -45,14 +45,10 @@ import * as MOSTY from "@/components/MyComponents/index";
import { ref, defineProps, defineEmits, defineExpose, watch } from "vue"; import { ref, defineProps, defineEmits, defineExpose, watch } from "vue";
const props = defineProps({ const props = defineProps({
// //
formData: { formList: {
default: [], default: [],
type: Array type: Array
}, },
propName: {
default: "",
type: String
},
rules: { rules: {
default: {}, default: {},
type: Object type: Object
@ -77,6 +73,12 @@ watch(() => listQuery.value,(newVal) => {
emits('update:modelValue', newVal) emits('update:modelValue', newVal)
},{ immediate: true, deep: true } },{ immediate: true, deep: true }
); );
watch(() => props.modelValue,(newVal) => {
listQuery.value = newVal; //
},{ immediate: true, deep: true }
);
defineExpose({ submit }); defineExpose({ submit });
</script> </script>

View File

@ -1,9 +1,5 @@
<template> <template>
<div <div v-loading="loadingPage" class="pageSearch searchBox" :style="`margin-bottom: ${marginBottom}px;background-color: ${backgroundColor}`">
v-loading="loadingPage"
class="pageSearch searchBox"
:style="`margin-bottom: ${marginBottom}px;background-color: ${backgroundColor}`"
>
<div class="box"> <div class="box">
<div v-for="(item, index) in getArr" :key="index" class="item"> <div v-for="(item, index) in getArr" :key="index" class="item">
<div class="label" v-if="item.label">{{ item.label }}</div> <div class="label" v-if="item.label">{{ item.label }}</div>

View File

@ -155,15 +155,6 @@ export const publicRoutes = [
icon: "article" icon: "article"
} }
}, },
{
path: "/tagManage",
name: "tagManage",
component: () => import("@/views/backOfficeSystem/fourColorManage/tagManage/index"),
meta: {
title: "标签组合管理",
icon: "article"
}
},
{ {
path: "/BehaviorLabels", path: "/BehaviorLabels",
name: "BehaviorLabels", name: "BehaviorLabels",
@ -173,6 +164,15 @@ export const publicRoutes = [
icon: "article" icon: "article"
} }
}, },
{
path: "/tagManage",
name: "tagManage",
component: () => import("@/views/backOfficeSystem/fourColorManage/tagManage/index"),
meta: {
title: "标签组合管理",
icon: "article"
}
},
], ],
}, },

View File

@ -1,11 +1,7 @@
import axios from 'axios'; import axios from 'axios';
import store from '@/store'; import store from '@/store';
import { import { ElMessage } from 'element-plus';
ElMessage import { isCheckTimeout } from '@/utils/auth';
} from 'element-plus';
import {
isCheckTimeout
} from '@/utils/auth';
const service = axios.create({ const service = axios.create({
baseURL: process.env.VUE_APP_BASE_API, baseURL: process.env.VUE_APP_BASE_API,
@ -18,11 +14,11 @@ service.interceptors.request.use(
// 请求接口之前 做些什么 // 请求接口之前 做些什么
//1.统一注入token //1.统一注入token
if (store.getters.token) { if (store.getters.token) {
// if (isCheckTimeout()) { if (isCheckTimeout()) {
// //超时 执行退出 //超时 执行退出
// store.dispatch('user/logout'); store.dispatch('user/logout');
// return Promise.reject(new Error('token 失效')); return Promise.reject(new Error('token 失效'));
// } }
if (!config.url.startsWith("/jcApi")) { if (!config.url.startsWith("/jcApi")) {
config.headers.Authorization = `${store.getters.token}`; config.headers.Authorization = `${store.getters.token}`;
} }
@ -42,13 +38,7 @@ service.interceptors.request.use(
service.interceptors.response.use( service.interceptors.response.use(
// 请求成功的处理 // 请求成功的处理
(response) => { (response) => {
const { const { success, code, msg, message, data } = response.data;
success,
code,
msg,
message,
data
} = response.data;
// 需要判断当前请求是否成功 // 需要判断当前请求是否成功
if (success && code === 10000) { if (success && code === 10000) {
return data; // 成功后返回解析后的数据 return data; // 成功后返回解析后的数据
@ -56,20 +46,12 @@ service.interceptors.response.use(
return data; // 成功后返回解析后的数据 return data; // 成功后返回解析后的数据
} else if (code === 401) { } else if (code === 401) {
store.dispatch('user/logout'); store.dispatch('user/logout');
// ElMessage.error(message); // 提示错误信息 ElMessage.error(message); // 提示错误信息
// ElMessage({ ElMessage({ message: message || msg, grouping: true, type: 'error' })
// message: message || msg,
// grouping: true,
// type: 'error'
// })
} else { } else {
// 失败(请求成功 ,业务失败) 弹出消息提示 // 失败(请求成功 ,业务失败) 弹出消息提示
// ElMessage({ ElMessage({ message: message || msg, grouping: true, type: 'error' })
// message: message || msg, return Promise.reject(new Error(message));
// grouping: true,
// type: 'error'
// })
// return Promise.reject(new Error(message));
} }
}, },
// 请求失败处理 // 请求失败处理

View File

@ -0,0 +1,110 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">{{ title }} </span>
<div>
<el-button type="primary" size="small" :loading="loading" @click="submit" >保存</el-button>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="form_cnt">
<FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules">
<template #bqDlId>
<el-input readonly @click="showDialog = true" v-model="listQuery.bqDlId" placeholder="请选择标签大类" clearable />
</template>
</FormMessage>
</div>
<!-- 选择框 -->
<DialogList type="02" v-model="showDialog" :dic="props.dic" @chooseDate="chooseDate"></DialogList>
</div>
</template>
<script setup>
import DialogList from '@/views/backOfficeSystem/fourColorManage/IdentityManage/components/dialogList.vue'
import FormMessage from '@/components/aboutTable/FormMessage.vue'
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
import { ref,defineProps, defineExpose, reactive, onMounted, defineEmits, getCurrentInstance, watchEffect } from "vue";
const emit = defineEmits(["updateDate"]);
const props = defineProps({
type:String,
dic:Object,
});
const showDialog = ref(false); //
const listQuery = ref({}); //
const loading = ref(false);
const elform = ref();
const title = ref("");
const { proxy } = getCurrentInstance();
const dialogForm = ref(false); //
const formData = reactive([
{ label: "标签名称", prop: "bqMc", type: "input" },
{ label: "标签代码", prop: "bqDm", type: "input" },
{ label: "标签等级", prop: "bqDj", type: "select", options: [] },
{ label: "标签颜色", prop: "bqYs", type: "select", options: [] },
{ label: "标签分值", prop: "bqFz", type: "inputNumber" },
{ label: "标签说明", prop: "bqSm", type: "textarea",width: '100%' },
]);
const rules = reactive({
bqMc: [{ required: true, message: "请输入标签名称", trigger: "blur" }],
bqDm: [{ required: true, message: "请输入标签代码", trigger: "blur" }],
bqDlId: [{ required: true, message: "请输入标签大类", trigger: ['blur','change'] }],
});
watchEffect(()=>{
if(props.dic){
formData[2].options = props.dic.D_GS_BQ_DJ;
formData[3].options = props.dic.D_GS_SSYJ;
}
})
//
const init = (type, row,) => {
title.value = type == 'add' ? "新增" : "编辑";
dialogForm.value = true;
if(props.type == '标签细类') formData.push({ label: "标签大类", prop: "bqDlId", width: '100%' , type: "slot" })
if (row) getDataById(row.id);
};
// id
const getDataById = (id) => {
qcckGet({}, '/mosty-gsxt/tbGsxtBqgl/'+id).then((res) => {
listQuery.value = res;
});
};
//
const submit = () => {
elform.value.submit((data)=>{
let url = title.value == "新增" ? '/mosty-gsxt/tbGsxtBqgl/save':'/mosty-gsxt/tbGsxtBqgl/update';
let params = { ...data, bqLb:props.dic.D_GS_BQ_LB.find((it)=>it.zdmc == props.type).dm }
params.bqLx = '02'
qcckPost(params, url).then((res) => {
proxy.$message({ type: "success", message: title.value + "成功" });
emit("updateDate");
close();
}).catch(() => {});
});
};
//
const chooseDate = (val) => {
if(!val && val.length == 0) return;
listQuery.value.bqDlId = val[0].id;
}
//
const close = () => {
listQuery.value = {};
dialogForm.value = false;
loading.value = false;
if(props.type == '标签细类') formData.pop()
};
defineExpose({ init });
</script>
<style lang="scss" scoped>
@import "~@/assets/css/layout.scss";
@import "~@/assets/css/element-plus.scss";
</style>

View File

@ -1,13 +1,176 @@
<template> <template>
<div>行为标签管理</div> <div>
<div class="titleBox">
<PageTitle title="行为标签管理">
<template #left>
<el-button v-for="(it,idx) in D_GS_BQ_LB " :key="idx" :type="type == it.zdmc ? 'success':''" @click="chooseListType(it.zdmc)">
<span style="vertical-align: middle">{{ it.zdmc }}</span>
</el-button>
</template>
<el-button type="primary" @click="addEdit('add', '')">
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
<span style="vertical-align: middle">新增</span>
</el-button>
</PageTitle>
</div>
<!-- 搜索 -->
<div ref="searchBox">
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"></Search>
</div>
<!-- 表格 -->
<div class="tabBox" :style="{height:pageData.tableHeight+20+'px'}">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData"
>
<template #bqLx="{ row }">
<DictTag :value="row.bqLx" :tag="false" :options="D_GS_BQ_LX" />
</template>
<template #bqLb="{ row }">
<DictTag :value="row.bqLb" :tag="false" :options="D_GS_BQ_LB" />
</template>
<template #bqYs="{ row }">
<DictTag :value="row.bqYs" :tag="false" :options="D_GS_SSYJ" />
</template>
<template #bqDj="{ row }">
<DictTag :tag="false" :value="row.bqDj" :options="D_GS_BQ_DJ" />
</template>
<!-- 操作 -->
<template #controls="{ row }">
<el-link size="small" @click="addEdit('edit', row)">编辑</el-link>
<el-link size="small" @click="delDictItem(row.id)" type="danger">删除</el-link>
</template>
</MyTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div>
<!-- 编辑详情 -->
<EditAddForm ref="detailDiloag" :type="type" :dic="{D_GS_BQ_LX,D_GS_BQ_DJ,D_GS_SSYJ,D_GS_BQ_LB}" @updateDate="getList" />
</div>
</template> </template>
<script> <script setup>
export default { import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import EditAddForm from "./components/editAddForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
import { da } from "element-plus/es/locale.mjs";
const { proxy } = getCurrentInstance();
const { D_GS_BQ_DJ,D_GS_SSYJ,D_GS_BQ_LB,D_GS_BQ_LX } = proxy.$dict("D_GS_BQ_DJ","D_GS_SSYJ","D_GS_BQ_LB","D_GS_BQ_LX"); //
const detailDiloag = ref();
const searchBox = ref(); //
const type = ref('标签大类')
const searchConfiger = ref([
{ label: "标签名称",prop:'bqMc',placeholder: "请输入学校名称", showType: "input"},
{ label: "标签等级",prop:'bqDj' ,placeholder: "请选择标签等级", showType: "select",options:D_GS_BQ_DJ },
{ label: "标签颜色",prop:'bqYs' ,placeholder: "请选择标签颜色", showType: "select",options:D_GS_SSYJ },
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [], //
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
}, //
controlsWidth: 160, //
tableColumn: [
{ label: "标签名称", prop: "bqMc" },
{ label: "标签代码", prop: "bqDm" },
{ label: "标签类型", prop: "bqLx",showSolt:true },
{ label: "标签类别", prop: "bqLb",showSolt:true },
{ label: "标签等级", prop: "bqDj",showSolt:true},
{ label: "标签颜色", prop: "bqYs",showSolt:true},
]
});
onMounted(() => {
getList()
tabHeightFn();
});
//
const chooseListType = (val) => {
type.value = val;
pageData.keyCount++;
pageData.pageConfiger.pageCurrent = 1;
getList()
};
//
const onSearch = (val) =>{
queryFrom.value = {...val}
pageData.pageConfiger.pageCurrent = 1;
getList()
} }
//
const changeNo = (val) =>{
pageData.pageConfiger.pageNum = val;
getList()
}
//
const changeSize = (val) =>{
pageData.pageConfiger.pageSize = val;
getList()
}
//
const getList = (val) =>{
pageData.tableConfiger.loading = true;
let data = { ...pageData.pageConfiger,...queryFrom.value,bqLx:'02' };
data.bqLb = type.value == '标签大类'? '01':'02'
qcckGet(data,'/mosty-gsxt/tbGsxtBqgl/selectPage').then(res=>{
pageData.tableData = res.records || [];
pageData.total = res.total;
pageData.tableConfiger.loading = false;
}).catch(()=>{ pageData.tableConfiger.loading = false; })
}
//
const delDictItem = (id) =>{
proxy.$confirm("确定要删除", "警告", {type: "warning"}).then(() => {
qcckDelete({},'/mosty-gsxt/tbGsxtBqgl/'+id).then(()=>{
proxy.$message({ type: "success", message: "删除成功" });
getList();
})
}).catch(() => {});
}
//
const addEdit = (type, row) => {
detailDiloag.value.init(type, row);
};
//
const tabHeightFn = () => {
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () { tabHeightFn(); };
};
</script> </script>
<style> <style>
.el-loading-mask {
</style> background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -0,0 +1,192 @@
<template>
<el-dialog :title="titleValue" width="900px" :model-value="modelValue" append-to-body @close="closed" >
<div>
<el-form :model="listQuery" class="mosty-from-wrap" :inline="true">
<el-form-item label="标签名称">
<el-input placeholder="请输入标签名称" v-model="listQuery.bqMc" clearable ></el-input>
</el-form-item>
<el-form-item>
<el-button type="success" @click="handleFilter">查询</el-button>
<el-button type="info" @click="reset()"> 重置 </el-button>
</el-form-item>
</el-form>
<div class="tabBox" :class="props.Single ? 'tabBoxRadio' : ''" style="margin-top: 0px">
<el-table ref="multipleUserRef" @selection-change="handleSelectionChange" :data="tableData" border :row-key="keyid" style="width: 100%" height="450" >
<el-table-column type="selection" width="55" :reserve-selection="true" />
<el-table-column prop="bqMc" align="center" label="标签名称" />
<el-table-column prop="bqDm" align="center" label="标签代码" />
<el-table-column prop="bqLx" align="center" label="标签类型">
<template #default="{ row }">
<DictTag :value="row.bqLx" :tag="false" :options="props.dic.D_GS_BQ_LX" />
</template>
</el-table-column>
<el-table-column prop="bqYs" align="center" label="标签颜色">
<template #default="{ row }">
<DictTag :value="row.bqYs" :tag="false" :options="props.dic.D_GS_SSYJ" />
</template>
</el-table-column>
</el-table>
</div>
<div class="fenye" :style="{ top: tableHeight + 'px' }">
<el-pagination
class="pagination"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="listQuery.current"
:page-sizes="[10, 20, 50, 100]"
:page-size="listQuery.size"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
></el-pagination>
</div>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="closed">取消</el-button>
<el-button type="primary" @click="onComfirm">确认</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { defineProps, ref, onMounted } from "vue";
import { qcckGet } from "@/api/qcckApi.js";
const props = defineProps({
modelValue: {
type: Boolean,
required: true
},
dic: {
type: Object,
default: () => {}
},
type: {
type: String,
default: "01"
},
titleValue: {
type: String,
default: "选择大类"
},
LeaderType: {
type: String,
default: ""
},
//
Single: {
type: Boolean,
default: true
},
roleIds: {
type: Array,
default: []
}
});
const total = ref(0);
const listQuery = ref({
current: 1,
size: 20
});
const tableData = ref([]);
const emits = defineEmits(["update:modelValue", "chooseDate"]);
onMounted(() => {
handleFilter();
});
const closed = () => {
emits("update:modelValue", false);
};
const reset = () => {
listQuery.value = { current: 1, size: 20, };
getListData();
};
const keyid = (row) => {
return row.id;
};
//
const onComfirm = () => {
const userList = multipleSelectionUser.value;
let list = [];
let listId = [];
userList.forEach((val) => {
if (listId.indexOf(val.id) == -1) {
list.push(val);
listId.push(val.id);
}
});
emits("chooseDate", list);
let data = { type: props.LeaderType, userList: userList };
emits("chooseDateLeader", data);
closed();
};
/**
* pageSize 改变触发
*/
const handleSizeChange = (currentSize) => {
listQuery.value.size = currentSize;
getListData();
};
/**
* 页码改变触发
*/
const handleCurrentChange = (currentPage) => {
listQuery.value.current = currentPage;
getListData();
};
const getListData = () => {
const data = listQuery.value;
data.bqLx = '01'
data.bqLb = props.type;
qcckGet(data,'/mosty-gsxt/tbGsxtBqgl/selectPage').then(res=>{
tableData.value = res?.records;
total.value = Number(res.total);
multipleUser();
}).catch(()=>{})
};
//
function multipleUser() {
tableData.value.forEach((item) => {
if (props.roleIds.some((id) => id == item.id)) {
multipleUserRef.value.toggleRowSelection(item, true);
}
});
}
const handleFilter = () => {
listQuery.value.current = 1;
getListData();
};
const multipleUserRef = ref(null);
const multipleSelectionUser = ref([]);
const handleSelectionChange = (val) => {
if (props.Single) {
if (val.length > 1) {
let del_row = val.shift();
multipleUserRef.value.toggleRowSelection(del_row, false);
}
multipleSelectionUser.value = val;
} else {
multipleSelectionUser.value = val;
}
};
</script>
<style lang="scss" scoped>
@import "@/assets/css/layout.scss";
@import "@/assets/css/element-plus.scss";
</style>
<style>
.tabBoxRadio .el-checkbox__inner {
border-radius: 50% !important;
}
.tabBoxRadio .el-table__header-wrapper .el-checkbox {
display: none;
}
</style>

View File

@ -8,47 +8,61 @@
</div> </div>
</div> </div>
<div class="form_cnt"> <div class="form_cnt">
<FormMessage v-model="listQuery" :formData="formData" ref="elform" :rules="rules"></FormMessage> <FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules">
<template #bqDlId>
<el-input readonly @click="showDialog = true" v-model="listQuery.bqDlId" placeholder="请选择标签大类" clearable />
</template>
</FormMessage>
</div> </div>
<!-- 选择框 -->
<DialogList type="01" v-model="showDialog" :dic="props.dic" @chooseDate="chooseDate"></DialogList>
</div> </div>
</template> </template>
<script setup> <script setup>
import * as rule from "@/utils/rules.js"; import DialogList from './dialogList.vue'
import FormMessage from '@/components/aboutTable/FormMessage.vue' import FormMessage from '@/components/aboutTable/FormMessage.vue'
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js"; import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
import { ref, defineExpose, reactive, onMounted, defineEmits, getCurrentInstance, nextTick } from "vue"; import { ref,defineProps, defineExpose, reactive, onMounted, defineEmits, getCurrentInstance, watchEffect } from "vue";
const emit = defineEmits(["updateDate"]); const emit = defineEmits(["updateDate"]);
const props = defineProps({ const props = defineProps({
dic: Object type:String,
dic:Object,
}); });
const { proxy } = getCurrentInstance(); const showDialog = ref(false); //
const dialogForm = ref(false); //
const formData = ref([
{ label: "标签名称", prop: "bqMc", type: "input", required: true },
{ label: "标签代码", prop: "bqDm", type: "input", required: true },
{ label: "标签说明", prop: "bqSm", type: "input", required: true },
{ label: "组合标签名称", prop: "bqmc", type: "input", required: true },
{ label: "标签大类", prop: "bqLb", type: "select", options: props.dic.D_GS_BQ_LB },
{ label: "标签细类", prop: "bqLx", type: "select", options: props.dic.D_GS_BQ_LX },
{ label: "标签等级", prop: "bqDj", type: "select", options: props.dic.D_GS_BQ_DJ },
{ label: "标签颜色", prop: "bqYs", type: "select", options: props.dic.D_GS_SSYJ },
{ label: "标签分值", prop: "bqFz", type: "input" },
]);
const rules = reactive({
bqmc: [{ required: true, message: "请输入标签名称", trigger: "blur" }]
});
const listQuery = ref({}); // const listQuery = ref({}); //
const loading = ref(false); const loading = ref(false);
const elform = ref(); const elform = ref();
const title = ref(""); const title = ref("");
const { proxy } = getCurrentInstance();
const dialogForm = ref(false); //
const formData = reactive([
{ label: "标签名称", prop: "bqMc", type: "input" },
{ label: "标签代码", prop: "bqDm", type: "input" },
{ label: "标签等级", prop: "bqDj", type: "select", options: [] },
{ label: "标签颜色", prop: "bqYs", type: "select", options: [] },
{ label: "标签分值", prop: "bqFz", type: "inputNumber" },
{ label: "标签说明", prop: "bqSm", type: "textarea",width: '100%' },
]);
const rules = reactive({
bqMc: [{ required: true, message: "请输入标签名称", trigger: "blur" }],
bqDm: [{ required: true, message: "请输入标签代码", trigger: "blur" }],
bqDlId: [{ required: true, message: "请输入标签大类", trigger: ['blur','change'] }],
});
watchEffect(()=>{
if(props.dic){
formData[2].options = props.dic.D_GS_BQ_DJ;
formData[3].options = props.dic.D_GS_SSYJ;
}
})
onMounted(() => {});
// //
const init = (type, row,) => { const init = (type, row,) => {
title.value = type == 'add' ? "新增" : "编辑";
dialogForm.value = true; dialogForm.value = true;
title.value = row ? "编辑" : "新增"; if(props.type == '标签细类') formData.push({ label: "标签大类", prop: "bqDlId", width: '100%' , type: "slot" })
if (row) getDataById(row.id); if (row) getDataById(row.id);
}; };
@ -63,18 +77,29 @@ const getDataById = (id) => {
const submit = () => { const submit = () => {
elform.value.submit((data)=>{ elform.value.submit((data)=>{
let url = title.value == "新增" ? '/mosty-gsxt/tbGsxtBqgl/save':'/mosty-gsxt/tbGsxtBqgl/update'; let url = title.value == "新增" ? '/mosty-gsxt/tbGsxtBqgl/save':'/mosty-gsxt/tbGsxtBqgl/update';
qcckPost(data, url).then((res) => { let params = { ...data, bqLb:props.dic.D_GS_BQ_LB.find((it)=>it.zdmc == props.type).dm }
params.bqLx = '01'
qcckPost(params, url).then((res) => {
proxy.$message({ type: "success", message: title.value + "成功" }); proxy.$message({ type: "success", message: title.value + "成功" });
emit("updateDate");
close(); close();
}).catch(() => {}); }).catch(() => {});
}); });
}; };
//
const chooseDate = (val) => {
if(!val && val.length == 0) return;
listQuery.value.bqDlId = val[0].id;
}
// //
const close = () => { const close = () => {
listQuery.value = {}; listQuery.value = {};
dialogForm.value = false; dialogForm.value = false;
loading.value = false; loading.value = false;
if(props.type == '标签细类') formData.pop()
}; };
defineExpose({ init }); defineExpose({ init });
</script> </script>

View File

@ -3,11 +3,8 @@
<div class="titleBox"> <div class="titleBox">
<PageTitle title="身份标签管理"> <PageTitle title="身份标签管理">
<template #left> <template #left>
<el-button :type="type == '标签大类'? 'success':''" @click="chooseListType('标签大类')"> <el-button v-for="(it,idx) in D_GS_BQ_LB " :key="idx" :type="type == it.zdmc ? 'success':''" @click="chooseListType(it.zdmc)">
<span style="vertical-align: middle">标签大类</span> <span style="vertical-align: middle">{{ it.zdmc }}</span>
</el-button>
<el-button :type="type == '标签细类'? 'success':''" @click="chooseListType('标签细类')">
<span style="vertical-align: middle">标签细类</span>
</el-button> </el-button>
</template> </template>
<el-button type="primary" @click="addEdit('add', '')"> <el-button type="primary" @click="addEdit('add', '')">
@ -32,21 +29,21 @@
@chooseData="chooseData" @chooseData="chooseData"
> >
<template #bqLx="{ row }"> <template #bqLx="{ row }">
<DictTag :value="row.bqLx" :options="D_GS_BQ_LX" /> <DictTag :value="row.bqLx" :tag="false" :options="D_GS_BQ_LX" />
</template> </template>
<template #bqLb="{ row }"> <template #bqLb="{ row }">
<DictTag :value="row.bqLb" :options=" D_GS_BQ_LB" /> <DictTag :value="row.bqLb" :tag="false" :options="D_GS_BQ_LB" />
</template> </template>
<template #bqYs="{ row }"> <template #bqYs="{ row }">
<DictTag :value="row.bqYs" :options=" D_GS_SSYJ" /> <DictTag :value="row.bqYs" :tag="false" :options="D_GS_SSYJ" />
</template> </template>
<template #bqDj="{ row }"> <template #bqDj="{ row }">
<DictTag :value="row.bqDj" :options=" D_GS_BQ_DJ" /> <DictTag :tag="false" :value="row.bqDj" :options="D_GS_BQ_DJ" />
</template> </template>
<!-- 操作 --> <!-- 操作 -->
<template #controls="{ row }"> <template #controls="{ row }">
<el-button size="small" @click="addEdit('edit', row)">编辑</el-button> <el-link size="small" @click="addEdit('edit', row)">编辑</el-link>
<el-button size="small" @click="delDictItem(row.id)" type="danger">删除</el-button> <el-link size="small" @click="delDictItem(row.id)" type="danger">删除</el-link>
</template> </template>
</MyTable> </MyTable>
<Pages <Pages
@ -60,7 +57,7 @@
></Pages> ></Pages>
</div> </div>
<!-- 编辑详情 --> <!-- 编辑详情 -->
<EditAddForm ref="detailDiloag" :dic="{D_GS_BQ_DJ,D_GS_SSYJ,D_GS_BQ_LB,D_GS_BQ_LX}" @updateDate="getList" /> <EditAddForm ref="detailDiloag" :type="type" :dic="{D_GS_BQ_LX,D_GS_BQ_DJ,D_GS_SSYJ,D_GS_BQ_LB}" @updateDate="getList" />
</div> </div>
</template> </template>
@ -79,11 +76,9 @@ const searchBox = ref(); //搜索框
const type = ref('标签大类') const type = ref('标签大类')
const searchConfiger = ref([ const searchConfiger = ref([
{ label: "标签大类",prop:'sfbqdl' ,placeholder: "请输入标签大类", showType: "input"}, { label: "标签名称",prop:'bqMc',placeholder: "请输入学校名称", showType: "input"},
{ label: "标签名称",prop:'bqmc',placeholder: "请输入学校名称", showType: "input"}, { label: "标签等级",prop:'bqDj' ,placeholder: "请选择标签等级", showType: "select",options:D_GS_BQ_DJ },
{ label: "标签等级",prop:'sfbqdl' ,placeholder: "请选择标签等级", showType: "select",options:D_GS_BQ_DJ }, { label: "标签颜色",prop:'bqYs' ,placeholder: "请选择标签颜色", showType: "select",options:D_GS_SSYJ },
{ label: "标签颜色",prop:'sfbqdl' ,placeholder: "请选择标签颜色", showType: "select",options:D_GS_SSYJ },
{ label: "积分分值",prop:'bqmc',placeholder: "请输入积分分值", showType: "input",},
]); ]);
const queryFrom = ref({}); const queryFrom = ref({});
const pageData = reactive({ const pageData = reactive({
@ -103,8 +98,8 @@ const pageData = reactive({
tableColumn: [ tableColumn: [
{ label: "标签名称", prop: "bqMc" }, { label: "标签名称", prop: "bqMc" },
{ label: "标签代码", prop: "bqDm" }, { label: "标签代码", prop: "bqDm" },
{ label: "标签类型", prop: "bqLx",howSolt:true }, { label: "标签类型", prop: "bqLx",showSolt:true },
{ label: "标签类别", prop: "bqLb",howSolt:true }, { label: "标签类别", prop: "bqLb",showSolt:true },
{ label: "标签等级", prop: "bqDj",showSolt:true}, { label: "标签等级", prop: "bqDj",showSolt:true},
{ label: "标签颜色", prop: "bqYs",showSolt:true}, { label: "标签颜色", prop: "bqYs",showSolt:true},
] ]
@ -118,16 +113,6 @@ onMounted(() => {
const chooseListType = (val) => { const chooseListType = (val) => {
type.value = val; type.value = val;
pageData.keyCount++; pageData.keyCount++;
switch(val){
case '标签大类':
let obj1 = { label: "标签大类",prop:'sfbqdl' ,placeholder: "请输入标签大类", showType: "input"}
searchConfiger.value.splice(0, 1, obj1);
break;
case '标签细类':
let obj2 = { label: "标签细类",prop:'sfbqdl' ,placeholder: "请输入标签细类", showType: "input"}
searchConfiger.value.splice(0, 1, obj2);
break;
}
pageData.pageConfiger.pageCurrent = 1; pageData.pageConfiger.pageCurrent = 1;
getList() getList()
}; };
@ -152,18 +137,19 @@ const changeSize = (val) =>{
// //
const getList = (val) =>{ const getList = (val) =>{
// pageData.tableConfiger.loading = true; pageData.tableConfiger.loading = true;
// let data = { ...pageData.pageConfiger,...queryFrom.value }; let data = { ...pageData.pageConfiger,...queryFrom.value,bqLx:'01' };
// qcckPost(data,'/mosty-gsxt/tbGsxtBqgl/selectPage').then(res=>{ data.bqLb = type.value == '标签大类'? '01':'02'
// pageData.tableData = res.records || []; qcckGet(data,'/mosty-gsxt/tbGsxtBqgl/selectPage').then(res=>{
// pageData.total = res.total; pageData.tableData = res.records || [];
// pageData.tableConfiger.loading = false; pageData.total = res.total;
// }).catch(()=>{ pageData.tableConfiger.loading = false; }) pageData.tableConfiger.loading = false;
}).catch(()=>{ pageData.tableConfiger.loading = false; })
} }
// //
const delDictItem = (id) =>{ const delDictItem = (id) =>{
proxy.$confirm("确定要删除", "警告", {type: "warning"}).then(() => { proxy.$confirm("确定要删除", "警告", {type: "warning"}).then(() => {
qcckPost({},'/mosty-gsxt/tbGsxtBqgl/'+id).then(()=>{ qcckDelete({},'/mosty-gsxt/tbGsxtBqgl/'+id).then(()=>{
proxy.$message({ type: "success", message: "删除成功" }); proxy.$message({ type: "success", message: "删除成功" });
getList(); getList();
}) })

View File

@ -14,7 +14,7 @@
</div> </div>
</div> </div>
<div class="form_cnt"> <div class="form_cnt">
<FormMessage :formData="formData" ref="elform" :rules="rules"></FormMessage> <FormMessage :formList="formData" ref="elform" :rules="rules"></FormMessage>
</div> </div>
</div> </div>
</template> </template>