zhengnaiwen_citu 5 ヶ月 前
コミット
2b703b6560

+ 5 - 1
src/components/AutoComponents/MTable/index.vue

@@ -1,6 +1,6 @@
 <template>
   <m-card :shadow="shadow">
-    <div slot="header" class="clearfix">
+    <div v-if="!clearHeader" slot="header" class="clearfix">
       <span>{{ cardTitle ?? $route.meta?.title }}</span>
       <div class="tools">
         <slot name="card-tools"></slot>
@@ -55,6 +55,10 @@ export default {
   props: {
     cardTitle: String,
     shadow: String,
+    clearHeader: {
+      type: Boolean,
+      default: false
+    },
     items: {
       type: Array,
       default: () => []

+ 2 - 1
src/views/humanResources/welfare/welfareList/welfareRules.vue

@@ -7,6 +7,7 @@
       <el-form-item label="福利配置">
         <m-table
           shadow="naver"
+          clearHeader
           :items="formQuery.items"
           :headers="headers"
         >
@@ -38,7 +39,7 @@
             </el-form-item>
           </template>
           <template #actions="scope">
-            <m-button class="mb-5" size="small" text type="danger" @click="onDelete(scope)">移除</m-button>
+            <m-button size="small" text type="danger" @click="onDelete(scope)">移除</m-button>
           </template>
         </m-table>
       </el-form-item>

+ 40 - 3
src/views/salary/solution/salarySolution/salarySolutionEdit.vue

@@ -17,7 +17,10 @@ export default {
       loading: false,
       formQuery: {
         title: null,
-        tag: null
+        tag: null,
+        organizationNo: null,
+        category: null,
+        rewriteType: 0
       },
       itemData: {}
     }
@@ -56,12 +59,46 @@ export default {
             showAllLevels: false,
             props: {
               checkStrictly: true,
-              // emitPath: false,
               value: 'organizationNo',
               label: 'organizationName',
               children: 'child'
             }
-          }
+          },
+          rules: [
+            { required: true, message: '请选择绩效机构', trigger: 'change' }
+          ]
+        },
+        {
+          label: '绩效职务',
+          prop: 'category',
+          type: 'select',
+          options: {
+            placeholder: '请选择绩效职务',
+            items: []
+          },
+          rules: [
+            { required: true, message: '请选择绩效职务', trigger: 'change' }
+          ]
+        },
+        {
+          label: '下级自定义',
+          prop: 'rewriteType',
+          type: 'radioGroup',
+          options: {
+            items: [
+              {
+                text: '允许',
+                label: 0
+              },
+              {
+                text: '不允许',
+                label: 1
+              }
+            ]
+          },
+          rules: [
+            { required: true, message: '请选择下级自定义', trigger: 'change' }
+          ]
         }
       ]
     }

+ 90 - 96
src/views/salary/solution/salarySolution/salarySolutionRules.vue

@@ -1,72 +1,53 @@
 <template>
   <m-dialog ref="dialog" title="规则配置" width="1000px" @sure="onSure">
-    <el-form ref="form" v-loading="loading" label-width="100px">
+    <el-form v-loading="loading" label-width="100px">
       <el-form-item label="名称">
         <el-tag color="primary">{{ itemData.title }}</el-tag>
       </el-form-item>
-      <el-form-item label="参数">
-        <m-card shadow="never">
-          <el-form-item label="参数分类">
-            <el-select v-model="paramsActive" placeholder="请选择参数分类">
-              <el-option
-                v-for="category in categories"
-                :key="category"
-                :label="category"
-                :value="category"
-              >
-              </el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="参数配置" class="mt-3">
-            <template #label>
-              <span>参数配置</span>
-              <el-tooltip class="item" effect="dark" content="复选框勾选代表启用项" placement="right">
-                <span class="el-icon-info"></span>
-              </el-tooltip>
-            </template>
-            <m-table
-              shadow="never"
-              ref="table"
-              :items="paramsList"
-              :headers="headers"
+      <el-form-item label="参数配置">
+        <m-table
+          shadow="naver"
+          clearHeader
+          :items="formQuery.items"
+          :headers="[
+            { label: '参数', prop: 'label' },
+            { label: '数值', prop: 'value' },
+            { label: '操作', prop: 'actions' }
+          ]"
+        >
+          <div class="text-center mt-3">
+            <m-button icon="el-icon-plus" type="orange" size="small" @click="onAdd">添加一行</m-button>
+          </div>
+          <template #label="scope">
+            <el-form-item
+              :prop="`items.${scope.$index}.label`"
+              :rules="{ required: true, message: '请输入参数名称', trigger: 'blur' }"
             >
