com-attachment-edit.php 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. <style>
  2. .el-dialog {
  3. min-width: 800px;
  4. }
  5. </style>
  6. <template id="com-attachment-edit">
  7. <div class="com-attachment-edit">
  8. <el-dialog :visible.sync="dialogVisible" title="存储位置编辑" :close-on-click-modal="false">
  9. <el-form ref="form" :model="form" :rules="rules" label-position="left">
  10. <el-form-item label="存储位置" prop="type">
  11. <template v-for="(name, key) in storageTypes">
  12. <el-radio :disabled="form.id != null" v-model="form.type" :label="key" border size="medium">
  13. {{name}}
  14. </el-radio>
  15. </template>
  16. </el-form-item>
  17. <template v-if="form.type == 1">
  18. <el-form-item>
  19. <div>本地服务器存储无需额外配置</div>
  20. </el-form-item>
  21. </template>
  22. <template v-if="form.type == 2">
  23. <el-form-item label="存储空间名称(Bucket)" prop="config.bucket" :rules="requiredRules">
  24. <el-input v-model.trim="form.config.bucket"></el-input>
  25. </el-form-item>
  26. <el-form-item label="使用自定义域名" prop="config.is_cname">
  27. <el-switch v-model.trim="form.config.is_cname" active-value="1" inactive-value="0"></el-switch>
  28. </el-form-item>
  29. <el-form-item label="Endpoint或自定义域名" prop="config.domain" :rules="requiredRules">
  30. <el-input v-model.trim="form.config.domain"></el-input>
  31. <div style="font-size: 12px;color: #909399;line-height: normal;">
  32. <span>示例: </span>
  33. <span style="color: #ff8576">http://oss-xx-xxx-1.aliyuncs.com</span>
  34. <span>或</span>
  35. <span style="color: #ff8576">http://mydomain.com</span>
  36. </div>
  37. </el-form-item>
  38. <el-form-item label="Access Key ID" prop="config.access_key" :rules="requiredRules">
  39. <el-input v-model.trim="form.config.access_key"></el-input>
  40. </el-form-item>
  41. <el-form-item label="Access Key Secret" prop="config.secret_key" :rules="requiredRules">
  42. <el-input v-model.trim="form.config.secret_key"></el-input>
  43. </el-form-item>
  44. <el-form-item label="图片样式接口(选填)">
  45. <el-input v-model.trim="form.config.style_api"></el-input>
  46. <div style="font-size: 12px;color: #909399;line-height: normal;">
  47. <span>示例: </span>
  48. <span style="color: #ff8576">?x-oss-process=style/stylename</span>
  49. </div>
  50. </el-form-item>
  51. </template>
  52. <template v-if="form.type == 3">
  53. <el-form-item label="空间名称(Bucket)" prop="config.bucket" :rules="requiredRules">
  54. <el-input v-model.trim="form.config.bucket"></el-input>
  55. <div style="font-size: 12px;color: #909399;line-height: normal;">
  56. <span>示例: </span>
  57. <span style="color: #ff8576">xxxxxx-125000000</span>
  58. </div>
  59. </el-form-item>
  60. <el-form-item label="所属地域" prop="config.region" :rules="requiredRules">
  61. <el-input v-model.trim="form.config.region"></el-input>
  62. <div style="font-size: 12px;color: #909399;line-height: normal;">
  63. <span>示例: </span>
  64. <span style="color: #ff8576">ap-shanghai</span>
  65. <span>或</span>
  66. <span style="color: #ff8576">ap-shenzhen</span>
  67. <span>或</span>
  68. <span style="color: #ff8576">ap-xxxxxx</span>
  69. </div>
  70. </el-form-item>
  71. <el-form-item label="自定义域名" prop="config.domain">
  72. <el-input v-model.trim="form.config.domain"></el-input>
  73. <div style="font-size: 12px;color: #909399;line-height: normal;">
  74. <span>示例: </span>
  75. <span style="color: #ff8576">http://mydomain.com</span>
  76. </div>
  77. </el-form-item>
  78. <el-form-item label="SecretId" prop="config.secret_id" :rules="requiredRules">
  79. <el-input v-model.trim="form.config.secret_id"></el-input>
  80. </el-form-item>
  81. <el-form-item label="SecretKey" prop="config.secret_key" :rules="requiredRules">
  82. <el-input v-model.trim="form.config.secret_key"></el-input>
  83. </el-form-item>
  84. </template>
  85. <template v-if="form.type == 4">
  86. <el-form-item label="存储空间名称(Bucket)" prop="config.bucket" :rules="requiredRules">
  87. <el-input v-model.trim="form.config.bucket"></el-input>
  88. </el-form-item>
  89. <el-form-item label="绑定域名" prop="config.domain" :rules="requiredRules">
  90. <el-input v-model.trim="form.config.domain"></el-input>
  91. <div style="font-size: 12px;color: #909399;line-height: normal;">
  92. <span>示例: </span>
  93. <span style="color: #ff8576">http://mydomain.com</span>
  94. <span>或</span>
  95. <span style="color: #ff8576">http://xxxxxx.bkt.clouddn.com</span>
  96. </div>
  97. </el-form-item>
  98. <el-form-item label="AccessKey(AK)" prop="config.access_key" :rules="requiredRules">
  99. <el-input v-model.trim="form.config.access_key"></el-input>
  100. </el-form-item>
  101. <el-form-item label="SecretKey(SK)" prop="config.secret_key" :rules="requiredRules">
  102. <el-input v-model.trim="form.config.secret_key"></el-input>
  103. </el-form-item>
  104. <el-form-item label="图片样式接口(选填)">
  105. <el-input v-model.trim="form.config.style_api"></el-input>
  106. <div style="font-size: 12px;color: #909399">
  107. <span>示例: </span>
  108. <span style="color: #ff8576">?imageView2/0/w/1080/h/1080/q/85|imageslim</span>
  109. </div>
  110. </el-form-item>
  111. </template>
  112. <el-form-item>
  113. <el-button type="primary" size="small" @click="handleSaveStorage('form')">保存</el-button>
  114. </el-form-item>
  115. </el-form>
  116. </el-dialog>
  117. <div style="line-height: normal;" @click="handleEdit()"
  118. :style="'display:'+(display?display:'inline-block')">
  119. <slot></slot>
  120. </div>
  121. </div>
  122. </template>
  123. <script>
  124. Vue.component('com-attachment-edit', {
  125. template: '#com-attachment-edit',
  126. props: {
  127. display: String,
  128. item: Object,
  129. submitUrl: {
  130. type: String,
  131. default: 'admin/setting/attachment-create-storage'
  132. },
  133. storageTypes: Object
  134. },
  135. data() {
  136. return {
  137. requiredRules: [{required: true, message: '不能为空'}],
  138. dialogVisible: false,
  139. form: {
  140. id: null,
  141. type: null,
  142. config: {},
  143. },
  144. rules: {
  145. type: [
  146. {required: true, message: '请选择存储位置',},
  147. ]
  148. }
  149. };
  150. },
  151. methods: {
  152. handleSaveStorage(formName) {
  153. this.$refs[formName].validate(valid => {
  154. if (valid) {
  155. this.$request({
  156. params: {
  157. r: this.submitUrl
  158. },
  159. data: this.form,
  160. method: 'post',
  161. }).then(e => {
  162. if (e.data.code === 0) {
  163. this.$message.success('保存成功。');
  164. this.dialogVisible = false;
  165. this.$emit('save');
  166. } else {
  167. this.$message.error(e.data.msg);
  168. }
  169. }).catch(e => {
  170. });
  171. } else {
  172. this.$message.error('提交内容有误,请仔细检查后提交。');
  173. }
  174. });
  175. },
  176. handleEdit() {
  177. if (this.item) {
  178. this.form = this.item;
  179. } else {
  180. this.form = {
  181. id: null,
  182. type: null,
  183. config: {},
  184. };
  185. }
  186. this.dialogVisible = true;
  187. },
  188. },
  189. });
  190. </script>