coys 2 жил өмнө
parent
commit
2f993eb486

+ 1 - 1
.env.development

@@ -15,7 +15,7 @@ ENV = 'development'
 #VUE_APP_BASE_API = 'http://10.87.11.94:8080'
 # VUE_APP_BASE_API = 'http://localhost:8080'
 # 55环境
-VUE_APP_BASE_API = 'http://10.87.10.55:8080'
+VUE_APP_BASE_API = 'http://10.87.10.47:8080'
 
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

BIN
soc_web.7z


+ 58 - 0
src/api/resumption/outsourcing.js

@@ -0,0 +1,58 @@
+import request from "@/utils/request";
+//外包履职评价计划
+// 查询列表
+export function list(query) {
+  return request({
+    url: "/core/evaluatePlan/list",
+    method: "get",
+    params: query,
+  });
+}
+
+// 新增评价计划
+export function addEvaluate(data) {
+  return request({
+    url: "/core/evaluatePlan",
+    method: "post",
+    data,
+  });
+}
+//修改开关启用禁用
+export function swtichHandler(data) {
+  return request({
+    url: "/core/evaluatePlan/updateStatus",
+    method: "post",
+    data,
+  });
+}
+//获取详情
+export function getEvaluateById(id) {
+  return request({
+    url: `/core/evaluatePlan/${id}`,
+    method: "get",
+  });
+}
+
+//修改评价计划
+export function editEvaluate(data) {
+  return request({
+    url: `/core/evaluatePlan`,
+    method: "put",
+    data,
+  });
+}
+
+// 删除评价计划
+export function delelteEvaluate(id) {
+  return request({
+    url: `/core/evaluatePlan/${id}`,
+    method: "delete",
+  });
+}
+// 发布计划
+export function publishEvaluate(id) {
+  return request({
+    url: `/core/evaluatePlan/distribute/${id}`,
+    method: "get",
+  });
+}

+ 12 - 0
src/utils/index.js