-              <template #status-header>
-                <el-checkbox @change="onSelectAllChange"></el-checkbox>
-                启用
-              </template>
-              <template #status="{ row }">
-                <el-checkbox v-model="row.status" @change="onSelectChange($event, row)"></el-checkbox>
-              </template>
-              <template #header>
-                <div class="tools">
-                  <el-popover
-                    placement="top"
-                    width="500"
-                    trigger="click"
-                  >
-                    <m-table
-                      v-if="gridData.length > 0"
-                      style="border: unset"
-                      shadow="never"
-                      height="250"
-                      :items="gridData"
-                      :headers="[
-                        { label: '分类', prop: 'category' },
-                        { label: '参数名称', prop: 'name' },
-                        { label: '数值', prop: 'value', width: 100, align: 'center' }
-                      ]"
-                    ></m-table>
-                    <el-empty v-else></el-empty>
-                    <m-button slot="reference" type="orange" size="small">查看已选 {{ gridData.length }}</m-button>
-                  </el-popover>
-                </div>
-              </template>
-              <template #value="{ row }">
-                <el-input-number size="mini" v-model="row.value" placeholder="请输入数值"></el-input-number>
-              </template>
-            </m-table>
-          </el-form-item>
-        </m-card>
+              <el-input
+                size="small"
+                v-model="formQuery.items[scope.$index].label"
+                placeholder="请输入值"
+                type="textarea"
+                :autosize="{ minRows: 1, maxRows: 4}"
+              ></el-input>
+            </el-form-item>
+          </template>
+          <template #value="scope">
+            <el-form-item
+              :prop="`items.${scope.$index}.value`"
+              :rules="{ required: true, message: '请输入值', trigger: 'blur' }"
+            >
+              <el-input-number
+                size="small"
+                v-model="formQuery.items[scope.$index].value"
+                placeholder="参数名称"
+              ></el-input-number>
+            </el-form-item>
+          </template>
+          <template #actions="scope">
+            <m-button size="small" text type="danger" @click="onDelete(scope)">删除</m-button>
+          </template>
+        </m-table>
       </el-form-item>
       <el-form-item label="计算公式">
         <m-card shadow="never">
@@ -77,17 +58,32 @@
             default-expand-all
             :expand-on-click-node="false"
           >
-            <div class="custom-tree-node" slot-scope="{ data }">
-              <el-input size="small" v-model="data.content" placeholder="描述文字"></el-input>
-              <el-button class="ml-3" size="small" @click="onInsertAfter(data)">
-                同级追加
-              </el-button>
-              <el-button class="ml-3" size="small" @click="onAppend(data)">
-                插入下一级
-              </el-button>
-              <el-button size="small" @click="onRemove(data)">
-                删除
-              </el-button>
+            <div class="custom-tree-node" slot-scope="{ data, node }">
+              <el-input size="small" v-model="data.content" style="width: 400px" placeholder="描述文字"></el-input>
+              <template v-if="node.level > 7">
+                <el-dropdown @command="e => onCommon(e, data)">
+                  <m-button size="small" class="ml-3">
+                    查看更多
+                  </m-button>
+                  <el-dropdown-menu slot="dropdown">
+                    <el-dropdown-item
+                      v-for="(item, index) in btnList"
+                      :key="item.label"
+                      :command="index"
+                    >{{ item.label }}</el-dropdown-item>
+                  </el-dropdown-menu>
+                </el-dropdown>
+              </template>
+              <template v-else>
+                <el-button
+                  v-for="item in btnList"
+                  :key="item.label"
+                  class="ml-3"
+                  size="small"
+                  @click="item.click(data)">
+                  {{ item.label }}
+                </el-button>
+              </template>
             </div>
           </el-tree>
         </m-card>
@@ -108,6 +104,14 @@ export default {
   name: 'salary-solution-rules',
   data () {
     return {
+      btnList: [
+        { label: '同级追加', click: this.onInsertAfter },
+        { label: '插入下一级', click: this.onAppend },
+        { label: '删除', click: this.onRemove }
+      ],
+      formQuery: {
+        items: []
+      },
       formula: [
         {
           uuid: '1',
@@ -130,12 +134,6 @@ export default {
     }
   },
   computed: {
-    paramsList () {
-      if (!this.paramsCategoryItems[this.paramsActive]) {
-        return []
-      }
-      return this.paramsCategoryItems[this.paramsActive]
-    },
     gridData () {
       const _allParams = Object.values(this.paramsCategoryItems).flat()
       if (_allParams.length === 0) {
@@ -200,25 +198,18 @@ export default {
         }
       })
     },
-    onSelectChange (val, row) {
-      if (val) {
-        this.paramsSelection.push(row.name)
-      } else {
-        this.paramsSelection = this.paramsSelection.filter(e => e !== row.name)
-      }
+    onAdd () {
+      this.formQuery.items.push({ label: null, value: 0 })
     },
-    onSelectAllChange (val) {
-      if (val) {
-        this.paramsSelection = [...new Set(this.paramsSelection.concat(this.paramsList.map(e => e.name)))]
-      } else {
-        this.paramsSelection = this.paramsSelection.filter(e => !this.paramsList.map(e => e.name).includes(e))
-      }
-      this.paramsList.forEach(e => {
-        e.status = val
-      })
+    onDelete (scope) {
+      this.$confirm('确定要删除吗?', '提示').then(e => {
+        this.formQuery.items.splice(scope.$index, 1)
+      }).catch(_ => {})
     },
     onRemove (data) {
-      this.$refs.formulaTreeRefs.remove(data)
+      this.$confirm('确定要删除吗?', '提示').then(e => {
+        this.$refs.formulaTreeRefs.remove(data)
+      }).catch(_ => {})
     },
     onInsertAfter (data) {
       this.$refs.formulaTreeRefs.insertAfter({
@@ -232,6 +223,9 @@ export default {
         content: null
       }, data)
     },
+    onCommon (index, data) {
+      this.btnList[index].click(data)
+    },
     async onSure () {
       if (this.paramsSelection.length === 0) {
         this.$message.error('请选择参数')