star7th 5 年之前
父节点
当前提交
8f26e4f178

+ 0 - 178
web_src/src/components/item/Add.vue

@@ -1,178 +0,0 @@
-<template>
-  <div class="hello">
-    <Header> </Header>
-
-    <el-container>
-          <el-card class="center-card">
-            <el-form  status-icon  label-width="0px" class="demo-ruleForm">
-              <h2></h2>
-              <el-form-item label="" >
-              <el-radio v-model="item_type" label="1">{{$t('item_type1')}}</el-radio>
-              <el-radio v-model="item_type" label="2">{{$t('item_type2')}}</el-radio>
-              &nbsp;&nbsp;&nbsp;&nbsp;<a v-if="lang =='zh-cn'" href="https://www.showdoc.cc/page/65391" target="_blank"><i class="el-icon-question"></i></a>
-              </el-form-item>
-
-
-              <el-form-item label="" >
-                <el-input type="text" auto-complete="off" :placeholder="$t('item_name')" v-model="item_name"></el-input>
-              </el-form-item>
-
-              <el-form-item label="" >
-                <el-input type="text" auto-complete="off" :placeholder="$t('item_description')" v-model="item_description"></el-input>
-              </el-form-item>
-
-
-              <el-form-item label="" >
-                <el-radio v-model="isOpenItem" :label="true">{{$t('Open_item')}}</el-radio>
-                <el-radio v-model="isOpenItem" :label="false">{{$t('private_item')}}</el-radio>
-              </el-form-item>
-
-              <el-form-item label="" v-show="!isOpenItem" >
-                  <el-input type="password" auto-complete="off" v-model="password"  :placeholder="$t('visit_password_placeholder')"></el-input>
-              </el-form-item>
-
-              <el-form-item label="" class="text-left">
-                 <el-checkbox v-model="show_copy" @change="show_copy_even">{{$t('copy_exists_item')}}</el-checkbox>
-                 <el-select v-model="copy_item_id" :placeholder="$t('please_choose')" v-if="show_copy" @change="choose_copy_item">
-                    <el-option
-                      v-for="item in itemList"
-                      :key="item.item_id"
-                      :label="item.item_name"
-                      :value="item.item_id">
-                    </el-option>
-                  </el-select>
-
-              </el-form-item>
-              
-              <el-form-item v-if="lang =='zh-cn'" label="" style="text-align: left;margin-bottom:5px;margin-left:15px;margin-top:-25px;">
-                  <el-button type="text" @click="auto_doc">我要自动生成文档</el-button>
-                  &nbsp;&nbsp;&nbsp;
-              </el-form-item>
-
-               <el-form-item label="" >
-                <el-button type="primary" style="width:100%;" @click="onSubmit" >{{$t('submit')}}</el-button>
-              </el-form-item>
-
-              <el-form-item label=""  >
-                  <router-link to="/item/index">{{$t('goback')}}</router-link>
-              </el-form-item>
-            </el-form>
-          </el-card>
-    </el-container>
-
-    <Footer> </Footer>
-    
-  </div>
-</template>
-
-<script>
-
-
-export default {
-  name: 'Login',
-  components : {
-
-  },
-  data () {
-    return {
-      item_type: '1',
-      item_name: '',
-      item_description:'',
-      item_domain: '',
-      password: '',
-      show_copy:false,
-      itemList:{},
-      copy_item_id:"",
-      lang:'',
-      isOpenItem:true,
-
-    }
-
-  },
-  methods: {
-    get_item_list(){
-        var that = this ;
-        var url = DocConfig.server+'/api/item/myList';
-
-        var params = new URLSearchParams();
-
-        that.axios.get(url, params)
-          .then(function (response) {
-            if (response.data.error_code === 0 ) {
-              //that.$message.success("加载成功");
-              var json = response.data.data ;
-              that.itemList = json ;
-            }else{
-              that.$alert(response.data.error_message);
-            }
-            
-          });
-    },
-    choose_copy_item(item_id){
-      for (var i = 0; i < this.itemList.length; i++) {
-        if (item_id == this.itemList[i].item_id) {
-            this.item_name = this.itemList[i].item_name+'--copy';
-            this.item_description = this.itemList[i].item_description;
-        };
-      };
-    },
-    onSubmit() {
-        var that = this ;
-        var url = DocConfig.server+'/api/item/add';
-        if (!this.isOpenItem && !this.password) {
-          that.$alert(that.$t("private_item_passwrod"));
-          return false;
-        };
-        if (this.isOpenItem) {
-          this.password = '';
-        }; 
-        var params = new URLSearchParams();
-        params.append('item_type', this.item_type);
-        params.append('item_name', this.item_name);
-        params.append('password', this.password);
-        params.append('item_domain', this.item_domain);
-        params.append('copy_item_id', this.copy_item_id);
-        params.append('item_description', this.item_description);
-
-        that.axios.post(url, params)
-          .then(function (response) {
-            if (response.data.error_code === 0 ) {
-              that.$router.push({path:'/item/index'});
-            }else{
-              that.$alert(response.data.error_message);
-            }
-            
-          });
-    },
-    auto_doc(){
-      var msg = '<p>如果你想自动化生成API文档,则可参考<a target="_bank" href="https://www.showdoc.cc/page/741656402509783">API文档</a></p>';
-      msg += '<p>如果你想自动化生成数据字典,则可参考<a target="_bank" href="https://www.showdoc.cc/page/312209902620725">数据字典</a></p>';
-      msg += '<p>如果你更自由地生成自己所需要的格式,则可参考<a target="_bank" href="https://www.showdoc.cc/page/102098">开放API</a></p>';
-      this.$alert(msg, {
-          dangerouslyUseHTMLString: true
-        });
-    }
-    
-  },
-  mounted() {
-    this.lang = DocConfig.lang ;
-    this.get_item_list();
-  },
-  beforeDestroy(){
-  }
-}
-</script>
-
-<!-- Add "scoped" attribute to limit CSS to this component only -->
-<style scoped>
-
-.center-card a {
-  font-size: 12px;
-}
-
-.center-card{
-  text-align: center;
-  width: 350px;
-}
-
-</style>

