xiewd 1 mēnesi atpakaļ
vecāks
revīzija
08b38397d4

+ 5 - 0
RuoYi-Vue-fast-master/src/main/java/com/ruoyi/project/business/domain/TcAccount.java

@@ -5,6 +5,7 @@ import java.util.Date;
 import java.util.List;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.ruoyi.project.business.domain.vo.lead.LeadRes;
@@ -238,5 +239,9 @@ public class TcAccount extends BaseEntity
     // 创建人的 所属 id
     private Long deptId;
 
+    @TableField(exist = false)
+    private String modifyRemark;
+
+
 
 }

+ 2 - 0
RuoYi-Vue-fast-master/src/main/java/com/ruoyi/project/business/domain/TcAccountHistory.java

@@ -216,6 +216,8 @@ public class TcAccountHistory extends BaseEntity {
      * @Description 城市
      **/
     private String city;
+
+    private String modifyRemark;
     
     public static TcAccountHistory from (TcAccount tcAccount, Long version) {
         TcAccountHistory history = new TcAccountHistory();

+ 22 - 0
RuoYi-Vue-fast-master/src/main/java/com/ruoyi/project/business/domain/TcProjectHistory.java

@@ -205,6 +205,28 @@ public class TcProjectHistory extends BaseEntity
 
     private String modifyRemark;
 
+    // 竞争对手 50
+    private String competitor;
+
+    // 丢单原因分类
+    private String reasonType;
+
+    public String getCompetitor() {
+        return competitor;
+    }
+
+    public void setCompetitor(String competitor) {
+        this.competitor = competitor;
+    }
+
+    public String getReasonType() {
+        return reasonType;
+    }
+
+    public void setReasonType(String reasonType) {
+        this.reasonType = reasonType;
+    }
+
     public Integer getDeviceTotal() {
         return deviceTotal;
     }

+ 4 - 2
RuoYi-Vue-fast-master/src/main/resources/mybatis/business/TcAccountHistoryMapper.xml

@@ -42,6 +42,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="background"    column="background"    />
         <result property="beginYear"    column="begin_year"    />
         <result property="city" column="city"/>
+        <result property="modifyRemark" column="modify_remark"/>
+
     </resultMap>
 
     <sql id="selectTcAccountHistoryVo">
@@ -49,13 +51,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                phone, email, address, sector, registered_capital, level, start_time, owner,
                owner_agent, status, type, account_desc, order_status, account_group, version,
                del_flag, create_time, create_by, update_time, update_by, remark,
-               company_type, intentional_product, segment, company_website, background, begin_year,city
+               company_type, intentional_product, segment, company_website, background, begin_year,city,modify_remark
         from tc_account_history
     </sql>
 
     <select id="selectTcAccountHistoryList" parameterType="TcAccountHistory" resultMap="TcAccountHistoryResult">
         select h.*, u.nick_name as nickName from tc_account_history h
-            left join sys_user u on u.user_id = h.create_by
+            left join sys_user u on u.user_id = h.update_by
         <where>  
             <if test="accountId != null "> and h.account_id = #{accountId}</if>
             <if test="accountNo != null  and accountNo != ''"> and h.account_no = #{accountNo}</if>

+ 10 - 1
RuoYi-Vue-fast-master/src/main/resources/mybatis/business/TcProjectHistoryMapper.xml

@@ -54,10 +54,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="amount"    column="amount"    />
         <result property="expectedInstallStartDate"    column="expected_install_start_date"    />
         <result property="modifyRemark"    column="modify_remark"    />
+
+        <result property="reasonType"    column="reason_type"    />
+        <result property="competitor"    column="competitor"    />
     </resultMap>
 
     <sql id="selectTcProjectHistoryVo">
-        select project_id, project_no, project_name, account_id, address, model_flag, type, segmented_market, country_id, city, progress, developer, plan_deal_month, completion_year, start_time, over_time, currency_id, contact_person, contact, job_title, email, status, product_series, solution, owner, owner_agent, refuse_reason, audit_person, delay_remark, lose_remark, permission_char, version, del_flag, create_time, create_by, update_time, update_by, remark, area_id, key_contact_person, key_contact, key_job_title, key_email, special_remark, equipment_quantity, equipment_type, amount, expected_install_start_date, modify_remark from tc_project_history
+        select project_id, project_no, project_name, account_id, address, model_flag, type, segmented_market, country_id, city, progress, developer, plan_deal_month, completion_year, start_time, over_time, currency_id, contact_person, contact, job_title, email, status, product_series, solution, owner, owner_agent, refuse_reason, audit_person, delay_remark, lose_remark, permission_char, version, del_flag, create_time, create_by, update_time, update_by, remark, area_id, key_contact_person, key_contact, key_job_title, key_email, special_remark, equipment_quantity, equipment_type, amount, expected_install_start_date, modify_remark,reason_type,competitor from tc_project_history
     </sql>
 
     <select id="selectTcProjectHistoryList" parameterType="TcProjectHistory" resultMap="TcProjectHistoryResult">
@@ -167,6 +170,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="amount != null">amount,</if>
             <if test="expectedInstallStartDate != null ">expected_install_start_date,</if>
             <if test="modifyRemark != null ">modify_remark,</if>
+            <if test="competitor != null and competitor != ''">
+                competitor,
+            </if>
+            <if test="reasonType != null">reason_type,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="projectId != null">#{projectId},</if>
@@ -218,6 +225,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="amount != null">#{amount},</if>
             <if test="expectedInstallStartDate != null ">#{expectedInstallStartDate},</if>
             <if test="modifyRemark != null ">#{modifyRemark},</if>
+            <if test="competitor != null and competitor != ''">#{competitor},</if>
+            <if test="reasonType != null">#{reasonType},</if>
          </trim>
     </insert>
 

+ 18 - 8
ruoyi-ui-vue2/src/views/crmManagement/account/edit.vue

@@ -1467,15 +1467,25 @@ export default {
           delete account.accounts
           if (this.accountId != 0) {
             account.accountId = this.accountId
-            updateAccount(account).then(response => {
-              if (response.code == 200) {
-                this.$modal.msgSuccess(this.$t('common.editSuccess'));
-                this.$tab.closeOpenPage({path: "/account"});
-                this.$store.commit('getAccountList');
-              } else {
-                this.$modal.msgError(response.msg);
-              }
+            this.$prompt(this.$t('project.modifyRemarkNote'), this.$t('common.tips'), {
+              confirmButtonText: this.$t('common.confirm'),
+              cancelButtonText: this.$t('common.cancel'),
+              inputPattern: /^(?=.{1,500}$).*/,
+              inputErrorMessage: this.$t('project.modifyRemarkNotEmpty')
+            }).then(({ value }) => {
+              account.modifyRemark = value;
+              updateAccount(account).then(response => {
+                if (response.code == 200) {
+                  this.$modal.msgSuccess(this.$t('common.editSuccess'));
+                  this.$tab.closeOpenPage({path: "/account"});
+                  this.$store.commit('getAccountList');
+                } else {
+                  this.$modal.msgError(response.msg);
+                }
+              }).catch(() => {
+              });
             }).catch(() => {
+              this.submitLoading = false;
             });
           } else {
             account.accountId = null

+ 2 - 0
ruoyi-ui-vue2/src/views/crmManagement/account/index.vue

@@ -221,6 +221,8 @@
                          width="100"></el-table-column>
         <el-table-column prop="nickName" :label="$t('common.createBy') + '/' + $t('common.updateBy')"
                          align="center" width="200px"></el-table-column>
+        <el-table-column prop="modifyRemark" :label="$t('project.modifyRemark')" align="center"
+                         width="200px" show-overflow-tooltip ></el-table-column>
         <el-table-column prop="createTime" :label="$t('common.createTime')" align="center"
                          width="200px"></el-table-column>
         <el-table-column :label="$t('common.operate')" width="220px" fixed="right" align="center">

+ 13 - 11
ruoyi-ui-vue2/src/views/crmManagement/project/dialog.vue

@@ -17,7 +17,7 @@
           <el-col :span="12">
             <!-- 项目名称 -->
             <el-form-item :label="$t('project.name')" prop="projectName">
-              <el-input v-model="form.projectName" :disabled="disabled"
+              <el-input v-model="form.projectName" :disabled="specialDis"
                         :placeholder="$t('common.pleaseInput') + $t('project.name')" maxlength="100"
               ></el-input>
             </el-form-item>
@@ -38,8 +38,8 @@
         <el-row :gutter="20">
           <el-col :span="12">
             <!-- 代理商 -->
-            <Select :data="agentList" :label="$t('lead.agent')" disabled labelProp="agentName" prop="ownerAgent"
-                    required valueProp="agentId" width="100%"
+            <Select :data="agentList" :label="$t('lead.agent')"  labelProp="agentName" prop="ownerAgent"
+                    required valueProp="agentId" width="100%" :disabled="specialDis"
             ></Select>
           </el-col>
           <!-- 项目进度 dict.type.project_progress -->
@@ -59,7 +59,7 @@
           <!-- 标杆项目 -->
           <el-col :span="12">
             <el-form-item :label="$t('project.isModel')" prop="modelFlag">
-              <el-select v-model="form.modelFlag" :disabled="disabled" :placeholder="$t('common.pleaseSelect') + $t('project.isModel')" class="w-100"
+              <el-select v-model="form.modelFlag" :disabled="specialDis" :placeholder="$t('common.pleaseSelect') + $t('project.isModel')" class="w-100"
                          clearable
               >
                 <el-option v-for="dict in dict.type.project_flag" :key="dict.value" :label="dict.label"
@@ -74,7 +74,7 @@
           <!-- 项目类型 -->
           <el-col :span="12">
             <el-form-item :label="$t('lead.segment')" prop="type">
-              <el-select v-model="form.type" :disabled="disabled" :placeholder="$t('common.pleaseSelect') + $t('lead.segment')" class="w-100"
+              <el-select v-model="form.type" :disabled="specialDis" :placeholder="$t('common.pleaseSelect') + $t('lead.segment')" class="w-100"
                          clearable
               >
                 <el-option v-for="dict in dict.type.project_type" :key="dict.value" :label="dict.label"
@@ -87,7 +87,7 @@
           <el-col :span="12">
             <!-- 产品细分市场 -->
             <el-form-item :label="$t('project.projectSegments')" prop="segmentedMarket">
-              <el-select v-model="form.segmentedMarket" :disabled="disabled" :placeholder="$t('common.pleaseSelect') + $t('project.projectSegments')"
+              <el-select v-model="form.segmentedMarket" :disabled="specialDis" :placeholder="$t('common.pleaseSelect') + $t('project.projectSegments')"
                          class="w-100" clearable
               >
                 <el-option v-for="dict in dict.type.project_market" :key="dict.value"
@@ -113,7 +113,7 @@
             <!-- 国家 -->
             <el-form-item :label="$t('project.countryId')" prop="countryId">
               <el-select v-model="form.countryId" :placeholder="$t('common.pleaseSelect') + $t('project.countryId')" class="w-100"
-                         :disabled="CountryDis"
+                         disabled
               >
                 <el-option v-for="item in countryList" :key="item.value" :label="item.label"
                            :value="item.value"
@@ -127,7 +127,7 @@
           <el-col :span="12">
             <!-- 城市 -->
             <el-form-item :label="$t('project.city')" prop="city">
-              <el-input v-model="form.city" required :disabled="disabled"
+              <el-input v-model="form.city" required :disabled="specialDis"
                         :placeholder="$t('common.pleaseInput') + $t('project.city')" maxlength="30"
               ></el-input>
             </el-form-item>
@@ -604,11 +604,13 @@ export default {
     disabled: function () {
       return this.type == 'edit' && (this.form.status != '01' && this.form.status != '02')
     },
-    CountryDis: function () {
+    specialDis: function () {
+      console.log(this.$store.getters.roles)
       return this.type == 'edit' && (
         (this.form.status != '01' && this.form.status != '02')
-        ||  this.$store.getters.roles.includes('admin')
-        || this.$store.getters.roles.includes('sales_director')
+        && !this.$store.getters.roles.includes('admin')
+        && !this.$store.getters.roles.includes('sales_director')
+        && !this.$store.getters.roles.includes('area_sales_director')
       )
     },
     projectProgress() {

+ 9 - 2
ruoyi-ui-vue2/src/views/crmManagement/project/index.vue

@@ -616,7 +616,10 @@ export default {
     },
     /** 当前项目是否可以编辑 */
     canEdit(row) {
-      return this.$store.getters.roles.includes('sales_director') || row.owner === this.$store.getters.userId || this.$store.getters.roles.includes('admin');
+      return this.$store.getters.roles.includes('sales_director')
+        || row.owner === this.$store.getters.userId
+        || this.$store.getters.roles.includes('admin')
+        || this.$store.getters.roles.includes('area_sales_director');
       // return checkRole(['sales_director']) || row.owner === this.$store.getters.userId;
 
       // let flag = true;
@@ -634,8 +637,12 @@ export default {
       // }
       // return flag;
     },
+    specialPer() {
+      return this.$store.getters.roles.includes('sales_director') || this.$store.getters.roles.includes('admin');
+    },
     canDelete(row) {
-      return (row.status == '01' || row.status == '02') && this.canEdit(row)
+      // return (row.status == '01' || row.status == '02') && this.canEdit(row)
+      return ((row.status == '01' || row.status == '02') && this.canEdit(row)) || this.specialPer()
     },
     canDelayLost(row) {
       return row.status != '01' && row.status != '02' && row.progress != '0%' && row.progress != '0% ' && this.canEdit(row)