diff --git a/src/api/budget/planTarget.js b/src/api/budget/planTarget.js new file mode 100644 index 0000000..33109f6 --- /dev/null +++ b/src/api/budget/planTarget.js @@ -0,0 +1,33 @@ +import request from '@/utils/request' + +export function index(params) { + return request({ + method: "get", + url: "/api/admin/plan_target/index", + params + }) +} + +export function show(params) { + return request({ + method: "get", + url: "/api/admin/plan_target/show", + params + }) +} + +export function save(data) { + return request({ + method: "post", + url: "/api/admin/plan_target/save", + data + }) +} + +export function destroy(params) { + return request({ + method: "get", + url: "/api/admin/plan_target/destroy", + params + }) +} diff --git a/src/components/XyTable/index.vue b/src/components/XyTable/index.vue index feec659..d18dbd5 100644 --- a/src/components/XyTable/index.vue +++ b/src/components/XyTable/index.vue @@ -129,6 +129,9 @@ export default { }, toggleAllSelection(){ this.$refs.table.toggleAllSelection() + }, + doLayout() { + this.$refs['table'].doLayout(); } }, created() { diff --git a/src/utils/index.js b/src/utils/index.js index 5759438..fc12e4b 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -135,3 +135,64 @@ export function moneyFormatter(money,precision=2){ export function moneyRecovery(money){ return parseFloat(money.replace(/[^\d\.-]/g, "")); } + +//深拷贝 +export function deepCopy(data) { + //string,number,bool,null,undefined,symbol + //object,array,date + if (data && typeof data === "object") { + //针对函数的拷贝 + if (typeof data === "function") { + let tempFunc = data.bind(null); + tempFunc.prototype = deepCopy(data.prototype); + return tempFunc; + } + + switch (Object.prototype.toString.call(data)) { + case "[object String]": + return data.toString(); + case "[object Number]": + return Number(data.toString()); + case "[object Boolean]": + return new Boolean(data.toString()); + case "[object Date]": + return new Date(data.getTime()); + case "[object Array]": + let arr = []; + for (let i = 0; i < data.length; i++) { + arr[i] = deepCopy(data[i]); + } + return arr; + + //js自带对象或用户自定义类实例 + case "[object Object]": + let obj = {}; + for (let key in data) { + //会遍历原型链上的属性方法,可以用hasOwnProperty来控制 (obj.hasOwnProperty(prop) + obj[key] = deepCopy(data[key]); + } + return obj; + } + } else { + //string,number,bool,null,undefined,symbol + return data; + } +} + +export function resetSelect(select) { + let keys = Object.keys(select); + keys.forEach(key => { + if(key === 'page'){ + select[key] = 1 + } + else if(key === 'page_size'){ + select[key] = 10 + } + else if(select[key] instanceof Array){ + select[key] = [] + } + else { + select[key] = "" + } + }) +} diff --git a/src/views/achievements/components/addPoint.vue b/src/views/achievements/components/addPoint.vue index 0afd00a..176e26c 100644 --- a/src/views/achievements/components/addPoint.vue +++ b/src/views/achievements/components/addPoint.vue @@ -286,6 +286,8 @@ export default { async getDetail() { const res = await show({ id: this.id }); this.$integrateData(this.form, res); + + this.target_type2s = this.target_types?.filter(i => i.id === this.form.target_type_id)[0]?.children }, submit() { diff --git a/src/views/achievements/point.vue b/src/views/achievements/point.vue index 334e1ae..e371c5d 100644 --- a/src/views/achievements/point.vue +++ b/src/views/achievements/point.vue @@ -13,15 +13,16 @@ - + - + @@ -44,6 +56,7 @@ import { index,destroy } from "@/api/achievements/points"; import { index as typesIndex } from "@/api/achievements/types"; import { getparameter } from "@/api/system/dictionary" +import { resetSelect } from "@/utils/index" import addPoint from '@/views/achievements/components/addPoint.vue' export default { @@ -107,6 +120,7 @@ export default { } }, methods: { + resetSelect, async getTypes() { const res = await typesIndex({ show_tree:1 }) this.types = res || [] @@ -131,9 +145,12 @@ export default { }, async getList() { + this.pos = this.pos1 = 0; + this.spanArr = []; + this.spanArr1 = []; const res = await index(this.select) + this.total = res.total this.list = res.data - console.log(this.list) for(let i in this.list){ if(i === 0){ @@ -203,7 +220,7 @@ export default { }, spanMethod({ row, column, rowIndex, columnIndex }) { - if (columnIndex === 0) { + if (column.property === "target_type_detail.name") { const _row = this.spanArr[rowIndex]; const _col = _row > 0 ? 1 : 0; return { @@ -211,7 +228,7 @@ export default { colspan: _col } } - if (columnIndex === 1) { + if (column.property === "target_type2_detail.name") { const _row = this.spanArr1[rowIndex]; const _col = _row > 0 ? 1 : 0; return { diff --git a/src/views/budget/budgetList.vue b/src/views/budget/budgetList.vue index 7b513ed..3f88665 100644 --- a/src/views/budget/budgetList.vue +++ b/src/views/budget/budgetList.vue @@ -61,15 +61,16 @@ - - 删除 + @@ -86,15 +87,15 @@ - - - 删除 - + 删除 + @@ -320,6 +321,8 @@ + + @@ -345,12 +348,15 @@ import { getparameter } from "@/api/system/dictionary" - import { mergeTableRow } from "@/utils/mergeTableRow" + import addPoint from "./components/addPoint.vue" export default { + components: { + addPoint + }, data() { return { tableHeight: 0, @@ -812,4 +818,15 @@ z-index: 2; } } + + .slot-btns { + display: flex; + flex-wrap: wrap; + align-content: center; + justify-content: flex-start; + + &-item { + margin: 0 6px 4px 0; + } + } diff --git a/src/views/budget/components/addPoint.vue b/src/views/budget/components/addPoint.vue new file mode 100644 index 0000000..38d9c55 --- /dev/null +++ b/src/views/budget/components/addPoint.vue @@ -0,0 +1,397 @@ + + + + +