+ 136 - 0
web_src/src/components/item/add/Copy.vue

@@ -0,0 +1,136 @@
+<template>
+  <div class="hello">
+    <p class="tips">{{$t('copy_item_tips1')}}</p>
+    <el-form  status-icon  label-width="100px" class="infoForm" v-model="infoForm">
+        <el-form-item label="" class="text-left">
+           <el-select style="width:100%;" v-model="copy_item_id" :placeholder="$t('please_choose')"  @change="choose_copy_item">
+              <el-option
+                v-for="item in itemList"
+                :key="item.item_id"
+                :label="item.item_name"
+                :value="item.item_id">
+              </el-option>
+            </el-select>
+
+        </el-form-item>
+
+      <el-form-item  >
+        <el-tooltip class="item" effect="dark" :content="$t('copy_item_tips2')" placement="right">
+          <el-input type="text" auto-complete="off" v-model="item_name" :placeholder="$t('copy_item_tips2')" ></el-input>
+        </el-tooltip>
+      </el-form-item>
+
+       <el-form-item label="" >
+        <el-button type="primary" style="width:100%;" @click="FormSubmit" >{{$t('submit')}}</el-button>
+      </el-form-item>
+
+    </el-form>
+  </div>
+</template>
+
+<script>
+
+
+export default {
+  name: 'Login',
+  components : {
+
+  },
+  data () {
+    return {
+      infoForm:{
+
+      },
+      isOpenItem:true,
+      itemList:{},
+      copy_item_id:"",
+      item_name:"",
+      item_description:"",
+    }
+
+  },
+  methods: {
+      get_item_list(){
+          var that = this ;
+          var url = DocConfig.server+'/api/item/myList';
+
+          var params = new URLSearchParams();
+
+          that.axios.get(url, params)
+            .then(function (response) {
+              if (response.data.error_code === 0 ) {
+                //that.$message.success("加载成功");
+                var json = response.data.data ;
+                that.itemList = json ;
+              }else{
+                that.$alert(response.data.error_message);
+              }
+              
+            });
+      },
+      choose_copy_item(item_id){
+        for (var i = 0; i < this.itemList.length; i++) {
+          if (item_id == this.itemList[i].item_id) {
+              this.item_name = this.itemList[i].item_name+'--copy';
+              this.item_description = this.itemList[i].item_description;
+          };
+        };
+      },
+      FormSubmit() {
+          var that = this ;
+          var url = DocConfig.server+'/api/item/add';
+          if (!this.isOpenItem && !this.infoForm.password) {
+            that.$alert(that.$t("private_item_passwrod"));
+            return false;
+          };
+          if (this.isOpenItem) {
+            this.infoForm.password = '';
+          };
+          var params = new URLSearchParams();
+          params.append('copy_item_id', this.copy_item_id);
+          params.append('item_name', this.item_name);
+          params.append('item_description', this.item_description);
+
+          that.axios.post(url, params)
+            .then(function (response) {
+              if (response.data.error_code === 0 ) {
+                that.$router.push({path:'/item/index'});
+              }else{
+                that.$alert(response.data.error_message);
+              }
+              
+            });
+      },
+  },
+
+  mounted(){
+    this.get_item_list();
+  }
+}
+</script>
+
+<!-- Add "scoped" attribute to limit CSS to this component only -->
+<style scoped>
+
+.center-card a {
+  font-size: 12px;
+}
+
+
+.infoForm{
+  width:400px;
+  margin-top: 50px;
+}
+
+.goback-btn{
+  z-index: 999;
+  margin-left: 500px;
+}
+
+.tips{
+  margin-left: 10px;
+  color: #9ea1a6;
+
+}
+
+</style>