@@ -387,4 +387,16 @@ export function camelCase(str) {
 export function isNumberStr(str) {
   return /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(str)
 }
+/**
+ * 生成全局唯一标识符 guid
+ * @returns {string}
+ */
+export function guid(head) {
+  const S4 = () =>
+    (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)
+  // 因为第一个字符为数值时,该 guid 不能用作 id 或者 class 所以前面加个 guid 前缀
+  return `${
+    head ? head : ''
+  }${S4()}${S4()}-${S4()}-${S4()}-${S4()}-${S4()}${S4()}${S4()}`
+}
  

+ 104 - 0
src/views/resumption/evaluate/addEvaluate.vue

@@ -0,0 +1,104 @@
+<template>
+  <div>
+    <DialogCom
+      :visible.sync="isShow"
+      :width="'500px'"
+      :title="`${id ? '编辑' : '新增'}外包履职评价计划`"
+      @close="closeHandler"
+      
+      destroy-on-close
+    >
+      <el-form
+        :model="ruleForm"
+        :rules="rules"
+        ref="ruleForm"
+        label-width="100px"
+        class="demo-ruleForm"
+      >
+        <el-form-item label="评价类型" prop="contentType">
+          <el-select v-model="ruleForm.contentType" placeholder="请选择评价类型">
+            <el-option
+              v-for="item in dict.type.evaluate_type"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            >
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="编号" prop="code">
+          <el-input v-model.number="ruleForm.code"></el-input>
+        </el-form-item>
+        <el-form-item label="评价内容" prop="content">
+          <el-input type="textarea" v-model="ruleForm.content"></el-input>
+        </el-form-item>
+
+        <el-form-item>
+          <el-button @click="resetFormHandler('ruleForm')">取消</el-button>
+          <el-button type="primary" @click="submitForm('ruleForm')"
+            >确定</el-button
+          >
+        </el-form-item>
+      </el-form>
+    </DialogCom>
+  </div>
+</template>
+<script>
+import { guid } from "@/utils/index.js";
+export default {
+  name: "SocWebAddEvaluate",
+  dicts: ["evaluate_type"],
+  data() {
+    return {
+      ruleForm: {},
+      rules: {
+        contentType: [{ required: true, message: "请选择评价类型" }],
+        code: [
+          { required: true, message: "请选择编号" },
+          { type: "number", message: "编号必须为数字值" },
+        ],
+        content: [{ required: true, message: "请选择评价内容" }],
+      },
+      id: "", //编辑时候ID
+      isShow: false,
+    };
+  },
+
+  mounted() {},
+
+  methods: {
+    show() {
+      this.isShow = true;
+    },
+    resetFormHandler() {
+      this.isShow = false;
+    },
+    closeHandler() {
+      this.ruleForm = {};
+    },
+  
+
+    submitForm(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          if (this.ruleForm.uid) {
+            //当前是编辑
+          } else {
+            //当前是新增
+            this.ruleForm.uid = guid();
+          }
+          this.$emit("submitHandler", this.ruleForm);
+          this.isShow = false;
+        } else {
+          return false;
+        }
+      });
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.el-select {
+  width: 100%;
+}
+</style>

+ 371 - 0
src/views/resumption/evaluate/editDialog.vue

@@ -0,0 +1,371 @@
+<template>
+  <div class="rule-type">
+    <DialogCom
+      @colse="onHide"
+      :title="`${id ? '编辑' : '新增'}外包履职评价计划`"
+      :visible.sync="isShow"
+      width="1500px"
+    >
+      <div class="page-body">
+        <el-form
+          :model="formData"
+          :rules="formDataRules"
+          size="small"
+          ref="form"
+          label-position="right"
+          label-width="130px"
+          label-prefix=":"
+        >
+          <el-row>
+            <el-col :span="8">
+              <el-form-item prop="evaluateName" label="外包评价名称:">
+                <el-input
+                  v-model="formData.evaluateName"
+                  name="evaluateName"
+                  placeholder="请输入外包评价名称"
+                  clearable
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item prop="orgType" label="评价机构类型:">
+                <el-select
+                  label="评价机构类型"
+                  name="orgType"
+                  v-model="formData.orgType"
+                  placeholder="请选择评价机构类型"
+                  @change="onOrgTypeChanged"
+                  clearable
+                >
+                  <el-option
+                    v-for="item in dict.type.sys_org_type"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value"
+                  >
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item prop="roleIds" label="评价角色:">
+                <el-select
+                  label="评价角色"
+                  v-model="formData.roleIds"
+                  placeholder="请选择评价角色"
+                  multiple
+                  @change="handleRolesChange"
+                >
+                  <el-option
+                    v-for="item in resumptionRoles"
+                    :key="item.id"
+                    :label="item.name"
+                    :value="item.id"
+                  >
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="8">
+              <el-form-item prop="evaluateCycle" label="评价周期:">
+                <el-select
+                  label="评价周期"
+                  v-model="formData.evaluateCycle"
+                  placeholder="请选择评价周期"
+                >
+                  <el-option
+                    v-for="item in dict.type.evaluate_cycle"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value"
+                  >
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="4">
+              <el-form-item prop="buildTaskNow" label="立即生效:">
+                <el-checkbox
+                  
+                  v-model="formData.buildTaskNow"
+                  size="medium"
+                  >勾选后当前周期开始生效</el-checkbox
+                >
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+        <el-button @click="openSelect">新增评价内容</el-button>
+
+        <el-table :data="tableData" style="width: 100%" height="400px">
+          <el-table-column label="序号" type="index" width="50">
+          </el-table-column>
+          <el-table-column prop="content" label="评价内容"> </el-table-column>
+          <el-table-column prop="code" label="编号"> </el-table-column>
+          <el-table-column
+            prop="contentType"
+            label="评价类型"
+            :formatter="typeFormat"
+          >
+          </el-table-column>
+          <el-table-column label="操作">
+            <template v-slot="{ row }">
+              <el-button type="text" @click="removeRow(row)">移除</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="onHide">取消</el-button>
+        <el-button type="primary" @click="onSubmit">确定</el-button>
+      </div>
+    </DialogCom>
+    <DialogSelect
+      ref="dialogEvaluate"
+      :orgType="formData.orgType"
+      @submitHandler="onSelect"
+    ></DialogSelect>
+  </div>
+</template>
+
+<script>
+import dayjs from "dayjs";
+import { mapGetters } from "vuex";
+import * as api from "@/api/resumption/plan";
+import { statusOptions } from "./../../commonOption";
+import { findAllRole } from "@/api/system/role";
+import DialogSelect from "./addEvaluate.vue";
+import { addEvaluate, getEvaluateById ,editEvaluate} from "@/api/resumption/outsourcing.js";
+
+export default {
+  dicts: ["evaluate_cycle", "sys_org_type"],
+  data() {
+    return {
+      selectedValues: [],
+      resumptionRoles: [],
+      evaluateName: null,
+      planType: null,
+      evaluateCycle: null,
+      planStatus: null,
+      orgType: null,
+      roleNames: null,
+
+      tableData: [],
+      id: null,
+      isShow: false,
+      formData: {},
+      formDataRules: {
+        evaluateName: [{ required: true, message: "请输入评价名称" }],
+        roleIds: [
+          { required: true, message: "请选择评价角色", trigger: "blur" },
+        ],
+        orgType: [{ required: true, message: "请选择评价机构类型" }],
+        evaluateCycle: [{ required: true, message: "请选择评价周期" }],
+        planStatus: [{ required: true, message: "请选择计划状态" }],
+      },
+      statusOptions: statusOptions,
+    };
+  },
+  props: {
+    orgTypeOptions: {
+      type: Array,
+    },
+    ruleTypeOptions: {
+      type: Array,
+    },
+  },
+  watch: {},
+  computed: {
+    ...mapGetters(["orgId", "orgName"]),
+  },
+  mounted() {},
+  components: { DialogSelect },
+  methods: {
+    //数据格式化
+    typeFormat(row) {
+      switch (row.contentType) {
+        case "1":
+          return "文本输入";
+          break;
+        case "2":
+          return "评价打分";
+          break;
+
+        default:
+          break;
+      }
+    },
+    reset() {
+      return {
+        planName: null,
+        planType: null,
+        evaluateCycle: null,
+        planStatus: null,
+        orgType: null,
+        roleNames: null,
+
+        tableData: [],
+
+        buildTaskNow: false,
+      };
+    },
+
+    getRolesByOrg(falg='') {
+      if(falg){
+
+        this.formData.roleIds = [];
+      }
+      if (this.formData.orgType != null) {
+        let params = {
+          orgType: this.formData.orgType,
+        };
+
+        findAllRole(params).then((res) => {
+          this.resumptionRoles = res.data;
+        });
+      }
+    },
+
+   
+    onSelect(form) {
+      console.log(form);
+      let isAdd = false;
+      this.tableData?.forEach((item) => {
+        if (item.uid == form.uid) {
+          Object.assign(item, form);
+        } else {
+          isAdd = true;
+        }
+      });
+      if (isAdd || this.tableData.length == 0) {
+        this.tableData.push(form);
+      }
+      console.log(this.tableData);
+    },
+    onOrgTypeChanged() {
+      
+      this.getRolesByOrg(1);
+    },
+    async show(id = "", other = {}) {
+      this.id = id;
+      this.tableData = [];
+
+      // await this.refresh(id, other);
+
+      if (id) {
+        await getEvaluateById(id).then((res) => {
+          let { code, msg ,data} = res;
+          if (code == 200) {
+            Object.assign(this.formData,data)
+            this.getRolesByOrg()
+            this.tableData=data.coreEvaluateContentList
+            delete this.formData.coreEvaluateContentList
+          } else {
+            this.$message.error(msg);
+          }
+        });
+      }
+      this.isShow = true;
+    },
+    removeRow(row) {
+      this.$modal
+        .confirm("是否确认删除?")
+        .then(function () {})
+        .then(() => {
+          this.tableData = this.tableData.filter(
+            (item) => item.uid !== row.uid
+          );
+          this.$modal.msgSuccess("删除成功");
+        });
+    },
+    // 事件
+    onHide() {
+      this.$refs.form.resetFields();
+      this.isShow = false;
+      this.formData = {};
+
+      this.tableData = [];
+    },
+
+    openSelect() {
+      this.$refs.dialogEvaluate.show();
+    },
+    onSubmit() {
+      this.$refs.form.validate(async (isValidate) => {
+        if (isValidate) {
+          if(this.tableData.length==0){
+            return this.$message.error(
+              "评价内容项,不能为空"
+            );
+          }
+          if (falg) {
+            return this.$message.error(
+              "评价内容所有项,至少有一项评价类型为打分"
+            );
+          }
+          let obj = {
+            ...this.formData,
+            coreEvaluateContentList: this.tableData,
+          };
+          let falg = true;
+          this.tableData.forEach((item) => {
+            if (item.contentType == "2") {
+              falg = false;
+            }
+          });
+          if(this.formData.id){
+            //编辑
+            
+            editEvaluate(obj).then((res) => {
+              let { code, msg } = res;
+              if (code == 200) {
+                this.$message.success(msg);
+                this.$emit("success");
+                this.onHide();
+              } else {
+                this.$message.error(msg);
+              }
+            });
+          }else{
+            //新增
+            addEvaluate(obj).then((res) => {
+              let { code, msg } = res;
+              if (code == 200) {
+                this.$message.success(msg);
+                this.$emit("success");
+                this.onHide();
+              } else {
+                this.$message.error(msg);
+              }
+            });
+          }
+          // this.$emit("success");
+          // this.onHide();
+        }
+      });
+    },
+    handleRolesChange(val) {
+      this.selectedValues = val.toString().split(",");
+    },
+    // 事件
+    //apimark//
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.brand_info {
+  .el-form {
+    width: 600px;
+    padding-top: 40px;
+  }
+}
+.form-item-comment {
+  font-size: 12px;
+  color: #999;
+  height: 10px;
+}
+</style>

+ 125 - 45
src/views/resumption/evaluate/index.vue

@@ -20,37 +20,35 @@
             v-show="showSearch"
             label-width="100px"
           >
-            <el-form-item label="外包评价名称" prop="name">
+            <el-form-item label="外包评价名称" prop="evaluateName">
               <el-input
                 :maxlength="20"
-                v-model="queryParams.name"
+                v-model="queryParams.evaluateName"
                 placeholder="请输入外包评价名称"
                 clearable
-                
                 @keyup.enter.native="handleQuery"
               />
             </el-form-item>
-            <el-form-item label="状态" prop="isLock">
+            <el-form-item label="状态" prop="status">
               <el-select
-                v-model="queryParams.isLock"
+                v-model="queryParams.status"
                 placeholder="请选择状态"
                 clearable
-                
               >
                 <el-option
-                  v-for="dict in dict.type.sys_user_is_lock"
+                  v-for="dict in dict.type.plan_status"
                   :key="dict.value"
                   :label="dict.label"
                   :value="dict.value"
                 />
               </el-select>
             </el-form-item>
-            <el-form-item prop="execOrgType" label="评价机构类型">
+            <el-form-item label="评价机构类型">
               <el-select
                 @change="cleanExecOrgList"
-                prop="execOrgType"
+                prop="orgType"
                 label="评价机构类型"
-                v-model="formData.execOrgType"
+                v-model="queryParams.orgType"
                 placeholder="请选择评价机构类型"
                 clearable
               >
@@ -64,13 +62,13 @@
               </el-select>
             </el-form-item>
             <el-form-item>
-              <el-form-item prop="roleIds" label="评价角色">
+              <el-form-item prop="roleId" label="评价角色">
                 <el-select
                   @visible-change="getRolesByOrg"
                   label="评价角色"
-                  v-model="formData.roleIds"
+                  v-model="queryParams.roleId"
                   placeholder="请选择评价角色"
-                  multiple
+                  
                   filterable
                   @change="handleRolesChange"
                 >
@@ -112,7 +110,6 @@
                 >新增</el-button
               >
             </el-col>
-           
           </el-row>
           <el-table
             border
@@ -121,29 +118,49 @@
             v-loading="loading"
             :data="dataList"
             align="center"
+            fixed
             @selection-change="handleSelectionChange"
           >
             <el-table-column
-              
               label="序号"
               type="index"
               width="50"
             ></el-table-column>
-            <el-table-column
-              label="用户账号"
-              key="username"
-              prop="username"
-              
-            />
+            <el-table-column label="创建机构" prop="orgName" />
+            <el-table-column label="外包评价名称" prop="evaluateName" />
+            <el-table-column label="评价机构类型" prop="orgType" />
+            <el-table-column label="评价角色" prop="roleName" />
+            <el-table-column label="评价周期" prop="evaluateCycle" />
+            <el-table-column label="创建人" prop="createBy" />
+            <el-table-column label="创建时间" prop="createTime" />
+            <el-table-column label="状态" width="150">
+              <template slot-scope="{ row }">
+                <el-switch
+                  v-model="row.status"
+                  active-text="启用"
+                  active-value="0"
+                  inactive-text="禁用"
+                  inactive-value="1"
+                  @change="swtichChangeHandler(row)"
+                >
+                </el-switch>
+              </template>
+            </el-table-column>
             <el-table-column
               label="操作"
-              width="300"
+              width="180"
               fixed="right"
               class-name="small-padding fixed-width"
             >
-              <template slot-scope="scope">
-                <el-button size="mini" type="text" icon="el-icon-plus"
-                  >补充信息</el-button
+              <template slot-scope="{row}">
+                <!-- publishEvaluate -->
+                <el-button size="mini" @click="publishHandler(row)" type="text" icon="el-icon-plus"
+                  >发布</el-button
+                >
+                <el-button size="mini" @click="editHandler(row)" type="text" icon="el-icon-plus"
+                  >编辑</el-button
+                ><el-button size="mini" @click="deleteHandler(row)"  type="text" icon="el-icon-plus"
+                  >删除</el-button
                 >
               </template>
             </el-table-column>
@@ -159,59 +176,122 @@
         </el-col>
       </el-row>
     </layoutCom>
+    <editEvaluate ref="Evaluate" @success="getList()"></editEvaluate>
   </div>
 </template>
 <script>
 import { mapGetters } from "vuex";
 import { findAllRole } from "@/api/system/role";
+import { list, swtichHandler,delelteEvaluate,publishEvaluate } from "@/api/resumption/outsourcing.js";
 import OrgTree from "@/components/orgTree";
+import editEvaluate from "./editDialog.vue";
 export default {
   name: "SocWebIndex",
   dicts: ["sys_org_type", "plan_status"],
-  components:{
-    OrgTree
+  components: {
+    OrgTree,
+    editEvaluate,
   },
   data() {
     const { params, query } = this.$route;
     return {
-        loading:false,
+      loading: false,
       selectedValues: [],
       planRoles: [],
-      formData: this.reset(),
+      queryParams: this.reset(),
       queryParams: {
         orgId: null,
-        name: null,
-        type: null,
+        evaluateName: null,
+        status: null,
         orgType: null,
         checkSub: true,
+        roleId: "",
         pageNum: 1,
         pageSize: 10,
         ...query,
       },
       // 显示搜索条件
       showSearch: true,
-      total:0,
-      dataList:[{}]
+      total: 0,
+      dataList: [],
     };
   },
-  
+  created() {},
   mounted() {},
   computed: {
     ...mapGetters(["orgId"]),
   },
   methods: {
+    //开关启用禁用
+    swtichChangeHandler(row) {
+      swtichHandler({
+        id: row.id,
+        status: row.status,
+      }).then((res) => {
+        let { code, msg } = res;
+        if (code == 200) {
+          this.$message.success(msg);
+          this.getList()
+        } else {
+          this.$message.error(msg);
+        }
+      });
+    },
     //获取列表
-    getList(){
-
+    getList() {
+      this.loading=true
+      // this.queryParams.orgId=this.orgId
+      list(this.queryParams).then((res) => {
+        this.dataList = res?.rows || [];
+        this.total = res?.total || [];
+        this.loading=false
+      });
     },
     // 多选框选中数据
-    handleSelectionChange(selection) {
-    //   this.ids = selection.map((item) => item.userId);
-    //   this.single = selection.length != 1;
-    //   this.multiple = !selection.length;
-    },
+    handleSelectionChange(selection) {},
     /** 新增按钮操作 */
-    handleAdd() {},
+    handleAdd() {
+      this.$refs.Evaluate.show();
+    },
+    editHandler(row){
+      this.$refs.Evaluate.show(row.id);
+    },
+    //发布
+    publishHandler(row){
+      // publishEvaluate
+      this.$modal
+        .confirm("是否确认发布?")
+        .then(function () {})
+        .then(() => {
+          publishEvaluate(row.id).then(res=>{
+            let {code,msg}=res
+            if(code==200){
+              this.getList()
+              this.$modal.msgSuccess("发布成功");
+            }else{
+              this.$modal.msgSuccess(msg);
+
+            }
+          })
+        });
+    },
+    deleteHandler(row){
+      this.$modal
+        .confirm("是否确认删除?")
+        .then(function () {})
+        .then(() => {
+          delelteEvaluate(row.id).then(res=>{
+            let {code,msg}=res
+            if(code==200){
+              this.getList()
+              this.$modal.msgSuccess("删除成功");
+            }else{
+              this.$modal.msgSuccess(msg);
+
+            }
+          })
+        });
+    },
     //单选框状态改变
     checkChange(state) {
       this.queryParams.checkSub = state;
@@ -232,7 +312,7 @@ export default {
     },
     cleanExecOrgList() {
       this.execOrgIds = null;
-      this.formData.execOrgList = [];
+      this.queryParams.execOrgList = [];
     },
     handleRolesChange(val) {
       this.selectedValues = val.toString().split(",");
@@ -258,7 +338,7 @@ export default {
         planType: null,
         planCycle: null,
         planStatus: null,
-        execOrgType: null,
+        orgType: null,
         roleNames: null,
         count: null,
         description: null,
@@ -270,7 +350,7 @@ export default {
         planCreateOrgId: null,
         planCreateOrgName: null,
         roleList: null,
-        roleIds: null,
+        roleId: null,
         execOrg: null,
         checkOrg: null,
         buildTaskNow: false,