This commit is contained in:
xuyucheng 2022-10-12 15:52:37 +08:00
parent c10e53a623
commit 40356394f4
13 changed files with 654 additions and 15002 deletions

15117
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -8,6 +8,8 @@
"lint": "vue-cli-service lint"
},
"dependencies": {
"@wangeditor/editor": "^5.1.21",
"@wangeditor/editor-for-vue": "^1.0.2",
"axios": "^0.21.1",
"core-js": "^3.6.5",
"echarts": "^4.9.0",
@ -31,8 +33,7 @@
"eslint-plugin-vue": "^6.2.2",
"sass": "^1.26.5",
"sass-loader": "^8.0.2",
"vue-template-compiler": "^2.6.11",
"vue2-ace-editor": "0.0.15"
"vue-template-compiler": "^2.6.11"
},
"eslintConfig": {
"root": true,

View File

@ -0,0 +1,18 @@
:root, :host {
--w-e-textarea-bg-color: #27282e;
--w-e-textarea-color: rgb(255,255,255,.87);
--w-e-textarea-border-color: #ccc;
--w-e-textarea-slight-border-color: #e8e8e8;
--w-e-textarea-slight-color: #27282e;
--w-e-textarea-slight-bg-color: #606266;
--w-e-textarea-selected-border-color: #B4D5FF;
--w-e-textarea-handler-bg-color: #4290f7;
--w-e-toolbar-color: rgb(255,255,255,.87);
--w-e-toolbar-bg-color: #27282e;
--w-e-toolbar-active-color: rgb(255,255,255,.87);
--w-e-toolbar-active-bg-color:#27282e;
--w-e-toolbar-disabled-color: #999;
--w-e-toolbar-border-color: none;
--w-e-modal-button-bg-color: #fafafa;
--w-e-modal-button-border-color: #d9d9d9;
}

View File

@ -58,7 +58,7 @@
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:page-sizes="[5, 10, 15]"
:page-size="page.page_size"
:page-size="page.limit"
layout="total, sizes, prev, pager, next"
:total="total"
v-if="page"
@ -116,14 +116,14 @@ export default {
handleSizeChange(val) {
this.$emit("handlePageChange", {
page_size: val,
page_num: 1,
skip: val,
limit: 1,
});
},
handleCurrentChange(val) {
this.$emit("handlePageChange", {
page_num: val,
limit: val,
});
},

View File

@ -7,6 +7,8 @@ import 'element-ui/lib/theme-chalk/index.css';
import echarts from 'echarts'
import "assets/style/public.scss"
import { message } from 'utils/message.js'
import "@wangeditor/editor/dist/css/style.css";
import "@/assets/style/wangeditor.scss"
Vue.use(ElementUI)

View File

@ -1,116 +0,0 @@
<!-- 指标构建 -->
<template>
<el-card>
<el-row type="flex" justify="space-between" slot="header" align="middle">
<h2>{{ status ? "定量" : "定性" }}指标构建</h2>
<el-row type="flex">
<el-upload v-if="!status">
<el-button type="primary">上传Excel模板</el-button>
</el-upload>
<el-button type="primary" style="margin-left: 20px" @click="submit"
>创建</el-button
>
</el-row>
</el-row>
<el-form :model="form">
<el-form-item label="指标名称">
<el-input v-model="form.ename"></el-input>
</el-form-item>
<el-form-item label="指标备注">
<el-input v-model="form.cname"></el-input>
</el-form-item>
<el-form-item label="指标描述">
<el-input type="textarea" v-model="form.description"></el-input>
</el-form-item>
<el-form-item label="指标分类">
<el-select v-model="form.category">
<el-option
v-for="item in options"
:key="item"
:label="item"
:value="item"
></el-option>
</el-select>
</el-form-item>
</el-form>
</el-card>
</template>
<script>
import request from "@/api/request";
export default {
data() {
return {
status: 0,
form: {
ename: "",
cname: "",
category: "",
description: "",
nature: "定量",
},
options: [
"盈利能力",
"收益质量",
"现金流量",
"资本结构",
"偿债能力",
"运营能力",
"成长能力",
"经营指标",
"资质指标",
"行业指标",
"绿色指标",
"司法指标",
"合规指标",
"舆情指标",
"其他",
],
};
},
created() {
this.init();
},
methods: {
init() {
this.status =
this.$store.state.tabs.find((item) => {
return this.$store.state.tabsKey === item.id;
}).status === "quantitative"
? 1
: 0;
this.form.nature = this.status ? "定量" : "定性";
},
submit() {
request.post("/index_store/create", this.form).then(() => {
this.$notify.success("创建成功");
var key;
const deleteItem = this.$store.state.tabs.filter((item, index) => {
key = index;
return item.id === this.$store.state.tabsKey;
})[0];
this.$store.commit("delete_tabs_item", deleteItem);
this.$store.commit("set_tabs_key", this.$store.state.tabs[key - 1].id);
});
},
},
};
</script>
<style lang='scss' scoped>
::v-deep .el-textarea__inner {
min-height: 200px !important;
}
.el-select {
width: 100%;
}
.params {
position: absolute;
right: 0;
top: 13px;
}
</style>

View File

@ -195,6 +195,7 @@ export default {
remove(id) {
request.post(`/index_store/parameters/${id}/delete`).then(() => {
this.$notify.success("删除成功");
this.init()
});
},

View File

@ -5,10 +5,10 @@
<el-dropdown>
<el-button type="primary">新建</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="create('qualitative')"
<el-dropdown-item @click.native="create('定性')"
>定性指标构建</el-dropdown-item
>
<el-dropdown-item @click.native="create('quantitative')"
<el-dropdown-item @click.native="create('定量')"
>定量指标构建</el-dropdown-item
>
</el-dropdown-menu>
@ -19,27 +19,24 @@
></el-input>
</el-row>
<el-container>
<el-aside style="width: 250px">
<el-checkbox-group v-model="checkList">
<el-checkbox label="定性指标"></el-checkbox>
<el-checkbox label="定量指标"></el-checkbox>
</el-checkbox-group>
<p
:class="selectKey === -1 ? 'tree-active' : ''"
@click="selectKey = -1"
>
全部
</p>
<el-tree
class="filter-tree"
:data="data"
:props="defaultProps"
default-expand-all
:filter-node-method="filterNode"
@node-click="nodeClick"
ref="tree"
>
</el-tree>
<el-aside style="width: 250px; overflow: hidden">
<el-row class="tree" style="width: 120%; overflow: auto; height: 100%">
<p
:class="!page.category ? 'tree-active' : ''"
@click="(page.category = null), init()"
>
全部
</p>
<el-tree
class="filter-tree"
:data="tree"
:props="defaultProps"
default-expand-all
@node-click="nodeClick"
ref="tree"
>
</el-tree>
</el-row>
</el-aside>
<el-main>
<fecr-table
@ -47,65 +44,94 @@
:total="tableData.total"
:data="tableData.records"
:column="tableColumn"
@cellClick="cellClick"
>
<template v-slot:operation="value">
<el-button type="text" class="button-edit">编辑</el-button>
<el-button
type="text"
class="button-delete"
v-on:click.stop="remove(value.value.id)"
>删除</el-button
class="button-edit"
@click="edit(value.value)"
>编辑</el-button
>
</template></fecr-table
>
<el-popconfirm title="确认删除?" @confirm="remove(value.value.id)">
<el-button
type="text"
slot="reference"
class="button-delete"
style="margin-left: 20px"
>
删除
</el-button>
</el-popconfirm>
</template>
</fecr-table>
</el-main>
</el-container>
<fecr-dialog
:visible.sync="visible"
@cancel="visible = false"
@submit="submit"
>
<template slot="dialog-title">
<el-row type="flex" justify="space-between" align="middle">
<p style="font-weight: 800; font-size: 16px">
{{ form.nature + "指标构建" }}
</p>
<el-upload v-if="form.nature === '定性'">
<el-button type="primary" size="small">上传Excel模板</el-button>
</el-upload>
</el-row>
</template>
<template slot="body">
<el-form :model="form">
<el-form-item label="指标名称">
<el-input
v-model="form.ename"
style="width: 100%; margin: 0"
></el-input>
</el-form-item>
<el-form-item label="指标备注">
<el-input
v-model="form.cname"
style="width: 100%; margin: 0"
></el-input>
</el-form-item>
<el-form-item label="指标描述">
<el-input type="textarea" v-model="form.description"></el-input>
</el-form-item>
<el-form-item label="指标分类">
<el-select v-model="form.category">
<el-option
v-for="item in tree"
:key="item"
:label="item.label"
:value="item.label"
></el-option>
</el-select>
</el-form-item>
</el-form>
</template>
</fecr-dialog>
</el-card>
</template>
<script>
import request from "@/api/request";
import FecrTable from "@/components/FecrTable";
import FecrDialog from "@/components/FecrDialog";
export default {
components: { FecrTable },
components: { FecrTable, FecrDialog },
data() {
return {
selectKey: -1,
filterText: "",
checkList: [],
data: [
{
id: 1,
label: "ESG指标",
children: [
{
id: 7,
label: "区域碳风险",
},
{
id: 8,
label: "企业碳治理",
},
{
id: 9,
label: "企业碳地位",
},
],
},
{
id: 2,
label: "绿色指标",
children: [],
},
],
visible: false,
tree: [],
defaultProps: {
children: "children",
label: "label",
},
page: {
category: null,
skip: 0,
limit: 20,
limit: 10,
},
tableData: {
total: 0,
@ -119,11 +145,19 @@ export default {
{ prop: "is_active", label: "状态" },
{ prop: "operation", label: "操作" },
],
form: {
ename: "",
cname: "",
category: "",
description: "",
nature: "",
},
};
},
created() {
this.init();
this.getTree();
},
methods: {
@ -136,29 +170,29 @@ export default {
});
},
create(val) {
this.$store.commit(
"set_tabs_key",
val === "quantitative" ? "2-1-2" : "2-1-1"
);
this.$store.commit("set_tabs", {
id: val === "quantitative" ? "2-1-2" : "2-1-1",
title: val === "quantitative" ? "定量指标构建" : "定性指标构建",
content: "indicatorsCreate",
status: val,
});
getTree() {
request
.get("https://file.fecribd.com/js/indicator_categories.json")
.then((res) => {
this.tree = res.values.map((item) => {
return {
label: item,
};
});
});
},
filterNode(value, data) {
if (!value) return true;
return data.label.indexOf(value) !== -1;
create(val) {
this.visible = true;
this.form.nature = val;
},
nodeClick(node) {
this.selectKey = node.$treeNodeId;
this.page.category = node.label;
this.init();
},
cellClick(val) {
edit(val) {
this.$store.commit("set_tabs_key", "indicator" + val.id);
this.$store.commit("set_tabs", {
id: "indicator" + val.id,
@ -168,14 +202,18 @@ export default {
},
remove(_id) {
request.post("/index_store/delete", { _id }).then((res) => {
request.post(`/index_store/delete/?_id=${_id}`).then((res) => {
this.$notify.success(res);
this.init();
});
},
},
watch: {
filterText(val) {
this.$refs.tree.filter(val);
submit() {
request.post("/index_store/create", this.form).then(() => {
this.visible = false;
this.$notify.success("创建成功");
this.init();
});
},
},
};
@ -186,6 +224,14 @@ export default {
margin-left: 20px;
}
::v-deep .el-textarea__inner {
min-height: 200px !important;
}
.el-select {
width: 100%;
}
::v-deep .el-card__body {
height: calc(100% - 112px);
}

View File

@ -3,11 +3,7 @@
<el-card>
<el-row type="flex" justify="space-between" slot="header" align="middle">
<h2>基本信息</h2>
<el-button
type="primary"
@click="(modelVisible = true)"
>编辑</el-button
>
<el-button type="primary" @click="modelVisible = true">编辑</el-button>
</el-row>
<el-descriptions :column="1">
<el-descriptions-item label="模型名称">
@ -119,7 +115,7 @@
<el-form-item label="类别">
<el-select v-model="form.collation">
<el-option
v-for="item in options"
v-for="item in ['ESG模型']"
:key="item"
:label="item"
:value="item"
@ -234,11 +230,11 @@ export default {
})
.then((res) => {
Object.assign(this.data, res);
Object.keys(res).forEach(key=>{
if(key in this.form){
this.form[key] = res[key]
Object.keys(res).forEach((key) => {
if (key in this.form) {
this.form[key] = res[key];
}
})
});
});
},
@ -253,12 +249,13 @@ export default {
uploadRequest(val) {
request
.post(`/score_card_config/${this.activeKey}/new`, {
.FormDataPost(`/score_card_config/${this.activeKey}/new`, {
mod_id: this.$store.state.tabsKey,
file: val.file,
})
.then((res) => {
this.$notify.success(res);
this.handleChange(this.activeKey);
});
},
@ -267,8 +264,8 @@ export default {
.get(`/score_card_config/${this.activeKey}/delete`, {
mod_id: this.$store.state.tabsKey,
})
.then((res) => {
console.log(res);
.then(() => {
this.handleChange(this.activeKey);
});
},
@ -284,15 +281,20 @@ export default {
mod_id: this.$store.state.tabsKey,
})
.then((res) => {
this.editObj[this.activeKey] = res.result["配置结构表"]
? true
: false;
const temp = [];
temp.push(res.result["配置结构表"]["档位得分标准"]);
this.data.score = {
指标及权重: res.result["配置结构表"]["指标及权重"],
档位得分标准: temp,
};
this.editObj[this.activeKey] = res.result;
if (res.result) {
const temp = [];
temp.push(res.result["配置结构表"]["档位得分标准"]);
this.data.score = {
指标及权重: res.result["配置结构表"]["指标及权重"],
档位得分标准: temp,
};
} else {
this.data.score = {
指标及权重: [],
档位得分标准: [],
};
}
});
} else if (val === "index") {
request
@ -300,10 +302,12 @@ export default {
mod_id: this.$store.state.tabsKey,
})
.then((res) => {
this.editObj[this.activeKey] = res.result["配置指标表"]
? true
: false;
this.data.index = res.result["配置指标表"];
this.editObj[this.activeKey] = res.result;
if (res.result) {
this.data.index = res.result["配置指标表"];
} else {
this.data.index = [];
}
});
} else {
request
@ -311,21 +315,23 @@ export default {
mod_id: this.$store.state.tabsKey,
})
.then((res) => {
this.editObj[this.activeKey] = res.result["配置数据表"]
? true
: false;
this.currentIndex = Object.keys(res.result["配置数据表"])[0];
Object.keys(res.result["配置数据表"]).forEach((key) => {
this.$set(
this.data.data,
key,
res.result["配置数据表"][key].map((item) => {
return {
label: item,
};
})
);
});
this.editObj[this.activeKey] = res.result;
if (res.result) {
this.currentIndex = Object.keys(res.result["配置数据表"])[0];
Object.keys(res.result["配置数据表"]).forEach((key) => {
this.$set(
this.data.data,
key,
res.result["配置数据表"][key].map((item) => {
return {
label: item,
};
})
);
});
} else {
this.data.data = {};
}
});
}
},
@ -370,11 +376,14 @@ export default {
modelSubmit() {
request
.post(`/score_card_config/management/edit?mid=${this.$store.state.tabsKey}`, this.form)
.then((res) => {
.post(
`/score_card_config/management/edit?mid=${this.$store.state.tabsKey}`,
this.form
)
.then(() => {
this.$notify.success("修改成功");
this.init();
this.modelVisible = false
this.modelVisible = false;
});
},
@ -386,8 +395,8 @@ export default {
mod_id: this.$store.state.tabsKey,
[name]: JSON.parse(this.checkedValue),
})
.then((res) => {
console.log(res);
.then(() => {
this.handleChange(this.activeKey)
});
this.visible = false;
},
@ -504,4 +513,4 @@ export default {
.el-select {
width: 100%;
}
</style>
</style>

View File

@ -4,8 +4,10 @@
<el-row slot="header" type="flex">
<el-button type="primary" @click="visible = true">新建</el-button>
<el-input
v-model="page.name"
placeholder="请输入搜索内容"
suffix-icon="el-icon-search"
@keyup.enter.native="init"
></el-input>
</el-row>
<el-container>
@ -33,6 +35,7 @@
:total="tableData.total"
:data="tableData.records"
:column="tableColumn"
@handlePageChange="handlePageChange"
>
<template v-slot:operation="value">
<el-button
@ -41,12 +44,16 @@
@click="edit(value.value)"
>编辑</el-button
>
<el-button
type="text"
class="button-delete"
@click="remove(value.value.mid)"
>删除</el-button
>
<el-popconfirm title="确认删除?" @confirm="remove(value.value.mid)">
<el-button
type="text"
slot="reference"
class="button-delete"
style="margin-left: 20px"
>
删除
</el-button>
</el-popconfirm>
</template>
</fecr-table>
</el-main>
@ -133,7 +140,7 @@ export default {
page: {
skip: 0,
limit: 10,
name:""
name: "",
},
tableData: {
total: 0,
@ -175,6 +182,10 @@ export default {
this.selectKey = node.$treeNodeId;
},
handlePageChange(val) {
Object.assign(this.page, val);
},
submit() {
request
.post("/score_card_config/management/create", this.form)
@ -194,12 +205,10 @@ export default {
},
remove(mid) {
request
.get("/score_card_config/management/delete", { mid })
.then(() => {
this.$notify.success("删除成功");
this.init()
});
request.get("/score_card_config/management/delete", { mid }).then(() => {
this.$notify.success("删除成功");
this.init();
});
},
},
watch: {

View File

@ -25,7 +25,7 @@ export default {
components:{firstStep,secondStep,thirdStep,fourthStep},
data() {
return {
active:0,
active:2,
};
},

View File

@ -44,6 +44,7 @@
</template>
</fecr-table>
<fecr-dialog
:width="'1200px'"
:title="score.name"
:visible.sync="score.visible"
@cancel="score.visible = false"
@ -57,7 +58,23 @@
<el-form-item label="打分">
<el-input></el-input>
</el-form-item>
<el-form-item label="打分理由"> </el-form-item>
<el-form-item label="打分理由">
<Toolbar
style="border-bottom: 1px solid #ccc"
:editor="editor"
:defaultConfig="toolbarConfig"
:mode="mode"
/>
<Editor
style="height: 500px; overflow-y: hidden"
v-model="html"
:defaultConfig="editorConfig"
:mode="mode"
@onCreated="onCreated"
/>
</el-form-item>
<el-form-item label="打分参照">
<!-- <fecr-table :data="" :column=""></fecr-table> -->
</el-form-item>
@ -88,13 +105,14 @@
<script>
import FecrTable from "@/components/FecrTable";
import FecrDialog from "@/components/FecrDialog";
import { Editor, Toolbar } from "@wangeditor/editor-for-vue";
export default {
components: { FecrTable, FecrDialog },
components: { FecrTable, FecrDialog, Editor, Toolbar },
data() {
return {
score: {
name: "",
visible: false,
visible: true,
},
view: {
name: "",
@ -157,6 +175,12 @@ export default {
{ label: "得分", prop: "score" },
{ label: "操作", prop: "operation" },
],
editor: null,
html: "<p>hello</p>",
toolbarConfig: {},
editorConfig: { placeholder: "请输入内容..." },
mode: "default", // or 'simple'
};
},
@ -198,6 +222,10 @@ export default {
}
}
},
onCreated(editor) {
this.editor = Object.seal(editor); // Object.seal()
},
},
};
</script>
@ -238,4 +266,9 @@ export default {
color: $theme-color;
}
}
::v-deep .el-form-item__label{
width: 100%;
text-align: left;
}
</style>

View File

@ -55,7 +55,6 @@ import FecrAside from "./aside/index";
import model from "./content/model/index";
import modelDetails from "./content/model/details"
import indicators from "./content/indicators/index";
import indicatorsCreate from "./content/indicators/create"
import indicatorsDetails from "./content/indicators/details"
import rating from "./content/rating/index";
import setting from "./content/setting/index";
@ -65,7 +64,6 @@ export default {
model,
modelDetails,
indicators,
indicatorsCreate,
indicatorsDetails,
rating,
setting,