+ 81 - 0
web_src/src/components/item/add/Import.vue

@@ -0,0 +1,81 @@
+<template>
+  <div class="hello">
+      <p class="tips"><span v-html="$t('import_file_tips1')"></span></p>
+      
+      <p >
+        <el-upload
+          class="upload-demo"
+          drag
+          name="file"
+          :action="upload_url"
+          :on-success="success"
+          :show-file-list="false"
+          >
+          <i class="el-icon-upload"></i>
+          <div class="el-upload__text"><span v-html="$t('import_file_tips2')"></span></div>
+        </el-upload>
+      </p>
+      <p >
+      </p>
+      <p >
+       
+      </p>
+  </div>
+</template>
+
+<script>
+
+
+export default {
+  name: 'Login',
+  components : {
+
+  },
+  data () {
+    return {
+      api_key:'',
+      api_token:'',
+      upload_url:DocConfig.server+'/api/import/auto'
+    }
+
+  },
+  methods: {
+
+      success(data){
+        if (data.error_code === 0 ) {
+          this.$router.push({path:'/item/index'});
+        }else{
+          this.$alert(data.error_message);
+        }
+      },
+
+  },
+
+  mounted(){
+
+  }
+}
+</script>
+
+<!-- Add "scoped" attribute to limit CSS to this component only -->
+<style scoped>
+
+
+  .hello{
+    text-align: left;
+    margin-left: 50px;
+    margin-top: 50px;
+  }
+
+.goback-btn{
+  z-index: 999;
+  margin-left: 500px;
+}
+
+.tips{
+  margin-left: 10px;
+  margin-bottom: 50px;
+  color: #9ea1a6;
+
+}
+</style>

+ 136 - 0
web_src/src/components/item/add/Index.vue

