Browse Source

栏目增删及移动位置

natasha 6 days ago
parent
commit
97bfa44e1e

File diff suppressed because it is too large
+ 0 - 0
src/icons/svg/deletes-line.svg


+ 189 - 106
src/views/content_manage/newspaper_manage/CreateNewspaper.vue

@@ -325,116 +325,148 @@
                     {{ issueChannel.art_count }} 篇文章</span
                   >
                 </h4>
-                <el-button type="primary" size="small" @click="previewBookItem"
-                  >预览</el-button
-                >
-              </div>
-              <div
-                class="channel-item"
-                v-for="(item, index) in issueChannel.chn_art_data"
-                :key="index"
-              >
-                <div class="channel-top">
-                  <i
-                    class="el-icon-caret-bottom"
-                    v-if="item.show"
-                    @click="item.show = !item.show"
-                  ></i>
-                  <i
-                    class="el-icon-caret-top"
-                    v-else
-                    @click="item.show = !item.show"
-                  ></i>
-                  <div class="channel-top-name">
-                    <template v-if="!item.editFlag">
-                      <span>{{ item.chn_name }}</span>
-                      <svg-icon
-                        icon-class="edit"
-                        class="edit-chn-name"
-                        @click="item.editFlag = true"
-                      ></svg-icon>
-                    </template>
-                    <template v-else>
-                      <el-input
-                        v-model="item.edit_name"
-                        maxlength="200"
-                      ></el-input>
-                      <svg-icon
-                        icon-class="save-line"
-                        class="edit-chn-name"
-                        @click="saveChnDate(item.edit_name, index)"
-                      ></svg-icon>
-                    </template>
-                  </div>
-                  <el-button
-                    type="text"
-                    @click="handleArticle('', 1, item.chn_name)"
-                    ><i class="el-icon-plus"></i>新增英文内容</el-button
+                <div>
+                  <el-button type="primary" size="small" @click="addChnDate"
+                    >新增栏目</el-button
                   >
                   <el-button
-                    type="text"
-                    @click="handleArticle('', 0, item.chn_name)"
-                    ><i class="el-icon-plus"></i>新增中文内容</el-button
+                    type="primary"
+                    size="small"
+                    @click="previewBookItem"
+                    >预览</el-button
                   >
                 </div>
-                <el-collapse-transition>
-                  <template v-if="item.show">
-                    <draggable
-                      v-model="item.arts"
-                      chosenClass="chosen"
-                      forceFallback="true"
-                      group="people"
-                      animation="1000"
-                      @start="onStart"
-                      @end="onEnd()"
-                      class="article-list"
-                      handle=".mover"
-                    >
-                      <li v-for="(itema, indexa) in item.arts" :key="indexa">
+              </div>
+              <draggable
+                v-model="issueChannel.chn_art_data"
+                chosenClass="chosen"
+                forceFallback="true"
+                group="peoples"
+                animation="100"
+                @start="onStarts"
+                @end="onEnds()"
+                class="article-list"
+                handle=".movers"
+              >
+                <div
+                  class="channel-item"
+                  v-for="(item, index) in issueChannel.chn_art_data"
+                  :key="index"
+                >
+                  <div class="channel-top">
+                    <svg-icon
+                      icon-class="sort"
+                      draggable="true"
+                      class="movers"
+                    ></svg-icon>
+                    <i
+                      class="el-icon-caret-bottom"
+                      v-if="item.show"
+                      @click="item.show = !item.show"
+                    ></i>
+                    <i
+                      class="el-icon-caret-top"
+                      v-else
+                      @click="item.show = !item.show"
+                    ></i>
+                    <div class="channel-top-name">
+                      <template v-if="!item.editFlag">
+                        <span>{{ item.chn_name }}</span>
                         <svg-icon
-                          icon-class="sort"
-                          draggable="true"
-                          class="mover"
+                          icon-class="edit"
+                          class="edit-chn-name"
+                          @click="editChnDate(item, index)"
                         ></svg-icon>
-                        <div class="items">
-                          <h6>{{ itema.art_title }}</h6>
-                          <span>BY {{ itema.art_author }}</span>
-                          <span
-                            >创建人:{{
-                              itema.creator_real_name || itema.creator_user_name
-                            }}</span
-                          >
-                          <span>{{ itema.create_time }}</span>
-                          <span
-                            >最后编辑:{{
-                              itema.updater_real_name || itema.updater_user_name
-                            }}</span
-                          >
-                          <span>{{ itema.update_time }}</span>
-                        </div>
+                      </template>
+                      <template v-else>
+                        <el-input
+                          v-model="item.edit_name"
+                          maxlength="200"
+                        ></el-input>
                         <svg-icon
-                          icon-class="edit"
-                          class="edit-article"
-                          @click="
-                            handleArticle(
-                              itema.id,
-                              itema.en_flag,
-                              item.chn_name
-                            )
-                          "
+                          icon-class="save-line"
+                          class="edit-chn-name"
+                          @click="saveChnDate(item.edit_name, index)"
                         ></svg-icon>
