index.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. <template>
  2. <el-container>
  3. <el-main>
  4. <el-card shadow="never" header="系统设置" class="borderNone mt10">
  5. <el-tabs v-model="activeName" class="demo-tabs" @tab-change="handleClick">
  6. <el-tab-pane label="基础设置" name="service" v-loading="isLoading">
  7. <el-form :model="sys" :rules="rules" ref="form" label-position="top" @keyup.enter="saveForm">
  8. <el-form-item label="系统名称" prop="title" class="label-item">
  9. <el-input v-model="sys.title" placeholder="请输入" clearable />
  10. <div class="el-form-item-msg"></div>
  11. </el-form-item>
  12. <el-form-item label="客服联系电话" prop="tel" class="label-item">
  13. <el-input v-model="sys.tel" placeholder="请输入" clearable />
  14. <div class="el-form-item-msg"></div>
  15. </el-form-item>
  16. <el-form-item label="系统Logo" prop="logo">
  17. <sc-upload v-model="sys.logo"></sc-upload>
  18. </el-form-item>
  19. <el-form-item label="备案号" prop="miitbeian" class="label-item">
  20. <el-input v-model="sys.miitbeian" placeholder="请输入" clearable />
  21. <div class="el-form-item-msg">支持Html格式</div>
  22. </el-form-item>
  23. <el-form-item label="版权信息" prop="copyright" class="label-item">
  24. <el-input v-model="sys.copyright" placeholder="请输入" clearable />
  25. <div class="el-form-item-msg"></div>
  26. </el-form-item>
  27. <el-form-item label="隐私协议" prop="privacy" class="label-item">
  28. <sc-editor v-model="sys.privacy" placeholder="请输入" :height="400"></sc-editor>
  29. <div class="el-form-item-msg"></div>
  30. </el-form-item>
  31. <el-form-item label="服务协议" prop="agreements" class="label-item">
  32. <sc-editor v-model="sys.agreements" placeholder="请输入" :height="400"></sc-editor>
  33. <div class="el-form-item-msg"></div>
  34. </el-form-item>
  35. </el-form>
  36. </el-tab-pane>
  37. <el-tab-pane label="微信设置" name="wechat" v-loading="isLoading">
  38. <el-form :model="sys" :rules="rules2" ref="form" label-position="top" @keyup.enter="saveForm" v-if="activeName=='wechat'">
  39. <el-row :gutter="15">
  40. <el-col :span="this.$store.state.global.ismobile?24:12">
  41. <fieldset>
  42. <legend><el-tag>公众号配置</el-tag></legend>
  43. <el-form-item label="Token(接口认证令牌)" prop="token">
  44. <el-input v-model="sys.token" clearable placeholder="请输入"></el-input>
  45. <div class="el-form-item-msg">公众号平台与系统对接认证Token,请优先填写此参数并保存,然后再在微信公众号平台操作对接。</div>
  46. </el-form-item>
  47. <el-form-item label="AppId(公众号 APPID)" prop="appid">
  48. <el-input v-model="sys.appid" clearable placeholder="请输入"></el-input>
  49. <div class="el-form-item-msg">公众号APPID是所有接口必要参数,可以在公众号平台 [ 开发 > 基本配置 ] 页面获取。</div>
  50. </el-form-item>
  51. <el-form-item label="AppSecret(公众号 Secret)" prop="secret">
  52. <el-input v-model="sys.secret" show-password clearable placeholder="请输入"></el-input>
  53. <div class="el-form-item-msg">公众号应用密钥是所有接口必要参数,可以在公众号平台 [ 开发 > 基本配置 ] 页面授权后获取。</div>
  54. </el-form-item>
  55. <el-form-item label="AesKey(消息加密密钥)" prop="aeskey">
  56. <el-input v-model="sys.aeskey" clearable placeholder="请输入"></el-input>
  57. <div class="el-form-item-msg">若开启了消息加密时必需填写,消息加密密钥必需填写并保持与公众号平台一致。</div>
  58. </el-form-item>
  59. </fieldset>
  60. </el-col>
  61. <el-col :span="this.$store.state.global.ismobile?24:12">
  62. <fieldset>
  63. <legend><el-tag>支付配置</el-tag></legend>
  64. <el-form-item label="MCH_ID(微信商户账号)" prop="mch_id">
  65. <el-input v-model="sys.mch_id" clearable placeholder="请输入"></el-input>
  66. <div class="el-form-item-msg">微信商户账号,需要在微信商户平台获取,MCH_ID 与 APPID 匹配</div>
  67. </el-form-item>
  68. <el-form-item label="MCH_KEY(微信商户密钥)" prop="mch_key">
  69. <el-input v-model="sys.mch_key" show-password clearable placeholder="请输入"></el-input>
  70. <div class="el-form-item-msg">微信商户 V2 密钥,需要在微信商户平台操作设置操作密码并获取商户接口密钥</div>
  71. </el-form-item>
  72. <el-form-item label="商户KEY证书" prop="cert_key">
  73. <scUploadFile v-model="sys.cert_key" tip="请上传apiclient_key.pem文件" btnTxt="上传KEY证书" accept=".pem" :apiObj="$API.common.uploadFile" :multiple="false" :limit="1"></scUploadFile>
  74. <div class="el-form-item-msg"></div>
  75. </el-form-item>
  76. <el-form-item label="商户CRET证书" prop="cert_cert">
  77. <scUploadFile v-model="sys.cert_cert" tip="请上传apiclient_cert.pem文件" btnTxt="上传CERT证书" accept=".pem" :apiObj="$API.common.uploadFile" :multiple="false" :limit="1"></scUploadFile>
  78. <div class="el-form-item-msg"></div>
  79. </el-form-item>
  80. </fieldset>
  81. </el-col>
  82. <el-col :span="this.$store.state.global.ismobile?24:12">
  83. <fieldset>
  84. <legend><el-tag>小程序配置</el-tag></legend>
  85. <el-form-item label="AppId(小程序 APPID)" prop="mini_appid">
  86. <el-input v-model="sys.mini_appid" clearable placeholder="请输入"></el-input>
  87. <div class="el-form-item-msg">小程序后台获取</div>
  88. </el-form-item>
  89. <el-form-item label="AppSecret(小程序密钥)" prop="mini_secret">
  90. <el-input v-model="sys.mini_secret" show-password clearable placeholder="请输入"></el-input>
  91. <div class="el-form-item-msg">小程序后台获取</div>
  92. </el-form-item>
  93. <el-form-item label="分享图片" prop="share">
  94. <sc-upload v-model="sys.share"></sc-upload>
  95. </el-form-item>
  96. </fieldset>
  97. </el-col>
  98. </el-row>
  99. </el-form>
  100. </el-tab-pane>
  101. </el-tabs>
  102. </el-card>
  103. </el-main>
  104. <el-footer style="text-align: right;">
  105. <el-button type="primary" size="large" :loading="isSaveing" @click="saveForm">保存</el-button>
  106. </el-footer>
  107. </el-container>
  108. </template>
  109. <script>
  110. import { defineAsyncComponent } from 'vue';
  111. const scEditor = defineAsyncComponent(() => import('@/components/scEditor'));
  112. export default {
  113. components: {
  114. scEditor
  115. },
  116. data(){
  117. return {
  118. activeName:"service",
  119. isSaveing: false,
  120. sys: {},
  121. smsRegion:[],
  122. rules2:{
  123. token: [
  124. { required: true, message: '请输入' }
  125. ],
  126. appid: [
  127. { required: true, message: '请输入' }
  128. ],
  129. secret: [
  130. { required: true, message: '请输入' }
  131. ],
  132. mch_id: [
  133. { required: true, message: '请输入' }
  134. ],
  135. mch_key: [
  136. { required: true, message: '请输入' }
  137. ],
  138. mini_appid: [
  139. { required: true, message: '请输入' }
  140. ],
  141. mini_secret: [
  142. { required: true, message: '请输入' }
  143. ],
  144. },
  145. rules: {
  146. title: [
  147. { required: true, message: '请输入' }
  148. ],
  149. tel: [
  150. { required: true, message: '请输入' }
  151. ],
  152. logo: [
  153. { required: true, message: '请选择', trigger:"change" }
  154. ],
  155. miitbeian: [
  156. { required: true, message: '请输入' }
  157. ],
  158. beian: [
  159. { required: true, message: '请输入' }
  160. ],
  161. copyright: [
  162. { required: true, message: '请输入' }
  163. ]
  164. },
  165. isLoading:false
  166. }
  167. },
  168. created() {
  169. this.getConfig();
  170. },
  171. methods: {
  172. handleClick(event){
  173. this.activeName = event;
  174. this.getConfig();
  175. },
  176. saveForm() {
  177. this.isSaveing = true;
  178. this.$refs.form.validate(async (valid) => {
  179. console.log(valid)
  180. if (valid) {
  181. var result = await this.$API.setting.configSave.post({type:this.activeName,data: this.sys });
  182. this.isSaveing = false;
  183. if(result.code == 0)
  184. {
  185. this.$message.error(result.msg);
  186. return false;
  187. }
  188. if (this.activeName == "service") {
  189. this.$TOOL.data.set("SERVICE", this.sys)
  190. }
  191. this.$message.success(result.msg);
  192. } else {
  193. this.isSaveing = false;
  194. return false;
  195. }
  196. })
  197. },
  198. async getConfig() {
  199. this.isLoading = true;
  200. var result = await this.$API.setting.config.get({ type: this.activeName });
  201. this.isLoading = false;
  202. if (result.code == 0) {
  203. this.$message.error(result.msg);
  204. return;
  205. }
  206. if (this.activeName == "sms") {
  207. this.smsRegion = result.data.channel
  208. }
  209. this.sys = result.data;
  210. },
  211. }
  212. }
  213. </script>