@@ -0,0 +1,136 @@
+<template>
+  <div class="hello">
+    <Header> </Header>
+
+    <el-container>
+          <el-card class="center-card">
+          <template>
+            <el-button type="text" @click="goback" class="goback-btn " ><i class="el-icon-back" ></i></el-button>
+            
+            <el-tabs  value="first" type="card">
+              <el-tab-pane :label="$t('regular_item')" name="first">
+
+                <Regular> </Regular>
+
+            </el-tab-pane>
+
+
+            <el-tab-pane :label="$t('single_item')" name="second">
+
+                <Single> </Single>
+
+            </el-tab-pane>
+
+            <el-tab-pane :label="$t('copy_item')" name="third">
+
+                <Copy> </Copy>
+
+            </el-tab-pane>
+
+            <el-tab-pane :label="$t('import_file')" name="four">
+
+                  <Import> </Import>
+                  
+                </el-form>
+
+            </el-tab-pane>
+
+            <el-tab-pane :label="$t('auto_item')" name="five">
+
+                  <OpenApi > </OpenApi >
+                  
+                </el-form>
+
+            </el-tab-pane>
+
+
+            </el-tabs>
+          </template>
+          </el-card>
+    </el-container>
+
+    <Footer> </Footer>
+    
+  </div>
+</template>
+
+<script>
+
+import Regular from '@/components/item/add/Regular'
+import Single from '@/components/item/add/Single'
+import Copy from '@/components/item/add/Copy'
+import OpenApi from '@/components/item/add/OpenApi'
+import Import from '@/components/item/add/Import'
+
+export default {
+  name: 'Login',
+  components : {
+    Regular,
+    Single,
+    Copy,
+    OpenApi,
+    Import
+  },
+  data () {
+    return {
+      userInfo:{
+
+      }
+    }
+
+  },
+  methods: {
+
+      get_item_info(){
+        var that = this ;
+        var url = DocConfig.server+'/api/item/detail';
+        var params = new URLSearchParams();
+        params.append('item_id',  that.$route.params.item_id);
+        that.axios.post(url, params)
+          .then(function (response) {
+            if (response.data.error_code === 0 ) {
+              var Info = response.data.data
+              that.infoForm =  Info;
+            }else{
+              that.$alert(response.data.error_message);
+            }
+            
+          })
+          .catch(function (error) {
+            console.log(error);
+          });
+      },
+      goback(){
+        this.$router.go(-1);
+      }
+
+  },
+
+  mounted(){
+  },
+  beforeDestroy(){
+  }
+}
+</script>
+
+<!-- Add "scoped" attribute to limit CSS to this component only -->
+<style scoped>
+
+.center-card a {
+  font-size: 12px;
+}
+
+.center-card{
+  text-align: center;
+  width: 560px;
+  min-height: 600px;
+  max-height: 800px;
+}
+
+
+.goback-btn{
+  font-size: 18px;
+  margin-right: 800px;
+  margin-bottom: 15px;
+}
+</style>

+ 59 - 0
web_src/src/components/item/add/OpenApi.vue

@@ -0,0 +1,59 @@
+<template>
+  <div class="hello">
+
+      <p >
+         <span v-html="$t('open_api_tips1')"></span>
+      </p>
+      <p >
+        <span v-html="$t('open_api_tips2')"></span>
+      </p>
+      <p >
+        <span v-html="$t('open_api_tips3')"></span>
+      </p>
+      <p >
+        <span v-html="$t('open_api_tips4')"></span>
+      </p>
+  </div>
+</template>
+
+<script>
+
+
+export default {
+  name: 'Login',
+  components : {
+
+  },
+  data () {
+    return {
+      api_key:'',
+      api_token:''
+    }
+
+  },
+  methods: {
+
+
+  },
+
+  mounted(){
+
+  }
+}
+</script>
+
+<!-- Add "scoped" attribute to limit CSS to this component only -->
+<style scoped>
+
+
+  .hello{
+    text-align: left;
+    margin-left: 50px;
+    margin-top: 80px;
+  }
+
+.goback-btn{
+  z-index: 999;
+  margin-left: 500px;
+}
+</style>

+ 108 - 0
web_src/src/components/item/add/Regular.vue