-                        <span class="border"></span>
-                        <i
-                          class="el-icon-delete"
-                          @click="
-                            handleDeleteArticle(item.arts, indexa, itema.id)
-                          "
-                        ></i>
-                      </li>
-                    </draggable>
-                  </template>
-                </el-collapse-transition>
-              </div>
+                      </template>
+                      <svg-icon
+                        icon-class="deletes-line"
+                        class="edit-chn-name"
+                        @click="deleteChnDate(index)"
+                      ></svg-icon>
+                    </div>
+                    <el-button
+                      type="text"
+                      @click="handleArticle('', 1, item.chn_name)"
+                      ><i class="el-icon-plus"></i>新增英文内容</el-button
+                    >
+                    <el-button
+                      type="text"
+                      @click="handleArticle('', 0, item.chn_name)"
+                      ><i class="el-icon-plus"></i>新增中文内容</el-button
+                    >
+                  </div>
+                  <el-collapse-transition>
+                    <template v-if="item.show">
+                      <draggable
+                        v-model="item.arts"
+                        chosenClass="chosen"
+                        forceFallback="true"
+                        group="people"
+                        animation="1000"
+                        @start="onStart"
+                        @end="onEnd()"
+                        class="article-list"
+                        handle=".mover"
+                      >
+                        <li v-for="(itema, indexa) in item.arts" :key="indexa">
+                          <svg-icon
+                            icon-class="sort"
+                            draggable="true"
+                            class="mover"
+                          ></svg-icon>
+                          <div class="items">
+                            <h6>{{ itema.art_title }}</h6>
+                            <span>BY {{ itema.art_author }}</span>
+                            <span
+                              >创建人:{{
+                                itema.creator_real_name ||
+                                itema.creator_user_name
+                              }}</span
+                            >
+                            <span>{{ itema.create_time }}</span>
+                            <span
+                              >最后编辑:{{
+                                itema.updater_real_name ||
+                                itema.updater_user_name
+                              }}</span
+                            >
+                            <span>{{ itema.update_time }}</span>
+                          </div>
+                          <svg-icon
+                            icon-class="edit"
+                            class="edit-article"
+                            @click="
+                              handleArticle(
+                                itema.id,
+                                itema.en_flag,
+                                item.chn_name
+                              )
+                            "
+                          ></svg-icon>
+                          <span class="border"></span>
+                          <i
+                            class="el-icon-delete"
+                            @click="
+                              handleDeleteArticle(item.arts, indexa, itema.id)
+                            "
+                          ></i>
+                        </li>
+                      </draggable>
+                    </template>
+                  </el-collapse-transition>
+                </div>
+              </draggable>
             </div>
           </div>
           <div v-if="stepIndex === 2">
@@ -1166,6 +1198,15 @@ export default {
       });
       this.handleUpdateChnArtData();
     },
+    //开始拖拽事件
+    onStarts(val) {},
+    //拖拽结束事件
+    onEnds() {
+      this.issueChannel.chn_art_data.forEach((item, index) => {
+        item.chn_idx = index;
+      });
+      this.handleUpdateChnArtData();
+    },
     // 更新栏目数据
     handleUpdateChnArtData() {
       getLogin("/PaperServer/Manager/IssueManager/EditIssueChnArtData", {
@@ -1178,15 +1219,57 @@ export default {
       });
     },
     saveChnDate(value, index) {
+      let flag = false;
       // 判断是否有值并且trim
-      if (value && value.trim()) {
-        this.issueChannel.chn_art_data[index].chn_name = value.trim();
-        this.onEnd();
-      } else {
+      this.issueChannel.chn_art_data.forEach((item) => {
+        if (item.edit_name && item.edit_name.trim()) {
+          item.chn_name = item.edit_name.trim();
+        } else {
+          flag = true;
+        }
+      });
+
+      if (flag) {
         this.$message.warning("栏目名称不能为空");
+      } else {
+        this.onEnd();
       }
       // if(this.issueChannel.chn_art_data[index].)
     },
+    // 点击编辑栏目名称按钮
+    editChnDate(item, index) {
+      if (!item.hasOwnProperty("editFlag")) {
+        this.$set(item, "editFlag", false);
+      }
+      item.editFlag = true;
+    },
+    // 删除栏目
+    deleteChnDate(index) {
+      this.$confirm("确定删除此栏目吗?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          this.issueChannel.chn_art_data.splice(index, 1);
+          this.issueChannel.chn_art_data.forEach((item, indexs) => {
+            item.chn_idx = indexs;
+          });
+          this.onEnd();
+        })
+        .catch(() => {});
+    },
+    // 新增栏目
+    addChnDate() {
+      let obj = {
+        chn_name: "",
+        edit_name: "",
+        chn_idx: this.issueChannel.chn_art_data.length - 1,
+        arts: [],
+        show: true,
+      };
+      this.issueChannel.chn_art_data.push(obj);
+    },
     // 预览栏目
     previewBookItem() {
       this.previewBook = true;

Some files were not shown because too many files changed in this diff