@@ -0,0 +1,108 @@
+<template>
+  <div class="hello">
+    <el-form  status-icon  label-width="100px" class="infoForm" v-model="infoForm">
+      <el-form-item  >
+        <el-tooltip class="item" effect="dark" :content="$t('item_name')" placement="right">
+          <el-input type="text" auto-complete="off" v-model="infoForm.item_name" :placeholder="$t('item_name')" ></el-input>
+        </el-tooltip>
+      </el-form-item>
+
+      <el-form-item  >
+        <el-tooltip class="item" effect="dark" :content="$t('item_description')" placement="right">
+          <el-input type="text" auto-complete="off" v-model="infoForm.item_description" :placeholder="$t('item_description')" ></el-input>
+        </el-tooltip>
+      </el-form-item>
+
+      <el-form-item label="" >
+        <el-radio v-model="isOpenItem" :label="true">{{$t('Open_item')}}</el-radio>
+        <el-radio v-model="isOpenItem" :label="false">{{$t('private_item')}}</el-radio>
+      </el-form-item>
+
+      <el-form-item  v-show="!isOpenItem">
+            <el-input type="password" auto-complete="off"  v-model="infoForm.password" :placeholder="$t('visit_password')" ></el-input>
+      </el-form-item>
+
+       <el-form-item label="" >
+        <el-button type="primary" style="width:100%;" @click="FormSubmit" >{{$t('submit')}}</el-button>
+      </el-form-item>
+
+    </el-form>
+  </div>
+</template>
+
+<script>
+
+
+export default {
+  name: 'Login',
+  components : {
+
+  },
+  data () {
+    return {
+      infoForm:{
+        item_name:'',
+        item_description:'',
+        item_domain:'',
+        password:'',
+      },
+      isOpenItem:true,
+    }
+
+  },
+  methods: {
+
+      FormSubmit() {
+          var that = this ;
+          var url = DocConfig.server+'/api/item/add';
+          if (!this.isOpenItem && !this.infoForm.password) {
+            that.$alert(that.$t("private_item_passwrod"));
+            return false;
+          };
+          if (this.isOpenItem) {
+            this.infoForm.password = '';
+          };
+          var params = new URLSearchParams();
+          params.append('item_type', 1);
+          params.append('item_name', this.infoForm.item_name);
+          params.append('item_description', this.infoForm.item_description);
+          params.append('item_domain', this.infoForm.item_domain);
+          params.append('password', this.infoForm.password);
+
+          that.axios.post(url, params)
+            .then(function (response) {
+              if (response.data.error_code === 0 ) {
+                that.$router.push({path:'/item/index'});
+              }else{
+                that.$alert(response.data.error_message);
+              }
+              
+            });
+      },
+  },
+
+  mounted(){
+
+
+  }
+}
+</script>
+
+<!-- Add "scoped" attribute to limit CSS to this component only -->
+<style scoped>
+
+.center-card a {
+  font-size: 12px;
+}
+
+
+.infoForm{
+  width:400px;
+  margin-top: 60px;
+}
+
+.goback-btn{
+  z-index: 999;
+  margin-left: 500px;
+}
+</style>

+ 115 - 0
web_src/src/components/item/add/Single.vue

@@ -0,0 +1,115 @@
+<template>
+  <div class="hello">
+    <p class="tips">{{$t('single_item_tips')}}</p>
+    <el-form  status-icon  label-width="100px" class="infoForm" v-model="infoForm">
+      <el-form-item  >
+        <el-tooltip class="item" effect="dark" :content="$t('item_name')" placement="right">
+          <el-input type="text" auto-complete="off" v-model="infoForm.item_name" :placeholder="$t('item_name')" ></el-input>
+        </el-tooltip>
+      </el-form-item>
+
+      <el-form-item  >
+        <el-tooltip class="item" effect="dark" :content="$t('item_description')" placement="right">
+          <el-input type="text" auto-complete="off" v-model="infoForm.item_description" :placeholder="$t('item_description')" ></el-input>
+        </el-tooltip>
+      </el-form-item>
+
+
+      <el-form-item label="" >
+        <el-radio v-model="isOpenItem" :label="true">{{$t('Open_item')}}</el-radio>
+        <el-radio v-model="isOpenItem" :label="false">{{$t('private_item')}}</el-radio>
+      </el-form-item>
+
+      <el-form-item  v-show="!isOpenItem">
+            <el-input type="password" auto-complete="off"  v-model="infoForm.password" :placeholder="$t('visit_password')" ></el-input>
+      </el-form-item>
+
+       <el-form-item label="" >
+        <el-button type="primary" style="width:100%;" @click="FormSubmit" >{{$t('submit')}}</el-button>
+      </el-form-item>
+
+    </el-form>
+  </div>
+</template>
+
+<script>
+
+
+export default {
+  name: 'Login',
+  components : {
+
+  },
+  data () {
+    return {
+      infoForm:{
+        item_name:'',
+        item_description:'',
+        item_domain:'',
+        password:'',
+      },
+      isOpenItem:true,
+    }
+
+  },
+  methods: {
+
+      FormSubmit() {
+          var that = this ;
+          var url = DocConfig.server+'/api/item/add';
+          if (!this.isOpenItem && !this.infoForm.password) {
+            that.$alert(that.$t("private_item_passwrod"));
+            return false;
+          };
+          if (this.isOpenItem) {
+            this.infoForm.password = '';
+          };
+          var params = new URLSearchParams();
+          params.append('item_type', 2);
+          params.append('item_name', this.infoForm.item_name);
+          params.append('item_description', this.infoForm.item_description);
+          params.append('item_domain', this.infoForm.item_domain);
+          params.append('password', this.infoForm.password);
+
+          that.axios.post(url, params)
+            .then(function (response) {
+              if (response.data.error_code === 0 ) {
+                that.$router.push({path:'/item/index'});
+              }else{
+                that.$alert(response.data.error_message);
+              }
+              
+            });
+      },
+  },
+
+  mounted(){
+
+  }
+}
+</script>
+
+<!-- Add "scoped" attribute to limit CSS to this component only -->
+<style scoped>
+
+.center-card a {
+  font-size: 12px;
+}
+
+
+.infoForm{
+  width:400px;
+  margin-top: 20px;
+}
+
+.goback-btn{
+  z-index: 999;
+  margin-left: 500px;
+}
+
+.tips{
+  margin-left: 10px;
+  color: #9ea1a6;
+
+}
+</style>

+ 27 - 5
web_src/src/components/item/export/Index.vue

@@ -7,13 +7,25 @@
             <el-form  status-icon  label-width="0px" class="demo-ruleForm">
               <h2></h2>
               <el-form-item label="" >
-              <el-radio v-model="export_type"  label="1">{{$t('export_all')}}</el-radio>
-              <el-radio v-model="export_type" label="2">{{$t('export_cat')}}</el-radio>
+
+                <el-radio-group v-model="export_format">
+                  <el-radio-button   label="word" >{{$t('export_format_word')}}</el-radio-button>
+                  <el-radio-button  label="markdown">{{$t('export_format_markdown')}}</el-radio-button>
+                </el-radio-group>
+
               </el-form-item>
 
+              <el-form-item label="" v-if="export_format == 'word'" >
+                <el-radio v-model="export_type"  label="1">{{$t('export_all')}}</el-radio>
+                <el-radio v-model="export_type" label="2">{{$t('export_cat')}}</el-radio>
+              </el-form-item>
 
-              <el-form-item label="" >
-                  <el-select :disabled="export_type > 1 ? false :true" :placeholder="$t('catalog')" class="cat" v-model="cat_id" >
+              <el-form-item label="" v-if="export_format == 'markdown'" >
+                <p class="markdown-tips">{{$t('export_markdown_tips')}}</p>
+              </el-form-item>
+
+              <el-form-item label="" v-if="export_format == 'word' && export_type == 2" >
+                  <el-select  :placeholder="$t('catalog')" class="cat" v-model="cat_id" >
                     <el-option  v-if="computed_catalogs" v-for="cat in computed_catalogs " :key="cat.cat_name" :label="cat.cat_name" :value="cat.cat_id"></el-option>
                   </el-select>
               </el-form-item>
@@ -50,6 +62,7 @@ export default {
       cat_id:'',
       export_type:'1',
       item_id:0,
+      export_format:'word'
 
     }
 
@@ -116,6 +129,9 @@ export default {
           this.cat_id = ''
         };
         var url = DocConfig.server+'/api/export/word&item_id='+this.item_id+'&cat_id='+this.cat_id ;
+        if (this.export_format == 'markdown') {
+          url = DocConfig.server+'/api/export/markdown&item_id='+this.item_id;
+        };
         window.location.href = url;
       },
     goback(){
@@ -141,7 +157,13 @@ export default {
 
 .center-card{
   text-align: center;
-  width: 350px;
+  width: 400px;
+}
+
+.markdown-tips{
+  text-align: left;
+  margin-left: 25px;
+  font-size: 12px;
 }
 
 </style>

+ 1 - 1
web_src/src/router/index.js

@@ -7,7 +7,7 @@ import UserRegister from '@/components/user/Register'
 import UserResetPassword from '@/components/user/ResetPassword'
 import ResetPasswordByUrl from '@/components/user/ResetPasswordByUrl'
 import ItemIndex from '@/components/item/Index'
-import ItemAdd from '@/components/item/Add'
+import ItemAdd from '@/components/item/add/Index'
 import ItemPassword from '@/components/item/Password'
 import ItemShow from '@/components/item/show/Index'
 import ItemExport from '@/components/item/export/Index'

+ 13 - 0
web_src/static/lang/en.js

@@ -307,5 +307,18 @@ exports.default = {
     "cat_tips":"Drag to sort",
     "cat_limite_tips":"Only up to three levels of directories are supported",
 
+    "regular_item":"Regular Item",
+    "single_item":"Single Item",
+    "copy_item":"Copy Item",
+    "import_file":"Import File",
+    "auto_item":"Auto Create",
+    "single_item_tips":"Single item refers to the item with no catalog structure and only one page",
+    "copy_item_tips1":"Select and copy from your existing items",
+    "copy_item_tips2":"After copying, rename the new item to:",
+    "import_file_tips1":"The imported file can be the JSON file of postman, the JSON file of swagger, and the markdown zip of showdoc. The system will automatically identify the file type",
+    "import_file_tips2":"Drag the file here, or click to upload",
+    "export_format_word":"Word format",
+    "export_format_markdown":"Markdown zip",
+    "export_markdown_tips":"The exported compressed package can be re imported into showdoc. Select 'Import File' when creating a new item",
 
 };

+ 14 - 0
web_src/static/lang/zh-CN.js

@@ -314,5 +314,19 @@ exports.default = {
 
     "sort_pages":"页面排序",
     "sort_pages_tips":"选择特定的目录后,你可以对该目录下的页面进行拖动排序",
+
+    "regular_item":"常规项目",
+    "single_item":"单页项目",
+    "copy_item":"复制项目",
+    "import_file":"导入文件",
+    "auto_item":"自动生成",
+    "single_item_tips":"单页项目指的是指没有目录结构,只有一个页面的项目",
+    "copy_item_tips1":"从你已有的项目中选择并复制",
+    "copy_item_tips2":"复制后将新项目重命名为:",
+    "import_file_tips1":"导入的文件可以是<b>postman</b>的json文件、<b>swagger</b>的json文件、showdoc的<b>markdown压缩包</b>。系统会自动识别文件类型。",
+    "import_file_tips2":"将文件拖到此处,或<em>点击上传</em>",
+    "export_format_word":"word格式",
+    "export_format_markdown":"markdown压缩包",
+    "export_markdown_tips":"导出的压缩包可以重新导入showdoc,在新建项目的时候选择“文件导入”即可",
     
 };